From 6878952da8d175fc27e11456f8e0d718392a122b Mon Sep 17 00:00:00 2001 From: lixiaoyuan Date: Mon, 22 Sep 2025 20:01:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Openssl,Gmssl=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/Release/assets/config/app.json | 1 + bin/Release/assets/config/告警/PCS.txt | 84 - bin/Release/assets/config/电表-告警.xlsx | Bin 59811 -> 0 bytes .../assets/config/电表/BCU电池簇遥信.txt | 114 - .../assets/config/电表/BCU电池簇遥测.txt | 65 - .../assets/config/电表/BMS电池堆遥测.txt | 63 - bin/Release/assets/config/电表/EMS遥信.txt | 44 - bin/Release/assets/config/电表/EMS遥测.txt | 111 - bin/Release/assets/config/电表/EMS遥调.txt | 53 - bin/Release/assets/config/电表/PCS遥信.txt | 99 - bin/Release/assets/config/电表/PCS遥测.txt | 78 - bin/Release/assets/config/电表/PCU遥信.txt | 59 - bin/Release/assets/config/电表/PCU遥测.txt | 72 - bin/Release/assets/config/电表/冷机遥信.txt | 14 - bin/Release/assets/config/电表/冷机遥测.txt | 21 - .../assets/config/电表/多功能电表遥测.txt | 57 - .../assets/config/电表/消防4.0遥信.txt | 24 - .../assets/config/电表/温湿度状态遥测.txt | 4 - bin/Release/assets/config/电表/空调遥信.txt | 12 - bin/Release/assets/config/电表/空调遥测.txt | 14 - bin/Release/gmssl.dll | Bin 1695744 -> 1107968 bytes src/CMakeLists.txt | 3 +- src/app/Application.cpp | 2 +- src/app/Config.cpp | 9 + src/app/Config.h | 6 + src/app/DataStruct.cpp | 10 - src/app/DataStruct.h | 2 +- src/app/Device.cpp | 22 +- src/app/Station.cpp | 29 +- src/app/Station.h | 5 +- src/common/Crypto.cpp | 244 + src/common/Crypto.h | 39 +- src/common/Utils.cpp | 36 +- src/common/Utils.h | 6 +- src/main.cpp | 258 +- src/protocol/HttpEntity.cpp | 19 +- src/protocol/MqttEntity.cpp | 6 +- src/qt/MainApp.cpp | 178 + src/qt/MainApp.h | 53 + thirdparty/GmSSL-3.1.1/bin/gmssl.dll | Bin 1695744 -> 1107968 bytes thirdparty/GmSSL-3.1.1/bin/gmssl.exe | Bin 308224 -> 217600 bytes thirdparty/GmSSL-3.1.1/include/gmssl/aead.h | 108 - thirdparty/GmSSL-3.1.1/include/gmssl/api.h | 23 - thirdparty/GmSSL-3.1.1/include/gmssl/asm.h | 20 + thirdparty/GmSSL-3.1.1/include/gmssl/asn1.h | 27 +- thirdparty/GmSSL-3.1.1/include/gmssl/base64.h | 15 +- .../GmSSL-3.1.1/include/gmssl/block_cipher.h | 13 +- thirdparty/GmSSL-3.1.1/include/gmssl/cms.h | 58 +- thirdparty/GmSSL-3.1.1/include/gmssl/des.h | 58 - thirdparty/GmSSL-3.1.1/include/gmssl/digest.h | 18 +- thirdparty/GmSSL-3.1.1/include/gmssl/ec.h | 1 - thirdparty/GmSSL-3.1.1/include/gmssl/endian.h | 2 +- thirdparty/GmSSL-3.1.1/include/gmssl/error.h | 8 +- thirdparty/GmSSL-3.1.1/include/gmssl/file.h | 2 +- thirdparty/GmSSL-3.1.1/include/gmssl/gcm.h | 73 - thirdparty/GmSSL-3.1.1/include/gmssl/gf128.h | 35 +- thirdparty/GmSSL-3.1.1/include/gmssl/ghash.h | 49 + .../GmSSL-3.1.1/include/gmssl/hash_drbg.h | 79 - thirdparty/GmSSL-3.1.1/include/gmssl/hkdf.h | 4 +- thirdparty/GmSSL-3.1.1/include/gmssl/md5.h | 48 - thirdparty/GmSSL-3.1.1/include/gmssl/oid.h | 2 +- thirdparty/GmSSL-3.1.1/include/gmssl/pbkdf2.h | 12 +- thirdparty/GmSSL-3.1.1/include/gmssl/pkcs8.h | 4 +- thirdparty/GmSSL-3.1.1/include/gmssl/rand.h | 3 +- thirdparty/GmSSL-3.1.1/include/gmssl/rc4.h | 40 - thirdparty/GmSSL-3.1.1/include/gmssl/sdf.h | 73 +- thirdparty/GmSSL-3.1.1/include/gmssl/sha1.h | 3 +- thirdparty/GmSSL-3.1.1/include/gmssl/sha2.h | 10 +- thirdparty/GmSSL-3.1.1/include/gmssl/sha3.h | 92 - thirdparty/GmSSL-3.1.1/include/gmssl/skf.h | 38 +- thirdparty/GmSSL-3.1.1/include/gmssl/sm2.h | 311 +- .../GmSSL-3.1.1/include/gmssl/sm2_key_share.h | 2 +- .../GmSSL-3.1.1/include/gmssl/sm2_recover.h | 2 +- .../GmSSL-3.1.1/include/gmssl/sm2_ring.h | 2 +- .../GmSSL-3.1.1/include/gmssl/sm2_z256.h | 156 + thirdparty/GmSSL-3.1.1/include/gmssl/sm3.h | 58 +- .../GmSSL-3.1.1/include/gmssl/sm3_rng.h | 42 - .../GmSSL-3.1.1/include/gmssl/sm3_x8_avx2.h | 5 +- .../GmSSL-3.1.1/include/gmssl/sm3_xmss.h | 127 + thirdparty/GmSSL-3.1.1/include/gmssl/sm4.h | 265 +- .../GmSSL-3.1.1/include/gmssl/sm4_cbc_mac.h | 4 +- .../include/gmssl/sm4_cbc_sm3_hmac.h | 52 + thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cl.h | 21 +- .../include/gmssl/sm4_ctr_sm3_hmac.h | 52 + .../GmSSL-3.1.1/include/gmssl/sm4_rng.h | 43 - thirdparty/GmSSL-3.1.1/include/gmssl/sm9.h | 388 +- .../GmSSL-3.1.1/include/gmssl/sm9_z256.h | 247 + thirdparty/GmSSL-3.1.1/include/gmssl/socket.h | 4 +- thirdparty/GmSSL-3.1.1/include/gmssl/tls.h | 94 +- .../GmSSL-3.1.1/include/gmssl/version.h | 10 +- thirdparty/GmSSL-3.1.1/include/gmssl/x509.h | 2 +- .../GmSSL-3.1.1/include/gmssl/x509_cer.h | 2 +- thirdparty/GmSSL-3.1.1/include/gmssl/zuc.h | 39 +- thirdparty/GmSSL-3.1.1/lib/gmssl.lib | Bin 342666 -> 343470 bytes .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 + .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 + .../OpenSSL-3.5.3/include/openssl/aes.h | 111 + .../OpenSSL-3.5.3/include/openssl/applink.c | 153 + .../OpenSSL-3.5.3/include/openssl/asn1.h | 1134 +++ .../OpenSSL-3.5.3/include/openssl/asn1err.h | 142 + .../OpenSSL-3.5.3/include/openssl/asn1t.h | 946 +++ .../OpenSSL-3.5.3/include/openssl/async.h | 104 + .../OpenSSL-3.5.3/include/openssl/asyncerr.h | 29 + .../OpenSSL-3.5.3/include/openssl/bio.h | 1022 +++ .../OpenSSL-3.5.3/include/openssl/bioerr.h | 72 + .../OpenSSL-3.5.3/include/openssl/blowfish.h | 78 + thirdparty/OpenSSL-3.5.3/include/openssl/bn.h | 590 ++ .../OpenSSL-3.5.3/include/openssl/bnerr.h | 47 + .../OpenSSL-3.5.3/include/openssl/buffer.h | 62 + .../OpenSSL-3.5.3/include/openssl/buffererr.h | 25 + .../OpenSSL-3.5.3/include/openssl/byteorder.h | 339 + .../OpenSSL-3.5.3/include/openssl/camellia.h | 117 + .../OpenSSL-3.5.3/include/openssl/cast.h | 71 + .../OpenSSL-3.5.3/include/openssl/cmac.h | 52 + .../OpenSSL-3.5.3/include/openssl/cmp.h | 727 ++ .../OpenSSL-3.5.3/include/openssl/cmp_util.h | 56 + .../OpenSSL-3.5.3/include/openssl/cmperr.h | 134 + .../OpenSSL-3.5.3/include/openssl/cms.h | 511 ++ .../OpenSSL-3.5.3/include/openssl/cmserr.h | 126 + .../OpenSSL-3.5.3/include/openssl/comp.h | 98 + .../OpenSSL-3.5.3/include/openssl/comperr.h | 38 + .../OpenSSL-3.5.3/include/openssl/conf.h | 214 + .../OpenSSL-3.5.3/include/openssl/conf_api.h | 46 + .../OpenSSL-3.5.3/include/openssl/conferr.h | 52 + .../include/openssl/configuration.h | 185 + .../OpenSSL-3.5.3/include/openssl/conftypes.h | 44 + .../OpenSSL-3.5.3/include/openssl/core.h | 236 + .../include/openssl/core_dispatch.h | 1145 +++ .../include/openssl/core_names.h | 575 ++ .../include/openssl/core_object.h | 41 + .../OpenSSL-3.5.3/include/openssl/crmf.h | 278 + .../OpenSSL-3.5.3/include/openssl/crmferr.h | 57 + .../OpenSSL-3.5.3/include/openssl/crypto.h | 583 ++ .../OpenSSL-3.5.3/include/openssl/cryptoerr.h | 56 + .../include/openssl/cryptoerr_legacy.h | 1466 ++++ thirdparty/OpenSSL-3.5.3/include/openssl/ct.h | 573 ++ .../OpenSSL-3.5.3/include/openssl/cterr.h | 45 + .../OpenSSL-3.5.3/include/openssl/decoder.h | 133 + .../include/openssl/decodererr.h | 28 + .../OpenSSL-3.5.3/include/openssl/des.h | 211 + thirdparty/OpenSSL-3.5.3/include/openssl/dh.h | 339 + .../OpenSSL-3.5.3/include/openssl/dherr.h | 59 + .../OpenSSL-3.5.3/include/openssl/dsa.h | 280 + .../OpenSSL-3.5.3/include/openssl/dsaerr.h | 44 + .../OpenSSL-3.5.3/include/openssl/dtls1.h | 57 + .../OpenSSL-3.5.3/include/openssl/e_os2.h | 310 + .../OpenSSL-3.5.3/include/openssl/e_ostime.h | 38 + .../OpenSSL-3.5.3/include/openssl/ebcdic.h | 39 + thirdparty/OpenSSL-3.5.3/include/openssl/ec.h | 1588 ++++ .../OpenSSL-3.5.3/include/openssl/ecdh.h | 10 + .../OpenSSL-3.5.3/include/openssl/ecdsa.h | 10 + .../OpenSSL-3.5.3/include/openssl/ecerr.h | 104 + .../OpenSSL-3.5.3/include/openssl/encoder.h | 124 + .../include/openssl/encodererr.h | 28 + .../OpenSSL-3.5.3/include/openssl/engine.h | 833 +++ .../OpenSSL-3.5.3/include/openssl/engineerr.h | 63 + .../OpenSSL-3.5.3/include/openssl/err.h | 512 ++ .../OpenSSL-3.5.3/include/openssl/ess.h | 128 + .../OpenSSL-3.5.3/include/openssl/esserr.h | 32 + .../OpenSSL-3.5.3/include/openssl/evp.h | 2310 ++++++ .../OpenSSL-3.5.3/include/openssl/evperr.h | 148 + .../include/openssl/fips_names.h | 50 + .../OpenSSL-3.5.3/include/openssl/fipskey.h | 41 + .../OpenSSL-3.5.3/include/openssl/hmac.h | 62 + .../OpenSSL-3.5.3/include/openssl/hpke.h | 169 + .../OpenSSL-3.5.3/include/openssl/http.h | 119 + .../OpenSSL-3.5.3/include/openssl/httperr.h | 56 + .../OpenSSL-3.5.3/include/openssl/idea.h | 82 + .../OpenSSL-3.5.3/include/openssl/indicator.h | 31 + .../OpenSSL-3.5.3/include/openssl/kdf.h | 138 + .../OpenSSL-3.5.3/include/openssl/kdferr.h | 16 + .../OpenSSL-3.5.3/include/openssl/lhash.h | 398 + .../OpenSSL-3.5.3/include/openssl/macros.h | 349 + .../OpenSSL-3.5.3/include/openssl/md2.h | 56 + .../OpenSSL-3.5.3/include/openssl/md4.h | 63 + .../OpenSSL-3.5.3/include/openssl/md5.h | 62 + .../OpenSSL-3.5.3/include/openssl/mdc2.h | 55 + .../OpenSSL-3.5.3/include/openssl/ml_kem.h | 31 + .../OpenSSL-3.5.3/include/openssl/modes.h | 219 + .../OpenSSL-3.5.3/include/openssl/obj_mac.h | 6636 +++++++++++++++++ .../OpenSSL-3.5.3/include/openssl/objects.h | 184 + .../include/openssl/objectserr.h | 28 + .../OpenSSL-3.5.3/include/openssl/ocsp.h | 483 ++ .../OpenSSL-3.5.3/include/openssl/ocsperr.h | 53 + .../include/openssl/opensslconf.h | 17 + .../OpenSSL-3.5.3/include/openssl/opensslv.h | 109 + .../OpenSSL-3.5.3/include/openssl/ossl_typ.h | 16 + .../include/openssl/param_build.h | 63 + .../OpenSSL-3.5.3/include/openssl/params.h | 163 + .../OpenSSL-3.5.3/include/openssl/pem.h | 548 ++ .../OpenSSL-3.5.3/include/openssl/pem2.h | 19 + .../OpenSSL-3.5.3/include/openssl/pemerr.h | 59 + .../OpenSSL-3.5.3/include/openssl/pkcs12.h | 366 + .../OpenSSL-3.5.3/include/openssl/pkcs12err.h | 46 + .../OpenSSL-3.5.3/include/openssl/pkcs7.h | 430 ++ .../OpenSSL-3.5.3/include/openssl/pkcs7err.h | 63 + .../OpenSSL-3.5.3/include/openssl/prov_ssl.h | 38 + .../OpenSSL-3.5.3/include/openssl/proverr.h | 170 + .../OpenSSL-3.5.3/include/openssl/provider.h | 94 + .../OpenSSL-3.5.3/include/openssl/quic.h | 75 + .../OpenSSL-3.5.3/include/openssl/rand.h | 131 + .../OpenSSL-3.5.3/include/openssl/randerr.h | 70 + .../OpenSSL-3.5.3/include/openssl/rc2.h | 68 + .../OpenSSL-3.5.3/include/openssl/rc4.h | 47 + .../OpenSSL-3.5.3/include/openssl/rc5.h | 79 + .../OpenSSL-3.5.3/include/openssl/ripemd.h | 59 + .../OpenSSL-3.5.3/include/openssl/rsa.h | 615 ++ .../OpenSSL-3.5.3/include/openssl/rsaerr.h | 107 + .../OpenSSL-3.5.3/include/openssl/safestack.h | 297 + .../OpenSSL-3.5.3/include/openssl/seed.h | 113 + .../OpenSSL-3.5.3/include/openssl/self_test.h | 114 + .../OpenSSL-3.5.3/include/openssl/sha.h | 139 + .../OpenSSL-3.5.3/include/openssl/srp.h | 285 + .../OpenSSL-3.5.3/include/openssl/srtp.h | 68 + .../OpenSSL-3.5.3/include/openssl/ssl.h | 2933 ++++++++ .../OpenSSL-3.5.3/include/openssl/ssl2.h | 30 + .../OpenSSL-3.5.3/include/openssl/ssl3.h | 358 + .../OpenSSL-3.5.3/include/openssl/sslerr.h | 382 + .../include/openssl/sslerr_legacy.h | 467 ++ .../OpenSSL-3.5.3/include/openssl/stack.h | 90 + .../OpenSSL-3.5.3/include/openssl/store.h | 377 + .../OpenSSL-3.5.3/include/openssl/storeerr.h | 49 + .../OpenSSL-3.5.3/include/openssl/symhacks.h | 39 + .../OpenSSL-3.5.3/include/openssl/thread.h | 31 + .../OpenSSL-3.5.3/include/openssl/tls1.h | 1220 +++ .../OpenSSL-3.5.3/include/openssl/trace.h | 321 + thirdparty/OpenSSL-3.5.3/include/openssl/ts.h | 522 ++ .../OpenSSL-3.5.3/include/openssl/tserr.h | 67 + .../OpenSSL-3.5.3/include/openssl/txt_db.h | 63 + .../OpenSSL-3.5.3/include/openssl/types.h | 248 + thirdparty/OpenSSL-3.5.3/include/openssl/ui.h | 407 + .../OpenSSL-3.5.3/include/openssl/uierr.h | 38 + .../OpenSSL-3.5.3/include/openssl/whrlpool.h | 62 + .../OpenSSL-3.5.3/include/openssl/x509.h | 1303 ++++ .../include/openssl/x509_acert.h | 294 + .../OpenSSL-3.5.3/include/openssl/x509_vfy.h | 903 +++ .../OpenSSL-3.5.3/include/openssl/x509err.h | 70 + .../OpenSSL-3.5.3/include/openssl/x509v3.h | 1968 +++++ .../OpenSSL-3.5.3/include/openssl/x509v3err.h | 97 + .../OpenSSL-3.5.3/lib/VC/x64/MD/libcrypto.lib | Bin 0 -> 1377216 bytes 240 files changed, 48082 insertions(+), 2724 deletions(-) delete mode 100644 bin/Release/assets/config/告警/PCS.txt delete mode 100644 bin/Release/assets/config/电表-告警.xlsx delete mode 100644 bin/Release/assets/config/电表/BCU电池簇遥信.txt delete mode 100644 bin/Release/assets/config/电表/BCU电池簇遥测.txt delete mode 100644 bin/Release/assets/config/电表/BMS电池堆遥测.txt delete mode 100644 bin/Release/assets/config/电表/EMS遥信.txt delete mode 100644 bin/Release/assets/config/电表/EMS遥测.txt delete mode 100644 bin/Release/assets/config/电表/EMS遥调.txt delete mode 100644 bin/Release/assets/config/电表/PCS遥信.txt delete mode 100644 bin/Release/assets/config/电表/PCS遥测.txt delete mode 100644 bin/Release/assets/config/电表/PCU遥信.txt delete mode 100644 bin/Release/assets/config/电表/PCU遥测.txt delete mode 100644 bin/Release/assets/config/电表/冷机遥信.txt delete mode 100644 bin/Release/assets/config/电表/冷机遥测.txt delete mode 100644 bin/Release/assets/config/电表/多功能电表遥测.txt delete mode 100644 bin/Release/assets/config/电表/消防4.0遥信.txt delete mode 100644 bin/Release/assets/config/电表/温湿度状态遥测.txt delete mode 100644 bin/Release/assets/config/电表/空调遥信.txt delete mode 100644 bin/Release/assets/config/电表/空调遥测.txt create mode 100644 src/qt/MainApp.cpp create mode 100644 src/qt/MainApp.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/aead.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/api.h create mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/asm.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/des.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/gcm.h create mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/ghash.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/hash_drbg.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/md5.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/rc4.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sha3.h create mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sm2_z256.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sm3_rng.h create mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sm3_xmss.h create mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_sm3_hmac.h create mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sm4_ctr_sm3_hmac.h delete mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sm4_rng.h create mode 100644 thirdparty/GmSSL-3.1.1/include/gmssl/sm9_z256.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_EPILOGUE.H create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_PROLOGUE.H create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/aes.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/applink.c create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/asn1.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/asn1err.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/asn1t.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/async.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/asyncerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/bio.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/bioerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/blowfish.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/bn.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/bnerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/buffer.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/buffererr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/byteorder.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/camellia.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cast.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cmac.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cmp.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cmp_util.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cmperr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cms.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cmserr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/comp.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/comperr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/conf.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/conf_api.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/conferr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/configuration.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/conftypes.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/core.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/core_dispatch.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/core_names.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/core_object.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/crmf.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/crmferr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/crypto.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr_legacy.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ct.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/cterr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/decoder.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/decodererr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/des.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/dh.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/dherr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/dsa.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/dsaerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/dtls1.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/e_os2.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/e_ostime.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ebcdic.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ec.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ecdh.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ecdsa.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ecerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/encoder.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/encodererr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/engine.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/engineerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/err.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ess.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/esserr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/evp.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/evperr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/fips_names.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/fipskey.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/hmac.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/hpke.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/http.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/httperr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/idea.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/indicator.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/kdf.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/kdferr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/lhash.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/macros.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/md2.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/md4.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/md5.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/mdc2.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ml_kem.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/modes.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/obj_mac.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/objects.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/objectserr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ocsp.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ocsperr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/opensslconf.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/opensslv.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ossl_typ.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/param_build.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/params.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/pem.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/pem2.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/pemerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12err.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7err.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/prov_ssl.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/proverr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/provider.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/quic.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/rand.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/randerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/rc2.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/rc4.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/rc5.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ripemd.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/rsa.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/rsaerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/safestack.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/seed.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/self_test.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/sha.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/srp.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/srtp.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ssl.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ssl2.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ssl3.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/sslerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/sslerr_legacy.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/stack.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/store.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/storeerr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/symhacks.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/thread.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/tls1.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/trace.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ts.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/tserr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/txt_db.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/types.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/ui.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/uierr.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/whrlpool.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/x509.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/x509_acert.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/x509_vfy.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/x509err.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/x509v3.h create mode 100644 thirdparty/OpenSSL-3.5.3/include/openssl/x509v3err.h create mode 100644 thirdparty/OpenSSL-3.5.3/lib/VC/x64/MD/libcrypto.lib diff --git a/bin/Release/assets/config/app.json b/bin/Release/assets/config/app.json index ae3e8ca..5f6843e 100644 --- a/bin/Release/assets/config/app.json +++ b/bin/Release/assets/config/app.json @@ -1,5 +1,6 @@ { "debug":0, + "windowEnabled": 1, "launchdate": "2025-09-01", "weburl": "http://127.0.0.1:19601/", "exportpath": "D:/Programs/openresty-1.27.1.1-win64/zdownload", diff --git a/bin/Release/assets/config/告警/PCS.txt b/bin/Release/assets/config/告警/PCS.txt deleted file mode 100644 index 0f1ce18..0000000 --- a/bin/Release/assets/config/告警/PCS.txt +++ /dev/null @@ -1,84 +0,0 @@ -0x100F 绝缘故障 1:故障,0正常 -0x1010 漏电保护 1:故障,0正常 -0x1011 直流过压 1:故障,0正常 -0x1012 市电幅值异常 1:故障,0正常 -0x1013 市电相序异常 1:故障,0正常 -0x1014 温度开关异常 1:故障,0正常 -0x1015 市电频率异常 1:故障,0正常 -0x1016 IGBT过温 1:故障,0正常 -0x1017 交流接地故障 1:故障,0正常 -0x1018 逆变过流异常 1:故障,0正常 -0x1019 直流缓起故障 1:故障,0正常 -0x101A 直流主继电器故障 1:故障,0正常 -0x101B 风机异常 1:故障,0正常 -0x101C 主接触器异常 1:故障,0正常 -0x101D 均浮充切换超时 1:故障,0正常 -0x101E 硬件故障 1:故障,0正常 -0x101F 机内过温 1:故障,0正常 -0x1020 软启动故障 1:故障,0正常 -0x1021 触摸屏通讯故障 1:故障,0正常 -0x1022 防雷器故障 1:故障,0正常 -0x1023 急停故障 1:故障,0正常 -0x1024 BMS系统故障 1:故障,0正常 -0x1025 BMS通讯故障 1:故障,0正常 -0x1026 BMS干接点通讯故障 1:故障,0正常 -0x1027 远程通讯故障 1:故障,0正常 -0x1028 门禁告警 1:故障,0正常 -0x1029 锁相异常 1:故障,0正常 -0x102A IGBT过温告警 1:故障,0正常 -0x102B 硬件过流保护 1:故障,0正常 -0x102C 驱动故障 1:故障,0正常 -0x102D ID冲突 1:故障,0正常 -0x102E 电池过压 1:故障,0正常 -0x102F 电池欠压 1:故障,0正常 -0x1030 直流过流保护 1:故障,0正常 -0x1031 输出电压异常 1:故障,0正常 -0x1032 离网输出电压不符合 1:故障,0正常 -0x1033 输出过载保护 1:故障,0正常 -0x1034 输出短路保护 1:故障,0正常 -0x1035 并机通信异常 1:故障,0正常 -0x1036 电池保险异常 1:故障,0正常 -0x1037 电池重载低压 1:故障,0正常 -0x1038 电池低压告警 1:故障,0正常 -0x1039 一拖二压差过大 1:故障,0正常 -0x103A 电池反接故障 1:故障,0正常 -0x103B 电池电压异常 1:故障,0正常 -0x103C 过载告警 1:故障,0正常 -0x103D 外部接触器异常 1:故障,0正常 -0x103E IGBT温度传感器异常 1:故障,0正常 -0x103F 整机温度传感器异常 1:故障,0正常 -0x1040 市电CT异常 1:故障,0正常 -0x1041 逆变电流三相不平衡 1:故障,0正常 -0x1042 逆变电流直流分量异常 1:故障,0正常 -0x1043 母线不平衡 1:故障,0正常 -0x1044 逆变电压直流分量异常 1:故障,0正常 -0x1045 主接触器控制异常 1:故障,0正常 -0x1046 逆变电压控制异常 1:故障,0正常 -0x1047 直流霍尔异常 1:故障,0正常 -0x1048 电池单体过压 1:故障,0正常 -0x1049 电池单体欠压 1:故障,0正常 -0x104A 电网过压 1:故障,0正常 -0x104B 电网欠压 1:故障,0正常 -0x104C 电网过频 1:故障,0正常 -0x104D 电网欠频 1:故障,0正常 -0x104E 市电不平衡 1:故障,0正常 -0x104F 参数设置不匹配 1:故障,0正常 -0x1050 SPI通信异常 1:故障,0正常 -0x1051 SCI通信异常 1:故障,0正常 -0x1052 IIC通信异常 1:故障,0正常 -0x1053 Xintf通信异常 1:故障,0正常 -0x1054 零偏校准异常 1:故障,0正常 -0x1055 烟雾告警 1:故障,0正常 -0x1056 无电池组故障 1异常,0正常 -0x1057 环温降频 1异常,0正常 -0x1058 交流过载 1异常,0正常 -0x1059 采样异常 1异常,0正常 -0x105A 24V辅源故障 1异常,0正常 -0x105B 直流欠压异常 1异常,0正常 -0x105C 散热器过温 1异常,0正常 -0x105D CAN配置故障 1异常,0正常 -0x105E 3.3V辅源故障 1异常,0正常 -0x105F 环境过温 1异常,0正常 -0x1060 A相IGBT逆变过流 1异常,0正常 -0x1061 B相IGBT逆变过流 1异常,0正常 -0x1062 C相IGBT逆变过流 1异常,0正常 \ No newline at end of file diff --git a/bin/Release/assets/config/电表-告警.xlsx b/bin/Release/assets/config/电表-告警.xlsx deleted file mode 100644 index 04e8659a48ca9aa21deae565b81ceab68bd43e32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59811 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%0DRCKXFb5+@9YhvZ-o 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 USrH&0a=^bM!05.0fkW放电 否则停机 R uint16 0:充电 1:放电 2:停机 储能状态 0x207A \ No newline at end of file diff --git a/bin/Release/assets/config/电表/EMS遥测.txt b/bin/Release/assets/config/电表/EMS遥测.txt deleted file mode 100644 index ce7fdc0..0000000 --- a/bin/Release/assets/config/电表/EMS遥测.txt +++ /dev/null @@ -1,111 +0,0 @@ -BMS(电池堆)个数 R uint16 1 0x1001 -BCU通道个数 R uint16 1~2 0x1002 -BCU(电池簇)个数 R uint16 1~40 0x1003 -PCU(主控)个数 R uint16 1~4 0x1004 -PCU通道个数 R uint16 1~4 0x1005 -PCS(模块)个数 R uint16 1~40 0x1006 -电表通道个数 R uint16 1 0x1007 -电表个数 R uint16 1~10 0x1008 -消防通道个数 R uint16 1~10 0x1009 -消防个数 R uint16 1~10 0x100A -UPS通道个数 R uint16 1~10 0x100B -UPS个数 R uint16 1~10 0x100C -温湿度通道个数 R uint16 1 0x100D -温湿度个数 R uint16 1~10 0x100E -空调通道个数 R uint16 1 0x100F -空调个数 R uint16 1~10 0x1010 -控制干接点(配电系统)个数 R uint16 16 0x1011 -状态干接点(配电系统)个数 R uint16 16 0x1012 -预留 0x1013~0x1071 -预留 -预留 -预留 -预留 -预留 -预留 -预留 -预留 -系统最大可充电功率 R uint32 1KW Pcu数据 0x1072 -系统最大可放电功率 R uint32 1KW 0x1074 -储能母线电压 R uint32 0.1V 堆数据 0x1076 -储能母线电流 R int32 0.1A 0x1078 -储能系统SOC R uint16 0.1 0x107A -储能系统SOH R uint16 0.1 0x107B -电流变比 R uint16 电表总表数据 0x107C -电压变比 R uint16 0x107D -A相电压 R uint32 1V 0x107E -B相电压 R uint32 1V 0x1080 -C相电压 R uint32 1V 0x1082 -A相电流 R int32 1A 0x1084 -B相电流 R int32 1A 0x1086 -C相电流 R int32 1A 0x1088 -AB相电压 R uint32 1V 0x108A -BC相电压 R uint32 1V 0x108C -CA相电压 R uint32 1V 0x108E -A相有功功率 R int32 1kW 0x1090 -B相有功功率 R int32 1kW 0x1092 -C相有功功率 R int32 1kW 0x1094 -三相总有功功率 R int32 1kW 0x1096 -当前控制功率 R int32 0.1kW 堆数据 0x1098 -负荷率 R uint32 1% 台区控制策略数据 0不拿 大于0 默认拿第一个 0x109A -三相不平衡度  R uint32 1% 0x109C - 功率因素比率  R uint32 1% 0x109E -进线开关柜功率 R int32 1kW 并网口电表 0x10A0 -用户关口表功率 R int32 1kW 并网口电表 0x10A2 -预留 0x10A4~0x1103 -预留 -正向总有功总需量 R int32 1kW 0x1104 -尖段电价 R uint32 1RMB 0x1106 -峰段电价 R uint32 1RMB 0x1108 -平段电价 R uint32 1RMB 0x110A -谷段电价 R uint32 1RMB 0x110C -日充电电量 R uint32 1kWh 0x110E -日放电电量 R uint32 1kWh 0x1110 -日充电费用 R uint32 1RMB 0x1112 -日放电费用 R uint32 1RMB 0x1114 -日收益 R int32 1RMB 0x1116 -日正向尖有功电能 R uint32 1kWh 0x1118 -日正向峰有功电能 R uint32 1kWh 0x111A -日正向平有功电能 R uint32 1kWh 0x111C -日正向谷有功电能 R uint32 1kWh 0x111E -日正向总有功电能 R uint32 1kWh 0x1120 -日反向尖有功电能 R uint32 1kWh 0x1122 -日反向峰有功电能 R uint32 1kWh 0x1124 -日反向平有功电能 R uint32 1kWh 0x1126 -日反向谷有功电能 R uint32 1kWh 0x1128 -日反向总有功电能 R uint32 1kWh 0x112A -总充电电量 R uint32 1kWh 0x112C -总放电电量 R uint32 1kWh 0x112E -总充电费用 R uint32 1RMB 0x1130 -总放电费用 R uint32 1RMB 0x1132 -总收益 R int32 1RMB 0x1134 -总正向尖有功电能 R uint32 1kWh 0x1136 -总正向峰有功电能 R uint32 1kWh 0x1138 -总正向平有功电能 R uint32 1kWh 0x113A -总正向谷有功电能 R uint32 1kWh 0x113C -总正向总有功电能 R uint32 1kWh 0x113E -总反向尖有功电能 R uint32 1kWh 0x1140 -总反向峰有功电能 R uint32 1kWh 0x1142 -总反向平有功电能 R uint32 1kWh 0x1144 -总反向谷有功电能 R uint32 1kWh 0x1146 -总反向总有功电能 R uint32 1kWh 0x1148 -预留 0x114A~0x11AD -预留 -预留 -交流A相电压 R int16 1V 0x11AE -交流B相电压 R int16 1V 0x11AF -交流C相电压 R int16 1V 0x11B0 -交流A相频率 R int16 1Hz 0x11B1 -交流B相频率 R int16 1Hz 0x11B2 -交流C相频率 R int16 1Hz 0x11B3 -总直流功率 R int32 1kW 0x11B4 -总直流电压 R uint32 0.1V 0x11B6 -总直流电流 R int32 0.1A 0x11B8 -预留 0x11B9~0x121A -预留 -预留 -储能系统温度 R int16 0.1℃ 堆里面单体温度最高 0x121B -储能充放电时段hh R uint16 时 0x01 0x121C -储能充放电时段mm R uint16 分 0x01 0x121D -储能充放电时段ss R uint16 秒 0x01 0x121E -储能系统各时段功率 R int16 1kW 0x01 0x121F \ No newline at end of file diff --git a/bin/Release/assets/config/电表/EMS遥调.txt b/bin/Release/assets/config/电表/EMS遥调.txt deleted file mode 100644 index 65f34c7..0000000 --- a/bin/Release/assets/config/电表/EMS遥调.txt +++ /dev/null @@ -1,53 +0,0 @@ -EMS工作模式 RW uint16 - "0:无效 -1:本地控制模式, EMS不接受平台调控 -2:平台控制模式, EMS接收平台调控指令" 0x0001 -有功功率 RW int16 kW "并网恒功率模式下交流侧功率值: -<0: 充电功率 -0: 静置 ->0: 放电功率" 0x0002 -PCS开关机 RW uint16 - "0: 关机 -1: 开机" 软件开关机 0x0003 -主控对象 RW uint16 "储能遥控对象: -0:无效 -1:华云 -2:轻舟" 0x0004 -A相有功功率 RW int16 1kW 0x0005 -B相有功功率 RW int16 1kW 0x0006 -C相有功功率 RW int16 1kW 0x0007 -三相总有功功率 RW int16 1kW 0x0008 -A相无功功率 RW int16 1kVar 0x0009 -B相无功功率 RW int16 1kVar 0x000A -C相无功功率 RW int16 1kVar 0x000B -三相总无功功率 RW int16 1kVar 0x000C -A相电流 RW int16 0.01A 在使用的时候除以100转float 0x000D -B相电流 RW int16 0.01A 0x000E -C相电流 RW int16 0.01A 0x000F -A相电压 RW uint16 1V 0x0010 -B相电压 RW uint16 1V 0x0011 -C相电压 RW uint16 1V 0x0012 -A相交流功率因数 RW int16 0.01 在使用的时候除以100转float 0x0013 -B相交流功率因数 RW int16 0.01 0x0014 -C相交流功率因数 RW int16 0.01 0x0015 -A相视在功率 RW int16 1kVA 0x0016 -B相视在功率 RW int16 1kVA 0x0017 -C相视在功率 RW int16 1kVA 0x0018 -正向总有功总需量 RW int16 1kW 0x0019 -数据有效性 RW int16 0无效 1有效 0x001A -EMS工作模式 RW uint16 - "0:无效 -1:本地控制模式, EMS不接受平台调控 -2:平台控制模式, EMS接收平台调控指令" 2413项目需求 0x001B -有功功率 RW uint16 kW "并网恒功率模式下交流侧功率值: -功率绝对值 没有正负" 2413项目需求 0x001C -充放电类型 RW uint16 - "0: 关机 -1: 充电 -2:放电 -3:待机" "2413项目需求 -充放电类型" 0x001D -最大SOC RW uint16 2413项目需求 0x001E -最小SOC RW uint16 2413项目需求 0x001F -自动并离网 RW uint16 "0:手动 -1:自动" "2332项目需求 -(若为自动,则通过主控进行并离网切换)" 0x0020 -并网离网 RW uint16 "0:并网 -1:离网" "2332项目需求 -(该下发参数的前提为手动模式下)" 0x0021 \ No newline at end of file diff --git a/bin/Release/assets/config/电表/PCS遥信.txt b/bin/Release/assets/config/电表/PCS遥信.txt deleted file mode 100644 index df3b360..0000000 --- a/bin/Release/assets/config/电表/PCS遥信.txt +++ /dev/null @@ -1,99 +0,0 @@ -所属主控号 R uint16 1~4 0x1001 -所属PCS号 R uint16 1~40 0x1002 -故障状态 R uint16 1故障,0正常 0x1003 -告警状态 R uint16 1告警,0正常 0x1004 -设备在线 R uint16 1在线,0无效 0x1005 -禁止充电 R uint16 1禁止,0无效 0x1006 -禁止放电 R uint16 1禁止,0无效 0x1007 -运行状态 R uint16 1开机,0关机 0x1008 -充放状态 R uint16 0:待机,1:充电,2:放电,3:搁置 0x1009 -电网状态 R uint16 1离网,0并网 0x100A -逆变供电 R uint16 0禁止,1使能 0x100B -缓启动完成 R uint16 0禁止,1使能 0x100C -主机标志 R uint16 0禁止,1使能 0x100D -并离网状态 R uint16 0:并网, 1:离网 0x100E -同步请求标志 R uint16 0:无效;1:动作 0x100F -绝缘故障 R uint16 1:故障,0正常 0x1010 -漏电保护 R uint16 1:故障,0正常 0x1011 -直流过压 R uint16 1:故障,0正常 0x1012 -市电幅值异常 R uint16 1:故障,0正常 0x1013 -市电相序异常 R uint16 1:故障,0正常 0x1014 -温度开关异常 R uint16 1:故障,0正常 0x1015 -市电频率异常 R uint16 1:故障,0正常 0x1016 -IGBT过温 R uint16 1:故障,0正常 0x1017 -交流接地故障 R uint16 1:故障,0正常 0x1018 -逆变过流异常 R uint16 1:故障,0正常 0x1019 -直流缓起故障 R uint16 1:故障,0正常 0x101A -直流主继电器故障 R uint16 1:故障,0正常 0x101B -风机异常 R uint16 1:故障,0正常 0x101C -主接触器异常 R uint16 1:故障,0正常 0x101D -均浮充切换超时 R uint16 1:故障,0正常 0x101E -硬件故障 R uint16 1:故障,0正常 0x101F -机内过温 R uint16 1:故障,0正常 0x1020 -软启动故障 R uint16 1:故障,0正常 0x1021 -触摸屏通讯故障 R uint16 1:故障,0正常 0x1022 -防雷器故障 R uint16 1:故障,0正常 0x1023 -急停故障 R uint16 1:故障,0正常 0x1024 -BMS系统故障 R uint16 1:故障,0正常 0x1025 -BMS通讯故障 R uint16 1:故障,0正常 0x1026 -BMS干接点通讯故障 R uint16 1:故障,0正常 0x1027 -远程通讯故障 R uint16 1:故障,0正常 0x1028 -门禁告警 R uint16 1:故障,0正常 0x1029 -锁相异常 R uint16 1:故障,0正常 0x102A -IGBT过温告警 R uint16 1:故障,0正常 0x102B -硬件过流保护 R uint16 1:故障,0正常 0x102C -驱动故障 R uint16 1:故障,0正常 0x102D -ID冲突 R uint16 1:故障,0正常 0x102E -电池过压 R uint16 1:故障,0正常 0x102F -电池欠压 R uint16 1:故障,0正常 0x1030 -直流过流保护 R uint16 1:故障,0正常 0x1031 -输出电压异常 R uint16 1:故障,0正常 0x1032 -离网输出电压不符合 R uint16 1:故障,0正常 0x1033 -输出过载保护 R uint16 1:故障,0正常 0x1034 -输出短路保护 R uint16 1:故障,0正常 0x1035 -并机通信异常 R uint16 1:故障,0正常 0x1036 -电池保险异常 R uint16 1:故障,0正常 0x1037 -电池重载低压 R uint16 1:故障,0正常 0x1038 -电池低压告警 R uint16 1:故障,0正常 0x1039 -一拖二压差过大 R uint16 1:故障,0正常 0x103A -电池反接故障 R uint16 1:故障,0正常 0x103B -电池电压异常 R uint16 1:故障,0正常 0x103C -过载告警 R uint16 1:故障,0正常 0x103D -外部接触器异常 R uint16 1:故障,0正常 0x103E -IGBT温度传感器异常 R uint16 1:故障,0正常 0x103F -整机温度传感器异常 R uint16 1:故障,0正常 0x1040 -市电CT异常 R uint16 1:故障,0正常 0x1041 -逆变电流三相不平衡 R uint16 1:故障,0正常 0x1042 -逆变电流直流分量异常 R uint16 1:故障,0正常 0x1043 -母线不平衡 R uint16 1:故障,0正常 0x1044 -逆变电压直流分量异常 R uint16 1:故障,0正常 0x1045 -主接触器控制异常 R uint16 1:故障,0正常 0x1046 -逆变电压控制异常 R uint16 1:故障,0正常 0x1047 -直流霍尔异常 R uint16 1:故障,0正常 0x1048 -电池单体过压 R uint16 1:故障,0正常 0x1049 -电池单体欠压 R uint16 1:故障,0正常 0x104A -电网过压 R uint16 1:故障,0正常 0x104B -电网欠压 R uint16 1:故障,0正常 0x104C -电网过频 R uint16 1:故障,0正常 0x104D -电网欠频 R uint16 1:故障,0正常 0x104E -市电不平衡 R uint16 1:故障,0正常 0x104F -参数设置不匹配 R uint16 1:故障,0正常 0x1050 -SPI通信异常 R uint16 1:故障,0正常 0x1051 -SCI通信异常 R uint16 1:故障,0正常 0x1052 -IIC通信异常 R uint16 1:故障,0正常 0x1053 -Xintf通信异常 R uint16 1:故障,0正常 0x1054 -零偏校准异常 R uint16 1:故障,0正常 0x1055 -烟雾告警 R uint16 1:故障,0正常 0x1056 -无电池组故障 R uint16 1异常,0正常 0x1057 -环温降频 R uint16 1异常,0正常 0x1058 -交流过载 R uint16 1异常,0正常 0x1059 -采样异常 R uint16 1异常,0正常 0x105A -24V辅源故障 R uint16 1异常,0正常 0x105B -直流欠压异常 R uint16 1异常,0正常 0x105C -散热器过温 R uint16 1异常,0正常 0x105D -CAN配置故障 R uint16 1异常,0正常 0x105E -3.3V辅源故障 R uint16 1异常,0正常 0x105F -环境过温 R uint16 1异常,0正常 0x1060 -A相IGBT逆变过流 R uint16 1异常,0正常 0x1061 -B相IGBT逆变过流 R uint16 1异常,0正常 0x1062 -C相IGBT逆变过流 R uint16 1异常,0正常 0x1063 \ No newline at end of file diff --git a/bin/Release/assets/config/电表/PCS遥测.txt b/bin/Release/assets/config/电表/PCS遥测.txt deleted file mode 100644 index 2eea459..0000000 --- a/bin/Release/assets/config/电表/PCS遥测.txt +++ /dev/null @@ -1,78 +0,0 @@ -所属主控号 R uint16 1~4 0x0001 -所属PCS号 R uint16 1~40 0x0002 -总充电量 R uint32 1kWh 0x0003 -总放电量 R uint32 1kWh 0x0005 -散热器温度 R int16 1℃ 0x0007 -内部温度 R int16 1℃ 0x0008 -最大允许充电功率 R int16 0.1kW 0x0009 -最大允许放电功率 R int16 0.1kW 0x000A -有功功率期望 R int16 1kWh 0x000B -无功功率期望 R int16 1kVar 0x000C -AB线电压 R int16 1V 0x000D -BC线电压 R int16 1V 0x000E -CA线电压 R int16 1V 0x000F -A相电压 R int16 1V 0x0010 -B相电压 R int16 1V 0x0011 -C相电压 R int16 1V 0x0012 -A相频率 R int16 1Hz 0x0013 -B相频率 R int16 1Hz 0x0014 -C相频率 R int16 1Hz 0x0015 -A相功率因数 R int16 1 0x0016 -B相功率因数 R int16 1 0x0017 -C相功率因数 R int16 1 0x0018 -A相电流 R int16 1A 0x0019 -B相电流 R int16 1A 0x001A -C相电流 R int16 1A 0x001B -A相有功功率 R int16 1kW 0x001C -B相有功功率 R int16 1kW 0x001D -C相有功功率 R int16 1kW 0x001E -A相无功功率 R int16 1kVar 0x001F -B相无功功率 R int16 1kVar 0x0020 -C相无功功率 R int16 1kVar 0x0021 -A相视在功率 R int16 1kVA 0x0022 -B相视在功率 R int16 1kVA 0x0023 -C相视在功率 R int16 1kVA 0x0024 -三相总有功功率 R int16 1kW 0x0025 -三相总无功功率 R int16 1kVar 0x0026 -三相总视在功率 R int16 1kVA 0x0027 -三相总功率因数 R int16 1 0x0028 -直流功率 R int16 1kW 0x0029 -直流电压 R int16 1V 0x002A -直流电流 R int16 1A 0x002B -充电功率 R int16 1kW 0x002C -放电功率 R int16 1kW 0x002D -PF值 R int16 1 0x002E -UV线/U相电网计量线电压 R int16 1V 0x002F -VW线/V相电网计量线电压 R int16 1V 0x0030 -WU线/W相电网计量线电压 R int16 1V 0x0031 -U相电网计量电流 R int16 1A 0x0032 -V相电网计量电流 R int16 1A 0x0033 -W相电网计量电流 R int16 1A 0x0034 -正母线电压 R int16 1V 0x0035 -可用功率 R int16 1kVA 0x0036 -负母线电压 R int16 1V 0x0037 -A相IGBT温度 R int16 1℃ 0x0038 -B相IGBT温度 R int16 1℃ 0x0039 -C相IGBT温度 R int16 1℃ 0x003A -逆变侧AB线电压 R int16 1V 0x003B -逆变侧BC线电压 R int16 1V 0x003C -逆变侧CA线电压 R int16 1V 0x003D -逆变侧A相电压 R int16 1V 0x003E -逆变侧B相电压 R int16 1V 0x003F -逆变侧C相电压 R int16 1V 0x0040 -逆变侧A相电流 R int16 1A 0x0041 -逆变侧B相电流 R int16 1A 0x0042 -逆变侧C相电流 R int16 1A 0x0043 -逆变侧A相电流直流分量 R int16 1A 0x0044 -逆变侧B相电流直流分量 R int16 1A 0x0045 -逆变侧C相电流直流分量 R int16 1A 0x0046 -离网频率 R int16 1Hz 0x0047 -A相负载量 R int16 1 0x0048 -B相负载量 R int16 1 0x0049 -C相负载量 R int16 1 0x004A -总负载量 R int16 1 0x004B -逆变侧AB线电压直流分量 R int16 1A 0x004C -逆变侧BC线电压直流分量 R int16 1A 0x004D -逆变侧CA线电压直流分量 R int16 1A 0x004E -在线数量 R int16 0x004F -逆变数量 R int16 0x0050 \ No newline at end of file diff --git a/bin/Release/assets/config/电表/PCU遥信.txt b/bin/Release/assets/config/电表/PCU遥信.txt deleted file mode 100644 index 4f371d9..0000000 --- a/bin/Release/assets/config/电表/PCU遥信.txt +++ /dev/null @@ -1,59 +0,0 @@ -所属通道号 R uint16 1~4 0x1001 -故障状态 R uint16 1故障,0正常 0x1002 -告警状态 R uint16 1告警,0正常 0x1003 -设备在线 R uint16 1在线,0无效 0x1004 -本地远程 R uint16 1本地,0远程 0x1005 -启停状态 R uint16 1开机,0关机 0x1006 -电网状态 R uint16 1离网,0并网 0x1007 -模块状态 R uint16 1开机,0待机 0x1008 -EPO急停 R uint16 1故障,0正常 0x1009 -防雷器异常 R uint16 1告警,0正常 0x100A -负载电压反序 R uint16 1故障,0正常 0x100B -市电电压反序 R uint16 1故障,0正常 0x100C -输出相反序 R uint16 1故障,0正常 0x100D -过载告警 R uint16 1告警,0正常 0x100E -过载超时 R uint16 1故障,0正常 0x100F -交流过流保护 R uint16 1故障,0正常 0x1010 -逆变电压异常 R uint16 1故障,0正常 0x1011 -内部串口异常 R uint16 1故障,0正常 0x1012 -485通信故障 R uint16 1故障,0正常 0x1013 -CAN通信故障 R uint16 1故障,0正常 0x1014 -E2PROM故障 R uint16 1故障,0正常 0x1015 -电网过压 R uint16 1故障,0正常 0x1016 -电网欠压 R uint16 1故障,0正常 0x1017 -电网过频 R uint16 1故障,0正常 0x1018 -电网欠频 R uint16 1故障,0正常 0x1019 -电网快检综合异常 R uint16 1故障,0正常 0x101A -电网幅值快检异常 R uint16 1故障,0正常 0x101B -电网拖尾异常 R uint16 1故障,0正常 0x101C -消防输入信号NO R uint16 1闭合,0断开 0x101D -急停按钮信号NC R uint16 1急停,0正常 0x101E -避雷器NC R uint16 1故障,0正常 0x101F -避雷器断路器NC R uint16 1故障,0正常 0x1020 -PCS总断路器NC R uint16 1闭合,0断开 0x1021 -电操状态NO R uint16 1闭合,0断开 0x1022 -远程关机NO R uint16 1开机,0无效 0x1023 -远程开机NO R uint16 1开机,0无效 0x1024 -BA故障信号NO R uint16 1故障,0正常 0x1025 -PCS_01状态 R uint16 1在线,0掉线 0x1026 -PCS_02状态 R uint16 1在线,0掉线 0x1027 -PCS_03状态 R uint16 1在线,0掉线 0x1028 -PCS_04状态 R uint16 1在线,0掉线 0x1029 -PCS_05状态 R uint16 1在线,0掉线 0x102A -PCS_06状态 R uint16 1在线,0掉线 0x102B -PCS_07状态 R uint16 1在线,0掉线 0x102C -PCS_09状态 R uint16 1在线,0掉线 0x102D -PCS_10状态 R uint16 1在线,0掉线 0x102E -PCS_01下发设置 R uint16 1故障,0正常 0x102F -PCS_02下发设置 R uint16 1故障,0正常 0x1030 -PCS_03下发设置 R uint16 1故障,0正常 0x1031 -PCS_04下发设置 R uint16 1故障,0正常 0x1032 -PCS_05下发设置 R uint16 1故障,0正常 0x1033 -PCS_06下发设置 R uint16 1故障,0正常 0x1034 -PCS_07下发设置 R uint16 1故障,0正常 0x1035 -PCS_08下发设置 R uint16 1故障,0正常 0x1036 -PCS_09下发设置 R uint16 1故障,0正常 0x1037 -PCS_10下发设置 R uint16 1:故障,0正常 0x1038 -内部DSP通信故障 R uint16 1:故障,0正常 0x1039 -BMS CAN通信故障 R uint16 1:故障,0正常 0x103A -下发设置失败 R uint16 1:故障,0正常 0x103B \ No newline at end of file diff --git a/bin/Release/assets/config/电表/PCU遥测.txt b/bin/Release/assets/config/电表/PCU遥测.txt deleted file mode 100644 index a2de26c..0000000 --- a/bin/Release/assets/config/电表/PCU遥测.txt +++ /dev/null @@ -1,72 +0,0 @@ -所属通道号 R uint16 1~4 0x0001 -充电功率最大许可 R uint32 1KW 0x0002 -放电功率最大许可 R uint32 1KW 0x0004 -交流日总充电量 R uint32 1KWh 0x0006 -交流日总放电量 R uint32 1KWh 0x0008 -交流总充电量 R uint32 1KWh 0x000A -交流总放电量 R uint32 1KWh 0x000C -有功功率期望值 R int16 1KW 0x000E -无功功率期望值 R int16 1kVar 0x000F -PCS侧线电压VAB R int16 1v 0x0010 -PCS侧线电压VBC R int16 1v 0x0011 -PCS侧线电压VCA R int16 1v 0x0012 -PCS侧线A相电压 R int16 1v 0x0013 -PCS侧线B相电压 R int16 1v 0x0014 -PCS侧线C相电压 R int16 1v 0x0015 -PCS侧A相频率 R int16 1Hz 0x0016 -PCS侧B相频率 R int16 1Hz 0x0017 -PCS侧C相频率 R int16 1Hz 0x0018 -PCS侧功率因数A R int16 1 0x0019 -PCS侧功率因数B R int16 1 0x001A -PCS侧功率因数C R int16 1 0x001B -PCS侧相电流A R int16 1A 0x001C -PCS侧相电流B R int16 1A 0x001D -PCS侧相电流C R int16 1A 0x001E -PCS侧有功功率A R int16 1kW 0x001F -PCS侧有功功率B R int16 1kW 0x0020 -PCS侧有功功率C R int16 1kW 0x0021 -PCS侧无功功率A R int16 1kVar 0x0022 -PCS侧无功功率B R int16 1kVar 0x0023 -PCS侧无功功率C R int16 1kVar 0x0024 -PCS侧视在功率A R int16 1kVar 0x0025 -PCS侧视在功率B R int16 1kVar 0x0026 -PCS侧视在功率C R int16 1kVar 0x0027 -PCS侧三相总有功功率 R int16 1kW 0x0028 -PCS侧三相总无功功率 R int16 1kVar 0x0029 - PCS侧三相总视在功率 R int16 1kVA 0x002A -PCS侧三相总功率因数 R int16 1 0x002B -PCU模块温度 R int16 1℃ 0x002C -外部温度NTC1 R int16 1℃ 0x002D -外部温度NTC2 R int16 1℃ 0x002E -外部温度NTC3 R int16 1℃ 0x002F -台区负载侧A相电流 R int16 1A 0x0030 -台区负载侧B相电流 R int16 1A 0x0031 -台区负载侧C相电流 R int16 1A 0x0032 -台区负载侧A相有功功率 R int16 1kW 0x0033 -台区负载侧B相有功功率 R int16 1kW 0x0034 -台区负载侧C相有功功率 R int16 1kW 0x0035 -台区负载侧总有功功率 R int16 1kW 0x0036 -台区负载侧A相无功功率 R int16 1kVar 0x0037 -台区负载侧B相无功功率 R int16 1kVar 0x0038 -台区负载侧C相无功功率 R int16 1kVar 0x0039 -台区负载侧总无功功率 R int16 1kVar 0x003A -台区负载侧A相视在功率 R int16 1kVA 0x003B -台区负载侧B相视在功率 R int16 1kVA 0x003C -台区负载侧C相视在功率 R int16 1kVA 0x003D -台区负载侧总视在功率 R int16 1kVA 0x003E -台区负载侧A相功率因数 R int16 1 0x003F -台区负载侧B相功率因数 R int16 1 0x0040 -台区负载侧C相功率因数 R int16 1 0x0041 -台区负载侧总功率因数 R int16 1 0x0042 -负载侧线电压AB R int16 1V 0x0043 -负载侧线电压BC R int16 1V 0x0044 -负载侧线电压CA R int16 1V 0x0045 -负载侧相电压AN R int16 1V 0x0046 -负载侧相电压BN R int16 1V 0x0047 -负载侧相电压CN R int16 1V 0x0048 -负载侧A功率因素 R int16 1 0x0049 -负载侧B功率因素 R int16 1 0x004A -负载侧C功率因素 R int16 1 0x004B -负载侧A视在功率 R int16 1kVA 0x004C -负载侧B视在功率 R int16 1kVA 0x004D -负载侧C视在功率 R int16 1kVA 0x004E \ No newline at end of file diff --git a/bin/Release/assets/config/电表/冷机遥信.txt b/bin/Release/assets/config/电表/冷机遥信.txt deleted file mode 100644 index f9416d2..0000000 --- a/bin/Release/assets/config/电表/冷机遥信.txt +++ /dev/null @@ -1,14 +0,0 @@ -所属通道号 R uint16 1 0x1001 -所属冷机号 R uint16 1~10 0x1002 -开关 R uint16 0:关机,1:开机 0x1003 -采样模式 R uint16 0-出水温度 1-电芯温度 0x1004 -制冷状态 R uint16 0:关闭,1:启动 0x1005 -制热状态 R uint16 0:关闭,1:启动 0x1006 -高温告警 R uint16 0:正常,1:告警 0x1007 -低温告警 R uint16 0:正常,1:告警 0x1008 -高压告警 R uint16 0:正常,1:告警 0x1009 -低压告警 R uint16 0:正常,1:告警 0x100A -进水温度传感器 R uint16 0:正常,1:告警 0x100B -出水温度传感器 R uint16 0:正常,1:告警 0x100C -进水压力传感器 R uint16 0:正常,1:告警 0x100D -出水压力传感器 R uint16 0:正常,1:告警 0x100E \ No newline at end of file diff --git a/bin/Release/assets/config/电表/冷机遥测.txt b/bin/Release/assets/config/电表/冷机遥测.txt deleted file mode 100644 index f01c347..0000000 --- a/bin/Release/assets/config/电表/冷机遥测.txt +++ /dev/null @@ -1,21 +0,0 @@ -所属通道号 R uint16 1 0x0001 -所属冷机号 R uint16 1~10 0x0002 -制冷点 R int16 0.1℃ 0x0003 -制冷偏差 R int16 0.1℃ 0x0004 -高温告警值 R int16 0.1℃ 0x0005 -低温告警值 R int16 0.1℃ 0x0006 -制热点 R int16 0.1℃ 0x0007 -制热偏差 R int16 0.1℃ 0x0008 -电芯温度 R int16 0.1℃ 0x0009 -环境湿度 R int16 0.1℃ 0x000A -吸气温度 R int16 0.1℃ 0x000B -排气温度 R int16 0.1℃ 0x000C -进水温度/供液温度 R int16 0.1℃ 0x000D -出水温度/回液温度 R int16 0.1℃ 0x000E -进水压力/供液压力 R int16 0.1 0x000F -出水压力/回液压力 R int16 0.1 0x0010 -高压压力 R int16 0.1 0x0011 -低压压力 R int16 0.1 0x0012 -循环水泵转速 R int16 0x0013 -压缩机频率 R int16 0x0014 -室外风机转速 R int16 0x0015 \ No newline at end of file diff --git a/bin/Release/assets/config/电表/多功能电表遥测.txt b/bin/Release/assets/config/电表/多功能电表遥测.txt deleted file mode 100644 index 0e8242b..0000000 --- a/bin/Release/assets/config/电表/多功能电表遥测.txt +++ /dev/null @@ -1,57 +0,0 @@ -所属通道号 R uint16 1 0x0001 -电表地址 R uint16[6] 0x0002~0x0007 -电表类型 R uint16 "0:储能站总表 -1:逆变前侧电表 -2:逆变后侧电表 -3:配电柜电表 -4:并网口电表" 0x0008 -电流变比 R uint16 0x0009 -电压变比 R uint16 0x000A -A相电压 R uint32 1V 0x000B -B相电压 R uint32 1V 0x000D -C相电压 R uint32 1V 0x000F -A相电流 R int32 1A 0x0011 -B相电流 R int32 1A 0x0013 -C相电流 R int32 1A 0x0015 -AB相电压 R uint32 1V 0x0017 -BC相电压 R uint32 1V 0x0019 -CA相电压 R uint32 1V 0x001B -A相有功 R int32 1kW 0x001D -B相有功 R int32 1kW 0x001F -C相有功 R int32 1kW 0x0021 -三相总有功 R int32 1kW 0x0023 -正向总有功总需量 R int32 1kW 0x0025 -尖段电价 R uint32 1RMB 0x0027 -峰段电价 R uint32 1RMB 0x0029 -平段电价 R uint32 1RMB 0x002B -谷段电价 R uint32 1RMB 0x002D -日充电电量 R uint32 1kWh 0x002F -日放电电量 R uint32 1kWh 0x0031 -日充电费用 R uint32 1RMB 0x0033 -日放电费用 R uint32 1RMB 0x0035 -日收益 R int32 1RMB 0x0037 -日正向尖有功电能 R uint32 1kWh 0x0039 -日正向峰有功电能 R uint32 1kWh 0x003B -日正向平有功电能 R uint32 1kWh 0x003D -日正向谷有功电能 R uint32 1kWh 0x003F -日正向总有功电能 R uint32 1kWh 0x0041 -日反向尖有功电能 R uint32 1kWh 0x0043 -日反向峰有功电能 R uint32 1kWh 0x0045 -日反向平有功电能 R uint32 1kWh 0x0047 -日反向谷有功电能 R uint32 1kWh 0x0049 -日反向总有功电能 R uint32 1kWh 0x004B -总充电电量 R uint32 1kWh 0x004D -总放电电量 R uint32 1kWh 0x004F -总充电费用 R uint32 1RMB 0x0051 -总放电费用 R uint32 1RMB 0x0053 -总收益 R int32 1RMB 0x0055 -总正向尖有功电能 R uint32 1kWh 0x0057 -总正向峰有功电能 R uint32 1kWh 0x0059 -总正向平有功电能 R uint32 1kWh 0x005B -总正向谷有功电能 R uint32 1kWh 0x005D -总正向总有功电能 R uint32 1kWh 0x005F -总反向尖有功电能 R uint32 1kWh 0x0061 -总反向峰有功电能 R uint32 1kWh 0x0063 -总反向平有功电能 R uint32 1kWh 0x0065 -总反向谷有功电能 R uint32 1kWh 0x0067 -总反向总有功电能 R uint32 1kWh 0x0069 \ No newline at end of file diff --git a/bin/Release/assets/config/电表/消防4.0遥信.txt b/bin/Release/assets/config/电表/消防4.0遥信.txt deleted file mode 100644 index 4748a53..0000000 --- a/bin/Release/assets/config/电表/消防4.0遥信.txt +++ /dev/null @@ -1,24 +0,0 @@ -所属通道号 R uint16 1~10 0x0001 -主控数量 R uint16 1 0x0002 -主控ID R uint16 1 0x0003 -主控状态 R uint16 0:正常 1:预警 2:火警 0x0004 -主控硬件版本 R uint16[2] 主控硬件版本 0x0005~0x0006 -主控软件版本 R uint16[2] 主控软件版本 0x0007~0x0008 -主电状态 R uint16 0:使用市电 1:使用备电 0x0009 -备电电流 R uint32 0.1A 0x000A -备电电压 R uint32 0.1V 0x000C -可用容量 R uint32 0.01Ah 0x000E -可充放容量 R uint32 0.01Ah 0x0010 -警铃是否使用 R uint16 0x0012 -警铃状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0013 -瓶头阀是否使用 R uint16 0x0014 -瓶头阀状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0015 -手报是否使用 R uint16 0x0016 -手报状态 R uint16 0:无效 1:掉线 2:正常 3:启动 0x0017 -簇控制器数量 R uint16 0x0018 -复合探测器总数量 R uint16 0x0019 -烟雾探测器总数量 R uint16 0x001A -压力探测器总数量 R uint16 0x001B -吸气式探测器总数量 R uint16 0x001C -PACK探测器总数量 R uint16 0x001D -电池总数量 R uint16 0x001E \ No newline at end of file diff --git a/bin/Release/assets/config/电表/温湿度状态遥测.txt b/bin/Release/assets/config/电表/温湿度状态遥测.txt deleted file mode 100644 index 5ac203a..0000000 --- a/bin/Release/assets/config/电表/温湿度状态遥测.txt +++ /dev/null @@ -1,4 +0,0 @@ -所属通道号 R uint16 1 0x0001 -所属温湿度号 R uint16 1~10 0x0002 -温度 R int16 0.1℃ 0x0003 -湿度 R int16 0.1℃ 0x0004 \ No newline at end of file diff --git a/bin/Release/assets/config/电表/空调遥信.txt b/bin/Release/assets/config/电表/空调遥信.txt deleted file mode 100644 index 650f094..0000000 --- a/bin/Release/assets/config/电表/空调遥信.txt +++ /dev/null @@ -1,12 +0,0 @@ -所属通道号 R uint16 1 0x1001 -所属空调号 R uint16 1~10 0x1002 -开关 R uint16 0:关机,1:开机 0x1003 -启动制冷指令 R uint16 0:关闭,1:启动 0x1004 -启动送风指令 R uint16 0:关闭,1:启动 0x1005 -启动待机指令 R uint16 0:关闭,1:启动 0x1006 -启动加热指令 R uint16 0:关闭,1:启动 0x1007 -传感器故障 R uint16 0:正常,1:告警 0x1008 -高低电压告警 R uint16 0:正常,1:告警 0x1009 -高低温告警 R uint16 0:正常,1:告警 0x100A -高低压告警 R uint16 0:正常,1:告警 0x100B -压缩机告警 R uint16 0:正常,1:告警 0x100C \ No newline at end of file diff --git a/bin/Release/assets/config/电表/空调遥测.txt b/bin/Release/assets/config/电表/空调遥测.txt deleted file mode 100644 index 4ca7e1c..0000000 --- a/bin/Release/assets/config/电表/空调遥测.txt +++ /dev/null @@ -1,14 +0,0 @@ -所属通道号 R uint16 1 0x0001 -所属空调号 R uint16 1~10 0x0002 -制冷点 R int16 0.1℃ 0x0003 -制冷偏差 R int16 0.1℃ 0x0004 -高温告警值 R int16 0.1℃ 0x0005 -低温告警值 R int16 0.1℃ 0x0006 -制热点 R int16 0.1℃ 0x0007 -制热偏差 R int16 0.1℃ 0x0008 -当前温度 R int16 0.1℃ 0x0009 -当前湿度 R int16 0.1℃ 0x000A -除湿开启温度 R int16 0.1℃ 0x000B -除湿停止温度 R int16 0.1℃ 0x000C -除湿开启湿度 R int16 0.1℃ 0x000D -除湿停止湿度 R int16 0.1℃ 0x000E \ No newline at end of file diff --git a/bin/Release/gmssl.dll b/bin/Release/gmssl.dll index a1ec03db09eb755688a243098860808882c34745..48bfef738c4600df45632c55675f2ceb7f944fdf 100644 GIT binary patch literal 1107968 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

{QpS*oNt`|$=KoPAICjU|C|JblzXSc zxMD10notZn~-C16TUqb$I$^gl~z0r|m4tz@JgQv&?A^Ajh3?pWjSvzTdfo6ciZr2-I zkEi7z=(m)VF`vT9u<^A0L~SfACMMSbllbEl{M`oC-nGW$wH4DcQ;@nA1R4ut>~dAn zrRPhmODQB(|9p4z5y7kws~|m8Jv0& z1uNzc!gp2L^$~9TiMFx#jp6pNdKj!=MlUF>yy)w=ArQc};tymv9Gn*EjbmV;iaO+Z zTt0oPReR?PBD_(i@lc)`Ygd+aQ~gxec8dvu1`^Zs5-iq8jq^OzLW)|P6Cm^+{4hnW{+FF@S?Y4B zVvUsymKW{%7R$y`C&GEsDi5NHHm!QkYdReLIKO&aT7LDE^!(~+83ol-GG#+cVJNBr zEJRzv(YbxgA&tmwACCT-Up;&^)-DQS!|U^7XEdmE1z&f%|4fj;t(v}lAxXgW=wRh_ zo~e_q*tPMn>j>ja45-Up)sZ+dm2q_kJiQN3)#P8Y4}LZa8ob4^3bhb0?bR{& zRWda_mrG{j+j1f#XdDB&0*xO%`{H4^fgsZ9-gIC7vqx9IRM}TCuk)&0qg6(FCP@LR zcvDFcDO@bUAm$S-W8f?oyNjehjSo`K1q6M>hY;$)Y7wTmY$Wy3oVS_gZ7f+rCHkta z0Rh6%uGoK`8|@zTnXiA7!RxDKENM4jHP^&OHJYJwEfLxS z1wd~A$oDB{sGmiU(V$6&_}vdXo8qqvSA$~#1T%d>j>*vl3hm5NytSQ4cb%E8ovHCU zQ-BB2f}D!@-jR%oc*n@TNDUh4S`kl+>{YP?S&T(DokizcqTQtJ zX3GE#?LK5Ua{bW#!3*O59k~X<_M+# zf{n|3Q3vB<#gNk`^l7aW_c^u?+bj|ndl~Lk&rvBvF6NiBIw!{BI6_L^0 z+WsOI40oKvsxkk*sAqop9(>9sK9HEaXjX2;@BK>8XqBSKncQgpa+8&V-xA$^oiosG zp`-T#0QJ7vb)S7`!rw5Bh_HIKjMQ zPq3r=WV{GPCp6?n*My=o43ALH1ITD;j`{sefW{C;6d8^)@0g0Nf&g>t5Vzpni~tyq z*|Ips^EMJUS}@i;ul_>BtwN0{B2Na9wp0Z=Gw%>(>3hq)H zFvU&7U6NmLQzkP?%bK{;E&LXLKv%}I>0uQElN5W<<6F!M*n{B1Dy;;cF>!KLor#(Y zO`q+SEETB02u(2}G;f>B&|zAE2&&-`B2SFBP$scEBD%)>t^!|rnkZBWE+O<$z;zKW zk-v1K04+U^f8z10fY`%Al+2wa625t#C}aZM6Bb+|xPH_`Qfdc84I;RKwu?-lF?fhj zUqe09Z_*Y^Fd~A>+!Q#e>UJ}k^Wqba%1t6dj-n)QNoX6eiT85%Skc_a&RqwK&u58 z@kaF@JAMYEZ`692f+z4@WP9yr=LsOEXC9K8^FI}MtNKB z-A@zv?q$AvlH;^u#yo5(y^TMkfQMfU4a1vyaxJj5pHt3-tAMmMnL=#j=6Yb4OwpI5^hYdRj?&R!<)Gjk?}BVE`0EdVX|D29!f4ltZ#oVBIw9@66h?SV$n7BKlnE zEW)8llf{eUNUnD9+|YJ0+ZN;xV#~4AncigabE8;<(&K1%DwM9Wr=U`@1@O)QY=Ej^ zYxrJZzeOwJZ`mb`?{az0s6E76JkVnPD&ogjeu!-o;;#Tda`=(Wk1T#8Dti{L&2`(>W8I04uT0X^+{wbtX42at8*f ziIH&|p@TU)-*jaHKvPF1d z30)&UQOFXQ%f*#C^Wgh`jmAAONhQ+*SX|Ltfw&M|9K9Xc4c7olL^zGQLS%Do@axVaEhba23C*?#4#+JKVGFU|epJPR7D z6n2KIA9Dob&l;41Wb&s-WONOGQYiUNg7LdtzOkPyj7?jBB>(4s;tk<8I3aT3P=UV(U`m-KCx9ZOZ z{M@cT4SuE&+3FyKt13-@ZpTlilEPEqP{kyy_$dw{lv2Sw-3Ex26U^mY#TMc<=$@#^ zU<`aW6J9okgkOk#5pf>D$M$n5Gw>CA6xAvy!jCzuKQ=xe1=Rnf-zgy@I?qLB>Lu1T z3rGnu6YSb~!2BAwFZ;;EftR&VivmdTg8eZEHgvfOTxLt|fE>_E%`v^4Vg9v!RA@T6 zM;$D@vC>&023)E59Cq+`>{ft-=w{9X2rF*ajApO9veyt=h$s3}TVt^jH7-z!fz|>O zk1AS~U!gz}>5dg3!|*WP07$EX=|VSw1%4>0EJndhfXXmKD{T+oL4^dKFjlh6I%D7Q z<`%^$yCoEuU!${4hVwI`yDcfU8*^lA!f27f$|HBA!VUPgR4Bpt#*~m-`w*UCh_0R9 zDJ9-pFhl%W3V}BZ&}OYsmpLDU1Pqw-KF6vwN>(&0zFmuN zW$^*FIPWRY;`g^GF53x4*O>fj;X~vvkWJU!`KR0Nt`y`_*FdGl^8kvoc2$a~mZ~&- zH4Y>2GCPD|DeDN5ccIvPmX!5P;r$b=2V$3*s@azJOkm1K+2(5Z=x08{A>-6&FdeI@ zIJbc%)nEpqaZHrV-)hY4&~TsDN0HNfS-~P-RzZnxpLV{is&Y`#x6i0_ zUzY5z_w6%06HjaOX*QlNmY>4|cv`1V3-NTVJ}pAk611|Kt#pFsZNPJFc&&RROcz|R z(N#;4qgtxLJrZ6^Ddx)&SjrZ5f@zK95m}@axARd4h5)4!D6C{D*Vk$8Z|LeaGPlNg zR?kZR>_RIJYg8Ow;*J!Ti|P{hQXCN6&sv6;?m~z#Ugp+@h(9gu)T8hcQ}pJkc1DI} zc`uwSQ`z8o4hKk;1F4(DHCx8AvD6#TCQ47COD5CNX^ARdpUPGiKovLUS(MkyqlY~x z(-g{n*xCpv{XHn16HscT%1xrs{iCcAVRsLlB-Q;t!!0xQ8?6x$ipJ7OVC?0u90Igv zt)yAtVi$VSLgU-aAV|TW?~T*r!?$8l7+(gqF23MskE@4AzLvf@!rS=I?aVY)T|Z1YB=m3?(I(i{8!=a!8l^77xb zkN(x5e_;3mW%zEHdi^dy3G(_#FH7okOK_98G&Cx21v!i!|QKZ=bZ%A3-7s})|XnsPVl zSgw&2C04|lf6Q~rmei+Xx{411F8vxp(bNs&y~9p*coT-eFTffQy`)8ymFVq#=iu*x zC{93C_ASBBaP;#Ko)+OJ&P>uD3gG7e1Wn@~s`WGyMY>E%V5=168Z#UXBorHq$J`ec z;FBCaDU>HvDflB~|H#rqA%Itp?&flt=ythR5Z+xF7_Y|D0^I0>0(JPAhX!l#9Y!e* z(J+o|QI+sASJKP$9&atOFw|t&QgOh#*s19z?=x!<9E(?uz!31f*vOGYGBbn&SS4UW z?9_JV;`43c_ACr~6MF1a$O?}{nXIer>#wMsF@EeIl!`lc7pa2{vaEOk#K!dBi`26Kid;0N*HE z_RJ9!BQppf)4X+#1}~g9_GyT6KOK`^oH^In_eiK>a7yF~3d0iO7gIgQLuxn$`$?8H zLT^BE+=A#{hx=i)Z7@Uo$?MXK$tb=c^$`fIInZMbMv~Y-Fh6|!^5>$wZ_+%YNi)3Gu*Ua^~9FC6Ehcy#97vdujLb%#Pd#eg94a7-ntIl7b6^)$+B@$>wBCW;$|B6uI z@0t_p%^(Stj+sD>$;jm*5|3lAAw=RZday#M_UMuZhK{40#{BoA1malShq4`~&N!91 z?N((1b3edrd_-m!Mv)dn)?10MqW?0(a2?z`L_2egH?I^zMKQBP9lrBp6`62qgE*GY z1)6^|9)N@a_?0G)VKMwWMSj)c7qf@s;68qBm0#cEm%%R{*hg>=Cqnpv;NEmB(clA9 z0JfO%13|s%R`sLFY(Nxo<5R@;rbFC1Y?dDTsy-rmR((?|vzPq42H#*Ge=d-pb^JLG zKcP1GbB_FcgFnmhlVDpS#YW*KSN5$#0sfJM9LwkM0})3LtCCF?tDq3gVlzlXmN+eq zr<@D~9Mm0WCzBIk3{tPSBQl&R*ydV%^Y0pb|37quXcrO1meg&v15Y+e2Y3XtvMuJ3Cmx_3w zdzFay$kUv7AG+Riua-)cMgnts^C5ZkjR)mag_5IC+IUblu1nIJlw9h~o3hc!td+(1 zlX}xTX{>rPd3^zgj+4%-JzeMa>lMGl^|nM5!5zPl0GAxT;7OSC|7p3eD{eFmV_kwo z5tM^@h;8yT4-@CgJ}V%rcLSDTq8!uJ!IUL+)F;d~dw@A(0|tx0gd+_0HA7WlEMcqKA=AL@;<+f#VtziFfY=2NbMz z*21?aCVbDaf0xU*n9}39GRH#z_$cBB;y&~h@DbuifFC*hz!{wqNyE>fDWO4@%X#Y#Fhg2CzArQqLiS(ri+9E4;Fv|b07q^Y%eK$qfr)Lz%5>k$9Z0kKtY$LemZUWG$vcNp$McA!$JkpE$2o* zMcS8Z2j?P9RFnU%p~N<%7>w{R_zmtGFnHX-VJGXFPzV%c{tqCmPp+vrcSt47M>cAgQkWfGa6 zntqwcz`bx*m8&z?c!IE>R4Gt4yv*_<2&F6=OFfKMj0i#)RYVZtV}P;pJ3|I%g6T;k zeXVrk*}gd#LBRoE((=g0Pud$ec~7n}`zk)xBy(Mja!Byw~TIXa0P zokWgKa;_`TS%OL=24d@KOYpU|n}>X<9G>PaQs!{DvWhHHZZO?*Bo)rVp+Oqn(p5~s zom0wt=9d#>6%(@YfDi%M%rLeKst==V9LDiSqQdmU*qiL_UE=s_E*rxJQ#R%*M>n7E zIC_7+aP+asj-%JT;VjYn?f7klpB%(>>^DS{oWWq`zAWVovfd&l3|>-udJ0|{z|qA~Xa{5se)7@(?LZ_~#KLnd`m+If^XJO0G2{l(NnTSH zZWLpU7m0?B=1ApO^i}mt8mYT3=YApQuapy?*-^R#0Uq2p2Tphv(1Y@bDXevZDmV}9 zh^78=3BUYJ@GEt=ee#-P&h2X71kS+TR_qsFox3C(=$O0jp<{)yKhQQdN+6%CZ2zUm zvHdZE#QlhDKn8LJAVc6PxY=7l%cuHJnfcXcApSNg&G}HW?fCzV_WpEPbN_1Ji*lPon^a=knnqseO@l#+-MAK zidmGKkMU8&kFor~EXuqY_z3VLhaZ?lp?~?2Y3@-4Qo3&l+*}Q4zAE6=6lXBPl5cMe z&sH?*&lr@tk4O2naH8<*C7o4Ig&(U_?Z4X7sLQ2Fkuu_PmKTlMhh<}_KhYu)M*O*EIG9^XqhG?tzV?8$6=2>sbumAU3YYx-5GR2JeUPZ_U(K zVe(YW2w}$>H_pQFx*P@_(tAE3_y!3MtyoUnZYJJkxi$^8u*OBGlK~Y= z>W%VAbLFoKHNn@z=nx=kM25sZVl77*)A7YC6$a!`FOAbx+Lk|GNr)9|d` zf~4IM8-`-L2ltYmx%E|*C%`?u2XIHfNpl+5sWsgayDL>namTV^HggZ4_FYLcvY^2n zd8rU7;v5u)Ne1vzNz>s&Z&{(G_k#Y9^u?S=e@l5q<$S zhseHE@6yx~fxI4>X<*X!Bt(&@ci^o-qHZ8BMWPnH;*`cBvB#j#6ZRNKbRDS0G*8so zOl>h>^Dg!_2X6yjF>tnBzUPX9G=s4Y4x8Iol_4^5x4f0%th;h#Oe6TrI$$Jr0M*D( z#B%LEA$-r{BYf+~)=fe*A~3SCNr)fC{3zlFMmF=~;UmP406#FYu{nqzS^UT}uh`TS zXJ{~G%mrRB+r?RyH*XP9#1Ap$i+FWKMdfb zL}cgAab#)gdd{pde;6*UQvXN@hK2I7ROz8A;8KAr1fLO)uY_Be-s3i!pxzIZB+lep6pscac$9@7 z9dQ!1llJ4)ub{;TfOgRtQyFEUF$wi{7IoF231|5#Pi)JKeKJ3J9om8pZ8MXDR-RuM zc^@`2iMQM zcJRiTrQvA77VN*@MmCTI+^(LLj`EBRVgH;B2En~3*wzH&X7m>9yy_UL2Ga(Wp5?3h z49X~e0H|Qu)dpMRa%&F&yW&ihV4pT3{E}OHD4(95c>10^?aikrC7!-4PrE6@FCFU` zo(ZQD48Mdnk0`8dbsod#qKYuQf^UW4KocDS!$Ati@b|vJ5C*@S;yV)v7fN#-;r2B1 zh6c&wgg5lrS%4f%Z7Wl_|2Fuaip5n4EILS)uI$d`Di%UfXQpBb@$q*Jh-s!p76NW^t) zroa*kw3+@yOdOdFKY;q=lqPX+1SB?6eV!ufGtb691(^#yWS$%?$fPMU=XuDS?2v)_ zB*a{s?6QT5S^Z9PLN4l0LS9NT-IGjr$d7sKt>%25E@iJk*?0-WeHVRvnT74x8kX`A zmJgsjz$8c<5m&Hz#^0+3h;B)!qlMvbn zefo|0NTtSC#q8c_exsGDZ$yu+(c9>JRo{VJP-4gB4Vp30SM?A41%cTJ@%@Gqi#$m+RvN0CYMNEU9{wofIz zMdImvc{-C%A6L3bClV_NR5*KDJ>XkaIJ;i}X>Hx0rNWucSQV#>DR%O9g7xE(?D<2) zkeAw6g+q?DR5;(L!g<;*Avyq03xG!n;B}BWSv0J|S^P$G*)NwGPqGHpYwJ2^oD_N% zg&MDcKvD1PNsK<$01fU39EITHK~nhzR!*+ingHEzE4uw9UmQVttUy&&Skco&M|>%k zmVXG`NF_thrOg!2uy zA}7?9>Du(IrxOD|{Z4JVrq(vC5O{j?WFGH3k*7BY^7LjlPH%dq+&%*KbbxJq=$93V zoisbL*wX?&zXc|Jespz{e>BR52Cwj@qxYoDNR){eV<4$@-7>a7t(@>*xwQu&{p21iM{w4LNb`Ym$TP0wJlkKPzF{`89c{2h8!|SU;<~* z4-5@Plzr+R5A^qtR;bp{$}6Y3R;FnyjB7oL&GhCsoTQ`833NAUQ;y`y47~KO6sOd?NcWikGBz#LJ_T(G z2^xm|kA5m7 zami!6jdaDN-(#?!y(pY;)Dw($Uhy;ZUEn^t`sTH0)X`(Uv}-KuAj?(UKhnE!o;K zA+on0gZo#K@+}~E9nW7i+@SARjoym=eI`$GE!2}vuOM9j_C~?BHjVE5PBWTZ*q2PX zM=?$JFnty7B52al!*t=ZLKEa%!Q$Jjw@KICZ!0GRW8J~*;lH$pGxA*z2f&pC4?gxpvJ-kJg3;>9 zYSDkP>s2DT*reoAl_rUT=`hyK8fQTY0#*tNfdO>gAhexZI}CK8^8*n|-4X&eG5;dC ze9#?c&QqK6FL zGG8PofrNEoq8~bAE9NK-hn9B7-{?9XMc12=wnjoYp6gA53}kO*a-A@e97+9)eEEIo zs1DH0Pqv~pB9L0wZ(08-B(uVyV<2qB6z-BPfQ7m4&iSr0wI(ZfIM5LCXJp=Ik2VuMC*?bmn=@htRO@1U)3;OLRoKY5~A>zH3FHjQoB`*JkF z;@WU-?UDGKP4Ca9qtMjA-rZ;QU(oMhg2@AzX7u}_7kjW>dvJ5m(Jv2fBj`85>p{=v zJ@_x$@5A<2;-gvn7fAbUlz&~l_E*A@MEk#U1PKN2db}A0|BLqfO8;B7|HXmqehmTYaW)F9CI0>F5 z`0z7DTllc=W8TQdItOtrC$1P*2pYL%hnof1y9#WO2W$(ytytfQ8))tMZF4IJjZP-iS()vVS|dCaVE zI`^MP5Q;B=?CbUI`-hNcU>}@l4`$LFgOu0d|6+^q6oHcOLFuVb+H+*a{A&(%6nYd; zY?T12VCn2U6w!UKwJV8RFZ=pneLXDkx(=_=$GV|_DL&>k0Bg<$MB%!1XE1C%)^k3_ zdUaj?;CD(7D1cQEU26vJD?6Mzso__#GHV5fKEJ4>IP^0#pHk6)&D0jqtvERk_t>pS zKQAJCci$R(Lq933 zgD&fv?W;Ni5285kU^jnOtSsVkvNe92KeY6}*H3X_`hL(nJjBtwEnHiO#|0b#GIMze(S-qAdM&y(8GuV#VuLi$( z-<#!!WwB)j`%Qnxa=H5`tFLtTW`fIBB80_5Wqp@?%#jT2!dyBr%2{S0RC?}sTsb>p z5cb$c29bX`rK@l~pz`!+vek0hSA~cSvR=FG8HiUhXGiiTuP-e(*F)+(ZeBmw(f)Y& zz2N424k_Vg=LbA))<~6R+>FU1<)(izhj_v(I)XrB{?Fm%nOE+&20;8gAeh7tdw-g2 z1}errAW5f#EM*bD<#U%uZbjO|3-7~j+KN|k=j4n+Ag1!k9h0=R7$_|ARbB=Kjjcl0 z0Sm09{|EsUegzBNe2rlyeA4`c=Bj+lrL#~GQz-JieF_B@;B1QT`oJ%%+C+Lm@Unn` z>=p_lf!PLb&wc-1Ztgu7xfX)~H<@FqSLis#J$kKKe~m!*BF-0dBfS@4^u!keXEcJS zUzZ6SMyRLz^Mh-Xw&$+{+tJ+sHbLDevR95z5OlXKo~JFAW)n8k>EI616PZNAKDPV#yz*qGkW>(P^j1w1yqsj<3_@F(D zxi!Pvo^p|Zz8Yf{19u;Q)`7kXJ{^Q@i6ug&`3LAKBe(G(D;QNE8Rb*6SBW6AR}cCb%b@*Z_g2-EMUv%Qh(PVP%h%} z3>tfP_a&+6GkTl(Ua(tnvCWp-f@Od0wt9Z&gnD8-D0ci*eAYHxeF(K#cJ7PxBE_x5 z#{VEZ^TYFG+s_j}N{$M-D=rt0v7|GKn9?kua|vQZF={}hO(&>ekp4ArK21f9Hx4tj zbH|DT9Guj-f3Z@`UxM=NTp_9mHF=roSgJE|N1)6&E09^`L=%x=hB{pLQLF}!U)mcV zOfxYkv}y%44VF-`9|d=j=H>M5jr%TFE$36*V~fAL<8Rn$GcOdG$F0J?yfux8wSSx& z#f^QF`UY}q4`EZJR~WMnCRL~==r=6iQJwR6#NU1(ZM+N{1ALY)H0eQ?+fGD=jW5KY zv!|4R+W?E(9;#JykB00Kvs3qg zS)V_{?EL1KwR4!!#Rg`NVwA<7K{%LvUt%%)kLXomQ+oAQ%phGqTj~1AN>}FY@PcH?R@&p6rfY&Qf3-Kyl zqVZMTjvw(=_^|6EvLc3!sXQbOm*n*jhOW)Pi{TbO8adqi!cEtukmLyG6==rGy?Vg$ zPVc?l1FgqW%LdvpZvJ_HnvTa2(} zOL3GLO>`+BZpEbloBIR) zl4kI)6Zo>`j`88a|A-zQ?&0>}KYf=6zh(Yuf@$N|5)-1Lawr%Oka#v}qx6I#M zM0@@?V2||_HWKp}vq|a82()Fr0guGtXdpvUK^CUhV&fr7jz_N#)DXJ2$oyC*Qj3Q^ z8t)e3J1@Z!p0&~v`kJ9gL0SZs!JTPtc%Y?+(&t z;U-t!i7u&qwA$H6D5Mt5R>0qGPQ!*AtnK-#1`2(HTXSO*(N(5jL!N-@;94<|4nnIP z(W)f9L$hgWAw9c*7ShDMVXrK97SdV=e+dH&=BdjCzGorj?nP3Ig>)DB5e+T@?7>!G ztc6sUWFaknKrE!i=uH(WIC|}_yg_EEhEDdG*Z?Nne!JJ3n?(Y~-j^YBf9O+PK*j*s8ww&E*4=7!>kTED_ zZ>>Sw2@Vavjl0Xbe2gN|4Z=;>3<2)l+$z{b_Cgc)qKU@C@na5tm}wc{>_IGwCmr^&2zoWlqqhSE<^o@S zqPCP+R4M8}<~*#-=?u-R%vpwQ+hEQqwzHXL0eazSt0FFZ7Bhe)`RbE%yOMJWFV?cE zh=*Qu7fz8zF2~Z$D)jFEM*K1xtVoVuBC3G14hQSO0AJNq(MU<*M|Eu=rhgm`q#1r3 z=zOP*svF32fnvjtOoT7G;~#jxhwvk>SpvhdfQ>c+IBPxGxuu7NGFV!fuvWs4``{0R z2OA0)etZXAVfgWN1~{|0Tc{6K_Ih)(P!DVtDlMz5kMwWyf7PC(m$0K)X?9!C&{U8f zS1n_`eZpG8^g@pNEwoLm@B(}8Y`CKLq zHw!YJt+;^5$w9{9^0ZlyFr;$w9_{xB@oF`211gtei~5IGTahk8t(O`?q-*O-2SseZV@w9`VbNFNpL3 z3AEE}Tv2x4@bH^P4VvvNp*GuNd=8V49dXZ2eHvzo5D+&(GqZFld&@zS}I4 zmlXX^O(A1BDlxkvq^Ga?2+FE>M=$_7PC+OV5ezgs=}x`jI2(5Rb~GKA}E;o z9cI)T5Iis21SLEhGyemYq^%{^$hebsDVZ8MoATkZf3}hg<8jT@RXRf8CL5*0*#H_# z&e-wt-yPu6hXgS@tUT;&FSq^9UeZ!c5LT$G<12lPmt`9}JsAgLJP0SGLH05P!Ew|* zFZy{NGS=a?h#uV4>xUx|#_UZ}ThaR=zZ)_onY!lru%3@F|7@P|XAdi`cvMZ}G zvfhWkMtRI~67YB|$<%2Ho}^=_zKA@@!Y(K5L?w=yxzTrVH-|~b91R;_&TJW1iVMdl zE`$cU>rKtUd|!5{(;MRFa3!8$FzkP!YAXw4Q%v_mbvOnH-D~JFuc3$T7C;BP4tuGh z%n)s&qcFnD_&N1A(*Gju{ULo_@9W`9qWAl7K&brB^?J`zlp3M`Q?y?+zD?{?!pb9)Qx8wBXqc`H%#~{20p*k^I8=$)eXe@t~yup%zLA z%ADIpK>Mn`73zcP(j;GIo6lnQAHb_{G?q=m#R|%0iE_Ou{roo(1SAjR z3MXE0@QpPuexc8M@HueN=f!5=XZpOYm&vJ*H1P_W@KV^O%cDdJ+a;M0fmrHkGLiW& zg)1!Ggiq&9dY^13qW=aItN*piU$n{zUKKy8SX(hhmNSvlvaj3o<^l?iEIo-Q&;Zgr7mOQ5UQSX`TmvG5mMXUhCpFcek?kcU)8r^J6=-(cGp+m#^X<1 znXbMq2fr|};ul2%$_&4<@QcC*g?J|S_<(7Y!6FV?`~hj9P~aoP5Aav)FIlZVlZTGa zWRQKGDX0++^8P`Xw?Hf$vuVO?zp!tM+E9RC|w8gH*d8)hxy5O3oFM{I6dL z$w^!8I(~Yl+N3sMhD#p>q9CMQ$Uz^AordTJ=(a{0I5WKbdsn}F4-t|g~7Roq}UK;{P z#$UFZQ?*=VV3Owf2uTq&BYk`lYe$1)L#t9CU2u?sh4yEBvb>s5D4?+QfYA2oY_pU0 zl$SHc>Pw=&-Tc(azWf6{MEql`S$>4;j6CTW8q{vOQ-5Ow38spVZ^Q?>T5P*o)S|0% zb<@AE>H~#aBJ?7$Zm1O%;j4OCAXJsJfYPf>fXw0pVb{pc%9Z(AlGDGIoKM3?3g6%r z?jeQCE(=GiYWPq<&X;v&askmB3-$Z8VigQWZyU_J7@(Z#1~yK%CeYPCkru(Y8XOcOhiA!5TBy+IbhkfjG!b z8w=-AQX&P>(b>`0tJX!Zovcly8+Rk~aLWPc)_%aYF&#fT@<&Jf__ar;6sR49cDgh{ z%QCkD)B|o^;!5HC8zfMtW;qxTke6r}Rw5S9uQ|lZ&WoT02&`uF zR(d7j39~FTnmfBf3+Y~e?5j&atEA#@9a`-ijD=V$Nk$a6Uy(>k2H(L6Xv207t>?x) zLVL_XTMxmqJzY}L5x52G6CFjm5;2}qzoG&au{i^M2EFP*FN1lrAuo1Kd&6_Ll)_8- zq{%<^hxQ;xmpPyuw=O6LNdEm>R5k-`#bdSNP^~y|mx`a1OLVi|e5pFjyV0)ldzl@C z{;9_t04&9t{0g2RWZ^K&yG--Ko>{d}H|hJTxbw@BqmAuzD~x~XlRXmmR0r)Eg|-&N z74&6wV8&_fy+fQ&l4p=>+S$nKCBoL1>g2y%N-^GiP6C1>h%+w^&d$ zGsI3~#+E4!=AAQbxi?u(*Jpb5vSJ5*;88=85MMoA0@|HXLYW0VU4izc1!|pUEy!jV zt^!TQHXvbnG+5{AB?Yu$p<>9eDG?h9Xs?9|l7RNV@WVXP#s;*}%Ps?d-Am*vQNw&V zLs)Li_kE-#kL9;+AY;Ko^S47PaSzO%@*B0@W-TX2@d0YTc+M0>v>NM@Yr|<7*^(q`i(CSK$RtvAUnw@bUI2hw#wK2gC<33_? zT7B-F*OR-lm^c*oV&Mz{6<|vAom?JMHR6sT%{nYdm?k%@Q95tNSb%k@UKjUbKr8e3 zS}eb<`Nu(4WLKk*_-wcY@-4Hf(msBQk7+rg6#)>6-rlzye-I!6$w8&nr`zI;4YGtz zp5hzM73UimnPF+xVi<3M(q!|1*0cmV#R2UvKsCFMMbUJ4&e{UJvxx}SCBx$G2Ouc& zry@DR3W;3IjN)sPi?6oDZ{S0b;O@3KZ(t?#hUDV)THJNNo!RSkC3Gc9Gq|!91=M)M z9BuH2JIn{)$lSf3rPUaL{RW=pMmK<6>qYQTiM7$RkC| zY=BQA1vN}+dBfcc8_eWq)RVi`u|?M0H37cm2=RHgos2W&L$bMtG2DR_c_9N``fqO5 zQvDqhEG)9X8fJtwXSKj;5tRA-TMofrFw9|G#k#p6I2=wShTu^dPF?kwmSkKN@!Tv{ z-xeR8 zJ_`pG=u9AfB74#6#MO8Z1w(FENSx_-;iQkPh!4 zoKdX6?oJyc{)qi4p^6=Hx(yV~SrLlmw#lz8&;6vA52s5w}y_CpezV?hMfm|86_%)+ja`cK8C8=&8X{wrMT&wes?8uZv~r z(#6;0%YP&sSM6e&>!Kj6e0QJhPi`#GG$gNUO3Kt8`4`lMFR3d(txbxw7H+pZjO&Dw z+8i%!N&*nr%4|v4{vsStQ1^O15VGE0=A@97U296eFp2WIm&Il;0r_wCaYQKkdTw-C ze!tg2HLrj{=4wP|Sm4lt!E0yw!h@I3^tQWuLM@!51(!3bch>(~eh;yL*(lPciJY7CM%sxI@*0s#G z9$E?`yIp8d$LUVGZb3vSx0Y^f<6$-w-y9h$XctSlge&M{r*LjTzWmGJ^=XgpxrU|| zKv?I_i|Z%x-`j7Lpf46lV7lEf$!#vmDW%oQ;5j-|qQSs3v34gaT4puI2b=t3ffg!W z0yOLv3euJPn}3Py3Za`qD9saqP5vHQd+@Hcm!LKYS7u&1Kna)Lk_(nFjPD?(q^#bt zw`28_KMJe2c5$qpjUKg5n3nbsg^r*MdJqAT{wQGea!A&Y@b1I zA!3FZ4l^_-z^1*mY?jTm9Cc719iWw*2J;drV7L3u!QIt4t3G#vJ$Ck?bpoitE^a5ERj zN|zIh7=55XAQS865_(6KeM78oIrbV&CC5VHSdl84<{W$aFzHhy0udTu$$suozuffCPNhf76sYwu90SwnwQq-KEP@n;^F-Z;9Me7Hl-# zt_O3GHA7ZbWm1XdF8B0jzD-quTsD|Kt{Gw(Ie#OG_Xfw0a3w|$7Iy40{PJ(v?6|T9 zq*1Ocr@Z0Hg380l9v&kV#|1=^w1I^K))^k><77O6(uJGtUQ0@JQ_DqObA{cHQORSX zNpjUe&>5|^eH-E;yu6rr#8QnHG#d(ZY!B9d${uV`_P^!DT94N%1KANFb!XRur1Te1 z)J0U(k{4y-3dzS2=3zR_9$2PUCA!=OW^U1|q%h4ipyx6NUkiSR6Dd02CTaI>8E(}8 zR+XC?Z?>2oA(+0+aeWKeny>})7-zVn!n40{ScvA)K|xCj*QzLf=`Vy&hOzf4L7!c z*9Us|oDO_;zkl7r|9xM;-`))V(vOq$!gF3Ev!}v;fSabIzdu~&!T*!}>$a_1+16a! zmhNBwtF-k9`l7>V1e=ScPGuv=e*za#+nSBGJVU{r2WWl&`uLuzb)AX2=_B^$3AC{L z{p;y1#y_WpatM#Cq{-HTt?*-4fmfVi?Npsf)n@JZZ%%fClf0OAl{6hgWEpDvGEN#I zIP2iFp^wA8#k7Yfi@m_)h#dHsI5fwdz2^+nv@(>Aq?r+?Nt(W zq5$EF5)*}tZj?1!X=OTtl%NxK zOd|BJvV{W2nkBaPL}}QbbM;q}dooB$QCMg>i@-L32frl)y zt1$B!eYD^jrh}eda z@jMG4nG`rvzF+8@f$!2oAbx#-GJ^BEUEtM=AQ2T>+gHhTWgKOB3YItzOU8yw#V>FF zd6ii1*=z^0E@ppb!t6J94HkmpnsGp(IF3bQ{~T?{j4TIG)VWK6UBX=_*r#QJL;$=E zc!MZmgcW1urri9fnnBZ15N0lS3zh>er5?cLaEBR!k*9Fo*h#>JXN~9#}4hm`#MQSy*&KG-uH%$oVyjfY9Qte%mn{{ zLuqEAkKsWNl6=0ZXPtrPZM0}B^_d$K>h^apzIg$vLbUewY@ibXMuuG&;b^jxxm|?4 z*cm76jw<`Hlp*fUYb#_(Qn)ZA-NqNI0yz+PRn{0x+}Nke?3i4N!02PblQrZa&(q6B z1sZ+-#uEsjuTo>_8f=ya_u@@{#ULE!`5)GT>Rf=H!d~}P&c*|bU2q!PUwonJPNaM& zzZ&*9hBNk{X?UGu+T4ZZ`>4TqjhvcfAby1nD4=5p>{7|CJ)6#ib@txXc;*oLw(wnh zU5L2|h8$aheNs*gDzKssHxD_bu;VEuGF@)`O5|stLV+MBg^^TZs1{M9~ZAXP3 ztA`$=6he=ced+WV;zw2UKtWy<;yJ3fo~B9xv-1vxcl6jbmkIpj;J^jm4((36_JBDF_>A2J4G+pqAz(nc)vcAXjDYC6WBEs}BReI! zA?M9RFZ7bwtbaBM!j}~kCO{pPX zFcm472JP{(1}3uzy)&RExxbZe`sU>)>i)h~WV_m2pCkG>x?Ek~?vvH^bw=q~(kNZu z#(d&f2KrRM(kE%M?X4>132O!=)a`A$41K~#2&H&hb8i7fpBH#{1l}%b!DP6E6v0ts zM8%6D7!ZjwfxoY+gVUbSap?@{eDxAa<9d1s9@ltsai&gmou%tP5%ED9ZEfXVh9za% z?#MP`srBBp{V7Nxa^CpQWc{f5W3my8L=cjZ$n6|22>8XB>!l=A^-E;3HBRvG9Tmao zt1wQ6nsKT@A}%`KQ&8y(RFqfy5*wT&Bn~luDSSn#Zq9J1(5NYb5|h-DbWxFgq$x5K zE_h^+Yc$ExMx!U2uea#jO-Yz3G}tx797$4<6T=2X%}fdyDQGIFgu( z*v*622%M`qb;+D}@wwtbNg^W7h+*704qb+c1v4Vn_G`;Yid?jT9i8K-g;1n)XIQUo5jtRA2oxecQR!0a+C=hzLu{Xs}}WA+EwKmyh#c>q(_kjQr^-dA^Wc-O-r z1m5p(ju5<`oM4G8vHhg@H+E;Mm8+LDy2%3H)UIi=|8tl1k5S(G$9PppWzugVUn1>^ zwcy>Cdfc(>t8dO0bUXr!k3@-e8E=upP7z2FCSlrc_E7NJa~xa}s|8${^i3~Wp!Ut7 zqm}^LeGfqIx)!1cj+EK`EX|Nrpv60d-1!NBpV~#R*04O1Sjy^4z&bAJmb~6_lGSQ! z5rsi)K-u(0nq$+kaFM~LJ8c`8CXMvm&9aotc9_3y+HlTiW6^hr{RcQkA_-eQ&dMrQKSdCK->_4Ai56S4fpa;SeVaYazIOUd8w7Y~|N`fG)*R(&;U3trY>@ z+*S+G-13AN;}$}U;z=U>tkBdq=SD)a8Bx@VgcV#awdH&WG}tR<+Yh3=N+*P)Ya~nx zVkSP*m$_^JqSb%6)93mJ-*~-@z`xH)mom{zIxiYY$}O$BQe(+1a#z@)?>n(;xYhD*~pFFkT+Q!rXNYw?oy zDFyA81HGStW+$0jqRtVLAwq}&Nq9XJnzcqyDp_y$;*B5Qq}5=4nPy} zV7ehO|3>T@SEOG&+aX_~k&L?OR zj*DSHxfwIQnjQL79iuN(9YIeaQnA#*-cE~yfg1;X^CetOvlX=&Ia)y&R?W?TtPmI@O@eUfj{@Q7NH6H% zLdq>vDC<%5MJ1cli51`%o3R*2v@P5rzwNJ*;YUFjVH5t?&N2M#_k`h(c+*ezSxy+i z^8iOsNbDq$fxr^7Ea_o0dL{4oX*GW{cDQ69$KZakQ`#`$R_!70=ln68<QW4#rz{F)9}w6om}W63&?u2L-;U2@dO+yuJw367btgkbN>PIK|({tU|g9~mbFKiVQDEK!7#{s9SOiH zY#K;qK0YgUl)7d3v$^a}{R$iYIzD$=pll@x{0KVK_!p%`%%4Xjmk5$1t}uQvj0MW= zC06qWq~1NKr=vQD(JAD|7ZcTgC;UKVOc^$FIByyos7UPusm(bSs>9}6gl}?dA0#%5 zRHmtVU5ALjZGM>)Ood#4s4t{AJ{-b!vG0ahh+OPABe{78$bKimyGr0SDPJ%1;H`tl z26*i}cn|Lpp4xlK@)e*-%_soWLM*ob;^gw&x{jX0s0!};56LZHn^5|Bg1zu?5 zbY6RD@kj_*4 zwnGm}$w4ToqPg%7^a=OW%e>=nfj_) zO{Odu3)!>cHIRYGIkaqtTTZV=@F%wxu|fh|vD4A)2nBeK2QUQylO{xgDcr0^oR-Q! zo(!m~)(JQ1S%RaMpDw?F=rOgomY?M8t+E2>F}j4b5|Uh3FRolYI=C>mcbyI+!!4U zlVms)Lhd#@6ru;&)|v{jg?w{fhFRyUWO_P#)Z`QZ2~`J8;-m?V1<3}{)K$RO-J5Ck z+bC(rG&_rfKxYF^24$O#?E5Z%wZ`)`YPk{b_nB! zaEgfe{|R4E8?HnL8=);E%iBmhfq(&Wsde%(qEVNiwZm<}qxVqoZ!d5YiY7Kjcii!u zU;y2zGiTP*0Qb#d)E$}IgLUBhT0q0N%oa+e-t=l`d#De=6C46forMRA>{%cFq1>P% zZpID3UTe00FUEc1OwCLWO@{uO9qpT5Ov>O)&6F)_^(NL*_rWo4TwnvzVc71y-3{BT z;feyA!4_tw$p_Euu)SL^T$r`89EdSLE!R)a!h$ju9^Qd`Ey81@>JypbGO3q@_)uIU zY8vvHgm@K`5YI$U_4acvme!*h7fT!DTS@AxEQe2nt0+$aB3Oi&%=k)d;P_WMH^jTKB4>S1XB#2ekw+ii+Sva)*Kmk=uY4d{y_tG?3}Z8|4UXiHKr>mmW_|YpTM;Pihof41;uAacuJ|c8_^>4-P~R%OtKgL zhP#j@H2|yeAfr|v>TEK1y zmR*e}O+CaE2ssQTGRKkIvG)832*6y_-EkaSfwTg8@n1w+iLAsqgqJYzk z5_b)lhOb2Sd{xKbQT%*-*myGiIoPVIedy8wLbhxLp#Flo=AcjZO8-H#`B|}J1%IMqCkh&*s|bP!c5JXQ7OVs;dB5M8-Mvc!`2WA} z>*o^_p6A(_+1Z)dnc3Ohdx_(MCOCQsj^T>q0FPsm;%NBZ;W#^iBdI3YcLsm>cw2K! zTa)k}K)l~WzS%dePk#0}_6-pQc@Lp}l9+Hmqx?$kK=jhL4THTMU?#niN0@KBK6$Pt zuYG)(Cm1dRhHcj;Yd$RVlbqN)Iq{JoZB^+I7GSyj-U+citFvRZ*_B&|<^*#-L0-8u zmG@6|;{SHyq_H2~<<_^w|0AWtavSI84S4&iW!VrIQ0enqi?9j`$Mh8h|JgOKb)?Xr zE*|Sk_3Ux#eh7oX0`vDE*HLMmlqj=Iw)1t9{S*|w5>%)1?zkoJ<;hLai8QKXp)NaO zX3j7V?GCdh8zPgFF1=z2EbyBm#AW2zu>_EXy-S3H{5eCO#x{fn!FW#l ztbuyds%YeBTv%K73`s6hl1sjGB!7sIjq<}FR|Myofd~THX-3~#(f-o(c8-C_+)-?e z`;jFuPQ8;5r0G>?Dkib+3R)x>v#N9PhlTRnED~@ppw!Q4A^)8AFv*vucWquoFtE3C zs(u|ne_BrFteV9ki}%^Y7!zD9PjFGQGZ2sqXwb-3vk#&ya4{$aYh)oT-!5UievPc> zKBUQ5>mw_*0_#MfbRhei@azZH5nSq%ufemg#-78Z3atAMWeAA*D6xz-G(l^0BzVwt zh%hB{ZMc$Yo}@I|s;85NXt@DCk*Z9f1iSOtSK)IfptnqYSeh);QN7PMNzo?v`X*~Z zj}FbXGASet0QIA*baaGE1!sODw+G{NUL-c9Xy9i=M3w)vzowsDdVh#uy+X03d#tx$ zasr_Xyw`s&up)_FC)WY+$ZMSY$Eu1iK14 zOBDiKQ7ItrV7>gTNaK>ofPb!fol9~k3|NlyD0NBh!&NforB_%+UGrb^b{t5qdj*4T zpBBl};dtr`GxO!qDR=~;YQ+NwR;c-L8{L3BipbAI`};xIN1Bup%4l})kS6u0*|D7; z%HuH+Yt8&3-A>g5caZRM`ERUP2xr8P9-F8ZINSNsuRlf7ZzM&celKpIBnC#2ws>kP zh*7clwVxg1`e%}c7x@$^29D24#{|X`6g$A+p_X&jYqpj%DiLQaS^$?B<($a8O_h4# zCh3+}dLrF&WtP43DIP7Pe~o*2QV0xENl)#nk4aH@Dibf8GFBKSuzk_Dj_th>Yog!#viqV3tKv#Isg^Xp3%vgn8)fph{=xlkC1Ns#@R=2lcLg-^pz6@7r1boec ze@Ic)$N0#$S|F|J*y?NH30pzjz#Z3WDzu!f9#6E2ODmR;)jfm%DXkntu%QL587tVn zwAf-iMcV$3kLyb@WEC2^7g0>g*-g|#frk1)3N&LoKrh8M0swU>=f9p{=UbuQ_1zh8 zmz(}b#^M9FbMq7VpdCI?{a!5-SKx8+0#f_FK`9E zS)KcX%IXm!t2YYpX0m#vU`YKKF{PQ;7v)EpjrDEwV&xsOD;IqL0q7E(1XUIRz_{;= zZ9+Qk^gbZQ|2;_Oy9mV?&$!J=(`6x9$1}M{Qv#9V@a29XFC_(fP8JKfkMF4QH+>3J$C@~=~Glp z-1$}809r1wS$S51${#r!Y=_GJq>`x>Q-GX3M*12nUq3&FvE*F;MqU9gB^lB@RF2fe!Coe5wK;m>QEW# zO#Q4!Efcwz4<}{xIcmi*^<@g8}x&Y zgDQ?17bZGXzU2zwIVOlL%rxBGsSOJ?8yNNlA^b?kCp^cquvmv@ZU&G-KN1_UiXF^a zOf3cGQY5ShlX(-stmT-$<0dLDXT`%D7Y-BDTz6r;`UQ-P0Cl^tJkV(XI^8^p6g-Bx zF91#hz(#t{grM6q!qYvKX=bM*ly4z(0Mh+X7nfmwYdS5bY+FqD;V*v%Nb%JD5v7_| z;3s(aF@WdwyC6M+lSjeTy0%EOTaB9l5TbG1g#}@`2cOpMYNvim_vicni!B>Z>O>5K zRZrs(8aI9q<8R5xaFPahRl47V*kEblYFlTQhFJ|rp0d49WACNsrU$@kLPuvb4`JRr z0^vwsXIF~GY)3iJw%;AD42zgeuuGi(b_X%G$MJ`4k6CSp9_O>i`yy{BQV(Lj-%opt zyFHs(Z{)J6&oP2Wmx}G8RYC|YkrA`huFKp;%Y6tThXDCd#)XMNhW$?(w}#|vY8nIEC=T8vP{x1A{SlyCcmxN+r)(S5H)+nv#t z-NN}4wp&MU_1${zLEEj}7!Je(&#_xPkj`~$*X?vGJY5I(*~1dz{OJ}kK~Ix}%x_%& zM%3EH)A`fIRxr+3O})#XX5L*dntdHL8;-}{tCHgA5b}@olhyZV4Pvuv7)J|k^=^KL zQw?xuBZM^B=xT0kp+Cvvlx{jENqX{6Z;S$TI~0tbk2#>O7idljnIC?DC~Q{aK7y8z zIR((coxRaBq2H`Ux2=MVMH4Xz%an!GF9Z#v*_b*8;^rfuGmoRm>pE`nuiz2Ol1QWBBUKW(yJBDYTv5md{ao2%y&BW6bHVVxPz=Y(m%_za#j$ z5kIT(lM?t}{MV{=;^Q`f)@@V9Onv*)wkheKw@o<_KXdSN@fU4VZnr|3EM@4e8o%hJ z8n`uGj})lXnlEfFMP3B{C_cwI@i2^q=G5=(^8cfv)UZ4#5YCQ$h%Dq8^VI8{j5o|w zu$kM`j>sQLi?(J6>R_47yNHQ#ZffVkOo=^u5??Pd2f%6L7hx8Dq2_D3`Jzsj>N55G zD@FF*Troh{;Ewg~QSg3QH@8*-GV}RA3L>#`bi=(=5n5_U`LzfWR7F0UAu6(g4=DEL zC5-nR$~(zJrUpH3#u3dbG~s6mN8!hQCIDow4S$#C#E`=NSvC-_hGDYYz>0737XJ*> zR|zd0YSnVhG?Mv{lDTq?Bl8#~bC@S{mjsz(QHoWmM?mUu6-k7v!&RJ(HOuM7j+h+2 zi8+TCkzgGTBlg7WI$}QnW9BMp7(cPCxfPi}$rY}_bDH4{3)7S?w{N(bWqVcLyjSP^ zZ9lqOn(I9-GSqX^EAYsUHrg#QnYB7p$a8VDN$;kOI@}}OaFfzMVFxhZ4Aswcm^Y$! zijo31nj{JUv+7-ah?;XR7=n9^Sz@;@B*fyvd&qC*Q6UyZA2@z5M!X2i`2`<{SUlJ> zNi2$VEfL#Wk~p87Y{K8Ve;C&Qu!Lta@=fJ3Jq3=NY4c5CKxvKha3isK3_kK>CNK8# zdi;fKd|oVWr2!)=m~HAYrRk zbF7bSwQ!kl5g#NMXJ&i?pGB~di_N-C?I8gfNgepub~x8o z^MaQXm_W$`6l-Vmi@4MI&xv?7aUs=&`<$Df=#bctkD|C)=_QOyCw|YXypY7*__#~r zQl9c+PiS_ zRz3@a4ivb)Mk>v?C04?+s^+i^b2f~%C`*5fGy=^Sc9_}AAwAF{WdlXp%_8k!k>ZWtMu}KjkhXV7 zRWngDMD>iA!HX@re?()^@kF=lt!}d0px{n8phDSnd7j+udtcISO9o&&-HxInfNFCg zRTEuiUM=<>yL>4u8sD76$&fi7V(X#U%8udwCw{DbJwh;*r;%ka;Haw+eb!DMXi>EG zH+IxcP14NQmpjcofH7`7aOitZGaJ&pX2zvSp>R1c**E!-@nAe~n{ToRO{^Nm#TG*o zue?z-k-CL52i%DR+nnEYf2}WphANJF#LaIFnBNdk#l{z587(#%iLc@7BGtoJhUqDV z=Ws!-`oh}E#>TRp27DpvR8P5YGarv<F&l+pTJ! zzo0`mDCv#vR%>fr(saU(4WErhXo!nCnOZWhz(|TT=#4k|wcHko6^W&0iiIdQ-k?ov zwX_116f;{q&*0>h6xG=1S|OM!_6r_x`U}sFpLn!6D zP)K3Hpi_y-CGnHHITtKnun6UIs9u-`8eg$wA1RQ-b2#s0nmM0agj}~kNBOz>%5OZc z{9*oG5zc9W@W1Lz1*4y$k0@=P!?n6^)fW#&y9gCYePyPeJyp~L9qNZgt&;jW#G?KFtG7F12eEybkC%QgBIhr7-tZ6y;Tt`yGP&x6i_z`E0dV8-4A5VRYym(?$BU@v5%6)qGml%XU#a_tV3<%~k zq*Uek*LV&vY!QmYg|AX}4R8VmIl62tCSHK)xL>J-b%VgNQzX)@n8hjG{a&;%dC>%6 z6_P$3k=6V+x~28O37FqrZDIBjnCq;I$BzL7{|kz#J>)Xo_xg2u4TaGduZV^0Ef$au_sWkKPD~u~FPT z9PXY%lQt0d^e~Hc*92C~q|OF9ta~}E8!1DW>kDX<3b0@+*xCv$O*;QGKD1sAJO9K- zw)0QQ^Q2hd=~>$CI7JJ5=UBER;4ZtT8FzKs`91>7wD1J&YIM~LniMOQWe zACU^Ae!=08pepYn9+K4X5)pia5;ad57D=FP9*D6P=$*+)lm6mGPT3AazzTEHcd;`k zZT9vSXd0Rzowa2NY?YdYVn|7SfrU6uATH3-`BD$@10cCi%JpM^=WMlw8j zfzgzNOvo0M!!pY8eHoMoDX;C7M)U%s{8teszoy+wa9==4=>a1qp6%0 z*}~pUg}o~gq63FcbM~&t+dGN*S$-n90g2jJ_*W>t6YRG*PZy}YLrJYhBe&8dzqDPtxXovKVXwp71tjr(K(Sa#q3c)z-{YxkvrT7r(!^qU( z5kHiW_ZTzqLyO=cd5&z1_dSk(s)c>YNLDn&qeu%LR&ObB_5~Ry1g_S;?E0*I>+DMw z-Hv0-;x!hnvoCC*9>F^^740q{$m%y@sDy!0v@dH3RWQ1Nqm1Fh9*ni-C-von(KanR z&Z#J=<2jCkC**l@$8#+OF}$%9Y@_3uN)<9zW?pKLAP~f+14a8r8>}}V-=?@;724)p1)xWXz zTnIfXzb}Uc`Q}ciMVp{S^ar^4u{vCfkYgRvY_Z`HT)P=r5?%>NDL7X~Obc^hP#MP1 zC1NERcff~S2`6-&Sqi68v}2=)!Dv)(h3BxjXuv8w#Ao7rXPM(xTS=TOkHz;E<3Hp{ zl|y!3q#&H^daoDZKf+iO z_$a>GgxC*Pd~a^FFh5~uV)@8ke`vP4pkj+WY}VUv@G#NalO1-RCuJiI!9Lt#zX{K` z*V}BxUWN_c>?yr{nNbhEv+{VenC`zr2zWkL-v6(pM;7hyj@oqa6U%5*w> zy^8u*C?BKRBt*ResU@HLzy1v;>R%$F#8mMeABd>W+0Bc3zBGxcs7HL0XSK;swXR7N zO{}QPjhDD<53}D9R{(P5!g4Jk5l{YK{P&~4FN33~w=3UmZ~woM?|J9|4!OEqPQ)8m zK{jAL2qP9Ko#)u_@vXv!$2f5c8=mj%*>Hk1kt0##fo$JohBn#cId>zP2pj5}XcSy- zz)aGpKOVM%_pch&$9%V9I~w)#qyMf^pM7HyZ9}8x!&Zt~Cu>w6bDhK2T%#shd^^&p z%N)LBjhg8k{D0M`KIX6YY;T)uR2z$ZM;i6h*DCVOHEJzv4^<(dQGLuEim0rKMm_Y% zjx=hj1)tEU!;vEL8g7Ob2UjwdxWr0!BL{AbR9Km;>ip3k_uK%e>gU zP52AzFNiZ6_@0gySI-zH<8P#b&Ut;Jo;wc#2Yq`~z!?J;eM zqzx9T5WZ-p_co0kg3+FQjwv5*sJNY|025Gfzdp3k(#-sR7RnY){ToTXKOLw#F2@`Inj}9Zz&SdC3I? z%zMXn`%#&YoEt_0-g-#8&D76!yZsExIjAX#B^P*ME8^(#9gpc7EV)RW7h-=;R&-o) zkvI=t7*U-esLC-hA<#??^n|s!7DqyjHeQ#cMqj<^bRtqMYIMpRrxV>#(qn_Tm!wH6 z$PJA6bG}KcHo2z8HTk}iSEIP70H&pB#ej&LP0A9O&G;aKU7_k>X5Xz8NlQv|CZ}|dF(Z~)F>8_19rb`p*^W}WkGn0>qEGm}#im6#jx07JmUP||`PZds+lS{5IBi+0;}GVl zG8gs)9og^5q(mEd*~}<%vO%C(#B^!M%~#y;3S23shfS`ZBh`}P9cTP96GtncmncWZB% zk=b5v=V42NAgUlMrMDOXjYA)S;laDIVvR%ZA!|n~va-`P4!uXZSuBXkLqL8{VzwXt zs>Y#bDT=ZKc+r3iat!CwU>e@-Trm!mDGd;OG)G`>lg8o0nWej70#@GbE89`TL)qp?-P z&}n*jJknNy;!3L)Oqs?$%Es~WF}-Wq=5nzMfaMamkk|0OGtA{jH_hUHekHqpzYIFF zxF0?X%Hx5HNJBg|ixf#bv6myIK3iNlDHu%y*qoRihsabJPVI=jV+NoY9HZ!ywbu)Z zhk>I0exIx@;CM_t2jD9g7Gt}|NN;7FKZFV{jW5d4cO-3@-a(hkZgQ5OB=`JHI2$5T zoj(nFKNY4lhskC9j_`N(l2-gBmyHx5^wwPtKmNFtCHr3>kKpg02~V}#MFH`aWh5!dJ zbFK>#?!=?`kPj*wb`4G%hFm~o8aB{HckUX%MylnFUvfJEwj+n|#!BQ`kyrl6w0Q&DWGknJEdO^Tx-onLa5$b6<=doa2i9_97BaAs*I{C{>Zx(a60 z$-iJbj@ZHuo8NVjCohl3%cQF9!LvjjXCjm}u|^IdaM>+!;1n$%KT6TrT<}~ClMEZUJZI%DD3r<>sKOhJ%M<59BNg^T)IY63&1HT&* z2YxTR40=g#j%R+u8ss9{sar!RH>Br4aLyx~>UMRFBIuNl=G_ZdeE28Y^a#APjO!={eQXF|8(2jBY3yzPS9$guGuX5|qa4_dxY?tm@ zS=Xv`SN-1>^lmykiUT6r@O+5wxsA1X1D4=?2%HZYjIP7G`kk!Qe2ITRwx`L2X_dv?g_<0mRXQu{I_S-{$55n(r@Ka&`&3EVQsqgqV zf70;p#?+ z?0+Ocf%MmA59vSB{e~w$ArP1WpGyU#sxT!d&w#hM4^J zr1HewoWir`G(1l;p?QpB3BSyql&*VIG&IKPDb_kn8$%ZIAL#fUoV29lTS}$lH(3m6 zW+g~wI<;wtoj5z6tdRao*GXXs++@SAw4+hYYJRE^_{Ol@DrxoRE1xWHg7k6 zxda$eQtU*>O*#T(3D@ek@f6(H##4f52?2i6HlD&a+{RPtM@tA)mzGbN$Z7u6j@dUC zaLle&rhV~<8?#+7Sm1kx$adQAUbbJB&r9|5+5Ypru9hKw)hpHyzcm?R;n37`_YI_6 zi=P$v`4&Ha;^!p%#PRbOeroWu8@Qa(s$<8Ft=qK4|F`vDpkv2&?K?En7mb%>x63Bj z+|D$EvB1e?E=4bniRDgdA`)dWE8Wx2TM({C}C2?C#{m;&U6 z74~%eGhyX99Td@?6qjiRQgElO+Zu4(z{*p{Dugv~Oto=m8{6lxl}maCt#Lg~Ywwqi4^g_iWm zF^NwyPsVOfDenf92>Nm;-jP7Ef5R8e$MH_G27HZVN+~8LY&ryZfX~ToG(_(aB-NU`W<$6$M!wk) zW}|4n?nO#s({ZT-2)UhXg&BnWM%`3)46K6q=U15f)$Q>4n0jPgvTGgy_WB`C8(ww2 zA{c~X3BDziVF=X7-!1#30C|*M5MTA72f+DwVB>WDN=-osECXgfhn(1avfdpV&&R8Y z3u&grhZ)T~pI+NPkg}mWY+za-ln?N;89&bKA)lO;cmDe}y^AR* zYXMI3gBhtNW8(Ym{MpvVA+afUymSz=9q-_{ASz~d@U`#SXUE>=>}u!I%!TfZ$stJ& z)bg{*o#E&h)Nbkh=#EU~hchI`x}VcS6F|qnE6k->5&#YImrgbOrycAG0_`k?cAbZ| zo?%-&aIS~;Duzwj#Ku!wf%bp)>4PgSn%UWH1L2ugc(m5$r)~ zdOwH<=x&;s_`P>e_Cgb}Dz8%|vCe~!>an0q&#}#}>8s&ALWOlLiHC5`LjIv zZ=uN?;DW8xtjU$R_+lGb6DR8OJFy-o*J`4Bon++)(uwuB?AS6gK19ajU}kzTo%p{% z<(9T(J%tZsN|AY4GfLhnu0h5oyXHj@U4NZlunWnG9hNd&KrjJ`9?se)*n8JRJT1~Wx<1PJA>X2uj1N$h&`XFivGbF z7AO<-!2CUg5Q@I&PD=n3{SeS(c23ao2%2QqtW-sRfFFvYw^q{c_oRQcv6-Sz4g=SA z6kXT1^yUo&GSOn6Jfd5Z8=DU;$AT|AmKBNJsVOBHE6VOtGgck)V01PIHWuVyWkuS& z*JPYR9H(=d3#0fT=r+rmHTL3NcQJuAP5?qPxv z^NR_FEAr80!K#&Hd=yE%CHw<%o>8pL`#-8RJ`Tt37nSbLOigi0*?TlmZ6ej}>-Dm!{OBLS zD#i)Ih}>#X-xB67=zuy;ZO!S#x*M?8r&~hal1FX%XgB-lIeCu-uC>d=%o%Nyr zI8kVesMl=##t;7u(&S(?!SG+}Kl_Y`nO>l32p==kc%nm@qwWK&@x`ho^a_PsbOz zy_ZJXyie4HrGw-+S-*ZlrNLQ&xK+{~-=L#WV21plqcIqxQBZmyN24&MY^9C{ln?~A zr^OV1Is0rJnZk!QJCpR-vN}g7k^yntKT;lXK%nU0<{?wTbmRwUG~=l;uI`KSUCa!Y z0EYnMua>|!p33fW90BI5+uYbi2m!zp9{>LCqAAfnnx;%(+e2Bs24V!c~_#7;hYg#k;j=$rD#$m|efyRNJ#>ZGS5Dy&9Xi5g@ zI&eF-q>hp;79FJsIy>+!yfoDFnkV(_q_Q*k2KfTnYlTBRCYX0`U_QTm5M8|zdCS4b z(vrvL^d%}u(8{#Z$fIoc$^j|k+a+Z~eOP>30ogi2Nxp@dAej+2Aq)h`6S*QGBrjR- zZBC^x0b7r|oY4=!_JO%XU;RygRp-6Jw%>0~7_!iVeeBA=nF#@W5NHUn~nu9qP zV7Nj;ip&L->hg4^<|Ed{O)QYqBA=uG?PLzk6*@FO#oW*gA1y<3xOY|#BQFWU8e0Mw}w?_$awJ9d33u4nV23 z6DCf@z^OJ9@HGkzM=Ib09aiMPaEduc#f0=#v+IKYixf_F%^>CE6Sp`{?!*u@9=O5J zXkQ@{<7YI8_E?BE7(=_>NPaZl7YnE5{e&P}H%QOK~&Xe}D-^Li^y?n5jsI>4gj^ zHgh?E@H!-x*PB*uH^Feu!Fm(lE`W<<%TjyL=z6=F6ke%Y)1Uo>nyMRfta^qGfNhd8 zhZJ{g6VJs0Km$U@-mOLh7ml6K0nauisb;uVG;<4%?E-a6tyYFt0$|AedaW3?3rhEm zg+l<;8-NHSp@s*57-^>}XxqK6?GAJ8+O%j__c2u@f2r9tK}5~h?o2(&>loLfb(XH2 zj1I(8zdsXx(F%57cpXKplD&*9t{!4;Y$U>$tFZy$Yg@YO?;gt%xKS01Ou`ehdM`ji zFy8XhbqTcf45m^Ckd( zhuf3kzl}7EJvS5a-_5Siy%qjnp4+Vx@FTHM2aBN@{LzFzvkCo|2>hW+|Aij@I}AYM zftNh|M?doP1AZ?DpXe> zG~UFTsPtNEO9S%mcf6~gfER7cTqV!8--dE=>{Bgj+E&t2;{PYE3} z^&)ijJ=`nJpEmfLKYj6YC4NrEPePybVyT-?*@=0lJl@awQ9iB$3Ps`r@593}K3+LF z)^HU6L`$%IgDrA2^yHjuvP(JPfdSBS5u3ckl?Fr-+ z4hf~Eyg_PA_32UnNNU{XU3a|Pe=mVlN zS0Q{W-6J;t{f0m0w<^ntG`NFGsF;@Vn<-DmKzBJF8KzcT}dI*96-sF}P3_Oiv z3tHaf)>nw1sZ&74O>QXeMo0+Cf{X-ZC@xz=LtOVDIM0Ksc&$+hEbm6rCA;PYCGS5I z9eJA(XM(&EMwmk0dmki83LJk{lE5b_%EMpk_$P%{!qkL6BV0`O|KD;hOyO#J6|8%i zj()S(C4!ETOa^`bEOXa&>YG1+4@%|8>n;BJcbmitn3{djL%`g0ca8jT?vOTDS z1#0<;35fG{1hI$^!NGF#3Y-jBQN6&?@&PFi@2#IOg#6^;+0eXf%z>(TGY}GzpB71) zxsg4G(rv$@#>=DLFPM-=D)A%j*TBeD0THf;+mizcUMTINOZtq6(O z9Dks!ib$pM;sTOm3y`Qs&NVj+F3~Oz5e1+~QXVm-D2^O$ez3fiYI7j3% zdE#lulS|W-OWiQjDwifA3I&%wp5mmga8*;ObK&N;q^^nn#{;|ML;ta&BBw*E4Bt`& zZ^7$*GyeMf8=>!-=n$3HT*nSl059YG0@eB)Yp#Z5vvap%0*QW7-VXaSIF-ax+ggW# zTYc&OV9v+WTZh5Byz+g~{r|X8+EyZ9`~=OcU<0XC-HVm8kw5auvVxgr+Q)UQtiE?B zYp(B4hREX7YvE30*W5+QEIoIP7kd6dw28qmpRe3D=eH5)TNBz;-;?u8FTCOOy?6y3 zcYBhUjlMN;w7)KYlym~$uVVU{IU^4Sm5L#D_rxeV}hW&$+9^xk{okKan$L0qs zHJbk)`m5qVS4HH_S0hd^a8R?5_v^8 zkZFNBna)z*Vu^rQ%jxK+ZPHhoJdGw8^bCG4Q}NyWHXb;F&V|~4H1UpHQBvZI(@zK{ z?;9e)r#sA~t-XtdKgtNZ0=&&^o%zQV*$c@^R5|B0C;~a54l(>x)Kq2n$ zcbnUsMdEeHTUG*`Ove>G;<5%0yd&2O-^7+0nb>R22om zbTlXH5(osrvL_t(-DsZfI$|Eq0;6c3;h7=kt_gId8wf9w4f9Ee0x8# zjmyViTl^ZwwqFqlf^82_U`1u#2KTLeias~#u;f3i&CeEqjq2VU=K(&d09SjPKh6Vm zNsdG~(!8Er{AaK|pVJ2%W0aPQm#hmBM?C0k!9|$aTx496#g2Wibi7pNI<}9}age9u z=cO(QllT!LG?3G)sLZ|XTUt@dPD`svpeE0ELQZl zuW)8ATz1XXw$)eNH9{FNR!6pTb9|Py8;)g{HUp2&z@L|*SMk6ZIs=CgXX;q(k1p-l zzi#TUWF*BWtzU8e${ge|NOG~wP;x#3^9#(d^QAx6`MYfP2LX&lC@7LTH8=RS6Tty? z*tXq6+Ya(=TeoN{`4e~`#pZ-dllT!L|07f~A8&kk4EeE}=A_=g+70osh&sWRrHnU4 zc6VK({0Mmgws5?}S$;IRPu8ysAg(~z5&Jl{h54Ya1Kzi1ET19hK%L*XO5~#pCuQu*L$s^>_-B#V<)#Z+BHU!k4(8{o^a^xV?srE_m z9{0TfY^T9Hff#sA=SqxQf^R+P zC5j?O7kF0hBTY6dt5bcG>$S-g-{e#@v8>L|;QsSg2LR~Ah3urTw38rBG1hy%>h#dhOpB@;8U{!xiqXbwEyfw3xzeTb-tJT@q7YwZN zz+HY?J#9W1kJ+RM3t4}mOL^5V$v(Thc;5#2FnQH;(<6KwA9!v#7PgZ2OBLA|Cx5aq z7rTn5f~09C4J2`pq8E!C;A&maE#+|`Sb+mC;^^=eF1@BJl064RgF|!;WsuS|ZZ7S| zXtWmZT>N(=2l;T07)#T13L1GixtqEWfu5OxzSPO_;IZ)ZScl5GlS@a*2HaH+fu-1z zlg4?$x`LM?cB5B>f;e>rTVJX|vrSjYq5V;vTXE4zoqL!ad26-WM6b=d}@a+3YWjJKGQO3h#;AuVm*k! z#k@T}NHk%Qg_&lq2LQLHk{c>H$dOo_3TTGGDUbntABQr?#e~WBIKTS*r2K4dtj^`b zm<)qE$#5yLczw{NcJX>L*+i2g*3`w6k=PnIr5WZ^YCp zgpQ|YS)P;$V+1+(5>3!ZB8=BmDJs;jF&k#aEBI#9RhJ_;Aj_0jyN`9eDo2C~9ofzE zYS^3J1i0xcFLuF>(yz(<%B{Y->kji<;?YZ#$sLPLvf68~#MW{OJLhoHJ+M9HE^rp* zRK~a#ksj!-_H^I#M$;(_JfonxB=s7d!Vb7tN4tu9PN{M??C$_Y$5l{Aa(MW~o#J~UZ6ah2{td)W>4QfJ7zA^0;A+XKAZaBKp@ zd!`&1Hm~cp4CcBT1)-e#`krewBZxM2$K!w2gOmDGl-o`Gem%H{$*;{I9}=&WCsj>D z;_sm0U7l789l^Mpw_oQB*eoO#t0^`mq^@r%Xo6~%hB#2H=CfSSJ1l9ShFKVkO z5Q!diO@-@Kb73O?6oTY{^uVvj_%1^<3QXk~owoYEC9V;SG6)@kfmW7gz%d}33wTux zY*XddGMcB@3KUEQbC9e;oe|1^OditKt~X7Mqjn@dteu$&RAOc_WB_E7*02DE;T+J! z#AJc_9a*Ez>zn}$#nyzo>5=={7!;ucCoGf+B_MN&c;N4WkbmTSAF~*u?IZSa=P2v? zTbAwJn=Bitg1Tq1W7%~GAHlLaJj+hOz=#82D?Y76#0yzGhhu5fYb# z@#a+fNg{$@c?cQVM;ZCf7{|yX5tM?FAJdB!0z16sHQq+>+h4_MwjW_^dIMC8JC2}Q zGy6NgauXa0TrQ0Q4JmJHfD9~{p*mHV!}HjGHdoK#L^-}3?oE5iF&w-%e7(GQpBF$^ zV!ao>mtB2<+$D|+D5BOCo0B!MAB@%s1qddA=}e0$k`o`=mRvMTHh;hx?7JbY72ykhQ$LokE?R%bA{vr>;fZXI?|c z>i)(Ea%`ZafkQHrHMzvpAWb6<=rlUF@xagUl)5bgu^kc~=zGos4UsN*pq!tn*W!Yr zKVlF5r3>pd9~6vY10&Q;^f-cY!oWR8sUDY@K8}`jrRBo^D_ScDpI1(ZT(cN4L5sH!I_~(pNQDREhwvJu-xd&litm6Is`G6_2 z?Wq6@uEwsw0}<~-fI{uWlfK?JIi4?w#8eqIWR*q;eJBfHJd#S{^O&ztY~OOqA1g$h zs;>0Y++I7t8V6>iqAQrRN%Lj zzduoXZk=t^zntfKJxURNW}V|SlL>^j$x>-js5CC{O%Bl}zxXC8XySv{B3t3dIl7W1 z!ZvJuni>VM#;i*YA>;O8tOKXvH#-+5^5ZALcB&G7f1vmM@q+cv^1nLV7}Hup)#zbVEABWt~*MFgGcm(-r->Y#)Nw2Q*y()OA>3I2SZb#w(`{}kw zJpV-~9^5onvhN#P$I1Rm&VRvj+D&?xFAKm;q`kMGYzqtRy!KWPXnYEfC49?VWzIoy z3T$W@tTLPiWV%qP&BddQ$Eu)27%>!KI;3$bK(^Xkc9On1oUR5)>QTprng}u?3&mt~74+%90&(|Y7H)i6^ z(s$^KOlINrEar^x>Vj9zCRL0Pq8N+$EFP|P#DWqa0^k#7R0k>_?N&k?#?pA< z3mX)N*GalpiR;i6LHRfVrfR@$B?H@>E5Lj}-bJWx7La#Rs;@?DXhwj`_1OO@sE0Fg zu^rUoXS?Bu-sGm2yg16iQJ$KH^3-0rvFlN$DkZAEK6P3enPx-vJ4OS#Oe|Xv-9e1@ zvFLFA3xMmyGRrHC=*xEMQ#GBET7&9B^8wroolTPKQ}-9ll1agR;~w(_#hgMHj*K%S zfcgJ#eX7#7%YLM-D#Fib35J7!VLSDsh(EO6 z74?oi57|b&<34zp@PGeb>K#|^$KGz$RgiZutEwCyiI5Z{*U8WO9k$Wi|7E@7=w2=A z9d}FAJ0^-3U5wXPNZX*KWq8u=M(799hWRP(vS++d;dx_E_^nNA9GlcP;l2WXL0f>Y z-?x9KnHd8h1X|+c{SU1l^Z6enBC677!{*8Q#gugB+pxBSrA0UU#oLJt}q?q3kqFXW6Qo6Ex2dIHexW!wM&j-H)fX@^HTRucx_G znmnN0yh3JYtU#x(VYxs&aDr#tEHsfh!p%CJb7Plw#ms}*=X%UOUt_yJ2M&Jp8jgEN zjzKjqA0uhk+w)>o>Ets9I4dC`tO#Jj!sOqms|;f#!UGu7`(*83^fY?i)z*Kr=dWq~ zSz^6B1i>cOER~bS!<)#-`~-)haKf@{tejMg0AFNE+<@>7-R&F(R#p!6P^T)?`F^^)2vA=~cbvd%Ms^2hpeyr#!IY)c6l%NYeY+#j zPN&HtCL4=2kfDfWB}6RLRK)7v5)pI0_!L1!5kuTO$)oxKVIRlYqgpsKX~t-ZZHGR# z_piH(gxj4E@T!qQK^1%*i%EFq^ZVeMXgL?3Blrgk1Mv$Co8o>~@{F%ODEPByc5I$N-aSs+))Jk;Ga`$GdEYBmol3jDN4%e(xolxwK z=o2G6(hpbN6G_7b(cbpPKkEUL-^yy)A?M>ITuTee;IS9v^RA%$h~`->yOC^>6SsA} z+gyuUrIx9dRzmM8rT4E>9KGiqB=lbG>Fo!4Q6MlEvm7!@OChH(sSS;lg@RQ)r+rMq zzd}@^Q#yjJb*fKX?TrtwH9zaNfM9e497=pQ+fLK@n2{3E%X-sMV^*D`dBB97ole=4 z{FOQS3(|tn2}stv#)#!)pWqxb`4HRPVDwmgh%2M*$d!1y-m9Edt_uDm(9t@&>_jQ zg(*5LBctf4`lMRePyAx;CpWeNOV4x6f41sU?=Y?vPsd0~VrQ=G=eFA>Ld@}0_fzZE zlePjjR}4B*REsEe%&7yQ$+5r^$(`2HTYK&9-}$b$=OcVXZ}a@1_J73omL6Au#`%{* zg04oKf4!3+-K=cq2iU7p6m=q$NJ<4a@Ter!bIc4Am$5^V4K{m2vei1}CQY&DcXry2 z!8qHKw-E6l$XjERg=yyg>CPu9)&)>WuIlt7exSn{A~u8paDvU4gPnzN1vUe$sDB?M zS}W=s^Bh<5743~oA&6l}2UpsutYIGb%ZU5Hjtva+g{~<8Zs|Ednk2%2kh5QK+nf4mLua0Hr&{6k8B=OYaiBfQ-0aslkR6z67t%g{u_q{wC#r^C)+ilgOiT{8IL^C^y^k@OMuaB9 zuVVidik?*L&xhE%V%o90koPE~rx0D_XVm>XY2taob;T_MW*tq9RXCGx0 zh!X~hKciQ)BsObk+8aF5w0Dq0J<9s8XOGq$8eCpR%3FPO_0Fe)gY+Y-CPD&|Oh+#v z-+JcpDOZCW@^@$^6qA1sF>G1`nmumwuuAO`@OAt1KG1*?YhTbn8pPVoWKVBE?sD%;X z0wY{mY6+SBJf5M}>O9?voaDYVXjAgmw7|uX8_3h`LoG95Oa4GKXg<16P3dZkV*O~f z+*-gB5_E`5xXAGp$}p+dH_$DgOq~}pVu{m0pqh4r+L#f_cyNvR8t4CKv*~o(6d8g$ zbuN{T#gYz%G1mYWsiP&OV}OK zeyy=fdANof5FHE7vAAyr`yer1 zrQMh!`vMTHfZWo7yyITG`txWVWux6MeD62feS?2Fg11Af;&^C3YXR1w1uTHuLDxfY zaI>AxVEczLMDf53&YSVnioL*dQRlP48B5l$?Mc?}IzB(pmlFP{(?h6KO8KlL=W}hw*O-7ld(gDNlNbvZ_g64(bDm1=XNdI|&La|td;-ll8 zPz*-&2%%`;^el3;*WF$yz#7g3AUu&KD@5*w9K8Ve3q+3+K^Y?VO3ZvzDKW2@mlvDUZzHU*Hv2!3uzh z8tZa(>)W#T`zijXeL68)@vkC5(ylA;dzENP0uPEpdknj$Ya9Ha7g&U|E8Y1sd9nGD zt=j@+eN6jpR%3;L#0{}xKSYQ-9>7(_cOrebSA(C&Qy)b1r^H=V=r zrH~_+g9BzM`aLXZ3=paQfe>w*2gpclqwLA_NQRP; zfby(B$sv>m5gSaOf`Dy9Y@1=OQ_T%V7jf(e)8h#VjmVT#@Y53WrYoGhPk=e}ShSyQ zUR?aAn#>zLnCZYvzIiaykP@0|#sLb=(Qtk!6Z#n%BEa>+BiUhAx~HUter!c96p;Qb zixLqdnFp{1=1r}g4@L)CoDqA;T7pI4nZP;S1fbAhb1=GxMH(?*A*(2lcz!VHC^9SD zqcl9qk2aRJhpErV#)%x!Z%R9IIw_G%4nD^5l*>wSKqOdG-HOMv4i5GT&kpv=uMO_j z27j&$?sigV{BwP9w;^fx_a^*11OHCJzeD(UXZ*VW|4zfdi|{wp6x$gr%&CBxAN`@U z1K>}~tqy~hKZKS7++&7GK@d-8Xh9nB(M-e`qSsQCV@2rs6f!Rl%u|gV#}p{epOjyz zJ0TiX5v-f)C*2#RNtJJMf;L&AP1Yek(p z)}KRLZho__e{YT=k}`U%dJcjcHD2YlEuN zLwFO3Ri!V*?@TNV%u1h)zr-XxkiK62L>&84y1}1FQ;~=QUa47?z7kLPPv{EO9Dl*N zu1cRHk9oW(p7hGY%$!CCA!Ls2U>5*xl}@4!E^Zyx+1%#z>l!>4SeU#}$T^e%(&&C{ z3L*_Qtc`hjFRM&>{1PreC_W5a#?HM3W?T>Zj$5;-DxD&+HmF&M1jC?T$;ywxGb&Bb z;=T6Fnn`{iM8=j2ndUBC7x0(0tofT`!t0*uxZXynSp6E1QhHuqY)bk%b`%z(h^`v! zGm5Xw>d(YJm5s{-a(UMqW53o6Sg+5|rPnOoDZur9v<6pxq;H14HW|ItXMHZ`{x#ek zy1E89aDF%Tcfg30g+-zeQRc)$Xl@x3X>A@z)eq9^FG~Wm0gk=Z(w(Fy3jxfZd;|o=Dg%-W5-PM=c;Hic^o66CJW1LO{iX1A|{H;Tho9QdE@U7oW^A_cW+W?5ZJp z3iX{txB|cU+~H(|rszaRpT9U~ilx53P-I6_MJvobot-;2AStcz{-0#it_t-55A`U8 z`l65EIs$5JfiI$mbHFGLbM#B;6=Y}=C&Bk$>o<$o_f6=O-C%^ivy1Dr)9AY-jeW-- z+N>RS9^2tUVqejTrLZ1qCZm@+86l_++nAUiHX+YDXB4Y=>Jj)}G8x$4ASdfg zaDLD7t>i&JAgF&Z$?r*cckX=h1`(aWw=i!Jx;XB@1YFkz|AblZIyx!HCvW0!IAF-^ zVCohxRhI9ubconpOb7o; zFdWmSUA%!nT0%9zCHfoR6<& z>NFa=a%oSCS3*o$d80gUjpm4`4&!{7VZJ#`?b3c&xhmaFoUMrsn`g*pQwSHj{19AVzn+W7TriEa9ZRF2IUPz5or40=Au&v-X+{}# z#0~%NfK0<>bx3*uPeKY5em%>M=}JKl4a!`_)r**_4{pWf^QI~USh6Orta#o*5Ix0w zO7mgY04t>NJ5)Sq?-CQ$L|EAv7;q>T9)Zs32kI#JqmH5HXb%d_aD`olqmGd%;FXT% zm$|Cf2MJNEl%Q5ydQkdc4zO(!gZk!g9Mq#oOFVFk&uOM1IL4r!$p)_s4fn|*^(iV3J%2}mJ8 z;#a-wDaq@&?qxIEe|;g^x;=1l2hQp~!R0dfxgBr=>n*tHGKkHo8w7Ar{$opfTGFDz z!fliG$UdU|>rI0?;H9n(VA?N9x_`b;t!_ai2Qhhz4}|3_l~vmqRvFUgk<@oilmyat z2fRTaAM`BqW9vA!4>p>>TDnj@NmvBx$PTI`xbakkq|%bpDx_my3oCgp`A}QE-B+NsRm|rd3T|&OH*8Xztn>LY0=|JZ1 z54l1f?a%JW!FLx?E8~H#oE_q+%l?7)BZ4vm17Rl#L>>Gbe%Yy?i(f`IC2djl{+RmL zC{s)9k6Nc?$cd9wWN*}or&|@5Ko16*%01e8_uJa}bLM5r{&K70$!Ax{G8yK>(=5z; zFaVkni0@LjKe|P|w6_W*Z+N;8+d;_ra-U!-QLb~UQ9ta_fR4~m2k-eEzzdJ3pfNEq zQYWwN9xYmrGzoSKYs!0rSJpg)jTnl=I>jhrs?2*+UOz;D+gGzfY7%#U+-^Ge2YeIhR4BP@kkf5 zaZmeh8Q;P8pNijhmRBzxM=?ZVccxeHIfsxWrI|PPmFq9eq2NUX)9??5 zS8mE)Wh3=sK8eVr4I2+IT;2#Pb!8{XeBK4~InNv$rgW7dh*6qAMqbP=zIk#+xwVfB zA;+z0Txt^losj#%7A8!Kn6v}lHeHI)5d*xZpR|vM$k--pzh{$Mw8<*J43ecy?)6QA zXyTo>BJtaJenbgJP}eS-AKxqWAYF&^K%J+M7_SA7V5@QP>u~&t>g5l^gJUDr`S>BD z2TLn7zXH%Em@^CH zJ57mSjBjnPzpQ7kcZDX@9VuPUzrr~K6VPy@ncYPb%dO?DLIW-J=AH=_v!QJQ9*22? z!@L;)ellO!+WBZL#oW>Z2#sb;ov6M7i5)Bmkt2+JP=6RqDQ)t_ zGx7!QBTdmQ+m++HH~S(cUmVOY7+_;Q{lYA9x=5273t!YPT<>v?l<%|K;d{;%mE$+I z^4BsAmUm&k)4-R{D$i+sPTlK zli%H}JyIqsPs3XI?sR@P9pBlM0Ft6?G;v`qe)*~YY58_<^iSuo#|FzB_Bex$cxnKV zt;m4+dYo6Ua%r*;!26l-LV45~j}*#ig>tjbgm2>RGllYC0?JX+WT0Uuz<4WB!!vM#5zFRz8nzy<@K6j_BUE3<3np;i51m0Meto@UkLHF?fx zrhZR6FB=d)5e2r7%hMO|R6Fp%AYsE3LR9KM2+XttpO!n5QHlL$%31#9CJ;Y=H_N9W zG~9kZg~>r==P}ctrjD{H!eiwwrUjb1 z2xP z<}zCCOwj$xJj!-oBG1?RZEI#5mKpyI0$7 z_3cW~E{5Gv*g%6a-p(yIPT6yUE|X!!>P|vLBC$0woJyb~Qr=GI4U|lXlbTUOvEaux zG=PqT=%hx>-w`Vpdkaj8%ExYLv>hJBf-pA0szqqudui!7)aUC$?1kTudqwC{onFv) zr}|)({ZqVE&X#XZ<2Mp%x#1&r5(7UG%B%8IX6cYi7wrhOlJ;kyef` zIrjn9hY2VI1z}JVsp$$jO>Rf&Q|SZ?r$#={=jVG7%s~765qUls&(#FpD{>RKL@Y(> zp9m3E0zSIhYHl44T|&-*%+q9R#C#UgnaE|P^9AM*;`*-`%ep>jf+dyMrypR{R{ z&HQOnlFd~O@>rp<=OD@U3+hSDfhF)0kT-D_&?ZhmXZg_`Q!1Ar&z8U5jIxUfRW|`; z(qh@;>ysquVT`JpzW}=!58TLp%cy+{ELLBxlqOTXzFf>!@xUd@oOifcbP{{{^ zCmVP&YwL03QK$nrv&zwoMf})@tVm6{LQ;egv5IitL-49I%vr6}I`)8hD?I?YK{KZ{ z7IEXdoV%Ze>;b%axw6>W&*rJA+9B3>egYk@{4=L)IFJ}1!KwjRKmRzj4SU8Azhmqx0`)bo?WAI^K7^=>#hJ(k>>Queyy@v06yRN;5xXr>I~QodAGvEyQP~ z(2JAuTEi0kcm(K==Qo%&h+GFO2u43?P172NCCkUh;gzDAfEI~$HS_=eTSDR=`3-*233jn{i!=@|po1*4q!BmKrN4MzJ& zH^b{(w7=d-I`nn;QuFg*3+5-Z?iY>(t9abMEQMb42}g-BRNVjqsT^+_gVB!o6CGJ6 zZiiJEW8TL2gPPJ2)@=5dwxpu2ko1iYp{XVm&=i|n07G;wWE$bPNk>j6lJmo%%7#wC zNv-&ge#b2iRmj5IKZhMI$OiLCr!UQ9u)uC~w!sX!iBY|HY*NuT>91f|u`bvMcX(v^_BOp@4g8yM7yV*kk1q``M zto8w@3~^b+7cw^-o&fZURQU(0G~0jpsJtFZI?7Z(Q&=_7UP<-`lL!RT$5;3$6-gBu zcMV+fvnc&j-qMV0oR~Dh_LbMxzc|y!bQS^Qyl*xm@FynVr%M& zRX*K7deF7dUaac@xL)8f?Zv5nFG7hbPfC?&t@(toD}OXhbG1}9*C2lH zd!pEn$&+d~!xJ^?NgQ*!Gn~&%8jbnuNvD_nT&!IcHjP&c6e|}%bbax@@0)bQpXSp+|MCw7xLgD zDnEe&!FUKU`2BZgSr&`l9GiJw$>`6oN|&I6RVerAyBQ22}o z_g-Go7rPb8@TvF!(Wc!$tqCdBO>SwZP+z)n)43~cIN!x z%K*1x@{Kr1?EpdIjQv7v^`I?i9LI!?kw1t3j{b3+66c>sZglh61mPgeCO=_5+iDKc zeaFG7Nt~VIk)P1sacB>#>Z>DiRA^+Y7|M8oX#OM&;9c$e6nGC~5Pi?=PGk`I z?rg&YmGtQ$VeaJ1!5?s7WM1MTiK?Tsj~2o`3m4J+8y&PN^GGR6PXeQKD9Xq-XtZ)O z3ZkYN<%q%l3yd>5?~9ICr8(x{Zh6uYff6K#^4i^rQFrz3h@1<>(|{eEHulJ7p2nw$ zgVD8APvfEYiE|l;#0%Va6mS()mO?CW9vK@J9lai8N%Axb$qxJgDyFKdF@2=C8mpbF zu^uBZ+WZ6qnL+*lur59{9vf|9zy3j2hx@u(lm;CF#Ex4vN1twya|N9urOk zt+#x(2Mn3h-$^MRX5KQwYi4h0g|(oyiwM zvRUYk9qnFHg%dESd=g4%rm+{A!AcnI(nQ%bDJx#m=WrG(c0_O}i05~*BVC^>wrVHU z_4)Wc8AI?=!?ScpyjaJk&;Wozf0{6)@ekPk6sKtDtS_H9Oxm*Myx_6L`9p-8^`G4=!+OA6q4`AYnE>x zo~qv%w{ZChc0PcMM+d5n+47m}&?=20F`W~RY9%`l<;Af(47pHTJH2k3j95OtW94D2R z;)@+RjEr%eW`L~I{Jx6yrzU+dX)_10#*qT+=P4Ig~JGZ~zxw22BbBFky8+MUcWje(p{JIR;{~TCYBap%U z4&}fi{F@hlQ)H3hR3t8cNb$&EQS)~25156r@J77;ao<1&_1?K_+-`fwEOmQLwhwSJIeBX z?#d*}_TdQ0JTV(y9r^YMf~S(4bfHh#y`)M9rR<)5m2q0-1;0u^R6+i}T#ynb^*WGx zjcwx{{h0JyE7dy=8Ao;ri5=ZJkQVUeE4l66ymex_oJ8V*S3a_m5=oE7tI9ynX17Sae-16{T+Slf&CSDU z%vEt3jOYaw6sjTym?6P(ixi52VYriW=ro^AC{d-6_*N77n+k5_RDb}(oS5ScL}>iS zOlOE7=FM!H!T)j|;HKocgK-tcRv2^C^ zJ@OJhl`m!QWp~hp_L3=XDuB?n%Z+C-1=CBr_duA~qGoRdlk;2qym%?Cp)z#3DWFJY zF^dj2GchoXt|MVquO@g3F|Rz&6N`a5h6<;UdZxh4Yf$s~MCdJ;&v|&2h7dAOHsl1{I(>oPxze|^K zUTG7c2{#gv9Bw3P$Pb1mZ2 z7=p&h)bqndO%k;t(W$2WFKX1Tv--2W06>mRN<%IHNFBd88indNSs!T~moBsBEjEgE zv6Kc3gfu!r8`TcB2Yp=!KS0MK@u`&y@Hf_OWe$1>l@iX2W1A0#$EG}DHu5u@2W|he zseva?{8hnw$78OkLqX~&4AxQYk$7!k(lgfqyL2cFad)5U?%F*KzDZ;8Up3mkGY)AP z@K>cS+VW>pBX|$g17ZhmPSwt^x5SXV2?WVcFAk=bz(ARIwhNVmRZsB}s?YGBDX#=l z-p9X=uOf@6E&r$gb$=PKy%OK<#J^O~cOm|Mfqy;lJOuwzI`DsOm5Kne^CJKzF8Aq$T>hY3FUM1jURn~U;Cjr}2* ziY4hVr6p-GP4odGlIR2Cdp%mi_mVeAcO2wEd@txZp#}jJ*3ri!~ zZgI3)15u*48A+3H1&-k4jK~xs|xpJGL6tA-HCpu{hsF91xc3xfWAcAKl&=tm2stwzNv@ z^e?r&%l-Bs%`Mt1ckP9xy%-K{U2hg5L?*{9UeUnrsr@nKhl+2A%{>TUoM2E!U(O~NdMY689` zH&TOnL)U{UN7;kx#!`i$q*A0p8Y&$IGHGy?^Z@C_Ix!{ML`in?0S)Pkk`!5IMt{Y+ z`xiV;D1hs!5jcP*I?z{SpT5p2R*`K0fwan*T4mY(u1Y9Tb>mP*iUze;DVQhb1` z^2GpO_bG?Fl>{vB2WcRd&jnuPODRJ+h%D*GanV0nX6PxcX^i8gX`D|;jd8T!^t6@I z!FzpdN26)ca4m$F_Br)!OMQ_86wINRnRnI~3tuCFcrgo_e0d*7po6r@xBMpmgNROR zO(yiI)0$!GMyEAJ*;CSe6d9{RCQK!?AZ0ze}T@ojSvOo1F{e2BFJHS#G>4L+XgFFYAJE@S@-y2n z2aufFn^3zU1qECmfM=ma3c==R-0xDDT@X7!u}{MC*6zB5=&blX1oTvbo-K6g80qN3+Fu$ST1NA{z)Wu7n6Q%w^T zV&VWMR!g9t(?Fn45D^mst%Y1Ffq=fS0J_$}Qp$X-F=`n7EQZec1bXTdCD5Cc^IZ|> zZnt6LA(lem8wA1t+Bu{YOB+I z7RT6~NX=%Fw-%5+Z7gK*-<*&i38xa8C5x&?W|BXn{!DVGRIxM3ZGM&iz^6o&$yC-- zWksS&fmFGZB7}3m?0jXHO!ElA3(ZG$GXqtu743;yz~qtp7~qyKrP@fGJ#qp47+KH8 zVx(+3s!zmUPJ7!KX|mK^z%d&xYuDKvdGCz(PX4WF8iyp|r=t)iOwt}l-(VC>+JV;Q z`9bR7JvOeP48t?;btcM;tKkJ=Gvb@K2+kCmr+&ACcL^bg-bKWtZM-Xo$E6w)2-*vq zA2ukrjB(BR!3k+aP=k8I{n_JPhQ3-y^zZW#><~U-;*!_*gNkikCY&Cff%rtn4^{@S z(0)rD{zTiY#j{^U;H(<;so`OBB4*P=x}188y_80B;)|ByYLW;jgLpkyl)QfPUJaa}Di# z%sV~y#IqPTcP#~jOgP(T!#$RVQdz@t#Sk<$qTK9=cZMj zMipW8hB+WE?mx?25lA@_|6=%ev;DiPwH8k35+9ZP0a@WoI`?8+PoxUSX@uQ#5u3n} zl%^E_gABWyjjabEv6JTN+2m9*`O^O&=0W~;ciATIYHj)sbGZO6ap$VY$yNT|QA>@{ zFLEe0fEpOfk$bqISPq8}LvfT0G!4~#^E&Iq zc(!fz=NH)O%^jrG?>o6x2WhKge5H02TD9sXvHP0|0f0<0WRtu_?$~`Q)Kc#MlqD7T zZDn9Pn!0N5u@1-;MIunJQue0+x3C`wjLNVR-z*Azwwa4Pha$5QDdT&=p4~#bRvC$M z7;XyOMEN9}6d2gbE?`QQTQIVRo}UmLNdUp(mY`tHkS&g-W7)YZ)6F_3Bci=P^pbrg zfW^rozRq-ewjHFYxHrca=_6GqA*hN4L){p_EFk<}wjyCA6fqm6gWLO#U_-$OwLKd* z+Tj@aJclC!1>Q`!`pfGx#d2Z1xo;{(Brr(?CN#UwNlL|8zHoJwD)*rZ%J0MSBH7om ztQXkAnj(++i7H<|$HwEz3-ujcm9w?V#gt^JauBMhJa$8WcakrJXGEgDS^9_d9r`6{ zoHA*o2mw3bHPLV6bGT{1>rh|gEXWa4Sym)Ky{Ilr;CxRym^|RK&Qt*i*up=$^Kb!O zte`V|&^IgSWiaIw{}BLfd70}S$4xYoK|?>skh&G=!UO5?8#YMf7X0RB zE+*iJ+5F(a|sz+|Sw5)fiWi_fYs#0{Z;M-gd)Zu$Z){u=I$Cdl;h06{STw+blL138;l^qhQ$jvQ zXHaUj>2Rx-Vy3gq3+5|lljq`9JaSLVt<}X(lRyW7IT|F}wqo+478|DrNeS6ny%)h& zOkUlhM3$5|oG_STjyTHgW~^(siEnUxX8?^?V=MH>e41I^4y8_I7HUVVr#-~8MdPtP z?)T&R`yBWCS^YiG{eD@04|Bg4>F6X}TeNtP9krz0bMuQi+8%CInj43|dpAI@nm1f(m ze}!L?Q=8as{bL(}(nTkgd>={=KoNCGE0)sL%!;KzCgjmS)WAw1IzJTuWG2Vy228xG zj^Q8VkYa}yIMe_piilHC+V!nqMpB*IM;wYzSV5_P$ltV)Bz6H;3Yo9c9=zHT3jMzz@&2xFwkOp zL^`5ulj*1}2dfTh4k2j%SY#ozYyPE+`4V3!Sl@BDTLXP0KzB29v2e{|OKdSY*T8T7 zRFpa1Ou1RhsB?^S4Mu-vDdwS8JhBzS*A-gA&#K<~gcClbFv^hy%|36C&y>7ItcXoM zKBc(X=UVwpv1`o10IfIM5N@FAAL@?FZNhQ6lsL**$7ppsVc~}7fQ%iIYXwAti?42i z73~GC;l%BQ*1YVv_?ccl7x$Ga&A2#AUM0A=yFxinETqt_K9s@)lt1RM=cCll+4d*b zE0?3ii&)kR^kGeotT`D~cF*`a9sPgc|G7KyKjIalSA< zkl_DrN&J6gtNbq@lKB63<$tW~lmFokDjPm?N`n8TN^|~~S4sS@P|l;N<%Mqbp%f;d z{4tw7pJ4fahtK~k>jj3nG!Sz#s{D`nKb5JZFvaX8SYfDjoE;74IGEW19f3oN)05*3 zrtT!>l1wY%0}y_rwmlOFqtFL|>#VExfzgTMe;vN1hl4P-4sVWJlD2^-E*HnSVDh@6D8 zdkJ*BVYIlf>5F?wrTBv=Koc&DA?kGqQ6IHT#lH$4WC;&-5+Uj#nT4{txsM&0k&<_e zr8}<9#osbJR_G9&iv>KigDeEIVX=l?Pt_vQ$kMmiNNHwL3IZ+YLS4Rl39FDmt|ZWq zbfUz0k7A_a%XK#=hOGRz)Re{nb_O{KAN{=fl8i{rJGEFh$Rf4Hsa&(6dXi!VwS_++;n2X zYp!4(U-Z(B*zY*uU@+bJ&se4_?rVKqdcRW2((|i_ljyl=tLte*TX~5ugq{bY6>(E((R#bP2>w9-RD_;!l&PTJ%0#W43GgKFxgf_lH$`Ip1Vg%KWd8N(cl#@isO?7 z@2ZY)o8-C+0@M+W104E3cAb;4>)>NI77i*X@#%jZc71`J?a+pY*dZ$@V7fIdEZjcGB@K* zi~=z?GX*bkzbm6<-SNmn_g~D+!V}wtWL0K%wLh>(JBcbb9lJ`H(0P!cejk*6Lyq;G z3tjEr4U6qh9$TocE7Md`jOZY=h{KvXy7T-wNqn_wWr{jl6*aOjit6ya` zE@+nM?iQSLi}zNI7I4E~x~m%Ta?XJ&ZD-6&R&#qON_AQw>QoN%p9?)HYFgIrc0SCX z=*Jl2K@3@TO(HPqcaXCoy7<5A&?^}lN^`3bA3ea)f0`uxlY|2fI8O;j|BuUyPtD9A z`Mjx_W%$H{a|?-oky$rc4$}=*-6ZdE1Ar}Z3^Hxjn^Vf8=70c(@ASj`=zh9obma9MXm~|2BX> z?q}y-Lg)P30KSt~ukn@J0l8jY&B80_dkDblEg}GOXhe9S6W~uOF9eTs0szVgM`I=K zm0R(-d?{H!u@X1JcKOZk@X%RGh5eo{e#~lg3(AHqcaqv&o~2l zp@*Jy7)?IbV$|59*$Myi=QURu|D8!XjAEysNtzKbaX}=CAskLiw}LNXiFDf~riD8U z8FfOX2J^GqwK|`gebS;fcxrmgAVaPmF^e_uw6`G` zumQhy<2C@*Yd5ZN^(6SKM=npcv$G~9M>Zs#wtjsVN_a#MlG7$M*0F~0%>fFnu z?p_Y%1sF=9ypCtaPco3zkHeT73vw&1s~&dCvq?LM#&^X=*Nj+vJTCbC(m%Fg{R~2# zsb13B9|29wzH9&lpOpKSO%T9k0&JY?W_0F5A`-348TjxCJK-TRPwPAzga8N%3`hn? z34*^3(;K}9=0J`Uc95kl9GW8WTs?y;vdB&g`^ea%gqNRgRg{~*|%U4U=!nn1(_ z$Ti`YtP8-c#?4%SBVJV(fZDq?7a%GwKspW-;ecJ7Z~-u9Ei>B`xsr3BuDvKOkz8-q z!5x#a6)l8I=HX{7ennh>Lu82p`dhLt5JXoO;04VC!1{qZxb?hyI129xu7SKC+$cN` zzYe1?p2H$Day6L4S}q4ml|6-uf&Kg{H)@p{zsmWjqLvGYR!S9Azzn>mN`Nk3T81WF z{@t$DfAXo7=AfWm|EZD3&CTv7O*)V9Ya|G1GToU;ru{W{vxgCg2PT;-zjr-c1D_8) z{KwC(hmRj2i#&`^l6kUf*%}8hu>=~{^@!KN5sa$*ZVNyKBY_r-S6hxZ=9!oE^QZU` zjo+17hQGoHT86`KZnb4<@q=YV^-`N_nF^LU|9OQ&P0upZ@HYugCCi*8a7s(~ool~I z->dljQ2h>N3E1Yvx0SbG7C5K(KOJhJkSTnGdcoEpLeJr4@d5D&7$@xyh#ndz4vIkKwcLb*zK~b^s(%v% zO0Q39e2g}}(#fvhg>kNNa+42X<%?{*G&>2xQ3~OaogicZ0%nz{ITaBQYOBQB<+^{9 zm#zil(El+YpUeQKz^w%TOmLt~8tCXN5-?6NOa#P@ALUxc2Sd?8qZax|Qwo)1+8^tNNnv?%}Ex>^zaZuVOy zSqWyn`(DfOHH)9qaqXaAF+C|{8A9`=5I#7?plFh2VbirD?{C-w%TR!x9d(9SI!qQ3 zB?G%2tzzkVnVDT{XSRE#G!y>ftJyn76MMdGX5S>6<8OdXh~lnq7wh0-YmB_Lz3QiL z2T70Qi}vSd;nUL7@E-eTSVMcVpO!z=^+G>MAO3tnxU0n$`8m_bEXOOeJo=4emQL_R z!7Nu&=ZKc6&uGppdTEaisk0w;HQ$6e-;{wEvOgTLQ7)Xtze5OegC5zFIMv^j{-?Fc zrmbMfL=v#{A748xFMUw3Jhs7Mc^a@po-R+jkjW;m4Et;>L$_1K&TAr(!YWonnSl)hoNlb}q60jh(1R2RTA1wqRx zjzZAeyCo46GxAtS1w;^XsHBA)+HEn8yt~Zjkomj@J+tTYa>f!8Zvlyy!@X&KzH$gX z*m*vG=r$r4N&$j7wZnkEONGAeE1>L!w!({pA~EX^77_;_NS4G&xk#Aq#F{a8yk=!! zHgIW9=EoitG6$=;|6V{?pTUuu#lswusJU{Bk{5wnPPF~s(4W}ut!ej&BIL!@=cf39 z(d@+Aoh2xkO6)Jxdh}hi=MmP)sl61vZ0TRkkS`ap|Huos@?i5=D>=P+p&w?#HeYj4 z((qx>eE%wG)=l_V44S%=J2zlTdA_roX$ueJOslvG>2|t9TW_)=gPy+75|w(&CGlND z9KlgK=fYY_a));8&pFN#!c&up`ZsJ2QHL{F^?(clUNwadN7sQ{4*=AOihRo3hL#?X zgroX*mgX#>qbm~h>SmFRykd}Fq$h1V1z;E0eTqSeV)Qsnrl?MbHl3~j=&6$t)*-BQ zoHCUoHc7>5$LD}5liDS4hapx^+Ga9LHt9(ac4qV8K#D{GpN~_RB!*3&MkX}enkoCw zagyqGPG|>5D|R%MbdC1HETX4PB9WXy1%yN{4eJxrwG!S}G?-~*cLP9t0Cy$JT%wem$OBZ$07XRvRDrga(^D8g zGrghGIrk4q9Ek!arVaN}&4X9OPrXnc?K0dJf8V@wX;%6=)7I8n9D~mA;R&K;+9!HjRUg&PuOFi8H9IX0`bOrreOOFlfM34h# zK*p1KBF*QM^B=JD39WGfV?8jPxc&6lgV7u&?n`tkNl_Us8N~G1u%^c%IxFe1DR8Bc z9-F1<&#k7%G7N)QBF`HegY(9|lw;{67}@xh)mQ^=;mFVsXqFRus=Q9*#2)`ChR6#P zQnI|z9dP<|z^>`yM+VwU6`K>=^obke%URY7e8!qG#;2o-h+xAANpR(OrZU{@;(M1N zy;_df)q`Ng_0#*>4hdjFlKa}$hoC@luqXn2y0i1}b!Z^ZJL7D@5I&)e@P(yOI4|{Z z<&0VMogE?B-hiW>F_o-n-vOva>g?TU#@>wk*{PM>Kx;|Af3*yg5C&doB%oeMDW z_XP$i#~AM>)D~oH_gWxRFXvAr-LBScH<+}W$C(YM(cY)7fPXUUX;uC#MwwQ}{~FcP9z2^<`<$xjk3Vuek^`XB15^yc zBVEye@JQpFUD}i3Xxznz8mN?NK)x84w0@(>-trGushorRt5zXQ&9@THoZ7>rccdEB3A3 zjC!Qoy}Sp@!9Ij%NH}7!?0>K2kROD_;F=_T{9}fu<}iv!MOVhZteXe&h|>prvk{~c z%Bpuzi>!O%D`u5-6#Y6bl7u?A&JcVDXK>2JY^1bEwbGTU=1MM!cfiYLnQKiqaexm3 zAsdH8c`<9Vub<0TN&7iP7QC8$T_Rr(XWbUd2~WruN#^lFb1C64tE{;@eS-|tpYXlR z=X?9p2Nd5fycOLKdVVX%TW*Fjcs<3bnBu)8^m3z>`^W@)6Xa;K$1_U4>Fp7I>CQtE zH$c1NFY4d@Y^vPWDtG-!a%KiBn(lxFvEBLHOQuJzHb;G9bx2=8gucM`?X=4Qh~&4o z2ClYR3FBez15@n=+Q(m8X#a)3Y@r>tYiPgYCT}RD8-d9Lrj44X?zZeUpY`#kDKxKK z6jDEE6Lie-1@+OubkSys%2%T@S?fB~Ej~{NR%)ZR@;_C`kt>o~v)RvrYc zVSBS*Q-B(Ky z!r7&=qqhfJ=S^XD_V~#`+zNgd)kR%*$qh(!yBw1j#GEk!Njo9 z;*w#S&-C3$y(qp?cY3fvh$HsV@MuyUyqnj*IL_nq0Oi?Y!@ zv|ogMt^&m^`_Qr;H7%Jxy115t7?6(U65SqE0{t&%ZFYJ+K|@^n5b2mSl93m=a}8`+ z@{CV~#gj<|yGw21`;H2S!m9)oDmViRPTPr7Ja(h0w`Tm`u%JeVl;n2Zai! z=qexF`*8uc)Ccz@z{zae9Ey$TSo>^JW;*Smt~u_gpKvT*@8`oI28pW=kX(`*Z-~Dq zQzY*vG1ok)BD~zqj6K)#WT|bssUui55AW$Bal(qh(_r_UciGNuHjB%gsBVYMe7K4D zlsm1Gy4rr!sSaT9aX)a z@iou>Lm_Wt8O)pu@K@$kPQCN+15T5y-7&;^)-0|p-nP?FXlXs z;8tqH<1gdy zL(tHRbYq;{Vr9D9!_5xFxK=NN>h=1!YYL6Lo)|9%jD|a8G8y_Zg!yqu(jowQmdw{Z zXF)c;=~w7GcqO5;&-jSZu6|tIgd|FW?82gPLDZ(yPtH z%j_cY4q@Hc<7Ph?6f&HO)shEUQoB^SKT3%d<%8D+0TY~sOjJ~P;# zU_bMJhaG-~6Nmn<8uE6I;ckbv)DXSOBF%@d= zdKr?K+OXw4MB!_Z zO)JejT*691noZ*81+pC!^Af5@t9~u+1ZHjum7-Q2V&ZU`BqGS|;|P}X)Do6h z(G+^Aq+JSFtYT^Q#V*mzYOMbq{hr)L`ejHLTcO|WgLX~7-aw&s`n|1*dzO9^r5x#( z2l`E4C-gfXe;obRR)Bu<1Fh2UOjOp)RM77bRucL>gem|Qbx_Q;sGgu-Hfrsje%BW7 zihc=w&$J#|G5z9;WAQc6=d>f>#{Hbq*M9MLOblmo?d-?j0`RKZ$sZPN>mgpC z_U9*XBF&=q;>U*|kesITX%&R&)edJ{QBugC0+>-md&JzghdY+23*=t|K~153rAf{J zjd2B|`d{Z}zLDzCnz@-62*yewB@(gC;POVH8F!JYjX^{pZ1$O>^Lt+gRtqr&lTC(Kwrx$t?&Y79h z&d$+EmlUK!S9FD*Xr5hf^XrrLqu86U!dRE!Rt+4ij*u%()qb72q$yN2&T(zYDc%5x z_a}IfQ|kd+aM+@?j>FCX9^kMuiIq@&U*ObmDh5g-(CZ+Drp-0&XpFtpzBlTEptwj2 zZ##e07J<;~+!QxS;3saxyO2$Ifv@FH=tDS23jf8nfX{0-Nqrm;`*w+==V=0A2I+}o z^q2mN9oPo7RkD}d_I7}LzMr2T;IK$Erc}meg}LEN5nz98enjmYNlW@~S{4hX#%w{1^TGWzt-QeDivQnz{QuL2P5@NX0fOM_#?;q!n!&47 zd4=^QE~qe{Qda($HUWdH#egP4uQ}&qB7ihtiRou>#+_&wdcP?&PM`?|`U(a1lNZ!5 z;OW44lmnjsSz|{IRg2&Un!!NOI|n$5Hk|}64i0p`GOdU3dDiiDa6eS+#-KM^WZtEl-$;|-THEAW_8%Rx|7 zo?0cS{4Re&hx@3s11ek+8m{z7-~(;RLE|TkoF-elueOcR(gugFVNYl!-`T)}oqv+| z*MaVpnPn)fw>AkSxRZ!d%PwjDuo<_uwUF}fSFt;c=YXsOIl{sjBPPj^A53W${dUry z+Zj@R1O+)e;0kD%_o(9%3?N43LITbW=cuEv7d6nSDMMM?x41M|Ae953`8@VL{4bTw_KiYN~Vy zm;2VB1?}z4kE+Kz5!5FKWtq%}tkL_EdTEYFeuG?ik8|J{(OxT7~G4<)gl1D9qRmSb)xK^nSmdG1Ta&90mnRjf^F`DD@n+DwgnBug(eWR8{5SFe{fUH zK0CHIHS_>}{>1#SRQViL8ds3T3Wd~cOy=O>Y^R`N$F(J6y#BYD_p#ZJBaJQew6Asf^Ob zd{6b)E7&_8Hr8+u_`9NULa=f_l&)yRZ7a{ivzG^Eis%E{s@Q>qi-S)!kw zopvzDhpMqMGv~M+QteGt18bF`JZgSHLpo8f-AOyNS-(l>d-B;H*bT(1GbtqOOFrtp zWa~O&XC)E)G`N2p&ag?}huy}EiUIK{88#v0nUi}@Cu&hpuoAM&LR?fvFd5`Z zBH_zj*#{E;-InZs*9K<_SU~GomMC4GzjEv#+g6=SIHEuJprXi zrYxUKVq1hwj|VKAWM;e9PGFANk|`A%ND_dgKIwOYdEYxq`cv6sGH)l#6|KQLgPVCk z`KTFupHwRzVX6Mh<(BI8&|#qZKEMhp?sU5eCj)ve3LnxO13K}De;taL+wGH}E|(<8 z9p;h=+E$_Y_FhGCZ$yNXSwR|u10enJeT=OD` zYv=YD_KdDHmk!2<@}-=9#7*EWtC*EFUlv>OxkrCuhByiN+=suByYpqm{k!<~itX11 ztIAQ8i|^jR+wi9zt{OJ+*W(fPr={uH-mq!7+Zh{uXT6!4Vw&dufiOZ{$yjgT)TYql z%V<3gM1}`V(tUt5$abOp2^~bVg$g_V>+lHN+rV=oGQ?RRc8t;#PzXt<9+iKCjlng9Vt~I9k7^DUIG6Rx0O0c zC2Y*ZOo>D}FWL@`o6nZp&)*@=*swwI-KdgidRM;i()9@BpGsTW1@ew}*h$FZ^ zjHy#)tWL8CNvep@>C84s5hyuXjJx;YvHk`cQZ*qzPxpyR-kv4I50HYL7Yn`}$$@%G z&SOY?WmHx_$Qb0uM-6G~qE9Zp2U z)gXeH^;!Z}YyX(D)`!6g30pB4Acz$xVh=BMh&>Be4~T8!3qkDWEwt9@W7u8&YWy~P zB_b?E;;CXhR0n}_b88R&27;};--y;e#NdH9fLj#nK@@{*@nm1Qgv2^aaZ2-XIzVwc z*2ihf&)eM%YR&IA%H|zK7XBH8KcgA^e+v9;h5s~Yql57(Ttf7@k}sss|4zWSS0Zr_ zdV=119}=(cOXId$pEOCWFItS&_qVNcMG*0y0`@MSy%#Y*mhE|g68RH4g-A&2`=WK< z_pn5#a?UwJoiRSa>V$#3m^ge4Z?VZBCkt4YH_k5owq(^}t# zK3T?{elf{-JmkBf4sW^4B41=>2J21cGN(A$tzMD!!Mm0KksgXj3HEiw2BKN6x17V+ z6&gi|broL8!VX+uq=euld@fy03FF}!zRAYJXg*}&;bJ~u@`?=OLxy=B{sDCZ-0|2Z z6IN@eBptuLH7D9%C;Mlut+|Mu=#5S&FJypSzzf@z7mkLPs!&sZ@>Tu=Qe{9Y2G?yS zzg1r4;*~=As7|2Fq@Ci0zJkN1P~P~_=cxNLNi@6O?RFxn3%b*J@ugJD<==A;8QikV zuW@b}lu{KZOWB_|pF@K|sL6}JmLe}V=f!7pr3nKvB`^MTI;&SlmZK66E5>6T9=q$~ z0z78v<2*cO>*JiLoGKryp-qmn-ll;IXJ}W>aXZ18$4E9TD^)feP;S|fYu{kM8O5pi z?-U&OyaA)1<-VT8ukqM4^WYt}{GsyZfz2cfcRO=f(Vu$!*nn9Iy)e==j1hB`JB{rl z>2zc>Q^oMUO}br_e*^Dvct9Wc(!hPQ8S)RwRdv(q#tS*@KVrZd77{`{wgJt6O32a# z3&w{^Q<$?N(p?ZbGKY;9;$a>i3h=Oi4`5l)5fAxzSk4FX>l!(1g6Rs`vU8!8p)<2*c;>f;3ge7e?l!`;_H-&t8cJO`60ozWa2UI z>jHiy6K}lDmVZp%JRkz*MPv}j#Oc5xRhbx?U#y?i<}!Dr8t-udduLcCJ{{gGG+3~T zNnQyi&M>#1-;9a({U@1t81!93m=NNzR5UXsT3spGNnm8~Gg}4^SE{;+SFt32F3_>d zwm;|T&n*6o4+V}k3&kl2dn&AmflX%-NwC*?h%nd?qBAs-Lh_z=YdoQAP51zQuO{|-nNq+wo5LHh4-lIKd0#}}k8>B))7tR)0qFn4smMBwxJTaX{ zaaUT3VOnZM65Rbr;5QHM(%CfYz*BLlWdK;5*E~Tzs?fY%buni(+p`R`JQfZe;+R67Bug1l$lU)8}dl)R;~im3qfUo7zPy zmf`3MtPufpyOOo!aXd9oXRYA5X%-`I80kC}82LoKUS46#1+fF3@6-xWKNckw`hae! zAo={amZ(Y5SD#+U#}}ho!XLah(o1_}UBI5_KKvUv=0LJAr8t*eDU`??jqZGNx}KU= z5{6TpZ*D->P<1q_N~1i)T~{&p^if%vXdb)*kdFo_sh?vD&{rKS0cIM#3<=eu+&!h%WOZHu*FlzX*$9@%Q69xX9fj z`TqKx_@1w`&%@zf)!TtPIoh-=+WXIOU($6Np2r)Zmr2aRoT&(vrtEMXz&_$Wwb%G3bU0j49j#}TQ+EI$FC2lL`@ay!*|7M&xaO-rJ^ zKO6UzPgh9wSPHvtG?N?nd=Ba_?ZahGX<&5ToiD}vM9aTV7nKyaW|W?#NgCXzEp>O7KDs&e%&@@hf4 zzC6~xyf9kvN4grt``K6hcm=bk3;5?qg#lgrs@x^{N%4URAa%%4rLInE0>{Hf2Iek3i#A(ei@(#s|Mo-vK?V9Of%&; z^pC?_Am?$(n8&8MJ?a=Mvl-NQf3h1gj~~I!7k-Ah0Zz;21k=W_dJT9IkgjkGIaW{ zFF0mu4{sODw2nkaTN&o#&oTEbYaGxNYJ(c00vg@2@5KURl)`x4hfxP-5-{%YVcY{4 zLetmt{q<;=QQ*om`f&8`7wH9eW&l)T_GQ3uSNrQhJ+*u6{p)1Aev&D|03l}J7W==k zuWIK!pND`>PVG^O|CZ++4N?^UUN1Tttgrve#nsH`P#Ah8Y`(KG`^vk465Z^Z@z?6> z9@1a|UV!N3euKBeV_jDt>^YAZc+m zDb{6|SZ9-!LtyCp$4_7rnBXs3$1XTt?(scle#)_yo-aZVYsp# z06F{2?f=7RHQ&QTOWucm^t;aPsQ;7;0+DRD)ESehAOq9n`Ojie6Ni4$+uYx-EmT$l zrzGQT@_4B-K*#bXzsfYNlH(8mXjDla zOU|$5YKn_&czLdb@`FgH}4(Zn+SU_6j~pJv@G6_HetgM}uB~RSzIn zTOjrj8zVNAqCXLwKqARd!~1CgZ6Q(#IPCian4F12aD8?S?!u3i=JrgSmf)_k;8tKj zeQ>F}2AAf*-6Z4C65PQS+@xf1Zh19)J4+_Aby;!QKHVr(9fz-lfsHree476JqBSJu*l%zK-eompX})Q-Nu8S$84z@Jla07R2wbTA_HUQxfJ8St4#hl*NO4(aLpjbp=X>JzYo?(mdUY{ zNhZU=ed3g5voM;iZ;j9BSKU7~VOwcXnCBaGM|)V!TF!mtob<>J3p2a&Ee)($nPR8$ zc!0T?sd$THCiCJ`GYxu#@GARRk4H>(^EeNtuwHflIapPziB*rE5v!g!EmnQ$lvwqc zGLB~!%4|b7TyKGukFx4M#-9R3y}$?ZCo~<-rE=W(jlP;p zl`3|5=K>ZK&3XmPdV#$;Mid+qPE=VJCB~V=_;L`#t;v;wt7U7ae>3i$Q-tgMuHG*d zWliov>O&75K_zC1vJHBoMY?o05-NcrF-+7Z>~15LxE2A}ax>;Ugr#i(UtR zF5_D(0GW6zn1}#ixzY!kW`VXv39+pj-W5u@IaXi$g!O-T9Eih=r32JDcPN3oVel!zm6rfLYmbaMhm_6&rFA@C zeL}`_EDaIl|HAvzx{t26@{*JUj2+x#!bk*;+6@CdgrQmX(yr{i^6$%pEP6AO^%Lvy zN>l0}2Q&0krF!1rq$`bwKGmAZHy2?ZUFd*0)ilTPRvPj40;|Yu!dqW`C??-;XoGf0 zq4Yiv+)>2QD=judDHz%v30f5AG-xpHy#t!P5qoLyJ)k z)f)RF%pc3`4|o7J;K#Azj|KLN$TAIIMfnargH|tiDl~gvFQ_CPk~S~GzH@y9eQ)RY zeXk+X_qC8+1!UGG4P6=FW3NX#h7S4L&}ebF6Va`lQmLmV=WjbdQirVP$8u&Sf`S+F zRyE9vNaezm2-)!lxAFS7H8UL{qawGnRNZ+Xw45w0FU2SYC2?4qDl&T3fLMTOhP({c z9t(fUk&)_+KZK0N{tzT8u74(!#j7&-sgyL9AP9GCBbe#t3kNju>KA86d)W zvxEpE;X|6pT7SeKSbr^_HvS5wkEBnHzaCoW{GbhMG_|Ul7X$iZnvCvKSIFe zOSiZ<^z=g@IpT@(C-icEjDw&t{axR>KU%6->wYo|ip<7Y)(f0ee6_aK%%51SX8r&chC8Z- z>zt*(@G>h1J@8#D{Ry!2Pf@!(Sk)D8n_2qFpffD!Ul2}EWB+?0oQsdC0Z3!N6z@&W zYAczy;TMHUxCi)itQ-qjgCCZL47g0gWG9+rg}Uh$LIwlrGUT4(U6kYTzvCwz!Asj& zU*Ifs(fR@x_ZIQPxTr7i>;p3THJHCKebvH^)4KPpaN_6PpIHO!F=6e(7oeG>p%qC@ z9Gbi?!K^AWcr+e3F3+t?V2~oC#pv)J2V`WB=EbkNnC3u1G(G~s1zd1D`9^WMut>2w zFa9|yTq7<5eq)=rCYD!o%YW7FfPl9zwC|;w!1VvolBpUL}f`S$NpQ2VIpg2Zki*J%xlS>8_{A zl{{%_b9^sw1owpGBi#5V?nduy8kY6MkS5zT6a%kAB_`d>`jW z7!Z+X`4Gm#%Y1-B#L(dZ%21D4fFg__*u+7);Y$&r;)5&#&tzK!{;3H39SAh`5m{^; zYRlZ}%JkDRTQJ`@9$-ISg^!qUFuJ0(0weGdYVW1{tkweCzX1=^%wFy+0Uio~g^nRd z@F<=8HB=+qPs@5@vL`J0(Jo(y>!se@%p#;Qwbm?4P-O zTVD0#&3V-&@Z3tKG1OTk=N;}3-f4E;AtJ)i`^?KhG8q!q%*=Bwo81YSK>7*ZBHb#E zR5mZRfTMyGnn)d9&eI_}roooy$+Rqw&-e>SZN9T#`r!)_V&;)I;dmie%R`QNd}tjZ zgfZH4h+wwtg{A%gD{}BJ`MYYYs$YfS;ds810&lwg!$Tyb9=hIZmyRO%z1q^Rs10Vb@aU=Ys*d6A3&c z*fR;ip7?8B<;5f>v0a9{`H)VC7rA)u&UqojZ28xQ}}>h zF`0;_I(}jDVhRS_7Yuj|+=-6xR~Ctp)Qe-a7bSxls?da$+LuqF)TTn7{j8Q*@(QPI z0b?32|G8VHu1{g&K!*Q>8>Se4veXK4W7q<_QfeLyV5s&QtBL)xf>p4;ngFD)kGPsN z-N_QsxF=!@ZE*IXD2zjv@YXHH+qAu1`Pb-mWo8+=B=#lx+|N1J8+JOJu=|YGoa^U% zx`_#R2YkHuQM~Ws)Gc^_w?v%l*=UPQ47HkkIN^mC%V3wBM~2MGYkAhVBs-Zaw9IiD zDIpL}T9BmGX42XE&7LKGmHHJ)CVgi?lNuIiUNqg2cP!Hvyuc6lJ2d+OO+Ox=&-KpX zjK>$WI7^&Dn@TQ{{G)KP|NETp|1RFi|CPl*IzD4Bvdp~+^uTOc0OxfZYBswZ;T`}W zJxW`d#xX&1htday7LM2z07NgikL^us=UD%;zY6_syz21XN=sy1E4*hpsu;x9;C=ap zbE>yruGP|a;Z#?jKt@p|7Wm{&Hv->rsoo3BoashjF?-#rQ=OC}W$EwlhxY9`_}t8q z`YwV4s4+$bh~$c`l#4{E_YfF_E;Tng;+Im*g1`l0w)^X5UjGx!3P;!>qPAvf!VAk% z?r1VI$QGX}R&!q5dZBk^*5M0j1+GzNj95U+Tt7UuCAy8Uot{-kW;Zc<97tBrUyv+k?0~&`ET}X+ADd#pMZ~L%RVN zgdQq*IiwhQ`k2I?E?)rrDLGIyyLd!582h96dYnMV2xJkQiro0;@th z8I7Nxs&jq(Z)Dlu2dQwK9c_9uTJcube!YJj2Q~)~w0KI36@Rw+^*DAomByURR%cHGdAz`pGHHeK;o_?9?(w>tt&Yc$7{!Oa@ zWQ73b=3QNWF%heUJ7?wuq`?bm_<4chw>xed1&0&;p73wSZD+hDlhqv{Xw;(;Y&jui z;fv{lHW)ZM*_Od^jsCd^*q@J9Qq21oXc;>(eNdo36T$Rx$8rotDoStO=1_Vc{vJ^J zid+cAkYS!&_&=JMEDd)(Ki%}Co1d~@b<+!bquj=(IH}s{<>YCCZm{ZJQo>FLlm4MN zwHjm{+*P+pyP&U_tIdJd{ZnZWbpT%;v>Sjo)p9z3WnyMn8zFrc6HNDGNXZFG$%&q$ zWHr4*FYpF=TPRt;e*eV;(}Mr7`kf&n4Cm@+-2H4o4#s*At23~e5OCYTRjBwIy!Rmf zo}Ad&aJzPM5^Zs1B7cUFgY}17)_{kM+sDK#7Dq(SW;9P&p*meoRl;Z46^W%@Ceco{ zz`NOxFq#1zAF0usEP)eDmUc8rgVR;W_XSfOX|ASEiu=AP2tu03E3GpbPaLBJBP9XJ zbNF8i`uKZp!<a6 ztbz5K*U<*KH>|n600?4+e)p_i#fEVGGxA` znJu@|DUmXOG{xSEbQ_&sljgLCx)c9(ivN~d9sVhb{~ld_6?H0Bs=`HICdbDIT z9=N%epXkh>9cj+s92a1?5F@8=-1k^O1{GAR07?lEpq=brK?);(O3q6BXYl#W?JRdeJ>i?4#9+?VjsxZ(e zZs93^ih-|S!UPdDH?FYFOPmbthf)7%Ti+R-+@i5<_&U}eVLGd#^tYjtxXeHt-Ikh~H0W8_A+70P(Cksp7?N1!-K_u%w zsA!`-pIH)XSj@%Vsp#VxOLh?hsHXPjI3-=MiZNmuo-^>* z8lKY#U6-pdFD^4}1}K?FB^jOT%mIpI31S9Vq>&ThrdY{40|muF7tFSNs@0FovzkNp zj4MvgSTzsas)Z5*()(}@$g4Uax833fe_|y5vFIv1B zkJ4!n6b1i+H4!_81d`kBjkaZADBqaMPjX42k6oGz`6-?LXjj}vI7G4s5$4P1Vng}& z^B~pG8u=%?Fkg*~s_g5OtF}FA4>_r8zPJ^TV(`TS^fqK#`&$c~>PbB#g?R((oB5W2+)`pYj1g+H{+Wa^|Fta@H( zM(uRSFpKX)wl-YsWK;`?>TqhZToZWSmUR*MEMGk#tR!X-qEOz@Y3AdbZOKW1iZq`v zZZ78<{-p@vohHL9O9}q2!>8$be@KV zsoq=e=k}4QJ%q^o6P{bc?`SD6-Y&0~Y&9P5^8N0S5*M+=N5sV&3W%#r{XsV2zo8Lt zE$57pvfNw%1^ar1lbe-r4ml~k?LhPdK< zPru6MdAby`|fy&%XENK8MY3z`U+>tyU^G08$Qw$c`> zL@`=%Sz=!!Vzb2LpCjMM=Bp*wU++ZN1gM$KoJ9bYrP`;F`WS#Kl2L$ido}VLQ zg8X64d16RS@~<}RG#dtPYR#U%9Rd%D7!L8%$-(7ceRw1K>xI6B;|5MM%bpf{J_00_ zhvI6Si-?+D{p^tbK#qV%SR|8&Fc8fN@Cf7prRrw`ENp$$W~M5{nr%J74Y zpo-iCCq@cMPYreET-(%5EER7h3tp-w`2>6FnFS?7dPP!fHrBlda;T}v8wXaLnd%?5 zS}yOY#2ZiL?K355yk(}u=8yNc`se~FC0fmGLypQTQBhu~bCvRrP2!q*gHZAT_<5#m zuFnX~cjRKPhdOb3ylLz4>yh`l_(0dEb{)T-t1=X<>WRUEy;1=4I(ufqV-SOH{gZzg zVEEuhOKDC8E*>zUT*biI>B;vn9)?lnAnqo9UFKjW$HaF~Ia4*lJ5d9RD5|hsgW*<~ z7!=`(BKaU{hqHUOIaXno_%ZP%yMecQjtg0QZEfT9U4$%3_9u@7RkoK;(joOiAHsoz zI=IHRkzt-DC3hFHu=d~B%&uI}vat$g$u=+p4ay4_S3qiiLj=6|l%~)h`?1~ERSo6) z?Ovqq-cHRgYUpIN>-BAFxB{arYM!BANKKY#^-~=aq)}p9N+dS>N;Yi<&kvsaqgCf$ zfWjzQYE`<~$BEk8R@9QDv=ztXt{W`B+$a39TgRj@N6MCr^BoiD`3k#GG(zyrL+&q# z10~N>jwLn3v{6(`dJCH3y_l<>Qc$~fQnpRjLJ243?ygDNzTtW|yj$T+VtBh-HqS7t zz%W*IgTNf<;WYCLb_%=Db(H@>U&pHZb{)(uwsag(sV)2!27{NAGVPXgJ4l@n={N2M zS%AkpDDZjm*PYyetiU~|mqtulxu zV`xUu4Wz@&@iH+xd!FZ-h{8KB!xt*gIrs}OtW?8CE*z7+U=bI?&%mk(mWsi&rlW=5 z8IdNOp(Q(stvbx>LP}0jL3!vpN6Dw*1%i?JZlwqEkO-&oCm(C(l!2nR$M9;E- z_5q-HBn&v~00%Hq*;j#K#-l2bsdva2p#xy70gMf%ShMxr3K9;T!MUuIcR*F>ob{}4+5_2-hM9i+<4XEoMr3#GIn>*AF z@UL?^A>`{&a8`!e;*%x-DKF%~Pc%g&k&I?l#HGmb(#ZlC-dG|UkCd@5tx+_>txSA^ zkPQy3P<}g}z{C=!-wA$mcxIS=0b3-u@o5!I`(LY%;g2($Al1ebwo9H9NCy)a%mNW` zQ5Q+%gy;XESg+53E?Adxe$+rg<~PJT8ty0E;p*k5)LzTSWk{cc2Zw7=DNmTH^teF! zYYoqcwEA{OCxOx?6?Vrz{BQ#F3>UX0l0Y*V#ygWD;w#MlkE^gBNPQ0$2S~Ac+W|?F zrU)*u()r9jq*f|GEA{^@A@u_fsd<;mtOSwHZ)6Oi-K?_no8DD^ELB?pH5t_wR1~7@ zFN!{i^!y6is?KiNso~f7X6#K{076n<6DvDscUR-({-fm2*JDk6*`ZQ z|FSK{2u;DTz^oxhTIkdoYlk7ZjEH+v82dAzAr(&<=#2Mz?%;p)^=ccnqmq5lEHevYbbK}e&JzFVQrD>W7 z0cm>m1ojRwskE<(kXzjcsR0RYZ6kmZ+7&_QDvr7DI~gCN!&VoCvIJ*BfWb2sYss*6VDMn7GNTUFF}~Y!?I=Wra%#bOfR>3c5#go+Srr zi2pw~vk>29+M1f#RUT#ka5^E_{lf+FyzBkL1yM-DaMl%W#gBaZBOlLEJmWo9i7PY1 z_I;Q?vh9y-{vdO)I+Q}CE=}P_cRXj{17r$z@G88?Ft_g6T%LYIL?ov+M0I*|+a!6~ z3{oU^EX>0%6{+j|^Ul1q+pdCCH4I6Xs;2~8zR;0Fx8rIVy4-7I=mH10q5JZFU#d!_ zij}GrEH6^E5k4UX{U+8F%;zPlM5M}rMEX7S&+S;4gJyRUtn2zWp9VTf-DW!$Y`uhR zsfDiM^>$yCgaKScfbFh@eF@v+Br9P(@LhH+;HDc>`J|Pwu6QdbsofCul0jc>K__-B z9L-@wBcwOwjH5s~yAFTN?GIX@yd#LRCj91?s+6=S*|DJhpop7FBDsQW7{xZJDXfh^ zWtsfNQN5hciFE0 ziYHozSW1|WeS$o|2&uor385NpPrNEcA5pdn(~IC+if5qC5;b^)Wy8mMJR-`#M@)BB zS^BsJkJ%wA`k0Ex0)3o;$3l6G&53$mI1_)3%B77yv>89SR|j=`vSOB)68>@ z@r7O_il3f|Mxkope9aS2@YFt5L`D(ER!in`jcO>CgkB?hCZIJGEk^GxS}{SZ9Q|w9 zhH}Vo?1gQ=#ix%7cB_;QMJsl+58ko@--u`-y-R>KL#r(Y53=(-v=3*l{U7Gu1U#x@ z=^LLc13|=-h@-d?H7JNn1g{1oI0Ffsfdt}J6a^%TA}VTxiAF_DoJ5j4j>K2F;vTo_ z?u{D|6b*Y26~qm}CGKYoVsODA==^`b>h3cW7VrI@=lwt5$McXmr%!ivb#--hRdsbY z%!jF-^0%dJrdfRv`=0BZe6Y^`3IRn5GX!a@0%bCDsmKMziib>7!r?Z;Wy=r-CVAvD z+$l{Dlgz(fuCnp)gxwQ>VclbUIeQP$HRm%YT}jSU`8tW(F7}(?TqDgbW(n~yW zRaofOgI~5CqrddmAi#h;MwF+~rr;4wh*qL;G<5REUCAlr`;&M5=p8hbBk8c0IdoW#0!{&pcOpL z-~!Z|?bQC$omvi+B2RLsi4?g)6?sSW3E#DDk+F#)-+PJ91wcm?IaL)o@@lE2z%6nF zifHpKDkA`^3-A1#3ckZ0EZ~?}&Dv=f3ibiP<}K_C3Ojam4ygqegV9=?P5j3}+~YI+ zK`=nkF)e(s@vxQ;emtz_LmnPl`GAaaUM}^h&Ht7O!qp)UleScmv?s{ywLiQoo=A6$ zOurMD+d1==bT)hzGgIjUKBZ1HkH_j2g1&PyW$Yqtm85mycW{EU5U=RaO8AJjBa79y zuoRW_vicU6sX-;f=PWG5_N!UT{>{Z7t8YyufBHpR@nc7jJz6hMg_+35Sr1tn_|q@y z5k3Zi3M-MVQ4(u1k%%nKcq0|EkuRG`{c5NQIn^d?nKDfVq>=~NMuVj;=hqYT7-^AK zL8NKFQIVPhvzfa>M8~NHk`Z3U<6c}V6@!+o$hh9gG8vE2Fiq%RA|v`8Cq%Uj(3Ph! zBfYE6a-*hi2J%`Kfn=a@gL98r!aKypwE?YWqh!7YuGm2n9oy{8zC=lxpLYU6DUx=# zu2fFxMe9o46?qrR0zk2yAfR9!)T((FU?{9gMTT{%uLL>AIlXm#VP-@-N}WGW)@93( zL|HYL66unobn0W08oseX1XYPij;dswz=b0o7dv?-y&UP-w*vCQD@MMDt52~$q`Ddy zxfllROvG@~XI?w@a$Q}7%n=z2kD5BlH&WcX%G2!p^fw+~IHw(T z>SX63oM?#pK^93y2^*jM$l)w=RP>xrv3`vgy2Ju}@Wg(=mNG5F9!lYe!uq!-#v8_T zYMrDW&D6&esWT*%OZ9EOq)_Y$lFR@PC5@h)EHdwdDI$&L!A2A&bnd#tm3jT7$l{$L z?JLQQMp2M1RFHmFkfyniMkXMA?jin%15;Sg3ok*HbP_|UKZ<2VNk0kY5dZ5|{;U*v zghFJ|?=B(!DXC>leFCWobL=g%ACF;Q2-Lv_f2w4;$Z1EsPh=UDEL$Xa4F!3jY{;7{ z32;&`YQ|GhBnIWIooRK2)Rxw&$6k1BRgZvI<005OY?g}DWT?klJ6a=4@Z7^!hl#MR zxV5ORFuSO(7%u6H``UFkW?+XN_CuAgUs+h$1O0`^cKmOq`C3-Y%lr-}%S0Y%Kt=Ts zeGbNBHpWK_Lt!eM@AuW*7?f;G#v#+PrV@qXM%G1vMx-{VuDs5y?2C3E!FIuDO#>=c zl46vJtdXO0u#ZpF3C+wZ+t@||@?${EC6btzvFt@1AI;(X_~d8WjF_*XV&fjz!l@sq zG3AC_@I62m!qF(hq%&lC)d7lg(A=G&k5tghCl(DVcdVK=c$zWeEr7z@!kz%VK?fet zP=PK0x!?*~#LM(Rgtf9#R=5@$FPum3P_xsSdeofxXDWD+Js7(RiiA!bEU6t*+*@C2 zxbi`mc+d<^zZ415RJ{(CnY*2)mhe0QyE9rpddHMLirX$8 zOCm)NRLWcro4whrm-7xXF%Y(=O#h57FRaok6nGfffjLsOt7J7n?NNtB#~u;sx;yw~ zfM06hpOXw9w@pxT=wVz8rod8c0WQhJvAWc}fO09s9C@72(zE9<5!ENN=^%aIun!SOrw1=t@R`4gR+jON3Ay^t`q5{yKF%ssHp zN9aDi(fx|0i^6)WR)27`{&b<>!`MOTVZf+2dtlcq)DJRssN0C4eBnM04d(erb+ZoE zU_fku$Rw>va}WtMujeyp&Xe_p;7Sn(`4iNx5n+aWlz|y6kc;DnK_xuFsYybo{7YB% zyolKw>p|Q|c`bsigz6wT0cJZNzp3-xD*48Oz6{TjkBYuesC|0nQx$RNP@G6eFp85S zkJcmIcCTvbvyD7C9W3u!Py0&JRE`2Mg)SVA5gGNKNue3_P3wwb3f!}uk#+9){2VS2 z=r0(bs>lhdh$EVVZ;)H$02C2ZNSvgSJ(^99fl2i0x2X)c;*1_Zm@yU-^i5?-3HZx+ zs}>MMpLf+PkB%E}#q)=gqL1fH*j>C;Z^55V42Y!Z=NXYy38N4#Uv;4oN$1o`ycKU} z;Xu!Y?59k~6UpYRI#Tln zz8E>_?Guljs#$Fnk?Ng)@1-Gf*HKYqkKtDh1S6dnMZiAp^FlNOJ$yMoZwO`*W>lll8 z3L{wlKo3Ts-9>xcRlZY<)<6`-M5&sLsXbS)1r#U<2xbT!tGi+$nLq_Iv~rT;c$ZMB z!VZb&mQHTpJ#K>_mjpM( z6FWm231}4N@1ia_BDfvo`ewo&!Hrxbp$&Q3NZc9RcC5J(+%3uAuGur?Ud1Uwe?hrT z%DGj3vhITkdq(W=zU(O+HaxYjV%r@NUe6ND^}sGe?LIh@15LGRsBQkc8EQLVxM5m2lo|#2EZcdn z(&!L~NGgN#G#dd3SkAox)Yef+OED+>rM}P%+G>4)^I0&mM}6U9tXb~5EBePDiR-(x zD5Bn>F0LgC*L%(}xE>8$vENco5?8Z!vc7PSSv=Sqv>}s1U%-XTW~+=Hk?meR@74_R zt!9Wy{7P=u;K1O6)uG6fUZu0sW@jJNC$cB>hrFZ_b_+J1afIEf3p6Ab;9CC9>cAON zpyFIYZ%oeoq??&~j>6}nK1!zcCyu#}SLsOQi8DAK-Ar13P7Soz0uaLEUb9jsUpBgm z=*K0XYt(xx#cLIP#p0Vf3*X%;3jbL@xObY-4@z#_gMRScfqJOZk*V~9&=ouB z2R%{vFXpAQlu>ADN23Hg){a#Svm5=O@SlGMBymac7R$_-U@apI#E5u;MJw0{B z4F&Wv*3rT%h7ayy_!6&Z$5L4t9f)?_#9E>;m47M%;f`y{r>nUP?^FVW{o#hf#mtN` ze5ynd<`gw)L6E>5QCJBd+08eJP$)l?Lm7ub;2@#GN|bW0>8TjHn)9Xh&+OYqYMu(r zW8X=?Qb~Yfjf;l?>is$`UuMZSqhWj~0>wEB@GwQ-WE2Vi(HO{*iL;lgtNe^Gu9PUk zw#{gX7w+O2qYxVM4s3B7tXH!FQ02J#+rB3jB_xAbp`R3S)O-6B^T+os3^q0RmtF5# zq322wg_rkP<`*_t$h=YSkt``Q$Q_9yM@f;>(N8fSq3JHo8({&;aie<5BD~^+l;WDWRUJU*Vi9p} z@_lD^vL-%qE(iSK(9dw@-cJrh-9JtXrWq5=qvJoD*X885s9em4< z*y4)f4#>!jQnu7iTLK1Oi-R3Bzw$UcDwI4g4$KS1WdgmFjP$~vJpM@z^SXIo74uO; z4TKX%sq$1FaHvM9UHD?`dSHtoVj#mYtXH5*^mS5yQOCiij>pKzksDj>_zEoe<0zKj ztXn>VyV4!B7?qJL+8HZ{?wo3lk-OZdaiK=d29(;7?TPbfB1Ny26=6>2b=~z?)R%>_ zTxR8oFLCWJEESLdP47(1l5C-i^gyipj$CmC1V@awA?nl_lB(UOD}sj0-~Uy(d?KZv zaQQRWx&y;6Ma}?&#(;F(VmyAN=zhU(D)4K+Oyfs?n(NPu+*r@vn+lI#Lu5^oxN(|| zj&Y}SPdPY4@*&6+8X9sUwqf8ZryoWPr;{rr*8}ZnhynQIF0R2%qZEfz1&8+v&NzTH zm1@ot*Wl#CG_v~(SS)@*W5*Gda8x@_?4!SN%>!vr(vb|e;Okn>)qJ5oaA20HPfKTO zfkx58wt|H)j^r#p%DYPa`3WicmZYP77-MMS@cF8Vj7LD(Cs7tHlRTmlJ3eVv#TBYa zGJco`AynC-4Lf%!mM$L^dpNNkIQtv+d?&BmOi4<3<=z@W5#?PZ0?YRy;t5o@zg+Hi zdr*o@X15;(*onD~PvqDPhF50NY0^vXM&Wr1jI%d8QRzzO!C*K~;R{^d2by6Ulb!06 z?W@TwA$3faoZNu#gl^aLQV}t`KQ|#@cIsbqvzbk#+jrx*0t+PRsw;wuOUCK!)Hum0 zuIq}~A7-MAfxC6~emeUu&MU)U!dcx8N#Y)n>;RUmcjnA`odU2Ih(*aH>w-Utyol^Yvosrs7gEvRcIWQ>gihSG10)4rA1X<6NA~B zY?*Au9uw7D23Fev`OYMDv?_ADDao92av{e4T{0MZ6n+HhPsTxFSl8 zQZpKDkWP#;5QBo%kM)pB`GSysC|$LDj=aJM8%XXau{? z)2yE{P1mfI=i&y@R}=?bjOb?criw44%R)=xAHE=UXaUCFCSDi>e)&YyY&*(jil!c# z6L?c3xzsNNXI{)pkd(|@!n{)v&c>7eYC83j46kAs$ zDOlhDf^%-aP*=^9O_IXcN<8In2`1XoRCr)jBZ#59YP#mn?^y`?g3igK4T!Re=E_zY zNl~F1i9Ab4^67Xs15wAb_0id6XXzeDPzuLsy_0`{pj=+Y`QGn*vY&dr07pHPS=F>} zFvjA(P%8;9=HfY;I2TA#rwFjol2pqXN3_QWhl;fPw+Kz&lQ1k*_ug9OO3Q<#NW$8@ zToqAr)>rNpIWtkj`JA}Sf`C=Ee-AFmkZB3LWcl&PY?FsAKdV*+hb3@>Qx;a}{(#*aG40DU6B9G0EeoDq@XF zR8Oemw=k0OQ}~kQdpb-Mofj`5l; zsk_8@RY-Co#;awpNVP3~kvHpLM5;D7UhYb@LMgIKjMwp!oQUzdNkOs#0;$%8G$jFP z`v&5#W4u0OMjhidlx4-zEB~fF;^H&4lR*o z4?1ZTwCkSL^XG@cM&kTneh9fdX9qSw3a}=8EQ;(#FD3@be%bE_t07D+k^9E$Sx^uV zfa6s_J`ZK7&S_vC`4+j$z1=4H2)+jZ4AqwpVeZD{+@d*3)ekdS=yH`*U7^qGJ45L) zNxI>WaDCuz1x4SX`G&qFurpzktQunId-SF5#P^?;a69XVyIa5g{cPi(ZMmJ_0|h-763GkLI-hqE&eMtC_V zLmsiw@3owEK%m+k!KI=|m22Cdm2;h}erlP<$_!+4(_AH}Wc9l(r-8qj!CZdln8kM} zKey#Ht90l@>JA#Dm)cP!A^5$O-|?*-zs|63oXYOf$8oDn&gL$d%upg5I0Y7rKt4B1 zWVKWJlFVnJ!FuZQd_cnfCQZTo=`A@0q{My-4*aO^JQ#|Kuz442!p80*L=dJDzdE82 z?v@oy>Lp-4pbKQG=(j8j^s5CKMxTzO1ENHb!YAm5SaSxRNc3kCF8men7~&!br1Vve za*QiyB));eUEOu$`@}kq>SDYLTV@~1QEJfCz(-=g68yI8*d)KLIpvA+D3kt?UJ|6G z&a&O}`7obiaUQFes0{SUJ=yTykS~Sz9vWnL&xet~^I;|;C!Ho-#g(Z?&WAZ5MGw*x z0)iUVX~yYvKFn=Tn#l(EBPU$_m}}t7I}$74GSC;{1EsypAN*)zZm0y2I=fV6F4^KfH|!_IO6kL=((NH=dA7om2DcSdH^+DZPtNCdu70 zQqZlq)DTGlNWWA7lq1YlO~d*$PUE%#8)Z8dih?rbaxpTgqMb0LNs_C^!KMhTp6qln z@-6R@wH{Ke^}#^HT3^95!yqi+SQN3g@B&w?fvNt}nK()D^y-G2Jlc0vn_AF!kaJ_d zG)@?zD`Kvu1fQ_0SxLDEZ0Y1^h2(!FSKc1alb`4O^7G0#`B_woAFE$sgA#8X?AVW} z(wZsKh<+K;I54e##f=nsOq+@{s@f>qN)d;6`$}@TADPx7QwbK%Y8AskBeIbVl)y?E zKDR59JfUKGmG@>UD5wS63Gnm;ny4Sfa)qwDcyCIa?b|h9F&2z`1sO$a42bn*)FobQ z1Vtl;L)CS|BYHq8e-N`0D|(vGa{g3Hb5>0wfC-#k+$9a5v$J)e8WMG^Q>rsC#yOWw z)~qVAVEnkN*;WtLVXo5%C^8U-3hJb!z=FkJCbnXdi?mwTsDjYxdAZPd5Ykb4;70gg zN+PRix~=+2Q-tATFx<}Sq0(P4>C}^vJ`RT4QcNTFnDotPns^$D;bSO{r02j@UTH^= z#vM;anhRx_4PFV&(ofu>#trrwVnbRXCRfXuQKiz(E{=4C#?=sv?C(rU6?3hg^>8PY zns82eMNMoyH6I)eyIfOi@8TFm@iJ1ilobOs+E2W6oOyY(*KoyyLk`y`IEfSyT4qfqQaC&;?RhgbR z9uw1(zMKaBdu2cMN?xIslV8-KR?n*GJ`I-g%M!4KvuZ^Lk)HU8I*22Lc~+E#BFMD0 z@~&dRI8!v^J?WgQW;>!T+Q4~Nl+F024!OeF8#sSs@?3rP6|Oq3N3mMx)vYof%0rxU zDd@OS;%qg+l}|D?a^7#iM@r8Y$t1^KHS-aiF^)_DS!V9|n8r&%Lh$`!-pr$}fK@}B zYobPAP}i6U3>fhiyG*Z@-FrN!E_UjZFb~mlC$i@NKij!^f=mDVm30(eR+^wXBlr^b z$)3-{8aL8dDEo|u!mG~1dRhcbpLA4)^RO-+@So4a+G6$`Mp0C&>VE{iz%}VSEOi*4 zIS=c>^LBS0R^D%V!2Sp(Qs-eU2a4`_SaRmzWE6#_-)ih3M@WLvwidEvy>pR4<{7{M zGHYSWWSpo7mpBhAaWvq|2th^RRuqP-q}cDI6=`8~8IeH3&|)!&HgYVG`b0-rMC;Gh zs5GGaVG-?w%EySCrcaC8s6t0;T%Ofnc85#ePh!OEscCg44x6m6!Il37xNVa(IBgT{ zgx;wJTvYWkKnGUCe77ZU(jTfmTZpp(N5`I&iZO^A<*+69HHzEBQP0OX8<0C zRjS4_+vy9~Vrb#4FRU%XzujCEc~f01Q}H(`=In>%Da=)_t#OyYz7t0~0QPss7}&qU zwgc?pEG0wst#M|^hL`2Jm&)W}q^f^fJ_hT~#2G}RaGn^>ZvdUu5#?}FcL*4qP@aJe z0QVwpNm1(Q*7QPw$QcIbhWgVeA(3-wxk{`6NXNsLGabP1V5@wpad zJlC4T$d*Wk+03BsY`aZeSOm$(jFfze0cFoB6d|nP=&(Js6iSe?jEHY3UwRQUyo}>Z zrhX9_nW10AWb)`2KeKh9B9_VHOS^u_<%^?V`tqe!zhpbbUn}W-Bxyi2ol#03VqCvc z)nPj|;DdVy^oA8A#QkWeyOm_6B+WvSV!Q+Tq5GoV4hTW;-{CMTr5Bv|*6P6Q5njP+lmtP(C-H2D2+#~DbK3l4vgv`{!6$;bT zbRESM?9`%KtqB||SxW`3*Jd7J>6>6f0^yrEVS{|x&R7&t7>57iG9zG3eh(}lqH$ja zkRpE9a}vpo`_?Z@Lh@03#2nQL$(4#gmB7RKYOIT7g=8J2kbIPR1j&zKdjiSn#9EMS zL=o!$xdzkS43K2}vVl)BetF6GrAeiycf#*zh2N9-afT)EW4i)PeuZC}i{BuH-@Qx_ z{4)Ow{8WDjBFzO6+|}?gPMjz|6=$)=eKSx=L3Gp!syiRxR221gQ3$PBXE^G)vpV%t zVPtUxyG7rO`wEsO_$3(k730@>1YS|IDO6Z9_1vY6Xj0WOqGo(AL|D=9cKDc+ zIrBlhy9B&cYG>43Vt7YcC(f$_F1QcKCFc;yI#wZiscHzaJp?-t<$J1rg9ywvLLIT@c$ z!~dc9?@2ZP;4##X<~P-(06@cJW2c*9F#S~`1FniB?C>505;~? zH7-S>YlI>vyA-+TjKo07TN8W#S{h6lv~!Yfjnc>Ank#}_ z=Xs&9gKRmUwq)Q|OcJQrt{Z?0Vf|M1M`+`edZ?3rY|v+nBc1i_&`mp>Q!diFX^ISt zvF*s!3ahjOxg6)7>H6zeq*A1?6>2i3$+1q7*DKcSt$ z>LW=bnPg5)-&c}`BT0$a7mwqR@;*b=3;RD|(yBo{a*Ud^S+|*J1Oe$I@`GIUS%y0W ziz92%BXm7L0r^-tHX>_-kvE+=HJZlV#MZ$|8FN9KfhU6b#yLlp=^Wp&kMwC|Hp5zZ zrNzLlR&OGJ*2hz=Te6YInup_%e@wOJ4NJk*dZ|+ue~~ezdy6&yT|57G>z1#Xw?DW8 z;?Cy1ON?wu+rYX?r_|uyF@(=3;#&oB`xrbp^qqh zy~A8tNF7P44lgU4q{K?wR~q7Yfj9#YV|M^MomwcV9OekME=4_Uz4Vv<@}*pT`IAb# zUe8_PD)g1BVIWKf2D(VcYef1D6amurx!KM|HXwZ}TOnl1O%z!!MXq$2>0*|OdT&x% zSZ|h;B7YQVF%!#75UExQU!;iC->on9rmD}?cbZYykj8K#=;O)?KENKpijI3lNM9N7 z-YegBXF^e{Nnd;^jQC`dT=TV6 z4TTX8_=Kk6q1md&)Pp=Y8iG``Yqna|nDOul9Q*_xwl1}-nhE?A9oB3QZuf(OXBFW+ zU}b`<+hD%j05=Zq%D^V>;Nn<1Y?b<8xEVIgn*l3pSiN)jXih#whrx`$0d!bl_g`$M zb=cA2*>--%47JNO?#qWiDbRE=+Y$ACMnzmW?tU1E=#X+!S9)T`sBQ7s^=u=A^+5xh z_4vx$JI|`QgUJwC`HN@%X!rj(umGApaXj3{Fv<^$}IHMDsuv_!&9ux z;!M1Mf!usg#q*ae3GIiXusVklR>ql?<*B_thl3O_vaKvT6J>L)EPpoM{dmvCdkNnC zcrV3!iIpi~8%QceQW<{BtjwBvLddGE6hP4id8^ckd~;6wd0RZNz>7z&e6`9i$8!$S z#j_~k03SO0;hj0ef?_M3b(@(orZuo2TbJfH=hb7xJ5kM0U_D-1@Czyjnr5;XHISdHS0x{~lFbfvq&Fwm9AyyBgjaQ?*cM&6G% zmC?_F%GvxR3?{Mb5<~J=Xf%PQ zzatYs%ymJW4I3AAoR7G(s3LjtWOP5cqj0H0m)!58KSUk z@bGncH<8Zs`8ja8Ym>7*j0(WxWha|>M6Df!lCxUmL>&16xbQ{OusO*InV2O^{|GkRt(V;0t zlbfCSFQ$4HX7U55!iG9yj-nZn5}K?#@q~FK_TNA-PBV~3f1r6kl3uv@lHu-P z)O5yRB%{)B+3PXnu3A=t*JM|*m8tmB%Ibo9hclsEWaI-&HSLl(k9lIbgILBc{E6~&npYXSE=70 zLxZQ!z-IpR$lv>xkOc_A{O0LD0|JdDQ!LL2?ngK*n;yqh1ZFIBQB6~*rn@3_!!Uy? z!3cfGE23oQ7Dql7C7ZW#h-UH$S&5p-dw38%!WKAZW8Xr-S1Htf&gN|j z*$e`K*|KHe50v}<$RC6H-E^EtS37!c1}^kw)*f-+WiPO@{&wBve!0{;BY()uFGM!+ z>=HmgVNfRfd{ImpUj&a#qhRj+c8NO=)*}V{j&LH}WvV=1Ry89kq&Ml7mfk#3QZSoQ z83+%`a3_*8fd-Z-U5fnNTPRX3GnDT+7Bfn`7lX3YGw zD1uXAIfSu2@wvIbV=d=8b9vW;0(cDp8#6Q_NpHIC=&#!Gnwk*5dEK;Qsox9>XbeQi zhKwc=DWj)6h-_8MNaZ9|DOW(hhQ!!~!Fr?K zKiw&!z^$I65{e5n=ByMeE0Br*+4zrHGvLR6%$0#s{4cZXswzS2gd9-y(_WT%BMLn@ zx;wD-%5;AW`K9|?@gUt#r$%^CS8LX-cnCt1ha~XFeVd`X*zmhxXa;2)ZQ;M!W6!8& zIER{M{0qh(nlZ+0#*J`bMTcXE01SE7CeKnHVj#;7rVnr^k#o*7C^k6_l`YMX-d#ZFcIgF!x-YY^G!l!cX`x?Q!Hs(|w%HYD27NF$yl-FcV^ zk%-nnLtWy&G0y>VB$6p(b`?_wBW2*az=Axgn241~!!j|2gX;p_Nxlan?Qm%+KlpI* zgI^8^fuv(3s7%t87UrBBn%JoxKVx=Nfzw5@x&fR z7RF^mUiXt->Yy=cSlvB-J&>L2<8Sp6=40Z> zao-6*yluGV!JqIc&~!5?X6EY8CFx=$seyCz0n&91+0u1`#AGH74;X~~7T6Ap8{jZG zulgtIs9Hvhl{X{##6QYEH6Kz5!+h8-5!K4=mWm?6rrXHLwCQP31*3lGA|0n&v$(-l zl(m6zd<_kRejC~QRi|SPi#3M|sFvjaIlT>bCePaI|K61PNLpRNK^b;*e7YTurIfeZ zb#k+}7H(ACI?amb8}0pTxMTuN2rZ(XFl&D_SlnuburR^A=Tm7BF?>j#mKkj?XgWSE zC84NlqK#zXs8{JZzH|bRl3$+EStjU-(#7CHfrII_lT0x30OuvE_|6QD@v2Q7BwfT? zzCa6wnpVBO5S=^#hU8tv zyc2caoskYGz83!a`xK3v979DB2*IZD?qcxf_)>V|Lcv^v_6Fe{NU_&Zk4URhO0lw? zr5G-afDp5H5n>Qny9hBzE+fPsxr`8lkZba3PeMY81_O&B#v!oVh zBEwphAseZ!Dm53W?JCueR5%|fGE0z}$;YfnHhx@rmkK{mplJ=r>B_qwA7xTAl9arg zy{`=2wFmRZ7lci!hVIcPZHv1?w$!P`o@V_DDqfGbWRZIefEGjKc9RM1HN3$s85)9k zpt$dOytNI~g5zqb{V})pELHp8RqdzZmY{k>6-KUTrEMH%?D)3!I&{zAjH1A|Cyg-O?~ler?u6rk65`=q~4PYZ<$DwNSSZPr-G63se@K$Uujt<8G zLofL;DO1p+S%^Se!!={LOJvU;4&Vi$c%H+j-za%I>M zsxL(Ky2yryiSb7Y;~U)~`KriCF2?(!h}b-BH^3R(r8ayV@a3{dN^SUf{g_%CJ^_zd z8|V5+I2X^7^+Y__(Ggwka2Ic-C#8HJJKjRV^k0K{`{p04c@bu{qhX;zT{sVIx8{YV z7=6y&TlB!+htt_q8hOw!aGy6+S3h~eT{WY<70IglUW|h4tG*Yb;JonfiAcTg8`$2H zy9tS+mLbt7Se)pglc>E3iHycG{uvYe#UR?KV+DT zb)cm5k8#$9q&K|g@%YbF3|fjgid(I=fB@x#qoZLpoFRx+tB&|(AA{J7F#dqp<(y^( zvASGk^M)Dgd;WMF+wz#~os^|HUalmI1l+O9b%_Qrs;uzg4nF{RP4;8H;ql{Z{+ggQ ze48C^BCB~qLCp}W9wLG6PDQ&fkhmL3pna9*1liJVOW&5xn>o@^b3~QX|Rm2 zrU|gl2```tP@8J*!kehehXPkHQlLrJ$D`imKo^`p5B8-H3u0|L3{Gb(@YBuv9=;Vs zkf3==2>ye4qu%apOVn3@+`9iwlZwD?M(-kJUkhub*>oDu&ao98N{i*C`YW zta-O{$Q4INcC;!F46lI+_^ zRXxrCsY@041(%HYN5r)NyCATD-rIo)6x`-C&4o83ZQ#1Pu90EsbtBT@cgbKkqib_y z-_D4PqW&xE1ChP4l)a=b!;bphJo)cV|IV(P&HR|oXlVtjIy{(YuQBTizuw1oZ*k|| zIeVd5;Jf|!;~PUORJiT9V~x-guS=MIwD8U8V7og-$vwo5&aV6dLoprb+Nv(QZdN5c zeQgKfTLmPE7}zO|}v_3B%@`qrSndC+aB zuTg!=lsBcGWzEi3-`1*cx$0Z1D(6?<+SRub_01#t+3ZsFO=)Yh%G9@P^{oz)VJJ7TdEC@03MuuV58)*key$^Onf^_Uz$C!@g zY-Zr<^%%{M+aenf+H~F%<`bZ$)dAw4A^yqTU~be|-D18iD^yKLbC( zIFY5blTsFUfK|t&E<7G6)^>Gfc2i55W-HSKfxiRr+a8pL8`QvfZ1R7w2QPlQvpx90 zR6r_@V8Q(r_OZmvV?7xZv#LMg1Sm^OGDpI^ds80pX)zvf&tWMGONf@dKVF7+tf`fE z;{;lBKN4|LQ-vgA1?n~_jfb%0mgqoS_u`zp28J)T!v|M3)9Pe64D2)nejq3WF7`~s zgk%K~AA*>WtUxy2q0D2mbS7d#=yK2Wm*O4qAu0-l-uFzzhQI@FW$MM}x=Iie85;PL zRmG{u%BtgAeK6iUwDPpBo^rT4KazT#ZtpTQ#H>hv;A~sV_hs@CE7ML4@7Qt1;;O)t zZ>a{TNRedxb+-SbX4u3XZK$k71!x(XQL8YP^#pui&A?wL@=f7U0>m^C-TM!B)4qPv zo<#c&+^K!tRQsA;xGk%<#b3>q*Ey1!|1+j*+Zy^A1g&$-ov^#pezyDnY*jzPzD8I6 z-=@THVX34p@}dd<`V=}Phq(Q3wpcM;E*6`o!f&!w>7faf%?!Smi6gD2*J@vi8`BQff{-r}bSttgJ3 z0i_NuSRCd{Rkae;)3Bs#5l)iv-Xg}>P;SGJJPZ2V-5)6{($=W0#1O#NZH3xpsfL7o z6>3fC2DSK+1~pU*t(Y4hB@}^1Uz(VP!&0cg$*0<3so45T!*CeBb*(i^FyXGi){Rk6 zWOo1lue9%!4V~Nf-T$zCT3`J~ifNw>OBkeI%)XFGt@r=`?Q{1B$rRPfp5he6by5kw zgzf059OQEq*kc9tQC_G_%lPTKG~7A*PkBmDwQ6p|6C$;|b%=ckbP3dXB6~Tps|m}j zO|@b01e(SYKp2@L-JMIXRNrlx@K?+CbMYO+=SnD%$}V~T1)OF)&qrOG7>!c6v>kOOvPf=tQRiH7TRA?j} z<%N}l4se&s_7cGNu&yDUBiFjO1fv0Our7nX&ze<1tDqTY$OWQ)1c^W?(zw1^PXf(x z5xXqjm5B9Jh~>D5r6wVk*uSUsvvQ-~%oJ#4#AaOOp#5AdFOqaz?c!77K<>``XCNu52D13x`tZ?yM@~7Z=Bn3y*HR3l0ITgq$d7bNff8%p`Dymz zuiy<@Pf0e;j^5X!FFLmtkT#n_;^p zhQ?aS0K>);i%N#Bc6@c94qmJ6X*0|+(le6j7JNq=NB;qui`~9A+ZXlLFhR)v)nTr! zTOmc@-N79J*1U7TZEX;MBQQkAU;`lTYF_*$8nssaAl!dL=nTz^L!=}exq6U%wnO^( zM`20dTo|gVvTIP8jz+>=FqMo)w z`lLbL02nk21ns^S zrcyU_ywOC~P1Ca>%E3NQTD5b%Cb{pILhyt^1JNr(;^t|PK zmW~|=w4MEdu`cqA6rosV|GU}tX6vHf9&EDe|3lm&6;dPv?Lm=)-69{ubVHH7*qKtK z5k(koRpNRR&X;((G7j2t1Al-+y6*VMr?yr2u~p4hV0{oFN@>Mp|* z@2T{ihL@&wZ^6bT?jm`NE#)o}b)|-EBvJch^X+=VyUQi90z&ScOXkj$NhGYX6RTiG}hH!_@F{b%&J5& zV?sL^Q9@yRLn;7M*iOfT2-{2L0iR0oz%wu^(P3Czv8u-~0lG0(_u-b4g$XAYM-p=U zjnJ%_Dd>)M(QWJybW;?%m(gP*=-LKds%2%=*pv$$XP}h!a7W>iI@0T0Ktm(~Yc{70 zGNNkiK=G?tH4kG}kgsw(15l&aZRK(LYZzZ;t;i|(QE;_t#HJ1p@i0^d=i*L~S}tP8 zj{xl`=%@0S;NI69X7Rjt?6b4x?cK}SPbn#(3wX|Ze(&ku1))n~>dz~VbfF56n;ic+ zZKwE8Em@25mrOqeXZ#oSUsC>&W=UC1=tKog%%!z#{-s3h4s?P}eNIvzK?3AX%Wp{> zd8d3SS6`;!i{Z#)_$;EtLEwP1x|hq5rBX!iOG+BF9OQ>A*^H zT{WI(37j$|?KHcaFYR_JxG% z`t|liGVVicB^j5Br>Lo%FUbZ|$)1oNSmt%^_)W2=QH8FSiZ-G8w&`HC63b<^bL2}q zzl;+oa7!paV5aN)DnH%YqeNgpA|T)xB)6L}9m8Q?lHnY#&XI9Vg%oM~KBy{&Z~$}uL*k&hFKS4eefb?Z zQ9ZXghPS28FbhG=$N;jbXlHO_{V!cnqxW3=2-U!GJ{Yl1htFl{sK7jkFb4?Cf*e04 z;6E`SYwyab1n$xT+ZG6*gqC^?fCZY!TQQ!A8K^7w1jDE0 zctS@|Bw}4P+|k?BdH;Yu9%v#*#)$6LLQhiv%eMj2|7<%}?Jp48X;JQHfai{*g?8>x zeO3x_m9gzCJDl%v4V^pX!)g4G&m*++JfVX%#VX`e0Y7EK@~TUN=Gob2bGGEz3pvy< z-MU4F=@=QUzD8JdLR#nco?5K&s29Y=jmLCzIk;g4jx=-6A9vS+)%>gX^ZuX9uXlgy zEWciWb12aCnk&CDU83AAUz&F>zZM=P6fD>BE8p3p{3;PJ%ai5TU`blw%CAq`g)mzc zVeWW>i33a7pKAf3PawlM$HlTYP%P7fm zD6<$Lo+n9JNK)Lf{zoCg3yKJ|I~5VivJ??)Bg6squjMziF^BS70+f~H77?x_H$*rk zw=Adkzyrl^gHR0OcL&59SN|x&WqrL336$wdghQrpkc5}D2uG1sERrm-uWDCRHWuob zN>X_?s){|2y!ynRR9B*(Am8ugcNm7KZD)zS4>BZ6?9VofY5OY8;|mD(Nw4Ir@>pc+c-LbP%>BKt!nvazEKYNFHA2<4CnWh%AU zx?|lkKwi0CGA|2r#EI6tGg9z70Al!0?tTZi{GKu+TZ@)M4GLO%KmG$G>s|ms?OY7USwh6FyooevAWe>f25Ze51*1}| zsqQWLG1uSFAlV*cHk_3JNqhw)@#&t>A;IvFY*z$dFS(v$E{0jK+5y(Q2{|XimC=1Y zMC^gnlItEN*8r)`q4`Hc)w-&UAu z!g$X6J^nk%y|e%9G=YB`W#YNysuH%(RzfQG2PH~RphViIyswbLQ{IEWxG@CIp@diO zmziw+oMhShg(ThK%GRnjL4AOTSYN)2`hf;@fhSsF;*a)EoBN13WoHL;=r2SIVo%|M z-}WkG7p(OHIZBqBTX}FC;wAqH6R@WFroHUB-1**recMS^bp<#s?#lsk;k@pled4|Y z@mQ5d&u%%!$ab$)JsMf$4C1)2=z35XOO#Jo^Y(G9+Z88`mz@?V(!Q;fq=&&;S%^6` z?t33K>ap_$9s^D7u2`-5UfO@J%)P#R7?Y~&4&2+=63WdmI>`li99WR!Mg_0W7Kp#I z#%JlaOZM1Bhr#pO#UAXnlU#D=OMz5|V^nb5V=ZMAPAN&EPzdeoM4_WX=f!R|atY~IRNvMuxDpA7$Y`c5 z;HL}Crj3lH4SLitO$F30xLx|+>}NFb-rUSsJ{;@bao_b)(7YGg z-!|TZwnV*yIQAi7xkhlPe#ZT`-PDO7LRYtKINt%VbXVr$QFrChx+|}^R=U!vDUfLa z<)SzqMLH*0Y1m&7dKU=A?oRkFjsBNG{~1iU#HOAt0d7;&8lP8fsTED|q+7`A7Ya@khlAn%| zd=9FUSEL-EPp!ZbcWodo7fJzzkM7QP+PfYk>32>+>DT@|V`nx4A=BkM!aU>XCUC~3-?pwwXK|8fo6pu_F%c7cvn zKwoF0qz%Ucs4lWtiZIp=&A!Mja)c`Ks9R)Pmt;JkErzUsHNTm`c!AoK!rB1rUC?09~FOI{WXXZ^g!J% zR!G#%ZLdg048~FsjabE*2!A!jW%OFarma|!w!dEP#TIQmW!4VsqMkA^KGHc(YKL|8 z*WQo;rwBHjM@Mx-%pwC8|8+I{8ez~BzOJ=6TX#%fL3A7tMaQiE$}mVBj7Z@7qT4a0 zUd4~4hD&6nN!@F2h7s(8qB=XfsLs#3?KzO97Dc|q;T%GKUfv_*=h@X_C{30J_;k*b z4w>4@?bT)LUxxw&@>HxXsw=|+$<^J0(VL)ej&q8lx9N*b%$3&44Z_%mT<6MOdJn@o z7RM<*mHZ8_NV5@uQuQbM*qZgIe51PrRO%mDNk}0`o73=Knc`#;V-y!cuJu5%2YWYEQHf~c(2-; z!f2qoGZ7v^#kA7RYAzHvKD188!urwmQ{g_IV3toKGst2;fF7>>Rv}3ak`!b0`cfDx z#vv8;t%G%^7^^W&52Us`bWabFk{eMHJ^jTOrl%ibk*N1c0uYwG#*}oiG5zbO$4={G z+r+{}=c=_%*}OuB-F>QaL!%L*9=8Wmmv_%ic@3i$bAYQPP9PFd?~Mxg{axIDNlgd= zXbFJ{oVPJjfuP*efmrp>nP6$a@8HNaKKls*|75^N3*)V(g^Os&MZNpGExZfxC5j@! z%TftXlrAj-vlXSqgIX#SY3g|d_Fx73Q5W_F3id({Z=qhE!Mz9rx>RbB0j*lWrB|F7 zfWu}shDQ5q^XY)c<1h-kePq18OGnYqSCHpE5B0a^V_(uJoL>h1Ov5-&;e6y%#0d4^ za#0y}yE;pe9}GwQ6~ny)hU?*M!kPwWpc3J_*kxc?-I@WA34x~mXiet(?#nd^9F8uJyJ`wDPdE3dFAoy9;YSP~r>S@j2XE)g) z@K>ax=gM0M&{~m3JX1nl{I&h%66BT0pa~k9UIiJH241+)_?X(j##j+yyI%syF?pm0 z({>nz!sJ>mxqe_SF72?QqoLFwXw;1Cg4)S4vNPG@2IMJ5Am3&zU~+`Z4alHoso299 zBPmYLomPV;OASAxhPLC~u~ShLxrhsm;-crWWa3=Nfs+4IRn1+71lY?l!Wk8Rb$xwwS2LvtAsl1 zLNh62t|gtOBktsPig=@(T_^QF@n4FWXQql=+*QnEI%{F1x}@^&DrPdJqDNgZ)3`xM zbcZ6*WiSU-L+u?LhA_m`Fzh5|wErbEih^@E8x^3SKP?#E24^n*Cd9$Rmy@nuT0qCk ziKdud0}J*8L7bypOq2Bbt0jL*!v0a{Em7#LzRsZc)OOv2=m%G?Hxkf4R;|DhPh3SM z+A?NzwZA%#+(GGg0v<&A9mN#Pz*F6$C?VguT>bcfu`{oG@>Mr ztRT?l@_bQ}pOufL6ti+QM$yMY-}<*wj50}`u? z5?rGbf-Bz$t^p(f=Ww~{d9`!G6jX>g{2&Zz#Br_!gN5x@)m=GS&`9*kSpl+uLCI>`XDvlECq=CK-xsmE@ z)T=P#^l0uc6;!w#u=*qEfFcnGz8d-qgjSQc87`vcO3emxMHqn$0M3GvCYRO9h-&*- zgMSOdFVMuD;OL602wS@1IKsvLO|q~Yt>U{!OCK=|?@Jao3tHkB*x zQoAiiOYOAJ6nAa@P#X8SFq!X3Sb3`UTRYG=umG~rpQ2nL`{3OCcz(>(-CosqidwH3Zya}=dbhw0Q2p#$m1)Rg_(qYGMon*-_ zE((z+h`_R|eiwUuu%`1x0$WB?8_}-WADDI(t9l$a_fIvoG{)lZvBsKHSJE+U)y`d zGiirkp&}=}3Z(M{k`B23W1WFCnf{ijH%CLFGu7ilz12W{7*O?y+E?Ioim{GQX7ds; z)(;Un*6BFIM1AMNJXA=Y0&wV_5DBXOvo8P2~v=A zqV%0JVkjxh@c}(U!7LD%^gS!mf4x@l{e}V}>U)r&1?Eh`90-l#(IE;YCHTEkT)fk7 ztSHFI^-aNfI|Dtbc>Wt4)H8EV)|+I-54DhfYUjl7ImDBgw9~TMm%iR7*SM9q(W^>=`u=Z5@?%!fqD~SGx4&55= zxae90nE8(U9Bea}mlvFNL|0y3kc%I=yg-kKRH@-g)X;W+Qa>J++>cjYncR5mfVknrTFgq5gWaC+mDy(Ga-yEw+%8MFVM*f z29LSb!Tn7&PiS}IPKU&)s)@7&l*BQti6?W25kG>#>K@8O&$`pDcIy~q@vHXlaCF%uB&Xf-(`5Pe7O4|VNj5^YN3dF) zGoX6@6WD61=NE1^Gd(89@k;}OGI!wXrEaoZAbLhmXYr!WF*%1z1^rM#+XM8#ZCR+k z_lD8-e7NJ+&{Mkg9atC$G!5WfdNurMsx?v>@#g{8XD`Uk1poFf0#f~3AxV2&rAIDK zrp6b#rYrDE*J zZO74}O71klDnxY$v3{wp-mQ)buN^^vOU9HyT{k4@%VU=DMH&G6+pRd zC@xDulqWWkr3C9TaLnbD#b4qAi?tZgNI+mr%AeN!H-m$^%`i)H7YGdMSXiK+$!6=# z7agk%3Fg7rbM9&DFgnihQsfOqsdwFMv*~tx ze{C)w!YQeUAi!U)({#Q&1{cThghx0b--6!F06Cs&($!8G$mv21Q-pS?yJJq|v@C3M;6P%k|(kltb{~aUV`HwiM>+NmV(F9bbPhqFSMr$}Uk>nqE*Uz6!yGpkt-t~Xxo`AYf6aZEU!_0t(v$gX!8xQJ zcR@ftjbC9Xb|Ae)QSZ}C5dLcaE}0bn9e@2bzwOu^zZIY@V7bAX<#Ne#y#lpKEQgg% zPXM8;?dH|^~QlN9Y8$^>bz zXE*It? zv_rJUyYYrBBUbm4+*+*m5o8swKa7%UW|;(2(HZ)!%j+MFWrG`4gRgh9Z*Kivwb+x8DRIz=fm_MmlUsWt7ewr3%)mMg#pfw4Np*4j9fLXPS zozO{ZQt{ie_lEmW?K&HGqVmS*IvcJa?3gHNWz5}5e+!7Kw9lT<*xh(HD$=%Gj3v>d z!pF1~WDA|&89ZO#kjlg4xpF1!SsJ(cp%CVehW7kqfL?yL=w6XeHy0H z6!qRlr8ep-guSW8`jKCDU?&aTA21o>*lLjgZsvaeGPDl8qn$9hwlT?M3PWH$T`-|? zss?4sM1%ci4_xQGEcAvewFx^36#+lsa;q~QOGiSj4@kgbype!tHx?;Aa0a_yxeM_s z4MZL0u8w|(@+6U(E)9M!Ar0n(AJN)5uFg0fRx#RLM5|1M+kh|Vhr%hfO2Q@JBsW*& z7yM0Co5XyHc)z~D6&IDj#@!^R5r~*?q{bosh=*bK0rO+tGMHDiCJiWJK?lu|Ly!x?hAvzTETT&{O+w$m zec)&7y9aT~c?6fMZwbH+tE@MOu*6281@QF*n&?7~y$3M3N&7+AB+eI~kwXd*j6K$m zGhOqX?4QK|wQA;I1X}Ya=D{d^76J$b3Q+((-?t!&a8;5!@*y0#&VvG?*ajGYkej#L zojL=CVa~X1&_Ve_wGpHML<-xbyz02%rycRwe#nb_4}hB;TSLXxdJVW$u1(BUfZemR zS|QtT)gUF642246c~S4BG9rAZ!fI9(^n$BNm?FkwIZ(?b$WahksoJms)#E1WRu4Sc z^0^STjqMPM?4uU1teP;sXo}p6Q4bgc0b@55xed^GnHF9q{A)oK=NN^Y zRdWM@Kse@tk~fiFl#dh|aQ8t1+ELt(!2(Tc*Njzjic~`BY6N--hm`G%FctZb!z(fO)|7%W>uwr&QyEE0>II%*X+$M4^$DJOJ<==aKE~t^0Et@Lhx=H^E|g zbR?Ra5P|PGr{Z0t;d?AK4W(obK(CeZG*FFqx>WcjDr_66leUavQ$AyoxmoiwN!q|9 zbF=1ZNn%`#J7p}8q%}xVzC#k)pnRVSTD`(!SBiA&ra74<=Meu@5%wZIkW< z4{=7WASudTu$QN|E$|4X%LfLppi68SPBulwZEtZ}xh32AAY&j_pRvE{>lwn@#G^(xOR?Xe=u_yVK-4Z|w@(eY`xRf8Pygbl z5tJCYi4p$Q+iHZHz=t~}>(k77i0N^^+u!B#^+9}9L#W4MjvepwGLn32=oAtqoB$o^9Xff#O6ejdSA9!vaoJxl0A z`PkP*@5*LD?`Se+)R*g`w@(s!Dl|v@@znp+eJM%$-+H+?MWQfqjqJwI7$Wb7>emD% zSZjUIhCXyIMI*F;llOD+E`iJ+GL|`l+=`xYav@%#F(bk+j|j$6eC^aF_G`{%SX!iC=hZILVo>2Jq=_ zwO&>2t)!n+`^kri4oyCH)6}ZF$hjq#!UK2*l15 zEO-J7IHQc5Kh?P_CamCQ|D}-lQh>&C@W+~ugD)^oU2!Jq*5e)EE6ND8Y@!WEd*p4$ z^8r-}S}W>6GChwxC7@m-C@jCT_y`nt*1b>7#Yl9bl1o(boPO%)4;Ph7rThadFN*dt*#kAm=zY7XG&;>iGQ*6RuAf;#YS7Nyk zYPt>I6p$SM0uF7xgu7g&d$oMwu_kJyPF}<@;0>{hqrN`0aiwF^Kpf3V43Ji5+k|o$ z;?Q|L)O2m9t${JvN8IK?1>|bfCF&H(3|_ z^RO&VHE_3`rpY&l-@Zm!YyLqpd)YV_0Vd?HSnJiZ7u?bxIN#u1Jk(-!eS|l6%=ve} z4Gxvv?1s$!a~R3F4wbcCKPq~NM^BUj`X2xm9R-J$yvZ5)t*)-FuBxu?ljs!wH?~mi$%|+BXj#k*{e`1)^ysb|Gb7-78SUO)j}dMCUB6gE-;k9pyjUCu}1VJMKQEh*#3q zy7)3dkv^#U1I$z2^4?e^8&3ail5##$R7Y-?9>gvcE|7Sp(~*{TN4Tcg(;q?wr+?%j z(MbJCH149GhT+yd=tLE~dC&AG;OjM_B>A_LFhM)J!@dG{35=EbdN!HLL+uWdu#?S)|yd3P|PJbj^XrMXfM z`ujoP&8rY~?gk|All4@ILX{5$y~Fw%tX;lv^yl6Cyc|gd09`k^R1c$0>IhUxSK6fN zXfEv~iZtkGE`P%af}L-HK7PvEq+h-7!*`kL*FzV!F4^gb*`G*}J5U63V4RcfT>43v zv8L3471C;fBFZRmeVCFTlENbif~`+Ym#E>9P~}L}SVAR}C5Dw^e#s;8188n)vXt(? zipt)rb*3Q-PLpb|fD_Vp*VrAJ&GKgKw~Ub4IvmwBs3FY2IN#j796wnNp{~YE(qF%8*);c@KG1SCWI|Xuw9)DbGgvg@m z69SWqs+$G+7X1mYJ0%p*=82jx;l=v5)4B)^P^G@j_@qAZj4L>>LoiK4hfsqukw#@N zI<5qui!_J&^>UW*vjp7}nkdm8X=or17neW@fFoc62G-%6Vis|XiqA`J!%?EzJ{0|k zMA37&`X=4xEQt~}W8Y;mL864eKyD&)(G>aTYP<_YZh#7BE#Kx)WIri_1GAc3b}=XX zNfd8gh}>$Nr=SSAQNBIcnK1YX|H*ONwsZP=aCE)z$HCH$`+-wSa<_4<;tf{+=CtRS ze~%YgrMRk+M`<%oCCoT`tK{Y z5Z@?8#-T`Pq)l|8h!ye@NzY>X6=81Ume`?!f-9t6VJC0A$rjKVzm zx}@oJPd_5(YE)GHR+u%&Tg3V$jzS+ zTMuEArom@9eo>A+(-^V(VlcSX=L?Vl?EJ6>W+`Nr`c3}+ zNAKP*>zjfva(xRQcS;pt#PS4t^BWvdwQ_x0hIio;Pe22-?%(1NQF|%!1)(-$UvaYC zjclO1YordYTxlpGWDvSHOiQ0#O59YUu(NV)kSN;8ob~iIiQ0=OwQ>z&D`xCrc_hZM zB_Zt}HaD?yg*!K1s@bFN;y|BLE86I{ZLFn| zcs~jBnn}t@sf3eFW6+T~7w@>-`-z62@aAVHEZwCR;Q2=@~c- zs|mIl#v>IeS-4Fv8|bAh*sW!f z`}Uy1^|<|MJu1a!rSBjrK7@+lMd{mVt+Jb5z`1E;thX+FN;fwXF(`w)Sug@;Otbdv z)hXAiyoan-imF`F^cuTE zbL^%swyWbJil&h_3pXHSY_|6A(LniC-lJBWo%a&Nj4PV48UB=A@aiiWklt_Xc>I7) zsum};(Z}mtaRU8Td?QbD_}_bzj%T2dGrhl&sCyY@Q}0fR3LpxOCRe}4X{eaat*_u+ zm`)NDW~=o^hv_VlBGW+}A;PPhdq866GL~YSj?Iy z#J-npAeKR4v}S+k0MS{B1lZh%s9iVLOk#hHZ0_F|5eyWcm9=b}n`gF=HlHK#@~y^63o? z+2sF#|EFoVCu;uxnCix@4f{9cGnH_W=KnfhTcT?CiA)>}TTPBH7JT@mw=!l4RnzldxSNmjF%wVxkCXg{W_Q~e>l~!0QBGhGi$~|-eu|?jbmcKIz zm>Jtc_1=Qgrl8uiUiZFwGA&v(dHG@Q8uh6bvo=A@LIlOEYY?ZbUX-D(z%OMmJXh%x zV*h$P4GqFx2>VyqUU(9+{_onq&L{Xi0X`(CJ72JonnJj7?=3qcNNw$a@7TYjWJi>g z9rdsf{Xer0@|Hnay1U~AnpfWCUNa36>j0^i605@J=PLxCHxV>5aWND_1<=&@ZH6$9 zd9`3`Z%x&n$8J%utzIiqtsq>RRjYS3#`zw^g>k+WzZA}s$MO4fu+R2v0^iRf+y5rM zM+smQa)Iw-&)fK}fVKyGPhn>T-;cj%lZ%b-Go)lGN`}6PVu6wNLu^V#7-gXuXZxV= z8lQ&uSAK*%^AIZW7X1i;hC2@4qGQbiGa>l2IFnGtZ-gOJ_7$RbMt*pQ8WpS){CWdG zOolfIf9E(CgKRJQ^PIq0MSu1VbU-bWhC@GnW*vHg@x}JL4<@j?p$@2@$^7{%ESBnL zSFvSs^B)yLk4vV;X^lxH5y(VwE(C*ZNPL|l435eb3v#0vad;5~b)XoZ@wE?5K0Fhb z*AoDpfo@rD^g^1Xsf{X+sJghz2Y1(?&$-B#C^p{-*rta$umD-CYV^X(ZlmhOh=_4L zKu!?0KNhQ-Ma)N)_5}$&#cH)vSgk8aLwMsWksMpmLw3GuR!mzFHy_|fBv%a;g-!@e zIA=>BhX+N+V2nm3$r!m|3E>#|>@mXSiaV@<0F<*Y*$1B^esa{!OBZ)=T)J~yPDJ-U zzX@n)Qx3bqMLuJjb#Ol}0Yo+1tg)~wSD%_n?57*s@u_X<(}s9l><3}cOw>1wfjN}D zH70>84ijwA3So_Lt9j+PQWC}e z>iNpP1HZ`JF1*Le{{C@hx{;r(+`3FpGWHT-aCTEQ$DIjQ95^F-;0j)@M}s7iZWb#V z2wU#5D|J5dHNT`^vh!y9?^t2POikA#S6Pe#AwJyKrx>t;L0` z7){U(hAqFh4BIZ`Ydp0Ke1j zef~+L_SGY~7#ru_a*AzWWAA9O%}lI=E{M_lK&B8C?@9nK!$zV8m1qK?eaZQRu?J_l z?d#xjjUREZPvQ0$Xv#h~x$4cNoR-=;$D91q;bc;Q9;Oxj73-Rvff(!od7JaQ(M!}- z#K1=mFV@NSxz^m)3|PGoSoLoBE-tlgmDT-i%x2e`&R$$8V|F7lgxN~(^ytL&@0$%=Dju&W4vHS1>AvGCQe}%rXY4p~|{k|R6yKB&ZaU5-Y z;Wf5xI2>mkyBOa?1uY=^1+Y=QcKqj5E%1{IEs^NZ5uBclhVVnRIE;-VE2U?MB zTdd!*Z96^EpE5_lIi29-BHadK!*dP6m<%wa_tHH-zvj|*i+^(ke7@@a=WIxCVY!O4 z@Qyw_3LcmaZs&&AvhpVz_!itEFO^jIU9b@kZI+qrW~SeqCpTAH$9L%2oG!e8wsx3F zkp5^=Df&nwzu&rPo6dBWFao-11&j#Z;98?*6DSIn|ya)wV}UHSU#(>?%tf zO3)?NhfDm5JX-i@Hri;h ztNt4xX)D{4 z=o|Uts>mOMB7dYs{z#AfF*NeW=*S-vBY)&a{+J&5V`k)!lE@#AM*a{ww0rtwWXkiA zKUPNmSmpfCl>O{!&YsL>NB?|}xy;zd@WAJ$$v}jtK7XUO9+xUhlj9at+}b*3JHmd1 zLkPbiG#k}A=0t>(5t0%5APhtpiZBA<4uq))MF+MLj~UHplzg!XpiN%l*R4jt{+ zMEj*jC+DrR^VY?A`@j9twcE+3bU!t6cG>gG*k$a4N)x!Y=vcGBm3qLA^l%2OlcU?F ziYgiVGjuKZ!8ikUMp<~kFrFV!6|)KEVVqP_KhQMp<5E`;rg#l}bs0_?b@)(Q^T0rx z|DjQQbxU!MWvoUx$CuFGP;V>Qs-kSP`t>m9(ATt5hRg)(KO#F9IM!kO3&saXl~^WV zqPK2)O;*PNy$={WDX(0^HTDWQd*6y(mBl^w9H-6Ud^2O4;}O}_%g{2`*8#>S6l>!5 zP`-g!6aUh})-mu)*bE4!0Rqr5-0k@(LdYL!pknJ z8Y>r5WaA+hQ~1s9f1&nJv9P@E%>YO!U%kikotMlaPkX-eQ`C6x&i5PC`)Pa^qp;ci zJib$WN1lFsrzHsQKEBhz5ASJw@1owb_})&v-^O?G7c;w03(09L=@0NNG@|{~r zsHcSQmFnH(`$qNtFyHCTjy#L_{)&2kk?*DI{Vl#fs@^y7UDQmo`$u@Mo`r(j_%anQ z2lz4(FF*3-cD&T_^8iU~%mzp@ZJ&_I*Zh_7GWh~{=*bt`cUkKgoO_J*=%-&lGxc+re&*`uT>V_E zpQZY_RzEBCbFY3@@!7lL!!~HMJwjK6(-3+gT!_#Q!HbZFa4o`cgxe7AK$wCM(+sOn zY<%QjtH>Y!s$7 z)LdQ@g7MMkd7!*g#Sk}kc!E%wIJ#ad6OV8hwemj@*rfDe+t#SJ8=ok7;<0Vcu}HX# zvx<$o5hIOGTf%2`KM`TkhO$#m+6co-uNk7gy3@qcDCja3|lmIASe%LC$+kF8YvX z)y88N5Zk8MZv1V7M#&VxfBd6esdodQj;?}DtfHsYJbMD78t;NpzuYsYsC19?T z@Z#djSiE%N%Lu%5=L_z$j!ojr)p+U87cX9};|m5h_BOs;fR`M;oQaoNe8GjAv5)bk zBVLyBr7d2T^QC$33T;Tpz&eS(V))&u=2f^%9`@1|;Z6t7z!33^dIjhKEp6;Px{4j> z$%009S?wmbw))|8k(j&0%5M0mE|0~RV1S83G77%dY{~}<(hfkf`vpaJ(D&G4(TqcI zf8US#HT`BBLJQcc&EocMXY0T^U3)P>z(%e<%$w0!phw;w$a|Lc>3!;hsTtV&K5D&n zwe$H@Uk|{;bxaYv^wxKl474KlQ1ibO7sR!^c1^atfSA{93TR; zaSQt02^k*Y8iX4VMk0(un2eB*P>Ap#!a{^42+t$DhVcIdALQKRA6NG{8p-8;7Z^hz z&3TQz7=r5-wu})2xfQpZ(GceevqgzakP30&6%;&mh+M5Io&3XQ;7+1b#(|lqH2ZA zFg}~uL}W4SxA35Y8K1}g7{6e;dCA5@*79d->!oi>Opl)+9fpx!(zjay*aO(INB8WX z_B_J-YuxaF5>n^q_uP&^327GaYtDW2Bw|2+Mxfi11Z4~QISd*sdc8s8+HGC%oK43t z&_~(#zKdgkE>iO#VseZ1~&lXHC3^hkxfpb{et^)f4+$sbBeqBYfe#Yo$)dE#zDXS{n z@N*B)ecj+`QmIY;wZu@cld_h0o*3ZrQxko<_>E}`X zY^@vateZX4IO%?Z)#ePe&ERAUB~{UiJ?TYL&68thT=p#8fPF|1|FxcK`f%YK@f zh1DOfNBdW4HZl>s+x2$FEThh~W*;r*72O@n`R`AI%*1kzQ|Q86c8`#wpH--M#+C9fn=D|WiI3yARb z{@IH!wD%i%aH>b-1@yBu`ac76S+>J)K&J)T?(!m60HM=Ng9AG6 z!WKd=&1^1y!y;D84sXjyJ3RV&fk@n?WRUKml?nWmgl8tcda^x822kW^8=3Z!gd=xc zB~z4z2J0rE*vFz&Cb)0AQw?$Vr+{Fn2if84`S-UYD#Udw$Q4I@c_gCZC=4ilD$drY zr0eLm(x-3>rK3+-)`l|GLtCGkA`P9Yq^UmQIj&AEw zQsFtPRp)KI-E{)-Mmnz^BtS)y?3wIO1CqUy0EuSndSDDz4ULhWQV+=%w#rSE-zdt0 zyIqD=T2WR$6jtjN(1b2h(}qnCMv>4OOnRXV$PilGc(w$K>9(Q`KNi(>m^M?b#h^o9EOQ~&UMS;xPlpLd<)tm#A0?2QPw zB8)?rgfJChCc*;<4hu3JlKsd!_{V=?_)(mV8idw^Q$HJCP zaW==b=FVnb<1<=Ma_P8|pQ>q(o8bIltu^j(%2=KL>#qHzAhc@k+Gp_v=IvMyUnr>d z#ETYGlR-Vw9#&K|LEC368ZiEX`TI*_J4Fv)q9c0Tht*Sw9-Hh!Eb%Gr4QqyQ)4m20 zHb4JKaKDa2CbenLT(3&5L9lhi??*3Q^hhxE}s#eA~_Eza>~`u0{vW| zpNsXgR6kehXPJJk)z1q3+@ha*_47OZtkTaK{jAl`m^rF_w|=JRr(ZvZ>1R%ZXTJVD zS3ei%=i&y>mHPKu{jAW>E&5rhpL_MQMn7ZbD!AerJn=a@nSNdLGg&`V^s}#irs}6( zKZogOj(+CqXMuh$*3VM?EYr`m`ng3v_v&Yje%A5{wPMQj)-m@Y6e5%$JdE%J!ZQdj zBD{f6j<5k?E5a^>eF$G8gbWH4KLjsA8p5>*!x3&n zxC3Dd!o3KE2qg#)BRqld48n^D{XlbX;8~8a0b#3-+lA*ogs%}o2uBd=5Sk%>8w8eX zkI)t2G=yFVn%pDoBVrm6Aur;lFlg5DQH}2*j~g@mn8wdxxk)whJdkdox>Go(8BG@B zibrbe;qfJ>MlQgrBd10tL*^{1Zm#Z(Dylx!ReTO7)t_+zoWt?a>&u%$W@sCJebDJ) zG0;_xd>9iI`C~#0Q6WTP6!5|Rl2rwf*s_MaAd9UlxPiiO(Tu)0#koekR$=ju2#a{-c)yT8N| zgFe2GYOpAGhGMOz`tPW~k-M=XH@rs9W-np>(nx=VKc~GvvJBPh{gL}00uT8R-p2P+ zXS;m?#p`V97SJVeqR}00M}y8(eSmW*mGvhUQi}R`(^9LyU1-C%~JI zdAh4MrY)6m5lzt6AE1EgA$s+1;sf0d8`__gC`jWPMe86~0YxnoihhIAr%<#TJyH54 zZ9frJJGkMC*02AYJv9S-D9WCCgBfj4y_^~704MxsyOlIgwf^7isfyv_dqV2ip}l!U zGZu`w{*o+OGiZlHygjymhX@N?NEToA!jrAO~CifRoaSq`ulX{*; zJ!*EWFG4q9Ut(|I{|lN>o!W!Cq*I|2T7eI*@y+t&FaG1N6pfPOGImb$| zzvgpU?>?i3#6HB`PMYARb*Mx!_d_vLqwcSe{kzVf4esC7ThmnquAtg`_8kSzHy0>W z31MNwFcQ3zU*pzu)=@bhgYws`=EgHN38yW`<1m#3^iOwq<}sp|YdMtk_A&rUNnccG zkItuYP}0{t=qTyeNRc;)qu0U}^^sWFdwz?92$Q`5R$ayAAR%Hl37B;izsz3| z-zY1U3TOfgWyuQZI|y0@U1oI_TIB{bx0PvBU%f=pseMVr?NV0Tz~;=dvGoxYR>1oh zY%yv!ESc+I?m{U-8(8QElD68(UZ}HbT0JVoLYWRc@sCJ`tizgtVAGp&ND?eNoLB(# z5at5*s58#8X6eaflh692#E{skQqf!wo}^*@w60EPwTADk$homTD8daU!2{ed*F+-hr+)W=#4o4 z@dwfLkpt~o=u?2Uy@K|amNvANs96h1%5%X!NdT)m_muTox8NN}5a&bC8jCOzt3kuC zBqE+Rf={7eQ^(zd@H;5|Y&0BMrW@+8g^a>Fb>G+yQjj=I?Y~Fu*QG;XfvvA*9)Q=j zz8+9sX%{<7KQGYFOZ9WGe%_>?qx5sKe$LX*Ir{mye!ifeuj}V}{oJXad-U_5eje7( zdi`t-m4I+{j(n#sK!mFiu0yyPVKl;>2zMjghcFxAL4-#ToYL0??m&eW)ylobeeRe=<&F+&|BUWOc%`h!TVT}!r&IDZ5Y)f zTpLADSyp5Vts*izo8&ez|3`V*wWb?fl3`$_i|2b-5paZR!?)PzIF@RB1g_N<7nB~c zP64zKD92(tAlqwt;fK?auchK_*0Dli8qYBaH#R4yAS;t2dBUaw8&EQarY}rXKo{0E z2cMWVIB-Q_h<5-6&MTCQr32jy#V0oq54&{UK%im&WJTm3>*qTCd`Uk);IlBqj}r#Y zqea_Y7^=fCEJwZ3(u|1hj%4Fs z_Ev|RnVywQ@NOYePm!AAPvAnxp=VB2*Ily|YVB>g2}#+Jx)b2Xi8*!L)$cRvGK?za z03tV9aXAsIdl_Do)qMq{N`}P&sAQ@kCHV>I=zJ=T?&&4DdufsP(!WF9J_qZx7dH1) z7~PKm5?BJT4fbEo%GFN9`afP1qv@Jlr6sK6z1}_z1R0IBS%5T>L#)s~rm4 zq9iGG%#%vxqUnyTcQeWf4{(!2%=lwkc;|S5KyWQYPB`;<4KjbJGRypdVF)Zk7LH58 zCH{mLi^I23{X0=5a_kZTU&7-4tgnTP_O`oz(80diP0HM&uO+=v31^@$fYD3I2uz?F6Z@Lgm^rQM-73Uamp z;uQ2z7GpI%!ai;h_XyDc9+!PMCXRQjIXkpob?|PR`dBZhZwCZ0h4J4|w@rPK_l$@= zNiJ=HKeSktjGxd(u924sdlHsd0J#7X0M-s{m0Bix0F}f877JDdCxVPhYwJU5as`)R zy@W$lC5%_wL0pa$t=G@ih(VNge=&GJ2cgrbjhI@si(Hg-%RI!)y-j>fq%*tdaP_ ziQdC}Az$@Mcj+_h4^vmL4c&kR{xgUmC+(GmbRjz+I}GYHtg6Qf+#6LzrghaqT?Ne? zV4a!Jzz^QhI;Qt-0#RH6kaAEJp>g>>7Fu`7vUn1y7U5BPVS(A+|r%c;iT#5RG$d6bVz%c$gJH;$qryBpc+>MefaJS)@qI32XQ z5+fu68vi+`>M0;xa*q}ey7PqsLQA}80pT_QRuBbA3A}FyElvw+vP+}c&D+L&hb0R5J{y3E|ICQfY zGpWk*Y0TLxfAA17_d4LPZ54YlB;losd6=| zTo|4;O8`D-Qy`VcB-mEBq8*QkPy&32V9swxNTD$ml-*7|u!SG8F`FJ*k;hT})k-?}c- zCMko-i=)L(U$GPetPLfn>I%-+&jI>5i9|eIa5EM*3b9(gh6B6f-z|2E`)m! zrXv&~7zhgyotvSSd?l$0yJu_NBXQ|ZtKFbt`7rcv zzs2G6VjKM>!GsZ*dB!tyamw3omM5o?nD#+V8X;n=nUR9`+zwSJo!q$&5^hlfISqF1 zGO7J-9H(f=r%CdLZ%L9x4oS8nb2VdQxvH9pui;8dHH+rKTD6WhvvO0uepY>bs8@Tg ze?yz$mXPKfpuubbfsvBznvZ?MnoCeKLTb`6Gqhnt)$r{FRIsDASyH@81&5!zKwV4+EA^BG6QL zf6{~~ScgdZV+z(b4y>=&2&}c5ExD}+?v8-9ZYE&uNmvbEDfdUQ(V4YUI|LgUWjq{~ zjZsWDSNY+;>`H(V1=-rwJ{Z%LKm7@=_GSWJtx@Mk56b$liMpp1IQNk|2EWZFm^&k-C+zUGibJ0#XY6*S%K$4%*QX*OD=tDnB!NRW$9a0QBYEfLPk zhx=k!Id*(c=0CT!3|<*zZ20`pP~5&&QN`}lbP$?xB4JP@OqW|!XEoC#Y%fp`OZGL) zeyCkTkO8Wd+mZ9Y$Ol(SH;eKy7S43YyDOSdd{P$|l~D60ntotxboNe?{Uc_d&}7rU zcK~*bg=`wsiCy#zsAQl}po7C^8idBGFO_3Rj{d&>AQ8ZAnouIDH8K|XL0&nev3%@o zR6w4sAm;L|--D2(&4mlV44hB4KLOnrBa+<)H9x;zzLw+)_Kc_X%+tefE+X~W>9HT^ z^cLZC4yB#`{RW->E#N@;=EPi%ox0gh{YX0R1DMh*=D`;0B|C8?6HQ+Mnl6Z_`q)}s z^<1Q*L;-u0Emorx#uOd%PwglliYkNGpZYvT=q#i(#dK_12ufBTa2q<_mfaZKMjRA? zwMxKH2>=O$WfoBb!8$FJ;Oo6rMg^4VGrjGsgYe~PNOi`T=%GJZTKbM-GzHTpdZLi( zjtg^-@7o)efWq#f$NL15F3y(HUyw+^CjWq3 zfaP%6j~FmnU}j9v+%nW0gO3?5^_srLOor7^MpKV1W;xrUDFZSR#u$+3YHnPqCcb^U z=%xci1a~KufH+e%KTS37cAEeDE;N5Osl2F3e9d$fqfqM z$*QvY4pRevu9g*&1v+k9hrasTvCW+%v9wf#wjeg$Kn3*ZGpMv13BRyTGXXwj3UkkW zBGcZ%_@|fz-ts<9mklaUW^A$aJn=jzw5nWNb{QAg;kGD%i8anjaRlM{QU`C(u3p!8 zB2GC`PsFEycvmvr7BMwk$r&DWR1>?aSFjXyBQ+DR73wwD)ypiC*Nkk$R>^B{0Uy20 zO8I3L$gf}wtL|mi;FopVNR4RfOij|_Q%DewD2T4LT-PZ?_jDHErBfaJzPXPG8cO`e z!HdPAHTmwCP?jJFOG^#EoV@BuAt_hTjYha&=BJy%0)Xc?poEQ`r&HnE2sAIsRt&k6 zaJOk2@!{(mU~DDBWVI3wNs%8~ZwclK|5mn>-7yYzYJ6o07vr!Pj>RPI0PVJb`5!HS-Kvz2k)d~_| z?J|wzU(w`V5E>ZEcc|UFmOvn3FB8_QgqC2$#K7;4@kf{5%=lmgmV!qE;&YF zCSxwYxs9_3V53EI1wUpbM~KH0fGeU;V_b2DDFao{Z6;bMH7-Mqii!4vVI3UhBJO^e zi3h&3IZF9BaFmW1rqBSwhJit2)~}d(n49>W6$i><%hm-qs1|I+yN9%}0xeYI(u)}} z?Ho=ND=9BCWwv59i~fZggxOGPHhgozNfLkn3e=k2q~IrB$!^^8D(ogxUTt>ckzY2u z$>pzJW;PzyBW*}^i#$XTW&)$GY+YC1`wtL(O&3IhfJx<&fpZ8V6si21JAn_(fD}Cw zlFb|CGvaPiu64Y>>T*YO2qg0J|HVOC!$GPRwvqv}STlcrX}}eP_7r1y# zDSkTZ|2>KuIq z{SO^&)3BpqCecat(iLRgsiwazc%|UX%$jQt{^%S{+T#2J`6`nb1#v2>#E61U7m!Y= z(11YIoR*od2(-+jaA^yvRX~tB79UzFeKJ_wy0-~QDRHRtU-Rs0bXlh;j8=256csgz?;&?-Y_5XJ~(j0s(a z|2kV=Y3wuN9`M<*r%UWRhy@XSIUWs*a(d3MsMC!7f&dB2G-E6DyW1Lq7S!VXX}F?& zFm8Cu7qI&I@RHVzekiepjJ-D;`>MoFKy39yo$*PD>cxzi;f%!+dj(p7UA{G;)5r6A zJCN?HY8GR?3uBV5=vpcA6^PNf#AAR&?GsYpf^PmXj`)o|%sO!YH!4tQo{C!5WwJ3? zMM9IPQz#Xgccf4~<{c@t0j!%##at_8Wdo1bufypkMsVe_mLUSl2we0{T6g#v`7hR^ zjlzwz0(nQ`X6T0Yd2Z~%*a3S2PKm&7gwIRCa#Z;ZEJrD)qRMS7FP5Wq-`JKTcXu`^ zCL<0v3?YDb-#QWqBq6IG)B^RxG;_P5j$}lDAG@uCEjiQ7T=K$uF0aRF>+k$#pJ&FZ zZDBvA0+YB!>{0WcY=+dNw0_|-l(mon8vpIk_+QP|bnS(^0vOEpO47o6f=MDgh`NFB z69w;yXF(rU2#>uDbp2UEW4`fIma5QZ(f3P*AELtQSEEEiFUso}P+%m&%eLYI%Uy{e9zhWFiewihQ;j)cBsv=I6kWB5oM0QFOq zJLOi8h-i49!!py5M*q&#y`O}{CVQX7Qaq`_c?ZiA#F+wX+7;2HeUkulGdn*A|B7Z5 zge95&l6EVit0y(lf+O*CkbI+=Z;&*oTPwvN)>wU}s21&M`TaI_e;jjnN$+=iQf|O@ z%>6`C?nDY0_Zr+rYcuZq_^#}q&@`RknG@MvtwOJ+YI^3}CV~%xiht%H~C8T~?wvhVuP-_*bUwDfx98^oK z(Hj;W6rXbiQ<2yNA-aO+uoOr=N0ItkU~;ZC?=n3@;*nZ3V{W`FC?B;leFc&&qgEPM z#ELUY)+b6|beLIxf&Lm2*Leb#K@(5JH$u8ehD@h>yKj~5-6FkA4D7YLciqieMhLY- zJwPMo;wl=1cm)+cSFp+QU{3-hm^T$hYBnNA9I^l>&O?58f=au&F?B!jS7UwgdsyIE zRbmsE3f!#)p6sn0m{IK7b!{BE?rMp>5wRe zQ5e&R#^>~s=Lq?_0>oRD{ctqH?jyecb&bH}VD{@RY<>cp|CAOdoAW!c&+IW!;2XD{ineVbs1lRLy8e8r!4-TB z`>9Z=IFp((QOFFW+>@dv?wFB47=GI(3RXr0M%WS-+f`q$s%91cV4`5FktT}7sM@2e z_1e`Qhq*iBX3|5` zB)_xX+o*ZaXuyzeWPqlElGm29PO%LJUda$WYCRMcI~4Q!CQ{5wj@s3b_ZyGeL&rcd z{e%Qv#i_^#b=nP(Vj#vs_f7$uT7Y4J>Mf6Cp9imHj7j!oLy<0(*9_YJD&;j;z(+5$ zLVjgHH4oOPm?}K1uZ|KA(c3Pkr^&WUB_@S+{tDfF=GH8lumBE8e`uvnuRuC@P$^(_ zN2GtXOsAJJ-N+~f`c%3WQfFw3gf0D<9}z?E6GM|=!Lj89TdUr2b@Vj2RkCkncAVd7 z0-;ybv4gs?GChfGJFr_yW8IGlHA7>XtDGRQ<&3R{A*Ue-*E9g(09yB!Lzj#RarWu~ zD+8VD0gGX5FJ)O(1LjuwIA96#Dg)+`*I)rKg@hE9zyZtVYcG==+B)wK-Vuc^1+(=$ z^gwH2Yci{}No416YBab(6($irlfC9m5jGL)Y|RR$fe3x(&~_LVsm{z=$%PODXkDyq z=C0uNLa5lMHW%d~!C`LS3h6{x5m*eO@=Dv)=q)&ZF{DsiD(EWAP z)0Fw@VtCCqM17@Sm9&ir*;17A6f7RhzRNIKxt@_n;<{b-%C-1_EM;qS z1&2Z2Xkw*t1+PQ`)>&)pMbU)!{Rf2lZ$iBXS!_scN;}i8nEh(9;!1%!Y(}(=e)FVa z9QxILO1(+?v|S#FKcJXey*6G4{w_wpnapcutcMNASi!!Z!v??p-C-bG zB^CzGV8pnB(@fXL(hj}mr5+m0x_YPVdKvniG7x_IpNqT5^FH_x^V0*5_>sf zt21>|eu+At8GD5@UL>*HbPT2a;sAS!#Gb_B_RX(tBnsAPO@bS45E8sPi;u)HP&5?@ zdNVQDtOBtv5hAH?s)*^2?)yL3d_~%-44IG88igFaP zb;4bebu@BSPttNcE^B79@Vxv@Zx!2_mrG_*AicaeAScF|i6xSBC+j(LEd~bo9RXVc z?nKDu1x3y&sM{ppjgo=vuPekaNVo&#k@yajN;OVT48cre6>F8H%&CWdTi(L0F&(OK zhyONpp_kxSP|JCiiOOR#j9nQ9%pUmon?m!8Y?5d$Wh&9k8*Al*?+@W6t*FlLY>T}6 z9`WZzbf^gbTx-()5q}R$Rv&Wl*8Z#7q#3)3M%zpcM5ckzo&qB2B9KXE2RK$zmIncf zzr$g$-3W|DBI{zQ{0daA){3956=c0CkHm*yxlzcPkP(F}sUp(9jrfTZdu7$F}v_xA}Zej@EQf+D+<7$p`|WLOl{{h0a2fkGQ{Z0vz`V>zmZi+GQ>CQGPHjm zS5~*OW|p3W-YaLmGQ3)kv{J3wlF2U+iM{1Ds298@BNJE@z504+qTo8m8Ns<|oedHb zXTH#1u-~GoGVtcWX=r>cx;~c*R3hpq89P^2a@lfUGo7mkr6Kc1<)R0QunK<0zz6@p z*{$d#MIj%wp|ofg5Y`n*KtpHp*~{UAfG(pMNl7)}6i@LVpm{g~s&)Q^TXbtY;J@cs z^A9%AvdK)mNf+DLCDn6X5{3!wOs#O(UrSOE-c(R9aG##|Ayvz=E16*?GTJ z2!`b*#^Sf?{{+}201RVMh52diAIVJ?cy)Nodx8FmYEbrkT33L5H)K{ufk6d1bckXp zNQR_8rns$@db7~>z|DV~!*Cve1Lb|1VN>2dC~Ba**+Xo~D;o^TFEh z^L(N?Xov$&HVH3>3yqcWDgfsS_5)O>G;=VRW9?wqoV~Q6nm5L89)!W~g|8B*uFW4- zS6@zlbk3q25>~cV4FiCz_G$by11zD)%uZUr+(Js!`DC?X=Rkw9RHXvV4e6<-fAkm@ ztYN?VaZq0VtEoX5^`i`mt9U$6*yJQxib>qiXRoX?pnLF5AkUbieD>xy?X!2gbVjlV zfB#!NTW{7P=J#(Av^0RGNc{?|co>U6-3MVv^qyfASci50nc+RdDo)+I z5D{uFHfwE09wzjmrY)u`ptb$}^d)XN1EcXYOn?#3qDex$(X{@AGNC#QvX^8RFOe&o zr1iKE?RHVzNU@xuu_SY`ChV}TgK?+f2%g`dsrOeCP1zj55G)K0Dg}#MYW=5ab+9GM z^m{?M3$~Xrj#vZ1?cT@t8O7-D18y5EU9Mn?@aj1d>@;iOfnce;WA!URMykL-fHa_B|int&ZzmmSyED zdrzRB*4B1ft%f=Z;K^VF-g0^wg)Thq#KuZ2{S-p)Lxl_z#a>MTGIm(ctLUrO`X0R_ zB(?~gf22VP#OF6~v}@h%I`KA=BQTJUwOOU|7Dd&|@9PzRu~~lb4MO#z^dz=wuuVKa zKve_r%=g>G^PU&P(_6Frlp$dG4>dW@`g~6@T=@?=-hi@PRl|K7t4~!2fUC#MpIKM$ zN)DSYqzC0CO#kqf?z)V~L zT~BqqcmO(%iqWt*4bEp{*87-2;CMA)8@0M+>)1J}1>17*BaAiP^22CBoCa&cTkVyS z@*7j=G?)OQ$U_sbgS*kQgmlAK0NSS#M=LUNq~K=?e&Q8d7Pix%2eFwd7Upl$Bd_90 zn9En~E;#0E(&?fKOdCMTO09&0_~_&TkX$Y!fgVm$$w0Eyw((U1Irbn;If#sd(&qIM zrt$3^RA)QNXCUieVOQ%pJSPZ7vD+#JMK<6HLS|O(g8B0EMf`N6gH*+$9id~jRMif+ z4)Ih@L&4$q3st-JK1fiqpTz8CLKwQESTfH3iXE3eMj1{Uc67hDK}Q`1WF0z5T5|=f zKmgiZP;dt43VYalD+d!-@LlAgJa5}!6g^@rp@JxP!2p%j#}&sACZkBKuuF8G-gueV zOk$rvhNyGC7@4nbLXP@D?-AJOm?}ljWzlDTsju(1EXsO245?~<--8AcuKgU z&tUw(O?f00^RUA--j~>q89OZ;yHa8o1HkGe4c#J%TF5Bd3_Dw*Xi$SANrnt&x?Iq| zi%{SI+ zfu^t$u~&^+XWOfCJK^$3C7m+p3?OBipLt*|KLYWezh1Y=h>j3PSTOI1eplz9qd-o)a9b zGqq&wV()v@IN@4T261aaYRSY>ewqh&4UJs@R$Yds7h7v^o{y=FkW|Dju`2Fu99wGb zp9Xjhp5g0r%>dddarKXY!ol;~YL_fJ%9+n2vIplAk1<5rOI}y%N8k$W{kZc55=e7o zRRnSt>IZ>rkw;=LsI!VdTKBE3e}`BOJq(kZy?JJD@`lb;e8XOF?v+~OP-`_dxkN1s zpW|E$+zIxtKL80&ZJj#?Bb`k-{#aj^G#l!W#|rqv z3U;)M)6oG}NJkIKBhdo|Q+4#zOED9~3b;^N0dbtjagYSuSR;Y-6t(2?;H_ddS<8{6 z9DA(kXGC++yQJwJgs=%+0r(=#6(~`R?pIg`dqGW7aR5(pC zpN(Y9<@+y34}_`AhCYZv>%hLqbRK>QI+2V@LOYZ}F98OPi$|IG)qqL!ruP|S|5NGcGJU#gHTC>(|9xhLb4G}+;P@~N^6&rrCh;ZA$k?fSlP}M4B<^1$#9@cu6VQ7Vf`1Sy1Y?hjuk&xCoYjhy^n&D zS|g8F7F$>F{zio-Se00Mq~=i#3$F#Obg{DS%CAH^z1Xs?FJZ`(BIhEi;QpjxEduK7 z?r+$QRSut_K1dozJ3%jJ#6Oo*ZrO!8vo2*1_!s;VLBEw?^^{M&YrV)|{dktP2&_T! zxYT|Vk|yXj7Dz1t*0Kv}(Y%gyGx_uXMmK*IN779dX5n5L-Uvt0o5yH<+^xVvCfm1j zuN9xA6I)244<>t=ctU^>x4C3t@#ums)sUpfue6;P8Fh@?`azAU!!Orhu6oN0nJ$vU ziG76#UzbN>LYYm3|GrR54xurEfM_DDgq2?gC-a0Rh_F8*(cda?Sn!;^Ady$BA?1)ZAH@WecPyY;K9<}P} zx&xelVnU-)v_XeJ+K@gIy@I(ALoOxUC$Ob(4CKV|HG(_C=}5z7nNIOspyKH zHs&IkJs4Z2+z7ur%(ha_Hm%&Qxmyj6WvcCjTO))~)+*X&y7`VibxNC#2clyFD`bP&s=&QRFCiLln*Mmh9!cvB~WbRMik-wbuYpF2}86Rk}# zfcCS<>%$pmGb1;ewJlEbiJPbD_2xmTD1$7$iesisS39jbHCyr~HUvEzyUQQ~hZol1 z;5qK{gZU!#ElkA?fCAO;+{s~){gIv4Ks~E$Z_78OG`_=#EpZso^jIyCSo*t#z814u z^wj(kJT(%8iIV*^X3qu)v>~Cpndpu>nrfD!ldvDj%&Guki5mIg`8p48El)SNIkBh@^h@n< znPT0&gUF4r!>}0E;tFs-u@wH3!)0A7g+uLddG?bW#lA%0WbXH9hszJKb=8mnM)ios z{$Z?x-g5dxhQ2u#&Tfx*N_X9bNyyP)1#$(4Ba%x)H|*O-4(XFpX$C7*U5{SU4xFMZ zZP8Sv|HeFuG_2aXjZZ4QMVh3kV(A6K!UtfSz`~b7%TrT)MlY;rVg}{?BajL!8oN;n zp7o(^#c?9e#J;OIn&VBgZ81?a29<@~D0BJ&S0){~vtUV5!@azLobjlXyA$O?UP4kd z!yR@)nM8_iHhPy?LFmVQbmx|6lD!;NTJ)#Ye1o4ro8WOr5D;7T^ng_Dq9;O zdp{Y;%Ie8R@&<|T~&T=P<8)dFi$lk$F#e`6|ZIOEhxxMAn z(GCXaI0`7KqdC-4NF58$M}$Zn`_94`^=4tJRGM$xE`@I-klYy6u|p(wFk}Bj0Ug^{ zV$WmjjIf*L=@R<`3WvsrW7|pWgN!W?*YL+<0xDzI!2YP~t&-SWWOM9z+a+o=qij3g zI*Edz3cZTYU^n$i-ZoB`UC^PeU(R$EusKrXE;LttsctKvDrS^zGrUcrD9<`=4Uwoz z5vAnp73Y%PV+XS(GjSy(JcZH+(3a!6S%<9)vBuD%Mth2Ft`l3;C#}N%o4FWuYaJqJ zouk#tz;{ti+RSK_I|6GfZFO5{k}2Fs8(U+e9Q_U92^K0|uKW!>*W-plxUuc0ES}HB zBbN$dinS1X?O+pm)1YbPCgdR&>5{}ueW^QotP`(PnXaTyTYk*6OZn{U%{zq-Iv&}F zH9oQOyU7Ze*9z{FnYY-VVmf^h$27_c>yoI2k)wC~QRWgWtY|JboFf>0PacUkK4)X} z;xlZwJZZym8KnIYMjrU9%B5-e4j8Ym&CcMx$2GhmJ-F3XOzlA&D$%}jsGKJ+NTLNB z%pfJkRh*AkDmY*zFtKFqwQ_A~>KddJ&DaYC+bel|RY*r3>=ul;LbK0~(J7VIo630S z3LZm$BkHX|xms(rUG57>b!z;~y3a260ZH1(g7r$lgu@0_d|%xheVqN={x#~f0z|YH z%t){m>gN^`vEvXKD#O2VMKdbH`t$>mcqbEC3<#+4Zf-%tXx`;$vR0|m*x$C6bWvk_ z##&lQ$My4l=CER~R6=#S`r5VVeN6QfJ(_~??(vq z4Tw_nYfvwthH3Ih^h3*4^Xtr>ni|s05lPu_Y3>4-W_N~h4?frZZ6kl?I69EROL+e# zF9pqOPr!BgX~q`IeQ^U>Qye)((u~Eb7;zPI5kHO~G^gopLQ)rXTQa_^O-`RpZzsR$ z9YXk0Kz+EQKRxWx`xaB_(fbNsylA@5T+~nL^C?7R1pjaqKf)|U?H-&T=Ztf8)soqM1g%9iX7Nq z4kKhKdFV8Imcn@!=PW0{pH4}fMa@)^R=mp>Nh9~kpug+ZiXku6Rt&?#gsSw8N!mnqC)Jh8QU$HkHl4AE~@hnyCXWE&CUY@ z@LDEU)YQ}HzV;^if7Sm#{V$r|p#SsP|8tw_zoc9m?*Ez6|K0LPTm@xN_rJ&gu>Wqk zZ=B1t%*@PmV>d{kH~ztxh6RfMQZjIezI~d3X;Tqs<1eac!A5d3@R7$ct{xtIEVCE@ zDXPwKOrCn#dix@=vgO^#WvVX;AC!RgjQMh{ULbvm>ka>RMD*Tjt>}%}K$Bxk-fJwA z0)k67K19lK%pf5La)W#|l$y(VA0oyI)!yc3X8MvBGmze%8VVaNHva-2}nPnJ_U`q*zP-Gk zoQ@ORpS|~F0uz5VvZ#;Ba-9gAq9BX{Z#~c&sfxG+ywd<)XasF}Sd-AolB5C*q^o!f z{x3i;(Y}}$xxiLg(^Va=AkUmcq^f1~FSU`achQSxRH2@yC1d;tn5F4uzadd{73FeIu^y?$z}lz;Ry? zO+J-S8@%P$kbEYPe01fz*5Vw-KUKc13x^$jwMN%Ot6{UHwrg1%T%M2#pzE0)z;Pgf zpZD9tDIn`c8;==+$6C(HkX0an>qQ0YEyQa!RDPZU+oOlMt2A_*gT)t56D-~=b2IUt z#WohN#jw~c!ZS)fstMu7^)^1d3L*P?2=u^YDoR1*O%}4|bR-RKw|+-A(@lG!mmMN- zF*U0D01tbY9XSo#FF1+LP#`gtzF8W_u|9$VlBqJ*bX?*t#aQj?L}Is>S8 zD9(eyf_!FG_^@=Aw6^+Q&SwjUZR>P3KMdTBJq#K{ZWn)vUm)>p#+Q>|6v7&`+4B>H zU`QjIJvDK33(y+G*^qBVfIAH@auTZxUc9P_&Cq<2T#^YkxrN3{Gt;u3yGp3Q6%+v< zLJDZ(Vr&x`mDb$hI%xxnrK_aADrxCWI%$O@eb{?9O*)ri#lqmZqL03e`6xR&S^GqcSwg*ILjgvl;I|aZfK(dYvYa+U@)d7%T31rbs!muiG zAsp8Dv|MiiW+H%bn3-FmZby__jml0H!f(T2H52cHGN$Nin9x)0Gg1pV@x1gjFIo7t1bkdTU$>9$d-Y z2Akz>{6s|_RFsB_{2ssIVI}|}M;;`T+ zqWx4QJV=SLe#56vB>jyOCB+&8X2`+xtZSuwnr>J!0Y?F{YDZSE5in`90x_KO=mb8@!aM3fnq)Cn=b?ljWFzK$vExfZnjzPl zQZh-$Cw}4hiz=+Gga5SGKa=A^+eM#yFxZ6~Id1%lqIcvd{Us64^<=JvKVjaZ@z_3( z=@BhX;&y-+t_f*o0jq`1hF^XeRA>x)F{nJ5YCf8jqB45iX+{WmPhd6-fY*%|j|?qi zI4mBi0mc{V@WOy^Jl>`6e^vvrg*drSzNPfeRL53Uwbq4~dC|MDkHP@!Xs(@n6 z9X0DPtP$SwPf!@#Z}!PH_sfJ<4DNRa)*dw;XLWSA-#oz+QM`MKpqPjR&%H%6U10+H z>NlA|o`sN3Dkfr_cCmo?XRUwKo=0U92zVh+L}(AKbfYkVy#aYbSNs_SngjM;@4Bgi z#F`&-JLbksTQ~b&*(8IsFTG^qUhoV5W?W8&7@zT%zr?q|XM7JAlN1a;9v*p^x$04X zhn1ym=&4>a1Dn1-%qAi%VZbymPwgh0;{wGwJkUlJB2MiPVP|`|2OOSupG;Wc;sOvr zyB^SHGJaR^2Q&e0XTa8iA9&$y3^4WJ2eY{O;FF#s`YS>tyonCwP37ZN@7s?nRBMw3;eZJb8y+oRFJy3xDY=*!(ub-#%fdA4$U zzf{!{j05nyoT|Qr&IgivpB!7zvKm!|CZe>raDa?7;H(7|1^VcfySG%NSME(+Y(zY& zDhhVDE4m96Rd=*H4)_zxOO-Y6Vm{%E<=dNPd(|QrpiF;q!7!+_}z+omptl&nC zVgSMqIRDLQv6#7~;8&dYNG#*DM^puVr{H%bCp~^w;Ww)C*Wfp*)f^qPm{!9oQ5Q0~ zbtNgf5|3i$s0fuPW)A4y0d(u!#3@`fNV-?o$UAV4o7&IhmSIK>_-h&1G*OoeO`!ta zo9i!u^Eo&HnCL_v*>n~Ej9M`I1)#*aTquTFGnIdVeG54Xz|{-Mr9jMLDL0#~pD zCeJ!f9SReFbf!p3k4wQJf$|84(TMY|m7Iu%J!dCA6@fQ6MovIq@Xu{MhT13)6+ebn zHQ;Z~B;Y(FRDF|>dgINH_02#PN>S1yittW!wyx=B*sZqB6IE7I_c=U=+4hxJ{;*n;+)F6y* zQ3_+hyWMUe&w4qH?ezHxo#J8?M>9ySJ7DiBkC;KMu0*@SiWCM8b(F5Jg?eZ`6;I8> zECWUXE+;CG@&g$O?xR3U7POkCU{l}+SuO%L{tUzB0&GnIwfX)gfVxfr)ssNAQb5%R zP`*q+G(thd`mMP~DN30MfDZGEsY4=C?^LOkQr7NJVnl{CWM~4}f>t0K4pIvCSon;&M>P23!wabqm7EV0KTm< zc^#Q?7^prGh_aTiQ!-;FzpoB7pe7{U2)=EV*hxxe90r;32ULXSOVOEV3X}1sWC-Dp z_+(d;37bZN+d2T*H{E=>?;niYlV)rOm9QRb-~|vWHN~J*CJM#SMX^!0sGh5C#i?!$ z10QVMtpPxnwY}W#7MgInRfKtNy=fV_a1Dx5F{p86Q}X_Pr|!Mo4UFUapa1iIpO2yI z)~)5#sZ*!UQg!Z0G&tMV0*-@Mtfdk4;8DMDcE;dPLfY&s!hxJU$230&fFI)m&ab(7 zv-2rfkLvHfN{;FGK#pnG-tn`ux~S7o0nii5Y6G)yP=DCbskE7qR7^EgcbUVQ)O$8@Q-PO6;EDlHhm9=p%mC+_SL ze`6j7R(st%m{nol;by||5_`0c2<9{jfeYkT0;L%#V_h|pctJi2&4)@*!}s{^coq1? zsGgkaGQl~;9I%<|aUeQSpp$c7M1Z z7^v8f`qg2RMqKV7GBC3t^=WtP)ff{D5#hy&0fa8e>LiuIgaGk{pq0gH7!Ss@cajz}{kK+qn9wSGoAR5wW%Gug%E zI60q!f!Uw_w-}gOlHS)L(pMe(+SPaO7`SLhI#qsEMGX9jRel8yu?GfDJ3(V$IxLJ3 zbX$!^2wF0uh0b*#5NHMDBE143`1+p!-=Q9%r~SgwC~ifeQrawLh*Mi$Y3zYR6qKe9 z<2->0W{HgU6EKVvl>K_se~YryPD=0VD_BWzSDbyl3VyaXqB&B#`@OaQqEvZMunb)6 zfwDfwYm`O$lPk;N#B%P__INBo5rNd5TY$~FuE6Yl(I>Fe0PL`g(ZGXS>Dc)Kd?W=0 zr+@O_qTu8c(^0TxDpBwP$I~iev2$8Yvqj-$!?tOvaaGtxsnUchS~`vO;*|Tlak1OE z`$8|(lmB%$sIU+0P1fEFC6wH5Fw_bRejWzz2!?e5HX>#$_3JO>?Skan=_zlE@Ydm! z*U@~PJUI@xfIzP*ogg3XL9h$~d^N}Vz_(n}Vz-CEP&Nes@*Kycx1%Z;EU+mI1)Xz4 zghObm4Vj**bCpzC z=b>^JxI9q#JQ=B-+X~fCSNR93=wp4OacE!8*prpZwg$}2OGs28Sc#hxW3$ZKX2032 z;FaRgtT!gLjLP)+5~F-7ppWHy#QaqyA^rqAOnWB&fhIDcxA$_byxh!}n`8=PkC+Ea z#{O9rR+s3T+JU;~(%%AdoVOVcjguN<-R*d5T4gorjCX{L0(EsdXB%%_>B}gSrK_*m z)iv^RJWwci4)Db;-ak}z$EK6*aZ=+`PUX6I$4@ocHD#gEI@yk(sk2RlnEXnx|RUS-%gfcp& z8;0K9ZaEPmY~4e_53%Gk-6gL+F44WZM?TMxUU#5ZkkhB#K@mbu&p<&0iQL);8A48f z>e}jDbUK=4_p%PAI2YyIb+GL!4nMmm#&cKaf4>f1IYQ5k>lD9Jns?U0ksjbXphN=j z$C;tm&#tZR$-_xfr5_>s_D4bl%Ed&^a|j#)ji&JO|3u+O;R9$wcI$vw&~tepQ1_aw zNQTbnR6jhCRrt844T8YI|P-D;iz< zoha?Fn`5OHT659M@+`NPzvx~fJzO+jj$WK9T~`pWT%!5@KmlJ)ug?0FxNbg9y9}M zN#bm<)+G*WMIq8td6Kz4{hroVem5buKOZ6k`sUqbT|(H{p?6+sKQ7n(P`WtjgdHzI^?kj?$7JvQj3H8mBPEz zspaVm0A{#=IYS}tw`0Ytq3(+$#C2r#+Sc*25IeX}LOc^6?IY5Ge-77?3Du_u5dScG zoLDQNJo4o8Y&T=g=w17^pSowLwyj(FJ+CR;^V{o_oO}w38I7lM4SxT!kb7~NNrpJ7f+(Wn_2;|vIf%9&fTUSlLLzX^G#V{dJXKw{)zT+IO%0Yx5od+5*SF)`aK1IO)<) zU4%PP8cw=je&Pap-0eT@>SCCV5TGmvDC!??acSsJPTbXtzLGjheJLQOo+C(i*P5GX(7JJ86FYc9>QrEdG!+7r)1~6 z0-I2cMb5kXGn}p-IgqNQVI=>TRryk{VIXU~HaYZJhMZ<2`yQ zZ`vVC`4oIR1WWlz9wm^aJonqJSiOvXBA92UDSMQI@}y@k%(Igq)M64LxWW-^5yj!> zn@B(3#QczY5}HDKD5ojv2$in>FS>+y=|_nbadX*-@TCI?lI_p$(yfNnH{WdSYVQfB zyW1efI)hsOhEH{au6O-6(%?WesE4|JJICmMSD07sQfPX5sQ05mFOpe*1lSYrIwqtO zt+GflkWeFo)4@g{0MsS)^CNse6q0@`%EJguo8;GR8V*-2+ITSsHW+ZUPs3WCbzN)P z$%7^GI$w`_JYke^4TS=08{f3#unvMm@w;n0ggZfa z$ptfT=u54*AQNAndIU3j>$dKmR(M|}imJ>1sljx$i<1P7qdau2L=6D&ICdD;ht{a! zm`XSx9z(m>4>y|-h1n|Wte>L;Clf)@`4sfa^^F~r3k;5MPO%b!r};v^7iM|V0ZMCP zEla4a$PPRot)V;oIJm>B&vvZz+V5?lh@<~|5ff%t5V_xjp4;^@^b{}JgMZM@+Ugnd z?Xl^mi_dBYbdS72ekiOyqcki}+C|U9;RlDzroMT57y3A{~2+gViXv%5jaj8;- z>1e-VS67#Md=P{)O98zLVBey!upa3KYIjqT(V#Um|L9A;+^nw%rQ_qR<9-BU z91HjX8T(bW8@N604w;6%E(icqAmbxhm4@t^BlZf}v8j+P|K5e{FVFx1*<6AukX`j-QmV z@i95Jdxq_GY-fQVcvx@$&K=wHQ1LLf1str5?WQll{SjIV2qptB-`yR`Jyz`pf0!(5 z*G-+k;V+T-7lCqQ#ZLgSU4>TFPk(cy{xmP>Q&m~~x&nzk>Wcz6C~v4E_!Ic#&_YzT{&1*hUmP@Ik%FPq)vh)L zL;#>QY&CHiBzfGH&x4y+7F1>4SGn32lneMCP z_#OhH!0#6T3`*Ce7H@dYyp*TTOUfA4o%teSx~LGK_j*vE37cEm^c=HS@N)_NgLk^% z100X$&ISKa_3o=A_@AL64gMUlzW*HfoT*gs-yK4xJH7!kLmxYqwCES5{qzL&{aiSM z1S3_8JHQ((F9x-UCntT7E*7jjhih>X8N9WP^bST|rUi~dXZFR4#lzcB9&jV_ExkB% z2B(_^XGud>l3R;*mh&~1vF-ncs~O)vr>=-`hE!uaHg39t+F!^a{P-eeGQ4xS8vTlf z&$TlhAI?LIuewx6+#5nbK-==TKN3>mOb|=yz z&`|GG#}Nh!4-{e^fgi=G|B}?Fxw3r;5Wm-5ttWJ09A#DpTxYu@_k;J+k$a`IcOBb1 z+BxR)%aHr*ff~84@RlzP&1OUQVjIR%o+r>FE_R)qoU_NjrUI?$y?=E!u~E-T3!vcD zUiTUTD$T(@s>OT3dV-v%T)owjUiDe2x)z9RKL{0Q;Op!87jBoA@9<@&+Zv_?O^pZM z%d*vBZUBun08%>BuWy@Apl$mR{HR-YN|%AUCzvUBYWlt8WYG@1SLDy#Pa}Vs#GFj0 z?232O$Iy8ehkqZ3|1a1bemP~IFi0c+a)&A&mWKYph7QJs0Vnqs$$ekbT7MF|Lu+|o zy0rG$M9|tRpLxR6g;M1&Y-lhcYLQ^?80%hUWWzIM(?(wXI#m*ULo zgO@2NcV^^P9k3hMN8of$eGLOBTtb)W^BjS?m+)H8#SJewbMcsD!RzGtvu+-J!Jb8e) ziUM_mbn7ToS4lQ+l?_$+T*y36W5*j8|!9z~%V9=pYzy|ckoSxULU^syw=8;`A^tQg;)+|}h=+{eD}&F&oO@iX?=jD}1r zip|(Ri!7Hr8-*m9y=ZZYj|pcg9C1~4g`$G=Q4~p=9c&X(=l0GFuFusI{rtBA>w1c} zvK(()0OW(uP`pt+Ujq_$+XRo(&RTB-%g-RrcCfcD>aD+c6YP_h4)#oG2nObic6|Dg z7z}IVn;Q97EYXwi?rw1@zc(++vGT_CqM#Yu*xic~kRpy3Wi+{t!-4+V?$YK&D35B? z#~ufI|JNKS4_mblz(C{pKzgjCHBfh!82ZWprI@c(=ydH4q1AS;jM&#-i9M}{z_m6l^G5M zEvX8<?xiJ^)!G`Yp&`%cxg^X#v91IYV~t34~X;Q7!-#4?;VR`eFeH2d5cM zP7G~*Gkp=ykyeMJq>gwDNZfBkX?w>zLHZA0SN-5E#-@k6IVlItZg)Pl)CBG$V*>At z3P7@)=z`Zkbq*oeymD@{>~5#c-~?EuUUDQCm$bep<9J7Kxx;no9<>5?H^Gpcj$H?n zyJ1%_$|;+I4;=ub8j^SRP3L+yN;hNJ&4ZLqcf(i9+VmaoY$;yO;^$L-)RUKvvcE&& zB+B0Vf{Rj=Snq?G1Ev0QEEqkD4{wrLT+M}N=l=dYcNWKf;PJgpaU$X{cG*qjXCWof z|DKyhIo6r`F8B5IFHbA1PeE}Y;JPsldKPuc0p zjyWT@YX>bmG9G6D;+ZX%0qCu|`Ac^^**c>T+;ETa4CHwJQNP<8`erWxA5?SQH_7p| zlc@sVK#SO8#5Us%0urF+LD-3%k*LkEvy$Zl)3}FDWV^7Z&xPvefh_Lta&?_ZM!QYH z#E${kw~5_A<`nz`>`-lR-y}gko*+A>7RNN;051dafDg*{e;fCD%_xqdh4??<`5al{ zq#Fm%ts+wF2J}-K0oti9Xf8z&&)r6>ls5?Am& z$=ou@tpUEk^xHndDwUR=ggS?9=^{*&#$z2?bsE}VssJ0wducr+i+e&x#3}XND0b%@ zdisdV-w_S3^*V{66Ln;=;by7w9CsnH-~5^-q2~y5%{_o1$=R4ukSk1Y}b#O{XA=a!4rep-kgu9+kRw-o0mnj*-rawr@ zsAP%PQZhQ3@j^-l*OPjT8JbXSPOrK%C4&q`C6K}OX}Vl1Zl)OeXD*+?Mrwecd2 ztIoNyxbIsOqcnq8+Z)BW=i6BaXD%Fz$l8d*82k)t-1mv9hLOzL#vS6+x~6MfXGT|) zWRqL|A$)9&P)adja9V@1Zv22#nR_-gP0X!2;hn8rR!ckG%v`@SC}JV36pjGbKapP} zQ}jX@zB%3$0n;fq?Z=P0g{|SK|30&iEKw%VfMgW==-)OB47l!XrOT;jV7eW;}D3Ms)I4t9dGB=*hwm0cf z0ZPbaAj>)73k%gpN^i4nJe!*%9OHqY8NFf#3t;{b8Uxhr(9ZOVX?e>5Qi8%T)`b_( z2KRDcSE(Apc_@xBnhn+%VghAzEL^e@*hb~%(O?XaRL7&~vQ%$@As;ZbPltr}Z^F)a z5mO{Sf6{MAx!=_KlD1ARQKy&{r-hA$DxKQnQD{y4LCXK#_Axslw>!nwH*VN%-Aa+0MNOr8O;Giz*G6Xd#Cw4Ad~J5btW2&0rvmlt>MF z%5}U3VMsdY$*e6k(uaTlGrgII3OrjTI&N*`5h+fyfscpt)D)6sj6I0Y`*3y;RF9%x z%)W__UAg%NSqjd&H&qW8#9S*Gtr2_d?*RUIi~{_pI|swf14CI0T~R%^27>2gv=FnR z7#~iXYMNr9iE(Q=rmg}#;}ygJ)v|zO1z}UJuDzkApMv>I3_3MtpN^m%cjtGqq)#HO ztyL9xX?6+iO&I8l`91{coeSaSw?Wfd9!^|=FWG}0L5k<8i@w{@6+3ZuehunZUulB8 zGzAd~lLR)wBR7GOe4|)69zT@_lGM>RgvM&a=`=PiOd2~9EqCN&qm0!b)0O+xX_*M6rxpUr%!5?O~>jnv?S~s(&Eo z=2x)EbP>hobz9K2U3|$TSBjk~;mYS1K&8Xgr z7%5VWwE@a1wd*=cE4SviNk3>n-e5-6xOTolC&E{FCmP%&1gN>`>5b0OD9+9H!qLo? z!4sno9SMxiT1M=oU=l%75HAgOC$vkN!cipbnq^k2(=-_r`%qW+(nguSye%INRr|4? zC%A!chn-4FdIXCF6aM1cE?xWyDj_Dk_8k%pC;Z}7E@xn6hvQ4U-Vh`ZM>EBKqtrjC znvTma6k4qP_+`qo5&Bw-9e( zmugVg{ocuWP;&UKj_6RlS&zU|YTozG%Q<{0X1am+31QE;3>2v40Wik%5QY#=Lv+_B zm_i#0eRcw(LUpb7LV0q_3nvrXk3&-II2(5C+HL--yxML1c<=uv@1Ny+Hx_L|vi`*^ zHx_NRWZlm!_w3CjlJz%aX$JodEdH3kom{YX?u(-_n=*}ey_TFtg6>SD^Fw}~IzJLg z4%bFrl!&F;e}PXWB3iLR=rWnBZv}OC=g-IQJQDm2uA)j4afR+cmOAGnXU4w46Ul!D z3*o&Nwt2H#g8O>lc^w^X=B|yjxZbO8kkn&C###Z%+zGG26LMl!#k-p;TeZ8S>pluDyX9lJp zH(K40QFrIpu+>_`Oug^|cS*f-68lUG3L0NDfhsbJ3TvBlCA1i zHCJ_-))OT1rAU>O#Ad{JR}GURFo3;OYIz!>cHBPGA7^0FIPg4!DeVSR=h9OPLD~&r zcZ2}85re?;e`yV%l5N3)&Ij^2nP3XtTmrxxHh(^ta4q8{@{Y%hgl|$yDQ?I?>gL8* z>I*FFktoe_mPZf3=au*3$wEHnAV63;;BCx4N5(OaxP(|h!ihUrhz1t+jMXlM@=!(g zdA1Czm_UKwA+(@~AZi-i-yD`JJD+(Xr(mTX)@Q5TVLb~a6vHaxIAvJYD=EXOpzJ(F zCKItB5rS}1OOJuR6{EWOtnM$K_*D%N92DQANW}e(u?&CDXy4w zA12)ws%4J|v3d@o2a5@=cwZj?%%HQvr1y1>ycF+ioeYR~@b%~A!`yZTeyl0~T<$$J zZVBBR_?Y@ozXoBWqUs3;KiA2TW^GAEwLYwSsPsUOYsX=F;yC)0!8wcRrxOUKsQp64 zHogY~bbhF*_-q89*H}HSl~jx-9E$Of^h@#cAnqJ+I$bG#wsb7#1!^%s;-|02GbhVS zo)_r&jUYM|IXkpPwffY(Bj>m8X>1JE$k}qYeuOZ$R|NccJP{yHc|pM3Rf2$O(vzKg z7PLx@fZ;9w1_9~p7RoK+Oa4cC8Ln>qhlVSTkq-}4M>)CRhvP_3+;hL%phXtY#hcE= zzoBl%frS9#E)~{y|G7yWDr0htL@&IKkq8HL^jx}5l7{1mL!P+NJC(^UZU66umU8!Dx6)tda(8LgE;E;MVw0^Fa@fV{pBOgD z#I*`sAWidpPRHN%kXbba=OV9Q16vO%DGm)37@VL^Z~#2jq4I&!3Z14Jz=vNG08Kr~ zzlTDp0UVnGVBvX7F*OsCx760cq+>LSf3?xHd}gf*IhWL2U>8UUx>q}HcY#GSDbSK% zx}nDQ*jnZqo#k5f+6pC5A)TJ0iGoL{A zRS|a>bl8xX=3H;G^@OQ6lmji$8`hNJkTD{sTH9$WftwRSyWtM+8DpSti7AO)6v)${ z*MG1FzVwSA{ENvkz3GgJK~?&yi7z^1B42T=GY+*qdMr`u!~i*YB}OL8uNOyU`#VT` zGPsRP^zxhFiUrt!g?~U^tI7{CDrF^PVi;ZSD@|%olJhRcT1clnhlq5TYQUQTb&Y~sb*KRZv?n9`C6_0=5O1bKNj|;scd0M~TiqjDE z03m4XD^vh5({Dm`6vT|dF(A*+d+)DOQ1Po*TvT*H!vreYIO~FncbYNJ7#YR`9f?DP zjx=kqwxJRU_{2g8c2p=RwiVXs~Qlq}`MwTq1LEiL9a13CeftGumIG{xyZ)5hE4bIDQweDZA&adab7lC!&jc9rC z(Zm7G@}RBnmb*Au0=*D8_#2TTv~}m=tzC8R1!iZUWP2+KfwM++O-tX5>ucYq4f3!@ z;pCk*$kQezHhi%$ETgVk(`P|sQ#w;s%&FGz5;jwj?39$0P_V(~<1S^ym@QP?ZvfsxD05IoHR zeeAGIaGLIB<{XZMsbN~s>Uh+F<#pI?^oLF{ClwwnM{8IHda(Ebi_6x%Zn>;wzoHP3 z2OH~IRGA|5_}F)nE=Z+zsXuPL3&U3w&K>do2<3p1Un1!Vi3K7ssmqBF-&c(!K9mha z)`$zp^sU2_5s0*s2ULb{ES0MOuKUbSVv=d2#KpV1Nx_9G6$W%|mgCvV2a7w{;Za&7{EZ{8z!7 z!6??&t@-nj1tO#2{t+Z$58_H%fMg(NcK(8({%vx8S3AFL_yu=Aqjr0yceU+NtRmba z)8un9Vb}5x;kNxHOOPStv$4@3pLVGBD0E8p2>{SO@KHFXJNn@{Lq9j;Sz@bWRv1>D zGl`hE2$?$~q_6b;hd}D7F?SI~z4r4OeWw@SVH$y`yd#1VOno#OV=(m*Xq&;*M~6-O z*8ENxXnH{PusVM8jxOGL0FMoEoLE-~nc9}Uy~}6_b8(?2QRWs<(cb*3Ekcy*3Xqr7 zv66+MxZSufRUY1y;X46NVR%hdb+_$Z&S%?n3u@mxQ_RYoPl`;Z4*-s5E#t(CS()bf zbOnU#DH|crWrv)#Mc>!+MSu+)x{inbp&2v?|SehPH!u)KNVUl=3*&OswW|~ zkozblanb_GYU{oz0?97S=UK~0G_sY#K&rp*2WbxSrRd*OA;4t|)yFt;K>k;lQFTc= ze+I=nY)6BM2=C{{|n9AV|`t@=Sy+AM+ak)R)L#h^45{5l82(!uv@Klr|6h4)47tMP0!GV~LG-cGI{q`402BY@8HfPV5BxPiwAiVrG!FIIno zeQjoY37)+v5_*Ir;{Po-ai)5o z25cD6K(xmfZ5Cq<&YH)!wcCPIU0HmLfI0!$9TQ1JhBJgB$v+?YKw&>`2q%va6kg^G zVJOgPc*D8q>8)KI;j}KD);>L$2q|ah!mwY`47)q4+PSAe>(vN35G^=Wo|Y;zH2^lt z%N*{@vWWlZb^7_gTpV(U+I~mn6nn-IR1yzW>Zh#?6Cz7GkW*VjC|YWX3H}Gnz^LYQ zdWv*93E3ERp4aKUP#@9h&CHOAt4`@O%_JwHxVE=AN+Z6Wh|d9Tlg|Nu4X6UMK?PcA z94dQ#6+Z)qdj|XC37_Jr?jN(m0kgKP6Oo1t+sI`6FhJQzfP+(A#{3ru3fjNlPQO{q zIY;8mFm~l~p6i^zDV=QAw%5E6Z)7N1Z?2Og61Y@<`gB?BM_Wdks)^-J_9t!D% zb($59pS>;LMp|Vyf0CsRNLI`|h@o@)QI27e*VJHwL@=ZqfyJyB2)&ancf*KdH0HA# zyYExnbesbVzx6htuc6}@jC4)HDDEfEH?S0&4G#X{ORdR0Jpnl6F-&t<5j|jED z4&OU~{DB(_2#?Ect&@f*&Dj&f64A0lD=G8F2^gq^hW4S%95YlWjr__B>g~I zYc2!a>v}?9!C$zZzJLwKXxtZ_1NW^jxQqC7_G={)hzg^dL=(Lg#$D+Hj_PoWrw&daX3Nr z4{GtSz=Fr($e?ik-(zW3UBP9U>nuxq1deK*j|RZ*FM`FUem($+)oxGjgvJ3J=WmeR zQ5v`PPD$c4?OSS)sSrL0mWJB-NaJXOGjm>x&T9J+T-<29m}O+6d$CbS$-js{xo1I@ z)uc51ajk2IU0oYM5uv+{M+S2$x3LpBqT%Wa1SAXub?=CIi zAiG2$8-jOOiiZ*`;V?_F34zvsY(R!A#k(HcJ7k(8$oU-VdpKYWtcT@LRqE!p)Lo2= zWHCM~hCA8c9(C5^0V(T|`x|B?j8ACE(Jw5``G7Du)jdc41lEAjc#4b&7AXG}gwyul zBR{#_3A{kP>Cq%F^jb?UQZ`D|;-CXG2$3VnF3nlZ#G4^h886s|%`sNeHSKV9TP_;T zTrAZ`cRfRqzt&dS90wi z1(skm9*1)6GiB|E&pgYE+s311mj8@lo?u)|L4N@XL*${ghq8W|e6~DJMQ1T_A&imAZ4=Z^eh8QC>7(Q7iyIMa#E1Vkn+02||LpJ? zz{h&UR7uA8ffyWU6Z;3k*j<>ezwKqc24>&Dabvk&_wN}HMDh8=g;oCue@dD?fqW5c zE=J=PYtI( z3tt9zH#Kv17}meAsEo$H18`5_zE`sD^TzVwvoe;`WJtN&s0GSc-gzi(EXk%{3y&xL zYIhDKbDRi;T@nUMEt!AoGOy2tdFgXgWsD`i!C_v5lFX}z!@NX71Yz)F!?R>OC(7JT zbpx;|tSzH)u?O`~4fXxF8U@>`h_&=UbxJPtegbhH#1nCB(W05`(o+n~yUXa0))33{G?km$LQO*ve^v=$5GP!0;VVWF8NUrj3n z>riv4Z)QFzMZx~2c-vkD8BirB%!3rmOr6j2)?e9J+J8Is>E1Lyh~en(cv2<V(7wgyYZXp9pP?it<1l4X)=WGuU$ zlCgXwKe>6{SbmtFHkMz^-=1^%+Y`IFxfpWF(Xb!6i?^Hf`nhg8qUFf7~V>iP-s|zS= ztNFM`&BkK9&IGp1`eb0amZ{#z<^abBASJ`R z1|_U2nCNBNXLOm(?Qp0o$j6I=XaZ$2B9NrvH>pr}T`TjeKj#Uk1GBa4_^LT;XGT{> z#@Ist)OVFn#n9| zttPH=5PLy2ZVfr|Ozf+8isKbl7*rD!;r_3~|E`D*&Qy>4DH6dM3-F-usR98{&$Usz zDNxlvRscm3pt%#$lO^o&Aq}W?4eLXRk&cmB7E*`*f%nsHTMtz58EUC&!*L60W27la z>7$&La6vDwg!hRv+h6gRyAl@Xaftpo%#f9E+g-S0eTTG1oc@3g+CK(6Ov(Egd9vu* zSK)=z{!cyG{yn<=46pqQb^C{V?H`BsWh-dEKUuj+D$}0Y{v3Ft7#zUgU~Ax~(r3{8 zGRyt2_WS$0JPwjf9YW z&YnCEZhU-1S$H0gj${4k~I@{T~JDZ2wP>@F(}GfxxFA zGJdB!P`cpaxZlhfiCh2d#AD2kIvlT9INow_yrYHVJu7S9WpUq;Q%;e3FSW6ra6B?Q z8d<<^eCC@U$4hoh{f#pXS7YHDjlBN}(5@j&!tmD7op1XmFhihw@{SaSM{dL88oDD5 zC>UNj8D5l!&ES|r5g2MT$1{cF+36gw)8lvmAPfM&^vKj|fH^QN6UQc_%`WS!?A40A za7dUI3X!dufcStB_u3N*0*86Y`fxB}}4nQeGptv>N_Y~u$DuX}^M zu0I*g?)=5&cR`2WRjS9Xmbneg{)o_0*L#Nve3E2Vm+-rTUg*XQdwh}))+g1tlSs3vrd!@H6?my(89|Cz1?@cmoVIMxzM;K=XAExitR?lseG- zL}m!hFS^ZLkpq*Jqf$AH%I!yjA!%DD|AqeN*$cpF{1XRw3Sc4K+4E7wJ?4ZY6hGWy zrn>n@8cl@xhsC-WE7(SQ6#AoT7cxt}#IYUh%TW5hSN&h5(uZi8c%u#D>ep2mZEaUz z`aw9v7YGclLHijs8JX4n%q|>{fCT)iS@OoTFXFx*;=WyG!I#w!a0d$0P7Y%^Z?IwI zTJR1+vn$tHda7!d&)e+MeFF3jx$1l;$X0;L* zwo*zV3l=k#g;LUsUDl#Dzscx3;~_NQ;jwk{z{XnCmFw{UhbE!`;P1=K>YGV#1kw0m zMWEV9Y1rxh@u}(EkJ)SYbtu*TiaS#FbZIIKhiMqFKJca;4_-gKLrnN1?1rakKrwHq z&v1PzwFpkjzp4&Kky!1QWS*Nv_;^#T0&_O)v$38ai@d5{#-mpa%}TY;am6*+^4!#x z-6Ab0V%lS*8KQVP+L85#?V$&W>@e(R*d9ncq%&?1&Js%64`3V%Vd}+Av%xHx1*I`# zs(ZyGL6elvTT6P6@ z2w(6&x?0CNo8vjs*NM8XXYY6Wx&*F&^kvC$&?`FN=1o+_1K8P`6q)%+`86AHD z!iYEi=S(l%Td)>^o#5kAH1_R2K7BrPJRNYRbtk)nW+`)w(Y2c=-pK~NY5oup7>!^V zoaPhfyQn{nmMYu7ni(?91Ka_!OXC7Lbx50E1-%M20FRfQrrKbJTf!QD6$(ixV(k_qFCFR@HJ&V6B=E7VoUi(67IZoiZvx#AK6_1soNaA=F<@#I?(36%%(4|PC# ziz^cs@f*P?Irg_4vI|K>W3KTVVDXLlelYbnH(~|5;y#!i2IXVa52J8LZ+e-XUU8yh z>ecarFDK0#ZD$?rcnXF}#5~*=a6rh>AOz}eBw#HF1d5|&_NZ>Lf^{|FU76K`Yr0cAhy~ zkda)mqPrW@hp9@LQwJF>KRGjlU^YaD5dZ%7%KQxJgZb%xlS}Z=q%SYpKlIsCYYPn^ z9GT^Rxu3gxwPE)v*Si;toqOzFr=w$hNf5O_kB{Et(&JOKzS#Z*GlU**wB6l{0=Kh! zHF1ZZfqkS20AuTFQe$zwEN$z$p77|c%h|s@_KQl~a#pL$uaFI7wcfv0t6pd%r4(Zm zkpH8UbY+(9U!Xo;Ee}od@Xs}S?q2{hr9Eq%>}12G?=OFw-uF$oLY7k2 z>AMxB+FumZzN%he6>lTDAiaX#QSLwy57uj6OM&&&R9G_stFvFNcJ`}-pqi!ZR{=bx zfTLSKDGh-4anoy$A_D~gcfW!^YOBZ45P|{w)z$6j2lg9`>3_CgSLboD{Oo@9C`#b!x9%&;>+5Ow^U>FPcj&&jUtQ$&`}Uvq z*6;uJeiabNl4ifjcL5gL|A_qL{su~@#=os& zCr1Up$9reTffge>&X3=*=r7rEK6Z8-_rTyKvY5Dx+qv6wi-A9ZTTF6q;Tb;J##}y+ zedUkbS3G;&&+IS1|9`c=Z2OjU@qe+uOvd^*8e1@Gy|ui2yU=MKmyVs=Ob@?I<9&0S zY3z8y-DaG9(zK0kX2F_C^M27znIZ!Q7G}b*jvH7_Dl5?~TC^4!`GEuuBiSRmMFI;ey1UNrBWa!Am+2llzn`Raet_w0ogb96&d*`Gr_SF;(mH=%rhDo9 z{*u=DxlH%g`2!@a^9M5BN9X5BTIcV_bYGpnzod2k0ZjMP`GX{_^ABV?pz{xsw9X&Q zbWrDqB(3ugW;#dbA0la;KZNOhbbh|1b^f7D@2m3a(f3&1^{xMAF>3mqvkk-^zSdxXr{ z{`%cHL!=t@BS|da%wvRnj{D zG>?A-7Mkz`gtHc%jMZ4M29G=C-=E~)9}Ct*d~0L$OuS<>f1G7lD~+blvzoVO2NpI* z6K9UVT9Fn@!&ngp)>+E^G{}EV*<9lOm$MxC4;RglgZsL20C|nkP{9H)O_k&5$IGPv zK|THzG^F5|V8oujI1uy&a&RjQcN!yj2hAyxUs&{>_0^g$swSE?RG@hgJL`bN`T1iE ze8Z6PU&w6U=;vjNa?`g)E}lR(Vh7DCFM&JL*3xDbL?XrnqrQzctR~pS%;q*fyqM|< zbkl`f%_~ABA548945wGs5NK{_6lK;Z77GL;ec*$OWZ`aEyiXVqW>py0sz{WF)VGpL0j18IMAPX}u%)D~umAg)} zaD@(ICN4GDfNRwChw|%e+E5x&zZ$X)l7-KSb%vff&C;{(HB&ka1WR>)c&ocZj_wUP zx-;ZdBzxIU_p(}=Qm-EJ^SyNYANKN0zKo?)_i`C~fm=i4E!wmq`bH)Yxn1a;u_4yXf5%`Es@)?do`7HcV1 z+bAriqP18&5nTMC?(v3RRMCh%BH%8pk?`!D%6%M?Fx!$Hz3+i~d9{RUcb3k4npUF< z8Z@TRpg~Qvd^dwe3VkmCeV1$czAD3|@36SiHvspAf{PW=)3PMo*)|*_LvBbthN<#q zB%~4cSxO!d$m^PK3f+ti7QKg)Bv=YTvn84bl!NI+Gm`Qa*DD$+o5wX<$g$?>#uL&0 zm=8Khtfedz21@8cVL4E3bOAFf646||hU0|Um2{K@hDK}1iJ}7>*GXsMf`KZU0w5i! zW%Jar$f6m9>CXml>(X2bXbjBd_aZU>;tDT#U*?~P+S~kV{(Kftxq$R!`G<7%(D$fj z=g&tDX+geCf)!8(38ZMP zOEDmRinqY>6jLh(KXn0_T1f7F}^?Z-!IU~AY&wC31Dr_?pi_=0Qn17uk{)CfBm3D= z4cvWHGapGE)r@y{AC)WZ%6Sqw+^tXZ!|nRWmk4DyVIS<2zh^bM`F+t(&Y0_XGZ-G# zCj9U;IvuZZF0Ks>%25Hbt_1ybu83Zr#UsI3l9jLx;&2I~6i6V~84fl;zbIUxt^}cZ zi>HEh)nh4HWu06)cOXZYVOb3pOC?&zwjHfdg()S+vvN&Zd+1$Am9-P8RVrG6Ay+sle^9`79B8e;VN2vL5YGX5}NP(R^KU~BkB7&r3f0*hE zrel#i3Rogqg|Lw|*3zQ2Sl@`dkcd|6sgGVw=7-q!Z4_yI5*7rUFIu4)Uw`ltu2{|Z z9wp1R;y2Itx*rDh{RwZ0Rq)Gvv$o9d$+hI~ zw!>Xqya^9cir1roR-75glM*;u|5Au4jJzBaw0cGKBcB8k?2K3+Bcn+jHYjBoHAz8r zNlG3n(oj1VS(K2hWgxObAXQTcd9F+JD8{8`y&)3^%!W}~Pmv)hPSFSwPN{0bCL#0< z5u*(^8HC6Q50>_7^-U*T-cb;Lyg-?Db(?8lS2&OSn^Ra$!e2)^SeuBx<;-3%5q;aC z_IF@-IL6uC@%=^F+zWGeXWsuZFTIVI%;Q#Fw*0KDTl>e;xuo6w!de--beUP(nQ5$% z*)OxN4|S~^5kP2u$ik!Akcwvn-MPQCm6CYe*Nk^#anP(ivwAURoD;+C;h48MV|V8( z&c>`|oWSJFYZn;r3(ndB<`SGfsHzvPBvkqFPsf0kOgi?ZA4nm^OJ{wKLk2+vzSxlr ze6ip&wAZM}nQXr=0b_-n;>e*{2=@TzAVct=u1;E?ikG%z_D^fMB{P`zoaFUP$^E_% zZ%tYC36!H3t$SDQ@=p;OhB7>u7vKw>*Z%EUJLwh=^VUxx&dbMYw`EOp1LAcTNPmqX z0Mc^^m_Rxi#wtLXP0$6>Q&S)(neHk5BEXv5jrJFW5d^##-wF^#9XE2fX z99P5n7?_9Cr*3p1eTgO|+y6&q2&A`Gd-q3&NtFp`s~szxjh~i*-e`TTCCcI@OvqI6PxJ7&#Ho zm3XcSESxiott`B`20wxZWZjUGu65J(H_b+}WTkhFWST%S8IUmkH?G?6fCbsCzfn(e zQ}syk{*_6oD^N;X#_p*D0&M?T#DkstFwYJMI_j$EAfx>lEK)WDxvOy@bluz8v3LYp z)rDUNqrZQ5j6R!uK^AGI?Rw!yo?~QPL**|h4(!`u@8Gy zp3_xUc~$13iZfW$`$PdfG59K>kk79~lKG?L! zM$|WF=!~=RG!dC^_DW1@bJGh0=M#O<;9h};RO zDipUzWyQI^&}bR9W?>>;D8y?~(P;ch4{TMfi;MR=1sC5lLvZoTRBvE}S)Up4hM1f$ z##^(NSUEtcItBs^@$Me}2uNQCVnTq#OT4}+bzd93zD9X{k<}%c9(vh}ekf7OLx#02 zZudQ^!k0noLA&~-Qd3|Baz~-%+LkQqod}F1&oi?zVrr>3_b9a=N?EnCO6ofs@_v)tMK5@!fN`O{rk)N=G< zkHo@-4NLs57cRAW%H2DMs~%jHXEk#T=J21%Tz`XJCSUESzz>+nIaae?d1FWco1A6T zSNeChs0y$Dt91XzFhk}hivFD{?|wv(j{(tigwXV9SU8JF<{8!QUHAqmF&rf{Q_5yD zSjX~{yARuzMmvdq@)&13f7OtUW%(c+Mf*}T4^tV;9!8=cHyI-_GSlh?Js62@ zfrWhbAyg9sesyd?G5@JpA)sU_}84Zln&1k_-wdd zP~&s{RW3{5GELo_y?vQmvg|`feNTsS`czeLD?ShZbaYSMa^2}{|A5^)G;%Wg7U5tt z`?dYOnIY48FuHeWWT8~K2N1W%u-|ZIglj+yGq9VEhF>8khV66&4VVV@)6v73Gh9Te zz2SpP26q*B;N@It`x*}$kNr`wajhUF_t_2?8-Kns6&sd2+Vr@W!_RicQdSV|0VR$gna= zI3QhkkP;(&uq*%-IV0dA3IY{5#7PjS$RSRGF;MF0;es>Ve~*x2IH#K5?yi4?wf@mW zDc17e@P(^?XxsTi#mE;OK(r3r>wpleU}fGvyqv!j2Y=s2w&Km~!Buv8Qd z&e!STTB%B`(&yE>z+;3uu%yZQjIIe_{{rL`iQsNM<~j0Um1M8Biq z1xn)U>@E7ewL+|BKa5GyL)!E-K9UVRWJMW_NU_@Gq1s)gGaqH-;=QWd)SzhGszeDK zYcDHDhEZm{hQ|riq&N(9_~x!I>$#yC@1ji zCPaZIj{c1^0^NS?Pc?YZTW|EIOL_j;vj^DyPNGq$_&U*A)Kb=eB<Od_hl6{Jx*m0fSseaEj`H8c@F5Qr_ zCKvv}U6ac;laT#&%mC$t)Zc#Nt;s^E;)pl3UX@#Pm2TI%Ri>Z{gx>NFzet8SjfZnm zH_j%C&}5kM8ZT58(=I*35_y@z8($(!8Nc#lX+aMeL$Lvc)H`2+=`EZi+emjLWDCKL zHHTy5ta8(m2idox8O@*gp*VmwmIduv_DppH@q@IiW$7<%aKdJ;kcpa)b{val8oOjX zvRM6jc?dZs0i(4U(|=XFH))XV$PIX-Lhgct@0K=jfrpG0r7d7fIi)z%pHm9gPtKSG z|G9&YkElOm8eP*Kq8XwYsijsTA1IsXzN3R-A*Wn48q>a2q90hziMjbah#@O9ghXO? zK7B`4Gs%5+KE5d<>1=5g8BZcZUCG9I(2A{wda|dnA=SeJWyS1#`2RBS8OK}oN5lBK z*n7>=G#VbpW-zTTj3~5kN+AuRH2q_*ZOO>f#1)a=V>yMztmX> zZqw@UiRjbrI|VhoydkKGAa-_jzSWUpUq!Jp6ocLriehI-N414`EgLuk>(L| zUP9dK63Z^drnNiMwpRB>4046n+Ky2@6s$_1zr;oXvs?#7}Z2ei-!)io=y@XSm^tsq{T+pt8(OBW61Iw+GUk6K&NvM(w{zx&Zy?R z_0g1cJNgTIhoZ7Z7N}F2I={~I|493_tL5N zmDX;UP4TV6`+&Uh3n17nP`8A4ruytxi(ouA%bj_YTkX_O%?s+hXH)ag9`~>L$kVO! z=?wJR)nb(F3e3G7E*Nb6O*lu1dFYP4Kj^yW=PuS;5B>AldJy+!S|L7qfW2Sar?Kq> zW_S8CGR~xn7KK3AH5)yiRD+y|)iaK{Hy|Uf=LcF_ktdhNpUq#5WYj7JLA{v2p4s&e z=074;F3#dz$N5N;VGgxoed4(5bBB~cFn9cNTZzPly1WP5K8%=hkeqw$QPkDUG z;!__y_4nuryVU4Rd=nGD`;cd>!9I3LHd1`it@j$Ed6WC(>y3ap=i}oxSS5Vx$3JIe zNhLmZ_fkE)R8N$RM0#)Jdum>1^kK_r(#h+clJ47k4Z$;6wx8ERz)R(ztvK5VdRZD` zR@m3e%SADqh*)?=e=lo*mm27$_Cv98ESBeG?eC=ykQ7QxV2MF^Vjl+r8~8cMD>m3m z9gMQ)vuw!AI>bv2@luDPSOtsads&Bhsl&b0Fch1}Vne;GBfM0BmpTf?rm)zNUe?iG z>KHHeD-^qe#R|QwW4%<7mpTr`Dp_o}mvy|CI>Aewh+r^jwnxta2OTs8MlOIhhj#@t&)_2jO>$c(VNc`oM*;j^)H7(Kl>+%fi z${&rQE8oXo5PzH2EH~<}9Ap$#_s5@#T9;)QMc=JiVboWLP%{gETky9@*Um?cZ2WcN zPf5+8sP!HGw&1UiRAYxh{B`1Qo32)f;%Htv{!XgFECMN^?hNQ~P&4!J{f!7NW8elX zcAW?$mh2RH%o>yrTlA3EBK7_A4eKqOo-mr5{9D%=L)Ok(dgnDaoC~V=Eg9*H%nir7 znhoFjsI??wt)?rmwOiEsBx1dXD^2}pKJVOjXkO|!W;Na4vEix_zVqk8dAPP{HEJ0} zXqpv$@1iPNO07L~ChS++Po8E324`5S*+TEP2-I4%^!|$n+zjy01eU(FWQ1?rT=?YK zzwceNftEZVPM*2M5NOJ$jqv!#2rCXKW;MOje920-yazlh+0=&Jnkt{!5(lD&M&JzY z1B+u;)CUY9?b}I_uP|Ca2D}O<=~$qD#Mg?G1d`F8xp{b<%{POhzLj{B9S7!%`38&+ zToAAO@O6IF*J{+4Fb~YIPd@U448Ty=gONgTGn;Iahf9QwLb@e;<&7w^T*ihY3+8=A zvSmuYaf$8T20=$eUADF1vuJW+a%P7O|!o~u&>6Q$?H;3$dv zUctS0q+oh#PK>z-#q-czq7)(*>jq;u0huVhAd(n!p&CFK7M8+?N}-dsU!SW*`=~)L zEbWni_PnsPdt#*DD$SCYESr@W*#kel6C-f~wX|1aWKXL!Ti*7f_ttxv^dP^D(J-Y#!FUA>#c5IhUd&{D>|;g zkw8_Cr?@>Wq$h`m05Pk}D1&#E=9#`P&4OJWS#kUK=wT~v?RH0?zp6nzOK2gKC+43e zGpFU5&7XDGrOoKAiEXHo)#c)2|A^NZQtIHvzytm$y zzESjD5uw$WJt$^E)&`#|{)Xm2P@50u^2P+~0V~#6nCoErbLb6c|F8&X%E&Q5myExU zAS*dWIsPhIGS}bhZw9J+ygl=HpnBj3m4!g{iRbj&3RM59cM~M9{yDi5rnDG&58u3f zVv8~8!Ld6Q{|Ed}fdu8@AE%_Y3;u_u;NL9y5cnSme}$QO(G-pUo_LDe(}$+u{|!~e zDeD>)5{!N*_#bLo-|m6`H`HjB%$$yc$`1ZNH0v+IH_YB6{&AKPk(XDghnAqwFTuaa zi*Ou(@4OF*F(DkrfBHI4Vk}1vEJ(pPPFmFe7C2vH4J)%&)1VZqzjm870%xX148o_7 za9HKyY}5RF6YB#mh!nV}mI}cZBl$BAgW%ct?0WXz zW3m2T)&MUx&`a%yVid+=d0y83Ug`izp#RIi=WB;^`4Vztd-G&>i?=*ACgdsM`l@S3%* zc}XB@y=gQr>1SB4Howxt+8QZZ!(_V;2^@EB?khj-y^452BH}A=#ov}leR;MuV|B!O zBVvWKQ0$c+24tb;=6;c)SI{PM*uX1>)haC*&8n9H`O8`v@vTHo#AkL!eH)^9uAk5c zvYs{JE$dA}(cBzhz2?t*MT=HK0t^UPfPo+hXkH87MT(k@=8j$w-y4y76T&DKaQS)& zRx+BEfQjW-O1+5h-H30(wutXN!&)PQUW%UkTNB>Losc}~XJ>OuKi%1O-Pv}-dc}dh z9ncdkz8%Q$&Dg}AeLL8BJw6?{G-8>p(k`(0itZP^qRI%nkI%Qp_fCCzR;+dlMBy9d z%p!P-$im|wZh`k5NzagBt%$<&aRLzNOak=B8dz>)oQ&QR{7MdDQwcVhzs+ z9b{43^>uP4T81ny0?^BRYoH28t<4eZrxEs%-D0!0XMm9g=3YT(AjHK&3W!+|-|LhP zvka>}Qs0YN*-@gMzt;9h{pc*_^>L+Bz6c^$ging4%m6d(13o%hM9#dZZxu81qSn{Q z6ZsWVs`N4_%3enIXOkgFuAbBiCMy!^Xs~kV_EF!f%oxgljzk6Q{UGl$d_t`5kGK*@ z!Lu<}EI<*wtHwf2-> zr#SK}_E#;x4y}RcLv!k|y~wXmzmP7!K7ePv(LyxEj{2(Vl_I|mh3s04Kg4w@odEeY zqzjF~#-1j>I`S;!*NgQV$gh{^6y(=S_aeVe_T<-zx|}1wUIzJflDZM59>|RUzmi`e zx&owuiIM&BGaxZC*DCEV((M2|_fL!*h@S%zBlGaHe`4f*R%xER-5<|+iIE53XK-TV zAp9JZ7xsv%$GW?$t4KT(0wmzUr3m7IcgJ{ux*Vd;@AG-9yQc#| z*?qpx?=SN_nX0a?dh5OFt+$S@0z#bBlrNBYM9gWh651er4nQP4v$<@9(hKq5z#tBW6spMet6^=Dz_FB==(Y4 zIjr|Lgsj}~e5`Un#*MGpZuk!DB;hSuu*on~D>S_x=XATPvGoKQO9#_KSMK>VxaCkb zeIUJay5(WLJfCiPSf5s??wq5$_Ge>ELRx zI5zNO9PvJmc%CEP*AegMh#%{S_XqGC0?&6O9_NS`IN}2w@#7uw6CCjq9r1wxo=f0` zjzpg$UgU_Mm}U5`0)?HfvIS!Hfx4D;=>&A;g0wSM|`9sek$X| zkvcy#8eqJVmE#-M z6xXlK3>RTL=xaF4H3KpDDq4Mgnub_?OM9(oQ#fs7IBoGPIFRAA(&gb;=?+bwP!-nw zXxgt8*RRRMQT>F+f*aO^i?E@?gtev^mP5h91y1dYi*Pv2+Hl%hriIhAx)OawN!r%p z`lhboqWW-b!X8bZ7cCK>fc6f6X2K!@D3B?x|FV5a5e(2e;>iTuUy!y!f$}$@+Tye= z#l$$4TT+DUD*TIqmmmNrCI}+~H~;}uj$mClrh$v!f_1n)9u6kvxOk~F++<8D;<}4f zT7A=D*z8+eU)NpRy&+swSKQ|fCc{$KH+9CdR=?t?Vtu97XO$*i{C_6k9I3Q=Oof!d zi`R6@culWa!PleofF;pZy!dua3y;$Yn6I`e_oePT4tohn@`oC z!7+Bl=&Fm0({N^Wpo=!53JIK+o{6xepx)SqtwJs6pBI?Vui@Et>(MR0W;D>H=H%aK z4gc6NIC>iX=i#ulD9RwXM+HwHfT!<=r;l2Wjk_2ZwT_QQ0`(`Fg zYh&&k6XTrv#^g4qzA?GoLBrg)g3-~80!Sy72q;-91~8ZgXGXx`JU9Z*gJYz?d2oyr z@GSwRzXchzQi%dkR}}-GZYl;q7*jAKAaGED1P&@NY~Y{*!-gYJ8eJl(I?{{+P!E*| zKs{9qi6QX1KqjbIkg!_0TiaZ4>20#N;41kVTF#tLNMM1%d2u_KPDMT3fd1{#XBh*yC%fIZ%VI4*$Pk&z-+;yoM+E z|2qfux|qW@Ji-6paMS01=jaVj@c)mVKC*y=I6T4szw+h4K91$^1poiq-ZysTkPc66 z`2TQCWoXC4T+Qz;r{}G~1U3gM@SNjyrso`jJg>uQPCI;F&!w68xuOH!b;L%LMx&qs2;gYx?}%0OtZUchEOB(|2(P z-`KRE?~Haq-?^zl-_d^G+zj6t?SsC#uApy0deC=Sr=V{pmYC)@2BV>MVLh}PUq=Rf z^W1G6Vun=IlCwkEyK0xWxJ8OMwuw!lL!yHX$MGkN8Z4YMT?(* zxVb*-URJgayOyG%F94u18v2s(qoEcA??gl25^5Bu)-Maa7A^T2op`hihm(88l(kR6 zo@nftHiFS9&B18NSHb9vZ-UXXoxy13cfsiV?}O2ayKvUP7gOB}Lfx@B2oc_gg%gP5 zXvFC_6NO%m;+QIA#ju&5>H79w!i{-+)gNM*obhHQfsVaoOmf3PYSl z*jE^0WB#!))CWOoVF-}Y3PYS(NEC+Hz<((WSx@?o$la2PlSaW5@7WFyy8S1!ijyt!>WX<%R>F|TTrY?pcUZ%XTk(^=h zWy*^Wl-J9Y7au6EmnknkKwgbFw;1vwCxihgNg>Tgp-QqvI5j^Hv63V3Q`QSV6CsX? zAhZM$C_AROetUX2Ewq~~3;6u0A>XuiAzyhK+CWCYH>-WfH_H|B%}WpYv`!&kX~&Rn zLWh8FLT13Hbq@GSvlWB;1bpZbXS@^EXC%OXU~wdXNh9hP@`bXHo)L;p!ASWtU@+sI zP;`1;Y6*6Ru;ou#hgTAL4H0}IG(Rm6txOL^D_x=J{Pv+}3CfmbhN2TY1fml=2BM)( zfoMrqAX=6kiiU9Ee95tNaytGQ4n+KZ*~N?E>t zgW9Vl%3i(yqHV8$={OuYfrd*xiHEo$xay3!f=uhhsB# z!!~8mE+KIS`Sd*avAa02icANrQR#r!o*5;BmI%S9%)m~F84y7zE#xbKNJ5Cu?-cL> zzOM{onwS#sm9!7|%3J~8M2M%dL&!HjGvu4%j;CyeupYc3w6u!6MBnnL0 z5k-)6AUou{ymK^!ZaB0X_NA8=KY7a;m|~BjVMQmRi35HhD_YVsTIP*T%!9e<4Rg~M zX6Q&Dht|;#*zYbGwosY7=>T3FKM&@P>p5)7Xk6hMV3IX3Dq*+=S}6|*!!=N4c|aJh zflA8*RJsm3AH)QOy3+))$>P9^Wg)cdEeMW?hPG0@qM>&Y^o)kKA?Otiy@vouy^o+r zH1q)iwBrvEpzUu*aC9{E5dv>C^f7{d(aqV=C$i&_>O*CyZPc&^bPf*wA$-}TdWp}g$Dp_(AEtl$Xoi-|%mjxhG z&}wFUK`Vwvn4raCoG+etn6EEdo3C$azF@Urxhm6OwP3mC!*Z3ta+SeyO~kj4v|J%r zt`bXS52*MDy7m)hJ9c0$4bv_;x|S0g_m!@7!^EAg<;KSS zP>ii?mG6dQI-7R@*F3hg!)P9WrACPXhm&&r&pfI%Tr{*3-vYOCQrabJ+};GVH6c0QlEPF+w}#C zI%4PE=vdah*jtGU!w=xnP3baiLe^k7qR!`_cxC+tuKje*I^#4x-b-s;L|h7$eC}CO zCGiD8IDSc{njL}uVQPAEUZz%1&ks9tDGYvFfX&x9?1!nC1OZs=CBYfkdl>O5{}nyq zIeDDtJqe##E}NeB6A~uprH_qg@eIuRlj!c$g{n95A?PlyLs-|Y4h(lMTX7QH)jgr= zI(PApNQR(R1mjtQn935tc()lqBgI|30!zWjfcymJul|}3Z2{W?V0c&WE`Ha_yNk~U z<^>>T#*256fmH+JJSnutU%dc__F5930|%|{hm!b}D>XEqlK74meZ&!!bk8#a2U!&i* z8o5vWfiGI+h8jSOXs+$LK45rpDr!UUGs=&OrVsJ^e!=71{}9X3(cwI( zb-~_N@SLc&dI4)>wPj+@ohg|(La80eL2ZqrqQRlR?2lcOAh(v8xfVoXkem5|4)P5$$$*lja^<36JJy}0*w)f&oXike`W?pLEs}+1NOS;Y2AFsu` z9i`5{=cM*gS=QnFJnCfWPA-n%5I7?6ZEEGF{VR`{n~u%3at7x2+PDx%-R@oSce}y) zIpx0;^x-}QZtCIewzYb`6L?piqAo_;dmmZQ6pWt{#{Q^+AXZl5uHguz8^!EVDYg?B zMFaTRT{BM5O2MhOZg&m*Hq7ZKa@;q?5W6N9`?u4vS}fmu8dE6L_{{CR!aRQN4&L&c zwn;v)H;()&kuY!dg8AXKUi#a{6gR%TS{BYbH6Fl;HSW3naI`452p8gHLVVO8KOLK$ z*BSr38&wwUQ>*x~Q(I0mzjizY6a;F|2O9Rxta*}DN*v{Ois_?4Pux`^f#=32kxnPU zxUj%FH3BLqn~ghy9BiJD3&dNWrJLk;(rK9hBbV~D&2ua{ROfNc0o%K{vQmdAZ_}b4 zqP{|P)qLc0cL=v8>s#frb*SY>{F?Z1EE&=PAFLH@E>6QP!PUkqe?oB`_Z}hD)Kx4r z71Ra5vM2CP76zNssf7J_B?Ej>FW8Ag0gOqqNZFtj;1Wdm<}-IFf5_B5uojC;SYTUc z+}nXVi1|shir0++_>!HS3(j`^Kol{SE9|zrhZcOSYO#lNA^WiisJN@KCo3g+4>SF` z_n)#^R7ka4f*isVoCZ^@%Qee>br;uu{AxRY0IMfPUR|4K{yR<5evUHK0#KcX%kb;bUVU0!!ZQ|SS>DZh?OI6=<_ zV2f*|El0H+1ZC|J(r^OYweKbAdyq~8NMqHoKhRH; zNZ%hsaOG+e3%8$(6>-{+d7$g0Cv8E2%%|mJS{P5tY!A3VNq~9pVkJ(#X2mI?{8ko8 zJB^)a*f0oLm3i37pN1tR?BjEt_{67Qzj*mPnx_|PW0bMB1M~xj#~6CLc}*%CjtFM&O(K|Cs^Q2X zp{nh$0bxAvu09S6;&6n^isM&4jOms2U=rli{1;PBq3+zig%LPB?yWnkOZc5K<& zf*GZM;uB>Kk$b@vI*D25d5~Uy&8>*)FK>3l;4P)Hh}Z;_2>K=#HWl*jpV7-K~eV1=3dP z>x;1WJqP=nL$ z1`2OR;k30<6iF<45{iBkEc#L}!}%4fGRMTT`s*d11k$j9yFOU7Gl0$9^{aCNX`6ut z4vP-PDsRTN`>a?<59ljG@sm1Y-*-{T&74t*ck7})55$rG^(!)BWw)Y6>{=(f*n16h z`E4Y&QJ3hTKNfn2v}MLZH^)L<)9SfyQB()!-7N$^6brS0lp%Ukpa|Rf0i#-K^&gWQzCfu9w}%teb*GE08-waE_IIPhQ0;KPlQ-zZ$d- zI6PFe3a>J>$c)E<3S?f>2Tm83y#9$(Ti*e48FHXQtkNBW3dCmYi%r};bus1(pT~q< zx*ksbDOLLk(|3UwcR1nh#xGMVKf)~jt5}T0ooJzdCj5oe?wV`iNzi{>0tKXDc|yXc z#kHi(p2gi@L<>gG_&9++GW8+J z9eI^O&g>&_yeG@SuOl5Z$74=1_Pk_)BVO=*YM zq&HH5&Nsr_2yrPnU@f?&tLeJm09d$14mh_g4b);1I0deP*PoJtFQn_lEhyTU@Jx-% z$x-&Ptz)FrG05FKm#D#1`!PXIt52g;tZ7&%zC;>iGC=dkd#5etH=a& zXFULP&pvv0qQ&(pF%WR9_6vOcLm&f9AnPzS5~v-}8pw4DNCAO#29Q^Q5HJGSq~0c+ z%*7uZhYo+uu(waC`|!$mpX<|kb^P)YcXY@Kw(F^f%J|($CH)yB z4=O$w)E)vy9FXwwJ=FZIlSO4ls4=tAs~4`b(;J)TVMe;P9YE19Do=P`#?*zr1-_(p zf8?D262#a(?s)+);Yb=E_f$nkpr}b7kKEu%eF@KVD9<}T2gwnL=PGPU1)F;u*o;xw z{PSMq2FP0hviUtYBbx5d6`pH)rk?749@+q92v3E#tR+0<0FKrbKR2PTn~L;t36Bd& zVSPvOu*S+Ml+$OdAM^u$pmvF)#FQe&p1-4af)nCzBiR z5V_i?iAdbDmH@He)>MdwB4Nk?pk%lS|7<`|u)L6LV0i-63dA*3-bql3${Yf{Nq{Z| z(3U4*6;qJe9eE3dc_<6da9my8ixAMC?Cavb=}xNaa_yXRN>3bk!a!|E4d1zI=1a2I zS6JvhcU5UvaAQq^_>BcF|!&TNd zk##k4#3gq)UY>58<}9&VN^ruZxucZO4oi4?BQZRwjNNLg%tn2!&XEqIQTyFD-H!a>0vzV}7G3h?HAHq-#YqBM z({nL5QJnU^tmlE#GKGYR0cg?GC~{6}Lc8m#rESF=QssvMG3m|E0U~M563mAZe%zJe zQ=*J}W^iUH?)obeXf}=D5$L^;|2;qq)Yc<^%h^GFZ_6wuHcDbS6Fc+yd3hd(XDyyR zTVP;56BYb*pjAN@DlopyRX}f+{PT#>=2?+L~+a`dkVT+W3EBCa3y;Zj9Mo0erMYRcSPl|lld)O?4;cQh@``T z{ilWGfWqEj9GV{YoK9>8n%J*FZltXMqJdffvu)#Y=8t=NBQslPD)Q4dPDV#%44<2l zBK;p)Cj1L549ciY<}C{`VwIUNI$~PnM`-&+)GCLzr@CuSlcc1k2Qu9?ry#BB+8pTk z@r(`cl42jC+Xq+%YELJ6VugALa;~=&j`K0{Rf4{tyEV3jNhA8Jk;9l6K^*Nv-MRb@ zbYC@)mS;H4>_@i037}b6{CurAHVBQy=-;Z$qf&-Vq~%I2&i0YY7BmT8)?-7;D6?tI z9Z5F_Q*HWMEHV$%3YxTGE2!q>#cr;aU}WLPggC2IjufVK=)z5)Hx;80~E1W9d6B3{LL)+6WUgwma5zQ7TW6m-`9x~DED9Q5Ld7nUZA@= z!HPKW-GzvFxL->IuRcX&bvuk%8v~6g^f&^mQ%}T)O>jrm>}1@t<^&j*j1;2_L`K)+ zBFv9~p&OAbv-58lyHPH(r(FfEkHUP8XG`+U`{tYDm=paI-f-p|>=#GP@+$iYRsE3K za#_`|l!}qcyMWhx<3c6a0rV>He3kj!b4dFIO4wgklOrdvY=O+s*wf7G<;`(?)5T=p z%aW9fB&B7~9WRW3Py$bP%qJfD{ zD=;0Q?=@b)B}7z0%z(XC+*l`GAbn=w03>i!WM;xM5@?CPz5j7?B43>6Z(qF}yvy`5 zacu0uA>uR1c*tFI6XD_8XR!HVuvwi6XAG|56j|jo90?c<@-vsXCxEwxSEb`{?a??) zRVKOC;qbPTc={XG7)MX$$!~t7R4@e>USV>@Sdh9$&ZoD;HWMufM~$Q67B%Z^pORlD zZ~7A@Y0W27@Nrjr2|WM24e4UG<6Uh&^T=YD!eLjl%>8*wSa#vcDg@3IOc~GlF%=IM zQe6QRk@`NW`7(M0v(QZwZ`ATw?J(H zbX#GnD~(vGFm>6OesY+FX=J7Uf`%bjDyp#faGAh35inX_P?Lm`N9-rg3&$=EB8Ex- zNoa)?7r{_foTo*uEzGeY^c4tCv;%}vVx1q32fU(DTKvo$wFqF8qI=-*#;SG)+5+4h z7V2SDJJ>QYo8;wVc&X_6_W+T=r;4uQ7bBfaF*-Tu!p3e4A_o)GGl^-K%N%31$k3FE z6ST;6nJE>=x^vn|RotA{1s@XPyuvO4e9c4L;mVraF%VUl#I zjaLtaS5Jl4T^RN$yykRC^4qcDT;^BD+ue|?kA26Ja%t!Om5S1|b59^5D*+E7!mhUp znBmZRcl95cg{;3OXyW)3-UVu}vk_WUAdGrcnS^v3p^tNt2+4t?Jo}Ne1m(qz?ExNq z4#-!T)A&{9EC?C3F*#E2eL05_T+4&mfMM^??Qh(51D;baE)-sJ1z;L&OnDeTvs72X zN#zR~!ul%Xa^wxiFM~Q@?mQfynS-g*V*PD3`sRv|fw^g?UTneS4SITVeY}?TAFbeh zoGhJF9BH4^f?KpM#~n_Wc;TexTr(paKMfNO0L#TdF5KzOfDD*g{b%XMViT@4{aht* z@3c8pew=XXT9KgVT@K_$rIx!*PBkCHp|!#w^#tiGHgnPH?(3QL;=<;i(S?~}=p(?d z0r2Juc5LP!NB_zB4L`fqS<>WL6BW-n;Wbw>XX-8M(Ty zAqPa3Uu9deTo1Bv0zQQCw4BAF=`9@jQ~|NbXKw2JJSrB|X_i_x#pE>CQn7T(m5d1` zHJ?@-jv)ePi8QU??I7mK(l!~3t_3FWikWJynZ9AJnO5K(*Z*d5)c|c{9`%%~r-QhB zK*eR>1&O?AY{IN38-aBl_a?NOKrNlnW*G<;{H*aXx$&8@KBeiMIXyB#v`BRf1XswH z+_9D~4VE0hgC8WO7?&O^x?>sNIRc-$)6z4770MiU^*UrTHLFbCQWM~#my^Awk3Qg7 zi`7pp0?>GteFX3^QsgWa5oK)0oN?FLEFAaTfZR$V=O>GNi*^*KJx>X7V?PUWDf7l% z|B`BHzS*-hV9(G|Ew7mL zRZ7j~g;W#lnm5O!=2PsN|K7>0x#fPP&;Pgm%Qx4N0XblR-M?&;q%7*bu<^yd!o~{W zrsrfLD2mQ2UqXC>*x2rxB6<Z=B2lp6-Q$(`51GD&@$-AnRt2kB#qDw!XB z%-&=l^Xfbzehg}8o@Mqi*8K^Qui!MgK942MD_7I&&<Q=~yXF(CxaW^G6dq02bl_r|F4IIEIR)=< zSPB~mE{tv6U8?)`;16u26MH4c0Cc;JyLz;8`j@GL>Ec|L7Dut%qaI>jt zHRYo4&($Ho*XSHi`r*&Yx&d^c5E=-Z1Lu}s+KBNHrqP!@pDB?cn2_h?9g%A@@%eiZ zVz5k=xbC=p0!0JZ_}_dv61m?3+C}K*NHJY<}%!kop0=0vHUo(gL8hW+CDRzGv zk++-*ZvGx{-T7+5K7Q9F$m`CJ^TPw^!4K}7UfYkx_eAbxHRXJh&w#1l-(V+>M{dcK;Zf0P4 zN+u>SbgX`(<$z-p9lSqm;4p6Vx9YQB#i@>g+5l*1@xgUNPIZBYt*8%5hU1yRQdC`% z`Xfmx>Xo1dI?_}0)$`d+NEcOUNVil)kBdmro6fuxZx^nl$VFSB88Uvg^z(XCKhM*2 z*Z>T;&NX@-)k;ybrFPz>t7`xHD5?DqUIreHJ5}u=yLM4j%u&VCaE4Z<7P%gyHp_6c zeFkb*0b0w_gX!zpY8g@5&v+BR(~XmlXoc1_0;oLzq5YgkoWy#(vk>^iT@%P6Vah+! zET#xrS|d1-yp@wp#qtNHko^We!F=fuj3rttq5 zciX}I0SzHg`!WmT1MN-@X`04LBGUFHzPhqNViPzQBv8v=n9(uB=Dr~hvH)k z)G_GesS1Un3XgegRcM|`7JP_8Et8E~kS?43ID5wt=BE8SD?FFtza0Owj0aj;PaQlU zus$cO{buwc^5$*4QTjCLNMZEriqY?5IH?rj#l$YF!@fmr0fZr(I+4Zh&&!0xfI%d$ z%t<|2-RJx!)6g$YuKKU|R}yN)zYngGR?#N^9%;qD$=z)JJt>7&DE@_!{$KEKBKEvF zr(PxstTk=$Z?wEwZu76t5yHReqOYC@F!)payZ)Cp_}A~kgYnN_#wlmG7t8s9$ilBQ zOmTvZy%t#RMWOUu4=k48N7~z;TEjv4vO{8@Ceo+))-n$ z?-!SLJj<-JaD>51cfQ;>{{!Ne{q-C)C zA51o4`m|&*wpDpwsDfIV9)g(k0sRGvSMnPd9cF96qXO??!n+MW`g3(Cx$u_+e%&{_ zkz(E%gY`1f5iju??@c2tcg;@ZG3VA@>Rq`}XTE!zmmpe|$R<-~=s}rSA}}=6g~>I4^tnPjlIMQ2 zr$tq)!&rU3a`jH+7a!P;0xM!X152S|6S~-3c;HHMbt%d;V{IPq#Y@Ui3%RkenPLH( z@5U>$o0%>JxNHVb;Ecm5VJ<+vfw3Gsfj==p`2N_wUD#w}SAMcx`L-MzmRDdsiOOy7 zD_fFuBq^)&wTHZST_tSxT*g`id6PrUNS)&8Bu$|Ij8 zO~du&^;VOi`-VH1r?n^EU5b3dB2;h-xb2JYzMLSx;QJf!^J~8NIo(?M z;$?XJzw*U5OhMJk%a?XutapYBZoF`6t9E*t;7V0)UJnKpH`a3n%>LdMpQU0yha3Aj zL>KX41Fo$cdpw9XySg4mZD(6Ueu1V3YIhM>L{tvFoW5DMk{iB($wIkCb+XVJDYOrT zTFwOUAN_(~FQxkzCi6Wk`BEU9792AK#V?MD;`@s&#kZHYu92);0aB^u_^zUs32+z6 zzn+sXqL%;IlT=G;6{pzFACGY1N@|_Cb=)~%q<>>PKU`3>e6UQZ4K0CftmQD&A#Ln( zRugxf#k!?7zg-)rwAyf1FfeUBpI*qhPVj?@zBRzv4dtvngB0l*o|FhWge8cCYU-}F z`h$wgL=vFM^i;&5@f$CV5Y#PSu0*o!BTr|WqE`~{WJ=r*!v&#~6(oh?HyX2SiDwA_ z9*EY0Bb$J%7RwOIVso*=*Lts_X_B^1C2HT1-7>XM+l5kbjZ(r<^Fo|j=(3w82_Q_v zvH#XT8OFokU-(rWxuCn6=GwjqtuO{zm}bBzR7RZgGuU`yHGvgIOC{FWO{0bDC@0)PT@d?Aq%bNucsV&RG~LCF5s zce|{`%`sA>JAqmAN=1_7Mv~Itu0oybS)~AR0uv}#0*WckTjYXMwyVQS@p|D(%B}Tu zBj%Sd9I#IeIed;SQ7`h!SG8CzS0ep8QbeSWAtEBZk16pxr5fX`J8<=8Tqo<)8Y|U+ z(~DGWQ`Qi17*T4ADRaTO`$???u3f^{BJgzPT<#^zxMz7Mhrn;e5Rn4c@y-IXks|v6#49j$ zW)QQ{3~>LRIpJls>q`W$vw>GLYtzrdW`k-umdogu(@G&uk(?8la~D{uj67QYVmuff zx3yj_=_r{mWac%@3}gKG?NCi@Fdc~@9yjJ4jRwsW(b4Dx^*TnoMAl16 z24dS0v!|2KxQLRP0@UqhKU|W|K$2?qJv)f--WOH({0W0lCA^An9Kxe0D7>S?2p6uT ztgN+<{pZ8pLo*4~-VXRs)K@btMIAxF*xza^YBw7`eMPM6&oWsNt0FC3Qr$V`A@jI? zG$*!15(8eO3iVxzu}Lger&9e$6%KSM273bK=yDD^UpHLvt5EnIZR5vrC-D26sw~P| z@wG)ifkEXeI>JO%xQu;^G0_MHU{u6fnmeI$v3oP+-@;eHxgP9Xlroqn#{vXhK3;xf31^m%*V>2igF}P)fTR^d81Q;!!fvWUs*+qdBQWn6N96JG3 z2g;9PkyNO|sX~}f7i^Y54J2+S()u3Yc@E}TPK8q>21?^z{*NvIA+p;o?&@n}dA7nb z2+RVtdq9K2uN&~=R^-;m(WPyjV%a~y4%B|CSkOeB6&CDL+MB^T1l71}8$A)ky~e*< zlz&~yNiW$HYqG#0E;awJyZ$m=asN6To}Wu;UoG1)5*vlq38)N&`Hj681&+otcTAx`>o9Q2)IV{#K?;4^|i?H_FVMgs@&@_vK9 z7tbSoRf@h}G5|{?IY2=j!N8>NS~Ko7zG(g}`aZit(Klbyt7fr5K|@Uv*S8j-j_LKJ z&K?hJED>I9Bl8eraaRgjR-pD0mnFh-pm8W9Zh`b5LX?9Dd)QEm71Z+?m?S=!rQ%*A z{U9U~xz_gN$IB05PqbF{WE-*_#GVWm{8p&ObbWiEAR>5@vAF9vhl<^3+v~~3!R^U3 zR`oyH6C!QflW$>5ld`$(+@x&Yc3D`aDJ(xllMmFcx9!QwFa9fgax!2CYF|<;m}dk3 zD`Roj^9)Q8U2obJuW<>g5c6~h_M~i@;{J_cJsJgx+%q;?OiCcJp|wK(c(Rk|`^P7V z-kxp|-C5!FkP!Wht&rIYjSXrEHyS z^oA((UT`Rz*h3-xhffdQ-u6uS-`g9Jw%gl+BB$#02AY;FoYKx>;vI~|U6VyLPuT74 z9N_m~^xvy65fiArQ?Ve^20lmuAIrd$&_1?rVZqK%4yC=dk{3>Q@Vq-&Dq9~nh17D(m|BHbsl~raN@){SQ3h4xGD`--x zybjn0Y!q{qO%nFHs~-ksVSRBG0`YxsL&SD80UTRV;AToSbTcV&m|;TulFf0ggzh<&1*y#7CwgDc6KkQW|EYP>Z-;n&o4lucjdC5pc5!@7oz)dwZ6S1aOPJtIk6nvKRlg~m|O7^v-R6ZhSRheq5L02-(@ z_X7R>XNzUq7>m2UVqg-t#U#{g{0XqzAPy>Q%I~i7r2IIr{}mF4p5T<+D7AQg~s_nBT&1W?OT-72LukqTYd^a1GV3x9F+6xeHL*&6x0C>O!*1D z0(9fW6L!0Gt9Wx7)1Q6(YMp^qB|JMik#g6*Bn)MK-$n75HY(q*jC__ zz7n2K$05@wlIQhFn#6y#@}xq=VZpL)4+_l=Qh!QMs|}Fi0{U-F9f|*h2vwF51kknyM2xM_{@hU?5yDJAn!$7-IpuZFACwJ`TO` zAo`fuN*{Y5TbufL-8hQrK_#Y__Xv%kwuP~{tDD0Z>@eGo*ZAwZ2iM1^F8D2dBx1Hc zp4Q(fg0G8{`Z&_8MQTl!k&Mf1*W1Wn>Qxo0pE3M9<+pq7U zm_0u;plbxrR;gFrZ&-*!f5gjYM z*eVit@S^TN!i${@$cxG3#f$GKUX=cZvsa{mRs(3D_FS76(*>sMIR;K%+=2w-V!*a| zL1(Yc{^tA%(!K*cL00uQTy#QzLq$M;vy05oUBi&A&Gvoo7^?ktltF*^{trSMB;H9O zHh}Fw5R1Dq&A8WCz4_qnd+oWZeV1eS5d>3E*o&bD`WYf*x9d55oh%M$bCv6@Tc!B0*_O`hcPe-Jl51mukqR2 z2Wi))Kl9mm#ZAoL`pe1IwkQAonCB$25QtbrR@itv!dTq(8t@3z9%~ah$-+SC)j{WP zw*^VvQHr{wY^Y%cbs__ky30*Uy+#ILTYBa2wMD>db5}nKnW4SaA&~ZV2Ocb!o?95Okww_Z#=muFjqJ_Q0(2~Z25RTp zjVwc8x=I-cGtAEPSR@!fZb~u(!?XkZxgXDIdwfsxn;hT2hg{TyHkMO{04Yca*g*eo z*eP^@!lxL+dBzU?OPJE~8dHeWK^(fvSruKFgOBfto88hn9OLBs-$o^s@Y@|0GQAWs zHv)k`?Qvuro2~J|#{a6NodMW^+FTR|rMKI_>lll>HZU-C(PLA3J*xN>kIrmwm1hfk z-PP2;uwFXre{kkfdpr5?Xh2lu77|Ve*Ba4p`i|317)^R>&NAs`zlQd=1OZ5{xPgK%7vZ$+vG(*j ziG0PM6m~n-E)(yC3Z1J3%l5XgcdkD)A}e1D)|b}9rE4xHPQ48PUt6fk@7f&)N8^3F010Zce4e04HuEJ>`Q6u<=PIc%Jiaw zYPq&hO(D)Rrx5d#rXJlo5w(rY{k@z*7zxy@9`B~FEXXi!W z4Gc^=4KwaF`T=%Q=N!$=ns4fRx=o+I@K+X7-ss_^ZzfQ&===AV7JVNvhJCrH9bUdo z-y^Rd8hu9!eRnGQCfZPS1@(RgCVe~1xYrm1*uP3&s6^36|IB}I|LmJ1o#ZVZmL%`3 zW{bRb3Xw+<1ZrQi$!mD+(8wDGpn=*Iio6?bs82H%cfHKOBrjl-cNt)}O`avcDPct) z=X zwi&!D*Qr>i00pbvTyJCWBx7;cGh!Exw3&Vd>i#cAH`@l2ybg-Iqio<|1$-g{llR4@ zNreB8Dh}dvS@sV^lAF}8@?Y1lr@A{y4FesE)Wx4$%zlNjxC;l^0@r~ysSBD8O}}=Z zLK^!k8i(3Yrzxn{GB9a;z&3$>0J|;y;(1THt8cNQkNY<`r*d!;@!H`|@@4=Ni@bk* zW|8+HV{um$Dix?5ZFgu(8V`*;eh(U`9jbb=3v8${1@&GACVBnLriAk!0lN+IEc+1B zgg$q54GoW8I`5F2#}7SDS{DvV(z@zXi`MTMi@Peo^gu1Y#vyKAHq-|c)PFEAX+6votJjzS*lp1&7{57`t=w!}USrv+gWHQ2#-JkSa1E0p;>7E3l5=pNh?s3T zF6icz!OtfpWe~7&nW=EuE;2Y0m?{|*0*n8`ay$&!f!a((=%*iBgdV1V_hDd)Vy-QU zH&!0ha+vGsm;R_p??js`gQzJa6+QA6to3}w)O&irUG7U1D~sadmX^@Y~Vfs z=UK9;EptIwP#_2Mrr}WMFh2d5pl?>v#ExNm2npRI<3;yIVSnX^U7WhN&_~6>&C`GYVL3Pfu~dw;T$>3etf_@HV@nw1hlZXn;rQ) zs2}&s&I|Gz$GxJ2*)Y9O!b0!@f=?*fbR;R*8c@pfxI`Nb>Oy4Rgp`WwF&=_a%roX6 zCQ32UREpCFlBiyasM|iYc=jq|STA!}x1bsK8rRjEO5wZ{2WR7PKL(C=Iy=qpfk0H2DV1TH z1h1FN-?S|JzEl05!K< z0lFRxD7r2T>wYZn*HxU&Cc)umAiS(21;on|0 zb+maPk6beSsptGcpuHZM0+jxTDUOjqF*(Jt{RHqj?m3fIf$h|q!par=JjDuOY?_6M zH@X5Z@%esZ3QJc&e?kKc)LzfNMb>Oqz9%$i6Q@{lL$i+M517 z(6s-B{_IxtA20Ox7hB<^UvTvlGvE~RBjRf z|0ew-P5RCGyc{L}-=5D4XE`bUWyo)nZ<5oJ;R-oWZmDE>2m25MhK zIT-r)-nF21R8V^`FtvOv&4|EW_0mBoHuZhgh}QJx9xA;Tc5>4DOF@#}Q8s3?7{h!r z+8-9KYM1YDKO z;SRa_5|5bcCEu->GPQMVZP7r z{gwH!mouFNUJP6;0v~gK59eFvO{Cm&wT}GdjJj8F1EE{ zkic{;VBpk-@klWG19scYf>qNJeTM*M(!SAt+uzS&!^qB}MD1d5BjGuMbz`tVHdVm~ z#N}wq`36)Nuk~h#8$E95g9s0vgK0e}ego*B&5}s2COg{~u8+%@7T5NPq!gEYAu~8-FCOp~6#1$&hi+fUzv5T)# ziTMf7C&|Pnl~|bYyqQdVO(hOacxsc0n^mGe;dv~X*sKz9LC>wp#2-{*X~J_|GBKeN zCnP*ml8Nm^Sfk4mp3-Duwo06q@C-{P=BmV52~WRdVjq<_FX8EuOcXtcMXI2*3C~`U ziEwYEWRB3;!gqqn^f4-(`=Sz_HOcg;D*YZw|5q~oDwV!O(*Ml#SmX&jKtT8L6=aq0 zEKKJAtIE$A#f0bbWco6d&i*>#IrD(@I!ParOkb_?H%WT$Wcp^6zFyKh9FV?6(sz1o zH8AsUm-Ma4^fwh8L(=P$>Fve(M0QB}lgaeMReDM)@xLvZK1ii!O8T`2q~}QbB?qME zN_z1D>0U`6m`op|;1^2z5eK9Xmh{wQ`bd@EFX_!#4>ntqiKiy%8xBY>mGs(V`gjFr zf}}s3Og~+vmrHsqnQr1aP13JUrknW8lJxVE=_Wq&Bt4K!KS9B-lJx#ek42(*(DZ#p z+wd7T?2QmBJD;!v%Kq#lY0uCfBs}AhOI*2Dwx5|6?oENuxZuc&92{>@)0eR0uF-HL za9xROEW?F7u;`b_-d^sTxyfCdR1a;hd=OKMx7@V&(hezF+Su_hA)`m3Nu`5h8xZBT{HaH48JtP z@67N=Gi(Pxjl_2}!^6yw{u|SeF~jq*Zqcy#?n^qPJcR$p@&8Z!Kac-c@!yF5b@+b= z{~zN23;chJ|K0dc;6DSLbK}1|{*T80vG_j`|EJ*pRQ!*{{~7o{7ylRI|1$i~#Q$9U zFTlSgVCmQ#9Xj35obm7iyy_}MIlSZ#kg?+qpX;>vqDLr7%-|F*4>LBb370iCB|Ik| zg$L{$MDOL1&xDuvG=~&};W>COYG9|ggy1lC*^HG$T>SVL9+{j#Xske5>>=i$=P^=! zYK)PDS)7B4!OMFQrht1L`(b(6Y;o+$T--M6#aY2Pn{44%O9240GviN$TT+CR?$wr7 zoHDJCDi6oA|A-F7oii>6V=SIzf^YFhdCd!3#uYN96e)hWv<2Bpi#9TC7S8l(Dvpm{ z9B}tPZMpaf!T2Z~R_!_w;Bd|Jx!?$#8^kW-uUD=o6{96W? zsbv8|F&?$E%1KC=B+WK9O4iiLZY_bJ#4*_;kxf_ys3$RA^L4R1w2rqx@$hWm4MlkTZ}8p{tK|Om z$iC9qPa*Rh4EB&qW%vU!2#FIFey8t`-xNa7ztQv$h|tnoO@yKjgq9-_2>pFP5}`*K zZwsNr9SAMl$8Kl#BMF-v8m(PQAWQvdWLwd+I%pzT~tx0C{ z5>{ONDV6hxRyiL+PCc>&nE<4n)a6vV#ZTJxK>`FsQ=tI8x8CHoR5>1i4l>_h)2FvX zB_S5m-(@XHy7H6t_@$oFxCe!FUDm3SosYLsNs@m8|Fd;%z;8-2q&55ma}yUK;x@ns zQV#Y8OLEOYKSKa2L;hGoigEjG<3>GmE_p()SDku8bW-oLg%w^iZ(^uO5_ z{mFV#*jdCa{{D@*lk}q=lYW&g!j0#O1vRa5UUp#4c2>@rt#Xb?=ByIYM$*%)oW-qj zc0C|xwVm_CRymvhV&iGSTx@1k3KP?}L-1ww6baRyCz2aXLUA|9Rbs{X35x6erlExTmpiMvD7rGAm_Rctv_e zmX@f~B75>??<}fo(9>5q{13^0wf?xN3 zZPJr*FnYddlb(#(ZPHVd{Svc>T>nB)ll?q?E82H*{Y{>j#;3o?6Vv$gkUTMsPk)vt zrt#?xd14x$;s~AOD0&tkwGH_kl%6vj`IGWFC_Q=19&#OlpeFlh{1TI{^29VgWy=%O z_>>_}Oyg6kJTZ+=`|=2dX?*$*o?6i(`fty_c=d%#pmeX$4-kKL@37U^9L9d~LVn!D ztHC3@=UmR=`wKF~+PQO5-CahdyK``EQz-$N&T1Zlq}6EuU; z3mUkw?>acQI3F5ERDr%OJf8~mbqU~bD$pk;V#K{T9wSjfy`8pjh0yg8*F$kYzT>v|*P(y%O;&!19>7Y&+G2f! zfi=05<-pvYYxJKT!X3E!yMf3jdq7uUR|@W0+fdP!7v7glDox+LC7iYa*WiZxY$%@8 zFi!6VzkYO%u4N*~+!ahsb5~%|0%2tPjxZQmglg7Y(2V^9)-Y(QeV(p1EW3A~j1=7e zQD2`kbvMSYm8lI{{hAy(rq$~89Qh+(;rhyMd13k)B}Lo9IPfwzT(G{xJ!;dGu->z8 z4r(bGwrS4cQv(Y>PT5fszb|D+A`w`f#?;CkVI5_mjksxIWezl1$qz>i7OlZO%pz=z z(l;ZL@YKm;(+eHaQJrO)$yKH_3b$`UEmFfoP%LBy^sR>W!;e0Et+?cAZSRKqm~k(7B5EVSf&j zW3F3)K%=V?zlye*h$-5xHDeaKr0r^?VHW|0XWdfqIJ*fLmne+$%&QZ zygIa1eOIAaqA`+acf-G=Ms=+!WrB@ULn2?MR^;>N@W_v;6&;gp)%Y$QNAnhGLMniFo8&Sl#i#{CA(;(a9+3OG( zi#t+nD*GE7@DAC%c>fRe{vp1<0`D7LJJ1rS#C~65(QC#SD51YPQF*Fy3u2takKk&b zJkH$TA!t_Q!aTpg0=TytcNT{A?4baL!;%uN7(fY+uw|sq(eq#*kOp3O0~a;af}9k? z57>(#+oTWYU$j?u6{CDj-GXdY*pDJuP)#(&T!naHtV5;38E<67NFrT%it!0a|07-) zl>i*++Yjj}AY%b=E!yZ`w9fc5V!O8V*cSOD)%Xm#^@f&56cR7u&EmzcYdU64Cg3(g ze{Kvbv@tDH?qPz);Sw+XM~J9qW2JkD=V`R01sO$k&EJ3mT=R^}9Oj15!X~eRg9tWv z@zyCtuy|d?nWjNU2C7wQ>-E`lK&p zu}Z2D?sB@T-dN41sJmKLO2rkOtvm_O(kw_kQQ?Xt(klISjVCy2tiXZgu79bLl^x;} zQqk-RTe?|!6P_6Wq0nn-U$l*H(UYM;&Vw}ka?_tBx1{fZ6C1dGzY~q5(q&-s71TEB zo6s&DN&xv^+w|})WL26wSPu*7Aqt>V({``N<1an%2$U!Co|}9UmZL>R%x!?qRJKoezCgQ6T7%co z;vRs_L@%`(FF;>BJC5h(pV)>_-njK1j2j}EdB*1JY4|hS0XAls<=sQb1jE&Pil(Rc zEd=v4bm%QE%rsVXE2`U}x&M_t0l+H1@hLmAG__?nc}TdERM`w;8ST*##@t)?CeTzL zQOW7Px|R&%K0GYtEFx?-%D~|8WM&wgyA(VNmX3VYb(Ji1m~o?e$S^7qY5B@gUg|V1 zN&-#lgLChySKTd6y=XRG0^6X?he!6MR(26})pYEpY)p855!qrBC$>AH?+|BoIy!5( zdw%l&;%3ZDC?3ugAQd@a?gXz$C%^eMq#2LwN+bXs)>yJ8>8v%Mo0lS@{0;XqS639S zS@R;Bsyo;ab*16ixQ2!#hHNGWx*0d9hYsM^)rhuyxhUz;DOgn_nvRCK(YID!7TKFR z_X^`}2mzAJuh~|KtFp77!CRvb$^toJ{Q{r6%5%jD;BwJa_e|Hx^=QSBro{K|1+In2 z0Nq=JfR7CEcn5;ju8H_f6*0iKC1Lpf7C)i~Fv<1HOU_S8nL5Pf`ope7W!6I1~1=+4c~`y7Qxi9 zxT_Y~8X|pT%&opRF5`tZ{(W+xO&yq`Z#7+}s}!5l_1E6$UkgAf#!9q);Ef9i1Iu|D zp&>_x;4$I37MV5u0R!1^`^px)#EOx4G3W9PP# z(y{FW;=1o=`gAazy|%4@M#e|Hg`njy^zft~Chr`yc+AS;X5tTLV?QukD%+=$gH`sQs_YZ{ zmCZd!*%eS=)}6z?1ee!ih=GalHSR}(dVQ#98@{0oEZlKb#gyrRg*(SixvDa#Z`5}b ztqH_Or-nK;xgQBE{OGuBCf_LO<@Eo2S*L!m}cKHTR?SbGikw-xVD~Akvf?jJf(F z+LD1ZFCxpKd^mSp+c#{-4gH8KY7gq{DbuaG-7kF7VNS-Cs=*JIAL$kB7o9Dq+G=TQNA&xyk!(jD@B2OiDE>0hYW>SaC4TDb#OBGc7Oy*!y~bHcSu8Ibk}p)|fA6(2V-n>{ zO;6RKs%YcpEc096ClX;jG)phTSfixe_+gKNRERc(Dx^fwnuUWQgF5$}^?E(hA&&nq zf9ZGyK#H?=|yPo8fh4ILZt& z%`nFd!)BOkh8Fx^OnC2_;W7KYA8bAk*f0ID8#+``Mpn4}M)jPsV876+==bn<4*br6 z-#PF*2Y%!ukW0peJ2m?J14*YP#IF=*~=ICS5;1*-oK;N&*#2& z2|lHyY+l^_%j+MFc>eHZ-B#r98{jIq?A~jRdnLW$sbJTB#eZo3=le&M{&3s3_gq(W zPN&gduY3B^PygNX$u*hAT~#06`D5j+r~Y+p#^XPIKd1W(k@JQh@p;V|PfWXV;WJlH zeplbq;y!KG_y`mren_v4{GP{XiJ79}LAk^E={Rk|XsxG2ovY;gZzRnTZn?PWoC} zdLVaq_W;MrI&mKnv0-+3$v3>R(qyBli7mgd&}gryh$)JQ*!v|fk2>=7^aiK4mhK%U zCM;TIC2d4bj`^Lnb;kMpyhn9e8BOr*ZKpUYDhwtHO3y?^MHv(tnwYArEQUcw2GvJO zN=Z9>{LoxnTsUHL^Xvy_=iDO%1QBT=Atlu5>7Nwh;>k1J-A5|M##uM}`#wov2g{R^ zk{S#h9pWn_Bw>Y?mJ=-jfzgZl`f9?cD3gQalKE+}vWG zi;Jfh6BB0wV`I+Uy1Flrlxp)+1cCv*w_(?e0=gQ1qBuG z`T16#tE#Mr;NU{SzI>_m9vEHc6Wcj|Lq(5x~C_xc|rn39=% zOlCns3JH>sd|F&vd-HvEw#6teE}wCA^^$gE*aQ)5CN&H+N0O z!V=dxIN0D8AHU|{>Plp_xOl}76SHpJ+RBjj{CQw>W~Rj>E$#3|P>|6YG<1JYQPJzS zv9aVe)z#(C*w~P`iC{QUWdz|9@o z+}X*P{Ne>P%G1+5ba}Z=-|(%)gWgi~=LqtW<)GRC(x}2Q!=wM+5#e989Oaui{6|JmvSWHY7TdAp^ zzkK$rZ{X7>=Bt-4qs!9LN|`x1$A29kd#7JtcS|)k(q~Rix)q6tOeaW6qHAw#v}>lP z?>J3OHJkSJ)jLvA#Z(m+TaM}Lr;faSEo02Y^nzDgJ7s)%+5N+>UjgB%sir@6b~^Ni zhR)e3C=lpza0Vya+8kyH2nJTr(Zf>=4RJmD`!ATTu6&~!8cuch_PD29TvjXD*=4-~ z14;9?w>@(@I*!%-{Pf9hZukcc48FxMGJf9O+TvO!Ba^ZO{B;0-VZgr>@V^86SpokD z!2c5PUjh6z0sjTSUlH&}1pM;=|5L!f7VyUe{3`+f9Khci@Sg|#%K-mdz#kRxM*;jR z0Dm;VUl#Ds0Q@Nde|*3n7w|U+{G9=R1i)Vi@Sg_!#R30rz~30~-v|6h0e>aHpAPUx z0{mM5e*wV19`KI>{F4FyalqdZ@Gk-UUjhE4fPW$2uMYS_0saAizcS!|2>8zc{``Rd zJ>Z`O_!9yCgn)l8;C})5PXPX7fWI!_e*pL+1O8@!{~6$K3ixLO{@8#&AK+gA_~!%u zRe(Pn;Qs~i9{~Il0e>67p8@dS1pI3Ne_p_!9`Nr4{IvjocfkJ};O`0eCjkC$0DmvQ z|1IEe1o%q;{?UMc3g90J`2PU>j{tudz&{l5UkCh&0e_Xh{7dNL0seY`zdzuw0QkQH z{G|YYX2AbD;13V@zX$w-0e=j@pB(V_2K+w&{*Qn^4d5>W_(KBzB!K@K;6Dra#{vGU zfd2^K&ja}H0{&ruzbfD#4)})v{_TLj8{nS=_}c^iUjcthz+VmUZwCD30sqf{e-Ge4 z2l%r9{)2#jJmBvN_%8zfF@S$7;Qt)(&jkEw0skPt9~$s40{mkE|7yUW4e*x({J8-C zF2G*{@OJ?GmjHh(z~2Y({|WeW1OAo-l_`?GJzJR|V;BN)^n*jdQfd4bV{}bT<67Ww0 z{5b*tW5E9!@NWeCCjoyEz+V#Z-vIp60skq$zYp-I0{n{se|^CJHQ>(#_-h0H%Ygqc zz&{o6-vRuG0DlU=9|!Pn1N;d9e{{g#5b*B@{I3B22Ecz0@OJ_H*#ZARz<(R??*RP$ z0RJ1n-vIDu1pK!Ee=@*d2k;jL{7V7jM4UKc4fyi`{sn-4KHy&k_`?DIUjY9Bz&{c2w*mYa0RK(E zzXtH<1^np&|6agf3-EUb{J#PIo`8P>;Qt2j_X7Oi0{%vTzXaeP4fv-3{*i$H55WHj z@P`5XLjnJFz@HfK|I0t%j|cec0sj7gzXIU@4)B)({Fwp&?|?r%;Qt=*4+i`(0Dp48 z-y87%0Qf%w{xpEU4B!t5_>%zsYk>bO;2#J0uLAxffIko5zYF+>0sg9he>mVD0{FKB z{%(MO65wwS_T8h4)Es!{JQ{u4Zz<4@LvM_u>gM`!2c)U&kgu@ z0{$-m|0lq|9Pl3o{F?y(I>6r!@D~I8IRJlK!2cuQFAeyg0RA3;|2g3Q0Qidn{uY40 z6W|XE`1=C>f`Gpj;BNx>Qv?3b0RK;b|4YC>4e;j#{Eq?uYrww|@SgnDe_Fub9PrNo{5=4F8o<93 z@P`5XdjS73z+VjT#{m4P0DnoqKNRqX1N^fA|6IUd1n^e^{C@)e$$afIl(d zPXYKN1O5hpzcJvi1^7<^{&|2uCE))O@b?4!c>sS%z@H58_X7OG0ROq)zyAS$3BX?+ z@XrDKzXJZR0Dl$0Uk>o+0Q{i<|1H430Pr6I{6_%)cYyys;NJ!KM*{wnfWHvn{|WGa z1NgT9{`r9aCE))9@E-&GZvlTpz#j|nF9iHI0sl(CUl;H%0sJ!oe>T7$AMjTN{A&RJ zM8KZ~@Mi-2uL1u!z`p_TUjzJ!0RJn%e;x2=0Q>_1e+$5W81Od&{QCj_*ML7c;9m~- zBLV)(fWHFZZx8s-0{-6te@?((6!2dL{2u}TSiqkV@P`Kc?*V@sz~2S%w*~y|0Do=3 zUlH(+2mA>D|0=*g0q}1F{8s?~kAS~F;Ex9QF97~}fWIK%PXhR(0{%LH|03Z39PsZ0 z{Fwp&Xu!V|@E-^Ky#fDjz@HxQcLV&V0e^JBza8-30sNZ*|9Zeb2Jp88{8Isc8NmMq z;GY8cy953KfWIl=-vRia1O5nr{~+M+0Qe68{^5W>F5rIw`1=C>r+_~<;J*s^%L4wS zfWIf;e+>BR1OEJg|2M$@GvLn!_)B>hIon&=TX2(F**m(qlG>WtTUff1@{uzAo>bs) zv12nZF*Y%9G%_^>e%TPssi z&<3fAm7}GZv#Xiszxv^7`M37X?Eh-lz{=k0uPqdR`t>K>&C%4z)$G6e`zPHTRB!=- z{*?cB|NkFx{-pmi&Y$%E7RS}u;7|NN{rTUGhpY3S@%XD>e~b6u+W%YnKiX$y`9}}_ z9p`W9eE)mFKiA`*<^QDrS9w+gQ!5KI7uSC^`M5^f6|R-_e8*}knkam#*2G3Mc;EkNIDA{Jimp*3Ne zO8CIpw4cQ};lxW=tgjg4rTlq=v^{big~G*-#lV||ox{M{$lmn#Hw*Bh0gnI0{Phdp8rgDb@+F*f0Q?Kax?f{{Ga9jisSjW z9{i);zuGbS{fhgq;~)8;Jrf5zM`tq^7c)}>2NPE_*T0ti|Je>G=Vt#umHbD%zuNm- znExS;shRWt%Xs`N=TA@nbNn(erA_v-jSnvb^=&zUsY^q_Ky)lYQI8J{R=OY|O-Z zi>I@j^X&PX@_738;jR#hu}BS>c_|fZm*OwD@BEQ^vlgw0@cpf6_sTwTzU>;V)Nsni z7ONY&>LRl>bM;S=&ei zhT|gt% zx$HY@4BjDseM;$9bn?fzlf`*vcD@Z9Zo+S%KAr9a^R$A$tgi;^f&95b0cG%%wZ}+luGq*x| zyD?;mBG+Wk(cue=BveM#f+F(G#~LPW^K9-d9;(|ix3 zE*cF}W(1N5TXK=V&jtiLk5w>he3k>o`iMlZN7MOCz;5`;9aDemZbp0!*@sjZ{kTS} z@WzmCO0Lf@Q^f@%zI%+r_+;qBbjMSRK5>_s447E$m#CPb_3Ft6Sg}yp(gcgt(V0fS zcC~OqMx+03xOf!j9Em|thq@QdZTS5=XE4M1LABz&C6~ozp|}N}-XOf0)AC$XiIF$= zYIFH~H^C-&_fWR4G?cWE_cen?IqVz?G8 zGQsb9ewuXe7YiP<`-n|5N;5)~jhAaK-s+X$Zf(uYLWEsJJyUp_V;$>gb~)7bl{X)` zjfIv!R!uWQGk^NFb6`gD_SWEy@vbPlZcDYZ|1norv-~4Opf%w(n~>F~sE4isKL*;) zb)s?~b6x&Y)UU&VymEtALmv;T6qFSU`5SZ3s(+~+Q4y^BV;d&nhD9shiuE(9zT_&} z&s*}WT(*_Q6Hxi;>OjA%U5aDwi*WcM21TL|T12-KoyeAgxXT;r#bcFPc5^2FmwoP8 zU$ojO+b21{{biA4$qSP4`i|&L%y(qx%M)l;;gmlfk;TzcZjh)#s$GyTFn;E{PK}kB zf1H=lisabPPFxLY@$}3k)}xH1G`~c21*YI0Ec6F1LrwRfJH*RZ&^f>>uZHf!1ocmvn z5vopy*kn%OfvgW7#UJG(pQYz!3n=Br9ueak9d+9ATy1{e*fNb$ApCIbd&9MUY5W!a zz6%<@*yuq_pn34(R^ zNyw94>fo(G#z*xh`@{M}lAA6IX5p?mSu=@@?hrYjP$^KI7Hh(d(2w2qJ)6`#` zu#Q{-?F>^NbcHz86S&p>W$xaGSZ6Edig-4q zbQ|9al@-&W<+ow;>kf$Mo;IplV}ZKe(*E7N?_XlpJV*_K(NWGfW<( z@SVoS4QJ6#f3>wC-=tG6@{45(BhPLdsxRBSRQ#FFDbZM{cdcFad!q1wN3xW=ATp~Y zXLlze(W&9>T|-!!B!9UFYpEZs#U$$jG?x}*>R#zO{0Z;j(;A5>h%GoJNbkt<6ur`H zco*33(nv71+I^-3d41PZf8rw(9dCDOoc~a*{bahdl!jLOnYH$)YX&M<&R|DX=^G<$ z@@S1o3yLWdS5^`+E)Iu||C_|6y^gb+k(CP6jtvh4^ULo+X=A2c37i#6(-}MC%DvH@ zV!W97Ka-qR@^bI4sJ;*XRE!rNW+<;#{pK$`swIlTW}#XIwXbs|(DZqb?j4fnQS?w$ zYfKi7&j8Dp=WX6ua2#0#TKZ($TTJ3JJp6Z1o`?3lS@AxI7M7Dt%UIUxP~0 zoz)tmS6N1MWSlA9(61TGPUwy>j8g8WZwF5o?9r$DU=Sz96-CvC7Jk`}nkcj4^8Jx( zG^6CfGyW7?vBRaDY>B#7$2of=H}p_!|6mZ)PKV$dsfOMF89}l>9^zJB{U~*Fu@W4_ zqXLZZuBh3wl}08qlpzm}lrZ5p;d&`IZ)(RLM60cYWce8GHaanovh}UL*_q}*Ct%=- zaTU_mF?jQ2%@ZW2|dbo*cVe z$_9qWQGX`*EazLnNTP0hH#cuzmwekN3_)HjjuL*$bCq@-!x_mozPJ=YvfkEagD5JUPhAo| zKUU01gtzMM8PHMm5K%%3M+9E(Sr$Ux(j_=~_n^9s*EI~!q|=<{`;JH1=zryV+g zp(0S7V%as7VxW<1-V?7uNy+t{q8MTHh>tYz{W8a?xbYWPvhSLu2$5I(u}D-QdJ zBV&^Ww5#}AEiHJq>+%6K+Cj(k^KjZ%uOj_@DUFTK4l#%ix-Aovu4=W$onA*RvN;4R z5N%pn9ONj9o5f`Pkmd6zo#!r z8^4dqA9P-SUTXIIdZ3V1FByj;NV-WK6L(LElg=Oi zG~P>ha(~;LF0HQfxxM^a&tsGcMOR~#Dl;VdMMbr%dMD_Sn0?q~FA8Xu0m^|m{{7}ADGL5M|0O3m2ksJyj) zS}V?5x5ZJ6gdfBrwmMFRzD%62 zQd5*VMQEf|0%sA0ge#{M(5q2QBH3AEBGt+SzTx?%osy5pN#+^m3K7dnP*?X`rNUMj z#s=>sA$qUO`O+Z{LzI|&&)QQBEp`Yo7=m4$=7(KRcbeQg0>gZ8o0%OO({cAtQyTnFd;FRXKG}*oJbEO)w*5&&8b68Fv+E3ruQ~iT zA+e}PH^Vz$S7b#ue<3Hjt{^VE!>y>AVS^VnY32DL`mbIp7@sM6=NjYUqX!k9jJc&<@ z`0N#hJ)tCQ?=o_*$3-#9&H4a%+8yhDNF`ehQ4Y zrR2Eale-*$o8I}^gXuX=h>mM*Cg8Ah@kXY8v#Us7oAi1!KGUZ(Ld6lH?m{Y6Lo}Oi z)`(k0$M|{$-&4V##(zPc4HEsK;N;!a)wg)2q0JPDb%)#HcDy{~qPN(E7?hr&l*u$lh*Qw7TcUkuPqG5AjO)#8 z3QT`lz1Z^N!=3nxU0`06KpPB7D z!d$cE#4={qmE@)!7e6w>)ogg%aU*FKbZRDMe%_gXae?$+LbYXhH2c7@`^y+q-D@w(BMGO!A~Z1OCqIb3$!?2m_ePr|-7`h>M~S}Ue&&?R8l zxQRk;PS)D&$E(uC$g=k&QUHNv7k+V2v7NUejrW7khq?{&FqwaE)?Je^H(Gh_W%E>6 z{HNqOG*$l32lJ7M$fXeNC0i{FJfD8FZ{yaiNL&>7$7+bjn;@LoxqQKUJ%-;!ETCSp zOC`j}J(j)N^~f-bLEm>I%#wmClU+amiv!Za_4d7#a%LngT~&EO6+Om-J(EGoT=zIu zXe;bPfN}9qjU&Gqd$pfNlj{AWT1kI}I4olh1X2HO#*|GPpSslvVKFtUyaAp_90Hy` zB4kE+u}pwj^QeSiXx6z{37@dNh$?po?Ir7%!N9F_Sek7(R@7or=k4t0YR-FM!A+5E z-eH}45Cb8-d#MzjjMZz84-woKM?`Xiq>ol-*paoD(erkQ30W^QGtO=8S!SGwJ|l*f zw3KZ+JyYcmM9zA!-Xb=dak>52f&7JQu0`@_;KO3D;Zfd7$13WFJZOHCA6thlbwZ{a zK4}zgw>u%%$jxCO`5Uo&W1;=}rmCHy>@`IYAjS$UL zNJ><2irnEU+Ak{!tK39)j8iezhxpClNu}RO%tKbWl}$3q1hQV+@{8NoHrt;zXd()= z{`{!-$@Q(6XP=ga1=J+sbfvn~Y5m*kELIl{X?(YJlo!fvZl%52dU^zvTt3Zc#b{D| zxB_B5+A!f86se2@Y*J}c88FmlCfTm4M`~95W4o5i}C+N%Qh!L~K%WxmivuJ|d zh@NFq&U9*gvMS@od_to*H3NHe;fMBD%by{!i9nfGROELSZ|uOUiTOeZqs=*P~#`LnB& zq)M<2T*;PyG|hJxJs+ZyO=l=Y+z9D{TVY-h>f1NvBV8ms>!F1rG3-$rQ8>~MEwZdj zR8Y*fgAzfn%a~{*)aJiC%z?00bT>0p=3M=e`<7tj>U&2qMon{&L<&+ab*rrL#JF>q zw-NMLjT~lbgcXNOa|vA>jJODxddx6vr_zw4IiX@r6o|XmJXH%dSL!HzD`g&d9_=jy z4mBuZxMHc>rd*WCVXU&I%qS;lRX)XKIV%*l?WL@0v4T%~x9Z~u^RCa$&CB{?c~t8g zyI*#A|&wy||w(okUqD$YWySwq!GG5bKb- zMD1j7Tt6bdDpt4;j)s2WRNC+PnFcFrf%pXFq(AqI#Kb8xG*xNj0L0!CezjzRV=P1{ z`KiUmtEw0tsnWt{DrdsrlRK6q)ts#pUHho8=3F7)A~+C-S+T?>9sOz{T&o|m6rp`N z-}d3VtU-Y)qa`2V33?=Nu)5VDx(Wa3|1YQFWE?R zPIt?y#Z-F7P80pY#M@|c*WK&AbOwygbDA;nBE(wp99X}rT~nPMco}P$amdJbA9?Bw zF)z&J(IVs`_FU@}_9ZWp)*tI(>4SYkUamY!*9FJF`=t0*kH7%MUg3Z&H8806%-7gb zlfozZg;`JUlXYiIhw+EtoQxgYIWrC)mwhiclFT_8)UaItiU@Q^l?B}AZ}QUWmr%}V z!)y9);Fd`1m8?9}gl7Ew6lCn>nO$`shYlEn>e8Xu_)Au8P%|Mi)QEeJdNOqC&5UGE z-X#w}P1Qb&7WBm=ckkuM=KjF2QlM(c<&-EwhX^S|5}Ay#x1)a}!0P@i-cNQxn%q!6 z7$4F-)8zf-K{}dZf$R&!Sw{5p)r8fC_6}}qe1ivv=D|*xuwLgd=W~7k+5eHe3y%KhA=JIf;o$|t;YA6k9 zNrIMg1r?@LlD4i_*ck^uzmzB93C3)9d`Hyw953hEz_8wi;7&2B$);H4ZptYTZ7BmL zt|k9w@S!M&ZJw)Etn{PH;hgbnVTsEA=)jmaO71@I$-aE8aU_r2BPY!9d0L__KXZO_ z=(sdkC)~U$iGE%`yxL)g5+4$78d5LVR0cz&`BsiN=jH9UvGT9Cr1~eW(no^Y)mg=q zW3#U~FA_m`Q-N81LFRY8Kc*68`$aO@y2lje+^QUr*0}1$oW@J`+hE3y$89ju0**!B z9v-#@8e`}ci^Ra$WUI+im=iGg%sQ(&#|3WMtGbSRLW{Zl)Fe8vZ?5b0qmkWIu-Bl4 zrgmZc*;UuqFB$hfp|G0sf>0raxVa-nByAwPVsuFNIfTyJO4j(W>*uMZH;s2%xO^Zipz#AW-)#`&h37j00tYBN8OR0;!+HjdBKJ!tPagV;nJTA4JE2Bf3C_?%N znfFpXpWL7b&``0myjqcO`-+6Z9fml13~(QQ2Fzi1RbI`~lBwKGz{8M;{FIlWgTKqn zsSq;@6FG~!?S0wA-6*@sz#TUkL`weV!cWZSl2J07@Aaga392PB6HVZ-C*F3x_j%cL zQAx?dah|QU@-PKC`UhDtC>M1G8FH#EnWlBUUYIOe>Zp^6W&y0Kpqx4MFOXUf2E4xC zRV+W!q^z?yolawqe^lprcAm)g5F4b^3*Oc3GAB(CZ!^z}S!Oef&ScAtX?4$1S5rdT zLRE@pOHf*R|G@awRY_|S>tx|@;22E71o_kC!;w&t#)+bs=Apw^C{pO9{1Vx94sAtP z4P?)(*R&(>3}MMtpCDo&J{-suE0V*k;}1>6rl}>C>9t~#E=?|{Z#7V(w{Y`Fj|V%K zS7~9PxQuzu^UBqQ7X(BwMEx-2NLiYOT$ZCnLQ1Vl;Mb=}GPIZ~)1xqznz2)t=jY%r?#I*{;q-ce}j}&(HzVXY5rcU%<^Y%Jq{0n$EH3a8})t zx#;B_M_pru3ml>mu7&4)WA6ojHhA_Z;oZ(DBA-b`oycDV%oF+0yXu=PLj3xA_8OTQ zQI|ct`v7~Vv}Vsenr>)A$R*=P8iU-XSK1eCcagXgLKRAHyh&B9%e#;<)i8S z@p)NgY1$-Ax;^TwGLR!%*+;P2?xJ`^oS&9Qqb%tA;*Bm!t}N#WdCU3G^x-@X8(tyz z-xbR5Gqt1T-4Xci9CDyqv^(4%6x z$`z&bBZ!4W^^NCx&~{h7nJ5&rBO#@t3q=ak5))dGZ`EMWtra?^HGT!o8#`&lb;j~y z{IqCOwtz3TnaT<@@@BlRcQMwRdn@-7L&#Mb1) zf|;@n^wjh1aY!~~5-s~-X(q!fkIKwTTzcAcDF;q^Jm)hd^qsVO;-jLD1(*5PqWhvF zRb|w8%FHtOPq!G2T3+HdN-&JM$Im#dUoSU#l%x9)B2;|KjJN4la(u*{dW7!^|JVwU$)t5*(GKt7? zsa+YZn!a#U@G~bO&7k5a#;h0=^x8v-Vaj5upV&Tj%nawE>wvtrWa8~7@GQ%h7L8!) z=6%wIYiY8@d<7q}Rp#QJR4NRQwbuEGxp+f`HP5N~7nVxQ4Yd!ZcZ0SqE2Q`+_6m|} z4E%CkR8kL`8Vu#pu$LfqDJ@J$f!7=R7p6gyC(0Coo$Ui2h8K~JC0ZWd`@1qNbnFXI zQNgThi!TDP1|zW*hksgCVW3xQm?%!SjLAc#bGvcOqy;5YU_Z0Wk+(Y*l|3P-gjU;U z?H-=D<0HI}eE6}i?;>hOc1hwW&GE?CrD)2WRbaq_YVsUopC{uaj?^h&zx|!-p3Y5+ zs@fNV4pggjt7)>GO9kjpxeGY@R>u}I6=e*I#H_ONRZ4Kl#One3z zQQGQ64{szWWnGw??us1IaIA}cYA4m?UeiTdDfXsNd3_3lt{&8TiT29t#q(hc>J4~< z(W*?Ywd#ODY3#&+C$DMOb-9C*x2hsi{BS?Vd>0WTO_fKJ+N5MIaHSnJ;V|VKY}Uz; z7iBBGD5h_QX|b=Bg2u(de(o`5y+sMH6=Pl$!A2PF%qI^n#?l%>p^kotV@ubYI5Oif z&Jhp~s)Xc}DxB<{`5H~F6i0xz95iz}+^I|S9`^X@z&9m4-_R9W&h5(Q$rQ3A-inh; zC6Ijz0>PxyX8HJIiNzK}9f$tW6VHI(J@d`4=~cMO@Y97)_o?%n^)oD%p_qQ=SL`OT zZD}4|tyUJZAzW6sqRPh=aL`YXd#zFU-x3%uSa!L>bI$OIMqaRx$WNw?kL&d~5T3Vl zPGI*D((FZdQ@`;L3lOQ)DO1Y9eL|1*H0x#iXwvj(Zsj=Gtdg9=8nN&~`*3h&h_095Q5c;?nCzVm+<~QTLw5E=rxa3BrRsJ- z$4WJ4V|hbDculJNT2Ni(L4f*$+PmS&L-&dMkig!SLJa0#9bL(TuqB|LG^?M#jf9>^WJ7*!c_J5ATN4_~9U2=K^HM}NyzM*KWSH_>3yQrCosOl>VdE`0o1`#Ppo!KMfGm|*hNA~Z-qwnl+8E%+QPMhlL2G1#q3cNEDtyOXr&>~ho=LVrn#Uw+D(0H6O zCon*&CslaJ9(rOOf6gENrr7DpWypQ)k2oJKHT3iq1}euusuf?=8e;p8Bb_ zdGk5ilp=NPr^VZ`Z=p)QrOBsUrcvSzpEVQY{ShlJ1)O|k_yrM)6#2`9csJE@T2*oU zVRj#LeV}^koK)de?c{63ZcBCttioWJG{>eJz2d4bFd_P;$OYbqg0+ROu{0StSZzey z2@_AhG6Q)JoQtY_f)D2@GrrXz#LkC4U6MViKa$Ytr*JbeLOOq~>2zrx+X;ACOXc$R z(I5F-Rvim{MSy!XMsG9tyZ4091^)GI4= zPv#~DZ*({muTM}r-;q}+Q^`BDTHDVmBz(UJrtj~dw00{P!mB#knO?4k;ZTA(hBd(* zg4l>4T2^PBicOBVpC@VMfM~zrWPJ(8)MQ-RWU>hnIsPN-1_e!LH&H<%yH2jS?UO$Ep1y>u*97zSn4smC~ z9Er(uOhLPO0h_7z&EVwzw3-G-5uvBqtb?@)jL&ZtQrxh3WkYYes0Y6&DEZJlQ;O}` z*dp(FeECWsO%&U<>Lqs%91%k(QuQ*Y8Fi(k8Rly{Aq*#yt30 zS5?RFi*~AmFti;`>s!X#;rB2G7FtW0I7j!XXKFA>)5v+aHVE4Wx4w3W`_DJ4br@P0u?q(yV1JdNF-KPB=(ZgkJUF-1Nmef;qIGklhI z(fA>%cZ&LRY%&5RJcA`|1063DMJQ5m3X^`u{Bl$Xu+*zf{fyLtvAr^xIARQSoDMqr)H45%a;5o2SLy7MpyL+5X z3^bTUpc<0ZedMA=cv%C<)T}bYT*CeB;`yg9g2{z%rVUl^Ms{GX3w>Wa1-=}4Q_5p= zBU$t0JT2k5%_=iKT`P75M@#x@ zFTAN22i=z%&A>QsNP&Rf4Ood?3T@Vg+RaUIatP8Bcw`enqqWXw_c`$=5Oj^=ngQ9l z2w`zNQE~RuxH79DYOpg{SNJ9fKQ@U^J!}$MeAXvrLYAC^D{rBt=DQ7lXb}$~W$y0> z_~ByiCbaC^JD6$b&>SVYoRK1~59&9K%!+Xw`7{-F?7a+G?=)k1ml(^Ed{Ha4c+}A+ z<-CYi{(4Hs{z8u6XN6CJ59`YKQaX*3jJ3oiepN_#^wEckGugc|hk=DyjH)`%B?!cs zsWxF#D`&)eDuN$6=rMX@=p}SFp91&kXr__YluLTZGHcf7et0|XWeCn%o zoqU(m`#B$s`~(=W#9O7r=Dv1481_JMzVfNBc)4ruK=3`|Of{Eeg)!HlVv!|ns3SKu za}<+|s}dz>Ndo26 zkL4(9X?llASN`mM)UqM(e-X9H>U@CL3pTwB%-Od|Mt_lo$N8Dins;j#+S16qQerd_ zi?h(74gP*HyX~Q0s(!dZ;unT-A&6qtz;(RA9Ph|poCpURx*bvR*7q3YX%;3t@qqv%9 zbQXPzG`_w=%l(+C{QaD($G}$?Aw&X;ivxCS_ouVvYyQ>A1e+}thJ%V~zQqcv%TF)T zT&J(BLguu}p0bN!Y>Lj%M!$LI5^S_8vCfWkAF8PDs7)D)XxhltXjSlUoD=0z=D;Mt z=38&uY2#)g%x?xx3@~?1vYqAgRDEF*?jM@ZS17HFo-j+jr*p0h-WJx`p~H!(e+HMm zy_K0O_C-9!t4W^v@V)OqyQ!)zPbb=T>OCiB6uevrcIVtn5yEE!^{?9@ldMI1Et$EDa33Jq#s3P?AQu%odgCvh9V`2k2Cpah%9m06 zMf#aldWHC~AG+$oh`7@7E{f8~0;i866Bkm}yUMRCu!t_OB|1K~w$5yp{-Li^ed*>s z8)n(6osl@*k95ozDpwF!NP26S+b$)qKaXDb?Nr7zs|}m zWZWAFz9O>As2Tct#ALRtA$F`%T|g9V%{01WiilYUEqj`S;y3lx5dk_uISj zPu3qkY$xvzt*(wb+^-HOIlZvmZr3&5ce9HcSxQr0zx80>?y(h@(tU-C;Tcp8QS@m? zvE73%;(bix$(#HJTY~gb-qh;@DVv2!*Ws5wlSvMCzm((}m2$8)Ti znde;4g$!P;li3duFGU(BxGd6=W*8O1`M*z04;-<(o=XWIc}!u4vBhBBN8|ff8f-9Tk2#qDl83N)h9=vT`D9< zFn$pEJxZ(5o3ZbgvY5A5y$@D9qYJ+xaS$lU4!F)oFEBV#S$G1V6qCM6qK@1-3gM7Ctn!PIY>3D~O% zZ{=v8Bt7gv&-PGDkowZ{eiQK=<+Z~&b^hg=LltY#0&}(?P41axO6;x@K84yoNsLAwn8C(6Y zUw!NEEl29iJ414&Sb&vUJ-8OjBhg1Dcl$td!Ajb*?zVF5kk~G!95?9Jg~xSi%@7sp z-m?n`aY|5Q)CChRSX#SqU;av9{%D>*Eib2gS^W zrY&S02sHQ6G0hEjPBu(I@QjuCSIrDzPONm14%u<@_+UHwcH5G_&xr(7OyX-2jGo+$ z@#aj!o!8iUp<*f{(4Lx>(@NX1i^mhTW#mdX&N09I$B3MMIZ4#uEpG)r#DrPIZ~7bh zVfTD4@+!g-oa0!;VmhGCIf-j}A@4KtvDWHa1D(BuLt7AP(1-XTt%^c9DhcK}UcR91 zSvn5b{UWy9akX3S5r!kB?RT26GL)y;be$nzJ6l%lrYWSGmX#5430X+edM-$XTOD_} zAMc>iN^pZf*YUjvs_N9+MBE0OQ-%chnK7#{x2NxOswUW7pNoi$LGmP4&MFZuAoz0iAv+<@4_SLd7!-Uv{B+I0>I37PEMCfba z2_`ZiOGu2@xWXfJXhJCS+Zw79-QndyBRJ8-kggLx_bls{(evkB7uSANK*@EPKjxUGG*nI$f&lC(N!gS>T zqD~;jho0wYd&?By4kj|Pf_U?97xS{ajh%umfHB;p;7^hQx$+|AU&o#rA4xj(ugfm(zz$MrW=KKw`5ZPV{bi`SkiD@wjvx6UOyD2 z(_1{}s=!_Eh5Re3Ez{l;>e5(pUL)i@E_@PUK^62GYoeevetS#O?x=%A0P#efp9&Zj zD4{7R29w=NA$){hBJT?-Cd5;0UCyzwOH*#pk(z=p(0rmzcwD;3%{EvY7Sh0`c%;U2 zgT#{RYnt_es4yB|f#SG)B0`3oY0$Z%B`Y3XQRTCT7i=6~%f{VJ5MTnK$>k9^4=PW- z7}F=`as1N-j6iX4`d>b->|?Zb(iU5=OUPO(uyfP8bnZk0Qd);Ha*v$_WsLdGG99tu zRJQ%#Xg{<)Kl3CsXg{d*tB;59^~uG;O4(2oXi_%aN6VgGg0?+zAn-#6Lgj+6(I<4< zm3^iE8h;Vtpe6G_`Cfa-VwznYPN@B5YVXZlG=<|23<@mQ)($1x*AAk9tEHNQIt?;~pOv<$1oLUun1jtZxmSsl=Iu;I zBf56OGhbUC;FZvC*;kS{Duu}>Q z>I2EV^8bY91mNoO&6B3t;Rh^BHK;SFmo56SldBl0?En_jN7@Vd+@N}4yb}37m zPee`P6@QfFSa0vbutljyn=I)t_I+ES#6dwFd*?HHjl70rmg&9PM4j9*?-pQsIAQ-{ z6eCM?b|%-&AXGWlD%t~h4u*dJoYPJc{Yr~luSpRM1--j%Mx&Op1~w)&Xz$@ae}DkA z3it@W1yPB^AAdzWW8_M;X;W+<8pbHpD*3Ysi-%Tn*2x*h3l2>!Rf)zEF%z?h4z!Va z=zu#&vU@jm4A(;Vxn2}_S~x#OP^lLPgAIYx@@k08IUXh%7@KJogdOF5X>Jg!Tuz6I zXzY@P%e(VP-c1?wIG5g`|6^;JJ8E*$GpAD^4Z{w6cnn<4?#t;%l)!UGC>#=h2caog zf#fG-NsI8_l!liPOL(UhoaQNeo=1vG{l3!Hr0=>jLlO!APYYKpWQLst$!ew)7Jp73XMG?8v=K2u*Bc$Y zjuhX|wEovJ6b@ajWol-3l9b^nsd(jDz58NGw$%`9FNZ;SF2GjT0ie%Zr(03O8j9tc9Od!Bg>=oZD+|Uk0T@KpDH&+BmOEk zJnV0_P*t3MzxrGT3~}AJUFuoXP!QuKH5!y6fm*(Lt@@HJ5`em{$0Qug?`1b^2C;Gd zkIHA)ro3&zoVEIONnvlTAZ`0gtA`88LuD4|=gia5w@sE9RougMA$vlw@U44mmi$cH2+@j&UW!6tZ#ONqS9W2k`gzEz z5IX@h=yD;Zm9Tp`bFxIDGdXC0m(akz!)$=F3N2A`Dp{zU3OPwfmZh}hO{jTY zj%Oy;1+dXzS|AMB2p!@Z)3MtW%<|QKKg2QA*ZEkF+&{*(g6?fkag*NCc4ky4YmC{Q z!;f7rJfdJX>U99Rn=W(_B$_zjbyd0je_Ceh(fi z^`7m+m&Xm9#83(%ca?917|Y$Sm%MW#+jXBt%+?l~TlCuQJCs8z_sI(_i#aIH;Mp};XFml1v`QWcP#50Hb5OB?DS|G z>&|Ri4masUmhd&jJ-5N8{UFx{^}RQg`3nw=#|bN*%+s_Wso=1Q@cv~9RS?+;0g^O< z`GZ}Zj394G(jR6%J^*POb&$bop5EIYl6np;@L3ayb&{Y>96R{1-gP7EPZfDWd&7k~ zd~$qaB*RJ}KZd{hyZZYgu0U6I=vo96U$FWKIzio#flpU$RG*`@NOKF%-z|Fyblz!f z@{m4$I{zoCH{avCgL_0m395Lrnjrpp=T9c$kt3}btIFvx>CMVvGnqAYcr>S3q6u8ZcPB}hFdE8CVg|20f z-+B6|zhZoB+M0D8t;{@NEOU zxaH5bGlTeJarqGKb-l~cNBnh|mpD1ndNi^`X2>fp*zxBH51pfkRVz_!9)+%s&Xi_O zw8x~9^Wrvh5JP*-+k~v^@~1=7h$nm$ zyaSNid}4(pX`Qh^*I+wKM!QHnf5DO+$?4Zj{K*PJ*MP5bf$0mSxp#YzW_0Puo}vDk z?Hrr)RFsTLV$qnF&Wd17oOdFDq%LLQfw+B(^$B&)q7Fq~bd%96?~|mRoiT*&Nd1=1 zxR@44dzd*@=lHMN6eH*@f=W)Yuu*)SLR2FI5f0LF)h9E%!JZhLY7sa`|ARYwoK7|J ze3IW{cJ?1=Dbbh0Q72+42{ooYUNj4U8{`&IbkZ{YwXmyYB_Dd>+QNYBAJ@}4PfITh zDZ-qgwBTB93!VfU8f!a(YLafgLC#5*mUD&yBQu$cgR!~6YEJn19ioE%2Z$*kD>?$*7K%Z}1?lz|7w=%A9FxylRwEsO@qKx2eaJ#Scpzy!=2%h7jp)3c+#-r+ z6i5E+Ff@My^Oa+L_(f={bvZTlVbw2rzk@y8ZE_*MsJjP(*lz2M_I|ws&FkXosH9mR zm45ZdWLIr?p(C=bi;yQ6abVhiE?1OVnl=u}od?PMYX3vmmp%cA&Ycj{zE8ii^L2tkq8xS}0bn%^kiyna;(c9`G&O=5 zsLE!!2ugM>?TiUsH99}mqkMnD`ar?$(`-LgJ~TuB5q~V#WLL{#ysKJsNP-Ze>y$zU z&;6E-yH@1+!A03TDZITT9X3uS>dRZ0c7?QWhic36Jw0b1&7YQb0jDz|WXsAyi{gMd zH~5I^F+WDJvxWch%qL2xtQGqIh#%d27LuDwnv}SC_`r`5sr7kO#fLNJ_L9;j#_fXN z`f3j7R$;e0pwU%z^7(_OSwnsZJ+@-#@4gbARP&(Ck=GFYAWmlb&j}qs@9Sf3^2bnepOAl#knw{K>b%C0l zGG=>*ec7$L>u6sB<{4{#4JOV##dJd$P!>7SJ`b>rDJEOg^&aD2gL?a?^+}vMH>lXt zG$VfPS)*^SJ2U=`8c%Uk+ULw{lHzag813p$+TC2r!;tXW?L}?izeXUO!=F@t4W5Xe z9SVI@jdRYLAkN`24u~umZ{mWC8({}thO6>frn$Tk&qINReCxXe80$7ZMGl&%FVVUe zE{~noLP5ta+;8gq=Qrz|H$|KA=b$yaNr}DiggvulQg{ZXs3x8qt7GT-j2e@h|HFNQ z9x1?TdFV?Pb|>3r5-Yo?CRHMWRD-Le`&dL$IQ`sOdMqLCM1sgxpm&7n4O+)SvuLnC-^$06H=oPU5N?Gq0yv7i_u!E{Sni@i|>MyMBj? zy{^I5SFRonL}%Prsqeii2|r6!bjHhN5XWW(ae^ZTXDhA*ZJlQ)(@_O9umF2d5r8fA zqJtGzE(e8I==3NyXXWqo3@!P%>>@1=mK1Wth6X z1ga2jZILt%hYS**6qMd=0znHnC*}m3@<0gCml^B%OXJtoAq9Uj)!C{Y>U_b7oRnSk z@vGpDKjPl=#a4b6Xx0^TuXqFfaQWrHG5Yo5Z^EC4gC01 zQZR5kzZ}35*=hO~&#^OJvD`6uv>q~KAZa0L65W1LZXzumq6?#?TfTCDAAL)r#&)I5Bqty!Trarl zSF=QORp#{|7KJklM&MHDS!{t&@Y~}C$>^A~KF|0uz<g7Sk&zyt3G$9;xt%Onx3xmykVr?1?%s#^%o zrI@Mx92}2cxC14ECqmx{f_81)s30S#>T~Nht**2$dqA+Kmyt2oBro6rK(1u}!<3zQ zh*xpg)mpjElh8tuRhj_9Sv*CGd7^`CeXDP4RGI>ITspF2;&Um+N-_mwg{%j#>_Z0b z6a@*Ue3xS2`Ec>^k|X=FA+m~6Mi>diG1AYKGeR=8LqPi!ZI2T|Ktl6mM2wt?fCb}A z2$RWF4-iQB`@_o4`cEX~iZ)qTrb>;Un!v+nw3SFX{hT3RKB!;#n|gNeIU->0*j>eZ z*~ErF$d8kN#K!zP7U3gNpvRUqa=O%sQnK? zLf39*QvH3S2qj@%%NxW8Mnd`lK=_KZeef{NP_a%X;@9{U;!^2vyL0~Imk}h+^GA~L zH+dm0<-s$;Ai&6foB^?evmxilkw1v6r*gz&5grdaojN-lzOQRjqi=D(2b#g@Vosk; zcJvvqj+r#C70wFkI7fVXm=^&bO1MBbu%C(v{!bRsT;=}O$?q(cuZz+OJiFY6PLFzf zXHZlUfzor5=FXppx{z5cSXrn*O2agX^s_i-gQja)^NHbP=~M@c-VS_0FB?Dk)t?rF z*om`S)K2~w13o7M+o71r;u{t0Gfh-a!(-W!>#Pekk% z*o?iMs!;j;UN_a z=(`h~V3%r?jPTj(4qC;Gzqyi#dgP*NL@|uHWmO6cW+F94)BIM9R;3CP>!$N-`r5#a z0E(B#od5lo)CoP9KCtHN@IvLF*UCb*Xy6Ar8BeRm2Wxi;NqfzTLG*sN zRWg02N7G`uWG+@8Et9Iju9;cf5L)5f!dTXR6fC`p)_1r)iC`@iF}8;kC`POYNVNpo zWnR(iSpCuYveZxa@R5ByIc2H@JuGT|j+(V^v|a5UuJQdglD^^)cvf$daYyl=ZPnN6 zp>3O*6xa@DGFj?a%iS+`65B2HowH!#{Fff9%=_{oGK3^{S2uqD_|Fnmg&Z2Auue=J z*PekoDG!ip&6ddP!AlCBn?|N5$Di^T0KiWY1`KnzLG6#dXD;V^$MEp$?s{}hNB-u2 zLh#EhlTVuar=LhYUtY+$t3qV*y;k|;=OT2`IF5uA(DuLS(^c3vt_kZ}${nuzh^qc2 z@C$T`8oORcxgmI_!J_yp-pp#twodV&X3DWDn_0TDgJ{6}%QSgJXe_pBGq@R-@u?P| z({7zx3%fCzfeUOLJ}bT?dm(5)0ZL1Q5G)D zZeGrEbPgfXCvlpquUaJbpQfNh79aJ#jmwHj?$ZR8E};#_)J(SQZ)9^w-Y>Ra(fy(Q zs3_o#2)_Q}mzCh$>=}@DO52U4P&lKuOg4=I7uZ?f2)7~^wf}%R{(~btmf|nWqd`;5 zQ%T>lKrg?6a$@=pt(W4|i3F6o zZHF31POu0N9E%k=n!m8XIJJti<dfAv{w#IheUsL-*wcrcOtuF zzBGm~D9c_wEJmD}%ZDjylj@0N;`-e%TAaV?$S!#Ni{r+~bg)~QxmsKwIjqN-Pp!mo zQY#7cXI>NN=AEK(XY7n=Y%BYXn4v0xcMo6~c){VA{ewI?1V-^rhAtyWJgr_dMiJ@F1Wl_KFWHid=J^AarR^*ma5j`r^e;;E}2)@*slyTdEm~!{Zh}}0M zOL=+hGu~O+0^dOBuOP;AB+&6LssHO`DN&ZqZ%>6%B$@5Px-}^YmqsEa2@HvDU zZ7kURc36@JVUWltHiH?mg7KIyF_AbI>FmyZ*fI{I*Wk|6lDT_oT7K_;R$Y7fqYPL5HTn%pN{p>*MUe1!rY!WMg;R~DBDf0%H86En zQxTo&9M1b`f!)Z<@|5SzhAq|MqeSz)v&&eba!p~lFFt=FOpO(&1E#YEsN-zW31&@~-FlaAmTlPqTJ8vht>3ZQX$zn{-Iz&Kb(0tG=C(grFwbd^^(()2s$h5- z68wg?JLMC2aRbB#53aH9n}*ziC+-$B*vt%2wE>*SU(*f|jwS9o26Hf$MSM4h8c$;o zQCUxvhFN5%3*nk&Pz|)6-v3Arpo|e){`y)YNjUB$#0XGufs!v@Ey$|@Jc|_HZO?qk5w@$ekog(_@=tSpJ0Kt{c!_Ia{4L9!5+RC%A;+6g~@)U_>iTjaVTZQ6Acj z2*J8~+ELv3h2f{e7OfDiNkuqMbkF1?s^E z|JIxwe!KuzFr$YkD@G+AKNS6P$4M`E-B&f01BR6d0c6u?5>>2y}y zD?JAs;CtHN0W=bx|7E+T2TtxRVivW%_?fO_6`lCff4p*7D-Q)*M$BATD(+CiowVt!&WNcJx_CNy( zJ1>#z%@aTm4$55R0c^AYyJ!cknKT==Ra@G-==^bOuwx2KqJ&N6jXz-2wPM0Ow-%{o z8DyznU1o{NJ5xZ4v_nT$Z(|sTsy=FJ=OPHOhz*{Nvo7h$SU#4C={F!W)6OwS zEOom3V%;uNzEU55VD_tTIfi;o+CLU{Vl%`&s;bLxMGKG|u}!1^QZ z|BDmIDY)a3`!Is}zXwpKkJWky6oDJ&h!Ac%O+9nZJAH6u`La;MiW3+>5=o}0|6Rp5Q(`9=*5d-{JO9_|{H50o>d|$wv&o9I zEc75IG<1rysDzU?z&c%Nz-sQW1Wh@`l!a9SO%^>wfzUOU|4TN^ruxf5BRGV=B{HC} zW0=x-pyfQxY|}3(kqFT{`GztF6dR+5$QI3FpTBhy>qd)LVdJ_r15S=KQ~h2Ifh9u6 zV=98p`9!}aq!8%Rle0FR0hfBDl|cB>)wv<09XxKt)?cN#<$*{f$>*ihEie7SaNe8` z)$^ZCVW+I(zFH)YH7q;v(W_!_#6Q@Qo^*44g55IR!RKb>!;{rE7AvsK1n2a^fl{_L z&BlUvwL%Rch<6^vS46DrDG?;oVA z`+az{uh3i$X7HX~rFdiJ;8vfLY0ncy^4V)otDNvS55dYUlC(E4>>j0|2pS-3a6s_? zk5Lnm6^A|c%xZg`BbD`sQOJFx?6V45t>k&?1dk3<=^_=_%^(n7!>YFCe}u>i6rMb` zS9g%{GyEf5#Km(Gw>B(|M#5S!{MI>W>pFRZ0sj!=_MKzeGUNuLynf;sg~7_Tj`^1D zX6p~_{@kd;>@H(67Ou!u6l0S_kY(EH3e*{Pjp+_!pO~mGFMPNSHw>?g*Uy+(#K{l( zMo%P!Ek4W%rK*{*rL?5Jy?a=ab%f%Nj+Y1kLWk2P0@+;KHc_k-|%*5*;eDy>9@70kv<7TN4d|LzsW_J<5xyBnKl z*Y4Pt#Cqw*@g>G)_J1cj$FhW<=)m-9bQ9GBB|8U(xog5VN= z#jf>Db(3l``0r|@fdsETJp(Nx0d~T;i}4&c`!2{v)by34?>V;U<&$K7M@qA&QEn?w zf@V~@|EZ?x@U7iv%p{xP{^5)d&q3d_gC~(NG|i?NmyABK$TM7>VFl#~v}A}CqZ@-8 zjJpCo3l=uf)zr02`@`^Ix7U)Cp@Oo;PWzD&_FwJ1LAp)^c38g8&QeSMMa*{<; zwrSQAwd$3DSFIJSxQJhP!0I#Y)Py2$C;I+^ZB#2%%%Cb4 z>6r$#>>0TBiunp1964$CN*deUnZCPyS{vCTsVbT?u_#8s;WYPNPi%q0{Fn4Yq&t$%0Pb{%9KlT@lHpm~cBap@mKxtDwLJkzH-X7gGQ(>)>lu5!d<_byv zGL^=3!f?HgZQ-=MLeQbtWgeadX$jH&DKGwQ^KfHM4D6x)tn^=#dLsAdm%VEM_`}EN zgDiRGculydhY!}%l!HjVTvWizkxfRrZu&SJ0?>fS`9evrA@TYEVqxL~UoEk+)dxQ6 z^Q@p*7N}QegN^YBfZ+J3b$doH`^*5FoX3M==IFM<`^KGt~;DHi>-#A-(LzBwvXb6m<+?f^C4Zh^`!SI zWB43~FeAZEyRC4xFLqf%JWRM~2KPFM0!|ykRVj^W__bKA55;k|XmAH1@3=DZBMMPX zQwW#INx}YR+Z%FJZRhi*@mTnPL}aTsja2jZux!fDe;Cuhm0$nISdpDSkgw@TFz|Xc zbq>6M`BK?~Y z05W{JZa(M622=m5HEIfPqJ6_;g`cQ-eU)?|8yCAr13D$hwds(r86W`A_vdYWBjUH`YnqO}~Sudv=UK1Q#O|O(UPV zIBOIFb&oEYAw0L5N7F$p)e1KS_FqF_I&E}|HMlp$Ta>HIveQ?PxiLi2A3P6HxS&EJ z|5Lm(2VIu5bh63qhBT(5Fn@f&Ng2<{nFiGiTf$I^on<}CyIR`W4(y0O0bcvzZH#XS z3IA&~$=4-_E3DyiqBFY1^2<8dIz!G|CoG~Ia_D$Z(xeXR*Tx?z4LNn)Mjz_Zc@bIaJj={a4FZ##}9+q6Iypct4=6WZ!u^+A62BVO*;f zar~5VGfVRs-NO_LkLw^B-Z410Jntj&=pHu07>F-8B;Cl7zR+eg`raPxh2su;E{GIe5(TR3Jh*?0eE#4K%}U2h zMpR8hS$o$%prS2D7u=p2EJDyDt2ax}*f5L(1)X?p}a#jjcoG`)DxE zO2I~bU(y_n$;~>O^+bn=)R~JYCt)pS&q*fETVX|T@>J$(Ao=sCGdU~Hn?Hm!=zaVQ zsU76#jkFaJ*zEv_IodKM|Hbz+O)Q?p+_Hb;S_V@ABqFva%I4PS5sAvaQFJ$Hsp7Z5 z2tIN8av>UCd1iv;OC!O-Uc*n}8`_7CUDY}$fFAtLf?kHV+FLjZf^7NP^I|RI5s9fa zSm&)G@G~ML08}NsESzM{=b$w+W%ut_Xz#i(i+6)4^H#{GeqAqD=tr}M6VJd9zET5g zin*7312pJ#DlQUx8Cky&{_U(78B7=M(G9{_Ik{hsRxhc91m??#5#uQhOY{`%0Bw1q z7LErlD?|iDAo|a^NR74{W}tVt)cRSp#IY(hA55h>#pcVbGdnoD0%rA3&OL!*{l;O{ z%BacT0Z79q31OQ10Q+;^4K$zS{GWhX*hVUcfwtLOB9OZj1JbQRCb%Bv3RrpEf@ikX zB6xJkgl+T`V$qcTvfd!e67oPtgOr@6il@hIGv+gzlca^9j6+4Kb?KU%)d$^2JeYsU zgE4X!<39I=2|Z%G>-@u3<@#v3u`eW}Fi~32ys+skgwA%=3hgx-BtCgcyF9PVNhqk2 zM0@vK$s;=q(Smf6^)pA6cos*MUkr5|?=x9hCYq(O>bAsYmh(^$k z@cpe>t-gB1!DU@_+euv~V+&IFElDzpf9w*+!&mPWQV5~)RY~#UKBEU-mGngOGgJSR zAs}ecy8gLUv`kJ5VR-6k{^%dEik7}tDP}|AEIjW0KA+$10iQnvLTpb`ld+h2`(yX) z-@s(*m2ar8As{9_vR4$bh68_f>M)HIu+h@Q3vfZsh&5H45%$Qb3TL~us^VSXh&*Y@ z-^1zg<5zyJY@9o6Z&d3XD}!NUhsrhM5~CcQaayKf6xd-wu?h%KffC^o#=lP52%3sX zsB8OO$-0dXx*hqP377P=PZX}w5(ab2Gq5N+`p(Az575P*$nd>`a{XV#ZzCBMfq~B6 zamoBM#7waq?a!N)(<@f{HS`0@3zSPzl89GyaSQ?v{7k>UJVxFaV94P; ztdV9!s6npfT^ZDrvGRKIFaOPk74Nks-Zh0{?mm)&#y|i_STNc*UTay@O(B{d9^c%>|a72x>IMb6Uulv)&Vb^L9W6P(8TordrYv{tdGGIZp*g~Gult4P1(GiGiWVS#S;^)qvvOKLX2u*;MHBx( zFfwb(-X91+VH*H7$M?#t&1eqq+GbGRVwvAJ*ddT^1?L;h7K4&Gx~=!D&m&_BQ6j*EU`QfFb(ZLxK!Z#+*aeUz^FyfAWR~nJ=)$d zFZW<QHTXFP*|MO?fZWNv?xe9rLpo_9ViHgakeRPq~V$!1msJ9&5z1fo* zPu#(!H9Q@T;Et8j`6DB1g^&R7mb&B7@7^U1K0lO+)Nf+QFs?u>2;eC6r0=!m_9OPE zIHMEaz1#P3ICzYo*Ts~G6HNwHvwQf6-Fv$O0< z*ptIuL}aZJ7B+-o6E_}%jLhuIJUlodVL`pH52KaXfTLt#F&-~JBU3@s!zCiw;BSxx zDI#V?mEvYC;S)<$|3aBY5D9D&_lB>OsP)r<^=C4VL|Eswq9!R(wUFKYLx?Hx2<921 zi#2dVU*|VlhK?9i(mJ+WiX$5+Tf#QcZ4xJ1q2%hD7Adm&0HL%o-ZwuDK(Jg?_@sAO zCwBthHWQ_mvj^>rgLr9)`Hkvaac6<%hHa^(2Hx)q!Ka=NlC1EOIIHBlsiu{Gr(xmKC1ZqtoyXJ?r%c4aqQC zO?rsra}eWM!%4&5+kR_IFGD62y6MxQ#kQ2k5suYQk3Gf^7}1f?%50~<@Ht{(TPk@t zsA4rki>|;39aquV_GBYX_r~~r?ss2WF-&c`WWh& z>9b}@JP7iC%_)goG{6jAS(qeV-aN-c{%s*YP?-GQ4ErXC`3)CNjvSlEwtXa$6sj@> z?>I~1_*leC1W}zdpB2*r5Uoz|E`ilx+9NMAuRj-o28gQO2cYbar$ltQhE1h2#_BfH zWWQ`eDj!ST5NVk8dKG-x2!82*ElYvSxc*@KJK@r-ejJF9x3{l-mTc!^HsrVhAdn>J z_}-4vJ9?zDOMx!kMELT<+x`u8-f-+LZW8IX*)L5@9xo0+=;C`JBbQb((;XTk)H!|& z1K1ZmVX^3PA2)r40TMMr%_ezE3oK~Oo;F6rj>Ex9{*l0}n!gMKN>o1+3oa$Q5@ynH z`CaOezYs)7_4g$W;FKtmD(g;|w9W}0j{O3GNxw1I;meal$C1k#9I+-Z}?z!&u@|`uSTAjA6O)#Aaf+W z(=sAj7WmEn>Hk64lfZbHzo$ReaZ4E9=QPh7IPdy>G(e7gG4o4CWPJ}?c_8d$6V{pB z6+aDNktoi8z}maM$cr;2m;-!NsP>6oUW5w-8ZQG-JUvr7D^FCX&KZ6rLw(pL>W((3 z`;aqre#XyxJj-=nv$Lv1e$KUw_XKf`sp&K|O6pQrZ*1y=D}3$TX#amR5tO2$(Z=$i z%mVUjLSn{8wKPf@W~=7R?p-gAa{gGArw{v9V7(S>MD zHloh3;pn<>-MXzZSgmuov`IH;j2O&5tuA^YO_PT`mMw6kA6AT>2^$|n=107dZJ87H zrH2yIKZ~F*Xs!#%FB~_@!G)Y@QIA3#gLIwp76i4TpJw~c4v|`1r$5C?&`VPAJ0T?I z%O)s!xX!cOktzv=c!Y|wWLb`RB;1$mKio*@7`IoXolp;6lctySxVL(?M*rkd zc0hrn6@Sf;NEgPYYsypNU(&cIr8{6f|G0NjlmRa}byZ<`5S?M!D--v~$|#Pz-pYQc zagrCSQl1y)=;sADbj#S(g2T#?j7eOlg_~t z#9rWo-p99jl}XPt}3U%0hdh+ua*(UCN-!wkC@i_d(=_5SuSo ztjp%#71bRD(lY$!k9SQavPgmM#-E{=e>SprjoRY`&-JMm*kpWw@x zGCCnnOx-+gVHZP!jA%&6qh!|(MjYl#h<6bLwtMuAI18JyU}KjECkVO%rIRb|nY^)^mc*-?I)xoe|H^+D7^~cQkk< zsPi2tcCSdaeJlkFKK2>iaX(>p*z)clfm{{C`BdmObs!RqOmj(DJ}5$)1}(?M_yTJ$ zAC%K~z*0IncDdg&0CF{KaDd2CUJrEx;GJ%rO6Sf;VNHQlJ^EF)BX@u831Nen@lp2w z6i7WL`@K3ZbPSqlQ`}dz?O_kiesrXg#up8b1%vfu-0jmRGIh?WXoJuJMj!(V{W$I{ zoG`OzaSb&Nag&K6vqE8hDJ^%w_BsW3OyJ!?+SiMmJ3+20+pDg$eSC)GZvqxW610+kp znBXV|04v+f)~=9B(;Rl1saQx@8XKSDWy;+^rU){Pa`|$$|JbWDRFY#4RR;n86Bgk$ zPkW;==c^AZyL4_n$Ou}B9wS~>#&_Wt_LT?Pc3KWMj#X-t0|FjnrLB_^)akx<<(RyI zQ^%YA{HvG>0R7!Uio|1-w5A*h)(6g1m!E5Y^V**|`jc zsRYFg)e$Hb-BwF3j*D(>!@*QEF`2giII2z_nT*=QBET)T3l;7*`Z68R zPjtU)HKRFsJTMyfpXr7dX|*q{pusdeC~!xAeH^1yB=Dq20YWUM)+&&@!@wvS; zc!8>0mcwk`Nfi=D6<+aTRA6_}fmV8c*W(TFQ`uUKpb*f0IfiC#F3TwIE2*VK7~r|aBvmk}!nT5BMHPp>@1GKh5AycqV#62+wPVI(J<6eU9aZ{E*zP2e zngl;fB|#tfYzYwsp+0<@eDaMBWY*ThaWAj-VpkDYR_L0%;XfM2E{lZBFaM&-Abu%a z+^h}baSC+6`}`h|5z1fVwqN{|N!{mt7rLInO~1aB1YFYn?ThQW4A~xn#J!JrW=MMP zslxkS)}?%UTgD&DsY2_I;k62|R-8-6EcEkB+d!dN^-i^C^68 z*k=1RR=ZRxr`=DyGD&JUOe^l?!3Yald3V^KmyQb`LrwC|TJNts(SS-EpGWjrMhnN9 z@vdR@5Vp3uf~R@NyYuI05@m72c|mb~em^mOS)BwQNj8Vc>^|qGY`GqzfTSvM*Vmbg zEy{Ltzk6SfE8J`r!JCYv@sRQ>R&|WSF*qXUrtdBEwE&^1QD3(Jp@AKfpuRA8mYqi; za4Ec!!5^yXQ}U@JL3&P536~jXkbgOs=%W3ULehm{#f7mMn0WFrwald5>Hk#$Ir(eS z6xpR%5}^}cey;V{M@1P~>Ei{S@4i7~ga;1NlF@pJ9q(|=C?AHb3v@1)?&N6GzBWR7 zn;@5)F4;_y?sR+>Wwoo!5EV6R;Rjjj z5X2SFV~|pBVaCncSwku}j+;R18S87q<2RFsTps#W1>)yHSS{>E^G9GM<93i(pmwwob%v`Cg`vyaqHbNh>X=wTzd%HM1?Y=&5p*P1Z2ac;nx6P z6(UZYL#nY@Iw7ugXXpvv}V7r#F!!in>Do_R!4yC#w-olddTO*HqK9tD~vQ+EFhpijs%M`g61!CAgCa0NHBCRBLMA--U zal0|N`yt@sFF5`bm70!0Qe%f6h&!~|@l{5SCix0@A4&ul`K60>J=wA+H}hO|XprlN zgh3_Ye@;1v7^sY|M$~0YF5DU6xkcuxa&xW59+Uu%l|EPGjKuDzgqBMs`P2YyJu(+U zj#y9hPOQ>8efZ#=^;|6Zz_AQx(xtWl$x4(3kLzfbjU(-@5vGnveB?N=A$2_nc=w}j zK;j?MJG7S}(wgt4D9enG+<|h40)u3lXK&`6f1A_u6XM>d@lZURD7cumKs==orLCFw z2K&Qi#ZX2!wRxzO%(6$xVZcLky&L62m7Vs#yQ!;ny4*MoxPkak(Z(9K>BUET%2KaZ zpC~c=ci8{~1i{cBz=Uy!HcJz3iv%hWKvNdi%#iKcRxZ{{x28H(?A~oh5gj;~13!|W z9!(%wNxemP0j(!=)@S53X>=+A?+Q5JB=wo+S1_mXwNJL<$ z0!owiNI{?7B_HEBK8P6^jW?KyGDL_}HP#1f^=oN-__-(PbJyo)yv6McyLYV31S$f} z3j--{9<_AEBEC1KubXwjRUS*q%{iTcraSINJ?Z?gwBCA2_rnvm+y?coRAlroQX$t7 zyiq*8H}V!g^|_T+NL88gh~p2y+Ct}yLMIGTqtg3v*_|6+;8gwuB8gnV@CW6Ku)`G^ zkQu4%{bt*@+fh)9d9CkSdd<|JLWsP6ycx_UB>m3IsQebn}g z`t(wlSE@j8ij~-N<%CU_M|<}c{@e^I{oEh-+iLg-4^6#;De>l=v9l;T9v+jBx%tG) z0E-*9Lk?Qk^w8bWH4*Vs#vPRr!YB!Kh$LvlyW;~$7gFc;3=G&{iLBuDf%*JW427UP z;MC4#2rf94r*?A@=NwkO14Ry6jpf3>#51hc-?%mq52b@s1`z18MCYuzSJkCw4Ks z7c7~Ci34{Dh#Uq5KC7?4H@FTR5ec8let|S3k0Y>t+L7e7S=O>VtU^e6Pq8KER`%br zMO0EGLwM{E@40jS>c5?Vc)YSa4I=A==NHx-|JMBAoXPRJ4M(UlGG3-Gb0XMvY8c`y z+sbnyJ$cmsh+%8;^3o~^iK_+xNI(1ERgS6h$n} z?jJLfOGC7H%U2>(Atcu-y;-2z=p5pGLqUMfM{&-+8$jq`yIMCPMqcZXH(E0g^1I{S zG*Jm0d78m2-Ogs$-pD1nM`WFj8)KePiQ46A_@1EKnX|^Y!BIxLHzP>%0!_uRVE)i-{0cP^pKut?544L#3yS)jlH;mF z;qSoCrVI^BI;+EOBxiI}Bg>Cd!XAkZo8LXP$AA;+!ahbZuF&#T43dywltUg)tkb0D z>z9Kir|Ta;JvmBbF;E)b6qgA!EP%SKTi(!SEyhTJJCN(E!nVZW|6A`dH6YjOV(8vx zVi>!=BO291<{<;7-EI**!4-GBzOkdDv^i8qthpL&McZ01KTYZ8m-N6brawA<(u7aB zBqeDzjKRzGfa6q&8Io9}E+-r!*nyFRGGF$Bpl{DiFpjUK41v|=b`2FApW1S*tGE1$ z(@XUrst6{`wG+ z5Xp7k>#CgH)u+_n1IXe_c4Dv-x5)DhRFW&|sa_7fFlok_sk%%hOCM7%1y}AT3oDt{ zpZk+H$V@T`w}!r(rTf=Ss|lW9^aSotAcJ>Flar9M93|)zd}NEB-HHZq>gUrHNJKI$ z1HB47Ga}2kSU|{)a_1igywL--j^4s{JxMOkK3z(c1lX?gC8W4s$?9kKdi1o%7njZ<~E@`L)pE(iTBim9{2P& zPdFM#)>(6u-dAw?=JlB$sHyXNwQNtO@FxB^9R?E|e!wzUM@s2%u5Vmf4ul0;yibj+p|z-OF2Uj#Bo;VHkz)UEy9YQ#^chQTz51;;0lMaBO7Z-o9Xl=lUfC^C6i z4 zL3PULZi?lro&}VYxkXr)~T3cyV*jE+hMCo0zW5o0>I>C%5wf z3P1}Q$g#Q;vZh*vfd_tpDKvN+%!;lWPWzuaeo{;i3rzhSjKT2Prypg*b_RURR79Up z6f;GF#K&<{^ssRBUTIn9Kas8A)5vgOXS+BSE|AQRxeciLP5hirheFG;gm7Y%_{+Fz zgo<}>)Yh?s!4%2{MV>KsJH@y8(84rqO(~B(eB>NIUBGC_;{@-2m8J8<&bmH{cRRW; zMNip_p=nf4BTVDz0nF5<%<%2a>fR z3R`e@cGvVKJ{U3TeM@jI{mCHz)>-uw+0_rA-g`i1H&zYZHpc*it~l@JI$6I}1K;sU z{@Nc&v<-&MObM%TLjD0)DKbt0w_W6rb}Rd9cGotXyc-N{n0@d`BE_yCPcnPM?#C%3 zkq)D;cGIJeCIm_8HN32(k)CDudtuBzNFD7m>9J-qNvv`fv7(egz7A!L>m6(eOq$5%F71fvms1-r;_^15mqH(tO^o+K#LhX>#1QoJ9 zbOICQ7BHyO-Yffi5BskO#iJJIE2`d*q^6%+Nc82|1X^8N(rVF}d(gBjr)3ENgrSvM z#1t*F;>iE(^5lkYt`FyLOW8|BpU`4!03$P|cBi?tGSeIiaBL-F0nRl0!%$-s_lmN`8j{%}K3J36+v| zW0b#}e7FpJoIKG)7)}ajnHIx^&&%?7so2TkHfjdA=Yvw5|N1|tC~ttO9=9SAG*Nb@ zD3jV@R2hI_b|K}H%S-UYB*2jXN z=$z7H99weGf&L+c|LNfiuAin8ewLm1R6=i(+BG0X2^>9Gc1m)h?S#1h;NWC11EdTs z$E!sdl}G0?EVoR%_6nYVdD?q5b8MaI!Yauor`OEqV$Cr}OY|aGBIYTMpZJnJagDIK zOQgp31eDY0kuoi^y*K})w@?!gY9TIW2;fI0IM3Fi4;8$uI5AaxNF5HkgwdG32J&QpX9-PlS_UI4?`MC{H&I~9YR=Y5Rd-T5f~cghH;{*CrFH@UR*dFABaQty@=NJAQs(PnhUZ#aOGi8lD?&G zE;-e(y09S5W-6_Xj``)_sDmjZ?A{|HQ&X1eZZtRobZTlU-W}ijN~MsowerEJYz{_F z&GW{i%FH~ww+_8#jTY(j)CfdTC-M9dm=i|H=qfsKaL6Xdb4fq3RJ!hEgegxV50nEG zke@&bmAQMM)?9>yng-^TK%F0h_|$jzBtmvuSj&j7XyIHg9EA;)t(dmNK+=eXcd74kgB?^B(;&=e^jZq@tgnh{#OU`?Db5j8_j zSK|gxW$dD^_P*bhW-a%>YF!cL>?gRI3}h|T2B)TvZ(7+>a(axfnlzPhzA__DbN@Yx zwEvvBCw+o!v#Gr8$_##`w}q4=Pr&^YJGtNh2NuP6Iy(4D9+nE`dcD^yN7**F-r>Hx zfH=2NYbX1gsT!I~49{49ooHX3l&>f=^JR#HhX91M*XN8E8V@pUo`m>NMbutM7XH*J zyyql2G%v>fyD84K@<8$exb8Dgw!1=gGb=pXo1Zp19ZZPJp~pMVXAo}t0Y)985^nZsbTiDMws`4N|(#Z^6gZXL$6=B`aKEmB**y<`$L)$uv2dV)zE?b z$XjDmL}-}OWgkhl5N%K9q#?$LJP#MeG=HIT12QMPcq10Q0#+p8s*x>OYG$gvdoinq zXmJBk1mkG_Rn7s|;eE2O#PYUGa(#tZqm2}E#GX82teOFuQn*I{OoCjwR!E|PO>X!1 zTE;WD##mDh5w0acY>GfL2v0D4AUHAGY!^#7s&U~hh(bXr+8RnOYQZk8u{bcxD-<9n z+P%>P_WEN|7giKwdFH{1VF(%B1Y2kvu-d`Xj=HeqRL=XXf#N$+7WNrq3SKFe7q5F* zi!#ZY=Y^ns{mF<$*b&6gI1+4;Ni^HWNTQ_TZiDL_^~3H_hBTIC&6G!1z(TWq zbTaX&zs^#6KFtR(EBkgWd0v6e?72NsX_n!U@dSm;W0K)tWof_}AQ@Rsm`&@&TpTv@ zGvC$@(VCY?*+GYcqzr6FBJyY79lcH5))FRht+Xm|?UNXLGF+d{aQd+)I(`-O#K65! zr`%y(Iw6pJ8JNfX5N}EWy_@^g?kwS9V6gcmt*GL=ZLfW4-g-cv4(Hc$xNa8UDY!ou z1RGr8FvHkmM-3^ChSdAX7))}1hBtggB#6d_vpZ?G(%(n;fjw?!J1o%}zwiu~5}`%MDeP_RE=ivGT|H3+9#H znx3%c+798dc*{NE#;7>0 zJWOX_J$9hS(_O|Xzs!DlR;FvEc3KhgcWv{pJq~LXC&nE6Mt1c#y`)+`&8UXr*I!ZX zUoRS!i8#JVjO4{{82C8uV#bOvJq=A34wnYM$+w3vJ-yh7dcv8==k(3VH;Qo+L91F# zNf?~6*x7X>QwDS|T9I7TEx7{AT2a6DBZ`UoTSJT_X%6JYW@y76^oyMpnF&(nS@76= zozjnk2KhCYCOY;20mBRDfMUoibhqJDdxmk@X890Z{iV-;;L~C$s*3DIh zT#yYB;=vovjOddW|>ay9?-c{}UjkPOK6y5lk_DR`II#OCb$N>SRL--!< zasI*7AMp!(Efy(q-R=|D%1oYWE!2~H3@iQrf}pt;P%22hI_@jt7r|f2c~EACOMz*T zOI>XW`J0Dc51y;{OLQr{MnkqywZ9Ipg-uwg_c5qFjgFYE`c~s#KZVui4VLf~mi|S#vGmBW$Tyv07)Av+=%!(;q9bHd`#2yRbpZu%{areD za?V8p5PnK|b_Xi?3E$iga~px)sKha_$MCBH!*V;3gA$JR-`%wrCF7Woh$J*AYK8Tn zgCuR$!=cQ5ZQqx-uL%pl`3F~(JqSIb4e2I0z{^u^u7D#O4t#C@)*mJU5V6SfkRBsW zq6H4%dGWm#ZkzG0X62RB@(;(CRPdO2bC+F3MV;`%e~qu*5G_wB_JZr*R-Z|*j`Iv$Pfn9 zXHIY)i8lUb&K)$U4Fc*-)~n~?X|8*-am=Ap@tl4fcSI!6>82O_K#0dNUa_Pkku(x9 zg;(xE#kvRBsd$JH{x}lYwC4f1qqA__N{7PEltwDxz<}WecIDjEFL!1hHOuR%zFAguWT)yyTv8QD49C$s<0$qc$0SfBrWuqae!C_4q`ixRYnJ zgY(7WrYH4wtA4>twUZ7T!-lfTPW-7}K)FHF_MmuGND1fYcT2cC1&G~!pec8^>CFO> zWS2jtj_i7O7R4$EP509c&$@|i;`Dg6v(TuWk!slYwV)|G%nM7BRi5Q#MZdP&iFk)$ zvlG36Ia9`24y}62&2Z(ga}8cI-)?YGai0unRr9@qT0aZ)P4@+{<&`nnwkS-cK`4CmCx|UEv|>ZKoE6)C zvyIn7c_;X(6Jh;S6jtVE4(BuH>v-!gKadMHWQR5{keArAqbrIFNr&%@fGD#uU+`2} z7qLxGn`{MOUAszMP%mCg~9}ln*B+%V*YCljqnVCV!)De!U!n( zV`la#R+Z@fhMf*<`MQ*tyG907ydB3y-IE7mYmNMg=|1+ZJFoY$w^_0MZ1y+C7TUkU ze<)-4aV`3&Or+)B)r4Xh7NHQfS2^R1Tv}HP^%qkjv)fo>1$KSwq{a`~S;Hi>p8t%q zjHo02O5a_#mZr-m=PJlp3exXm%ttn>lEgaP8Pjg}$2Nm~dWcES)cihP?PWO~FxoUP zZw@m>tvCX~_wph}gRVOOI*QbwV4!J12$bug$P;C@MGOD?De4bx>W4NG63xe>>tMn=tuIXnEC;PEbz|7v!X(Hp-Q45QW zjAy|vcglNwu6OvO?sU`38y@iuRZ&T@STuaWF{#zA1oA~XEE$2wlgT~ytCNu!LW9eq z3dV#2xArw>&JpBN;c4!p=u;!wGXUW1iD(#9SbYR(rLDQE<@I-{fv+c5QQv(g;5Mn! zsy!`JOW@Yd5gO+{4k=Nl=Vd9x=UbSx`Hs^pX2AK&O>FS{#SS`tP0nykX(pN8Qu>pc zX~CC1u5C*>4K8x!W=zj0ujAw=9=iB@ubisAq}4Z*!_{rA$evM^UAy7JpJ4I9JNvZ~ z{*@}Nl?`;y4%_a+9H&b1E0@;KA)M2hnGbI*5=Zdj%5c2P&<>|;bY<458Pu!fIrf`hjQ zm{Z&Q&q=XAO+l?6Jyb;Ru{dh1YSmDX$d+WgfSIYdX|YDj0K@b>L4#`=uv*$4$@3zK zn->Pm%tJ%DU_c)1Sd_KiYEKU2Ipa5EObUbkt^zW}ww&tc+#@T{aXG^!B&+aBA$v?9&#@da9fjkw-;&zkN)-E_M^@fWdYVLZguf5c z&-E1_YqDfJvx9x@fb+?i89ii`AEHO&Ag9yEh1t~!--~pK2bhv}l+NNz^Pz>q8T3S9 zp7zGvI*cY|lHp@wbVB=diG*ntd6yq1F{c}HTLz+?)BYfSYJ*I$X@g>)!Bb(USXXGM zz7B(9bVaCfeLE+a7a&6-V^>e@X0*w71ro~`*~pv@r0wMgv$`8y_SMwK+vX6SVPHwd z;L3dV4QtW%-T%?$F0)mKNMKb;7Dum&C(A8!`wNmYOf@CJn`9x#PtCaf4|hK$;i!JY z@DG*6?)L(*NpX2nrsX7pQqXI)yBzdg9JSe~u|Ort;W;Kfw9Lim&;7zp_eigeTl%&! z%RCP-=6$@yjc*IQNAlA@H!22Gf)_b8;qSCZ48?>rCF=s8b3F4Ze@aGYJeq~GK04xf ziC8N73aL+tfQ`S-A5hDr@oR0+;T;Dm#B3d=^sw*-)Og;wT$kgM(&Kv#3s%a8<}!RD zMpp#_%Rlv0DAD5*l}V_p4vYwq>8&ZkmyLo~EB}t84cG^P@UEc?!}!COYX{KRXpp7r zx3Re#9ffs9jxmgKy8?s8-F63;{tg6-Bx+dGg=x{AmiQT9>vd!dYG5F0w(RA#IsRlX zCDExOqADEL)syV_{~!6*z!v_n`duxS9}lq1+|J=|cZl)7EThIV13}u$I|(Sx6UteV zM-GGrd)bp*P`}tZD~l2oc5!4a2|_c^ijggZ44qfrnylSAO^|Bu)!=tQUIOjZGYi0O zK+agnwO882I`>Hk_il{KmS0^hvv+UIEO1%`_z`!o%!@rswV^qeR+eT0o z9lBcwX%<#?A}usd%v?kU%K{tZBnSHeRzrOU;>F^w)@a35VKoMc<^2-?pbn(%sW-zD z`gx|NQIDNR34QIKmmjxP>4pTjn&V(8vYa_uQv-wN>T2ejkh$JLN9#F3UmDuQSGk{o z!R?Da+pmzO%I6|iR5Q?Swu>k}^A5FV=5Rtc2U)mtcU(OCkOQ57YA7#C3%F-w#QFna zebI7>q>wEI9Xe}s&oDRrc(hXv+d zw3{UNvm;dzs45aye@zK(@uUP;7^%^c$v;7XW2>+Wtql4m!?qC1@?a%49O9`UtS_GM zdTgt5Z`}Hl=rMaAxFMs))p61diYX1(;=_R4>=WWQ47{XkN#;fo8PjG|5j8;-_!WPX z(Fc9!D;8&C7kiY^v^dH8%D8Qog+zfWO!Q|B{Cxh-B<4-*=jljJ9azJ@xJ_DN$bSIe zZs)ko0-B}7VjFFWlY>cDR*M;I$WTs(6WBmq^%n1Oz<;G)w3|3o8F0!&Rip9=&x09E zRUm{K=?8AmsbT@w>``N;L?B{J;Q-k^LI4wdF|kamZlt_1l=PuWVbC;$5j8Y~LD6}a zu8WCV!MK7QWcBMZWIDBiUe~B!I0~ReiF2vF> z*t#I#GfT7o4OyNa5L~eAfV`Ll4$VF(s#5reCoss54)T+b-66NxyW z1KfEs;{9=H2}`Xw*3#a<_^@A{DNlEd{6~(|Xq%D>a?u0v#-Rx3MERSDMxg{w<2EQN zO6S(ns<1ruQp!sMyX_Mv`-kDEhv_=+C-<+3Q*8T)+cTBx|CM(KuAM?~%O?WAZDE1_ z3epDmOOY6ks}Bjy7X|ZX9y>$^-wUYC7s8GxY4}z_uVQh#VkR)1u27NkWX{P` z1KdDF4ep#^CB5pYVLpqTgR_(B%1q)mH{_%59C8R*1JFdWoFcof5P#gkYm?_PbG8By zI>|B-jrr6)we&Dhr`49BnR_Ocn#$d(JhABmqiOnM9B@1jrLcNteYt;C=4gC9z$XV* z5bF}>B&*A8*p1z;Hc4o0mad#-1?|Hbd+x~c7c~& zIV?0yyXFi)w(9bm)WB8TWOII;mF7Th`qmugs(zQLV0prK>Xc(Vi;>Z7hIW6M^eoD# zyS%?jA;hw(q^Cnd>pOusC!jIG9&#GAX@OVXL zM1#a$qumK_-dM3|jQ7o69*Ji?!I7y;O8<3LeMmh9cy4|=FpVB!Ya;E3S;+&zn_NEO zJ6;F@m?%~GNW*1BAHk1lpeI(BulEO^J6Phop@OoQ~f|`8zu@(GhWSVX|!m#^ih?X?Me_ zrq8RY!TI8nL^T&P@%Ogx8|nR8)=Q0#Tk?#}cs|+m59aMt-zrRvC_Pg+?14)3JMM8R zh1%N2wbyL#v^gN>^hB0vE=NmYk&!r^(Yu}Lz%cB>yrO~yx>tLRF)2Eh71KbkFEY^? z1`Kdjx=Cix+~t8EjKY&Np8t&|(PS){_`Qy^4XZHD3^FDRdE>C;<0ha8v{_D2xN0f> z<>~Y4$%DNo$VJJnzz8W3)|>XxocB1OTJV%yI_Nd|0p=h5VdC7AWM`ikTNye=zAO8aEjvoQk4UNnX zQX57?;T4h~bIo>&hmY8JWMTE-BXpe9c{N}0DjRNXpAn2KjIe<{$ zAMskSJDi9F$S}vsl;8D35iKuh@vndF*0eh4H&|lkytKY~;q$v+s*GZIjrze<>RE3A z-o0YU8aye;h{R)Pv=nEv=&KriiGpL}{k&8o6^!ig-G`Vnm3p^b$li|-R|^n}dXn;Z zUs5k~i?dd3FzbY1X?`b?CQ$G1@0$_&-O6_3hWaPsOF-HP3e`MPy8|tpX9iXS5((297+K9 zrI1KRw6mOX5E7xvLm-VI>e|hH?+Op?!Vr7grT>cQYmzXmt2P`NV&}`Xb&IOc8saj{ zfYG08UQgZs-c<>MH39QxDw#vM8XKG%@6JX7z8<;U0eU5#OrrG#WisQ$MLmT`RLEIZ zfSY)&{Cmooo4$_ck1OFe+tJT^IMpp$B{wpyP@z6LO9WZ2ab}~!TgFQ`QXP&5&Ordf za-OmA6)~V#qtM#!G`b-umJ5EBk?M2S#F7{4%jPj8f;`8KhhP9kJ68F0d4AA=#wHza2&OdDAdJc z6O3pX-KtK^@>17AT$_~Vn8KF43ckM+*gVMX*_4?U z3Phl%$D$AnuTDGa#J$tV{ZiXiR9a|Ql(IQrNMODSuK;J2&Qw%i(dc{kzZdMM6b>=P zApi=1oZKz4{XW`ylubt`o|;F=f3w7UK^alS0*|PT%5lK!Ob4W0EqE zi6rnZu;F|!*hSl|?M_3U)tAc9{IrJnwKtStn$}sF5_4b@VOkL?^`u#`QPz*x2i2VhvCi zaHytdNVSm>X@@}RhZEd&FTHs2QN(~?+R@XQpfLk~_(_+~4-Gvh_6qogbqif4LJ=&_ z88)O@#RZl>P58MiKe!Ia)5Ad_V2@M_@AN1sVYxjt`#J~7wT&QFzIq6o0nZg8Y0Xt4 z;hH!L*O>C9{f$=QS+qVtKaXBSY6iBuKSCqnV^)vUBvdxeRm^8pZ9BP{%8ORXZ!zld zpD9+d&Y;++bJ@98nQghvK134vWG`K(7K~7<_q)Q7A4oNJ0mwI)H436YJC1{-f< z?llj<4FtQKO4v*JK&y5)Fxy=AOfLJc=y)!n>Owe=Z-?pRHF&nB3<-A~Le2LC2CXg8 zp>cBPA{toH!cpl(o77?RzJ5-nUdlM5jN zAQQtwKZq@xFilfhJDnq-k^`)GgzMx{3m?T4QQ zU8c;aiXhs)VE+pf5H(tE*6fHm%WEoy4%zVsYt1*WD` z#m3SQ@P;^&EEsz8)|`4fG?b~3aU)YW9;Z=+qNwM+zWlz@5!YvflKN4JX2a^zkGd%n zBrWaH`T)`Yy zEF05Tn(#pDw1@oW{KoeJ8?tb_VWB0typ{U_QwPpKwBZAQKpjFcYhbTODzr5$gB-^R zt<;bE7Y-BY>swH=MT^b*j=$s~%H{sb^S<$RfN1B7p$JGOIt;}>yQ>azRQu?LaHo!* z!Wmb0CxmUYm0QYa7gaxP-^Z}2P>2e^2vC1>qUAhp2dxc!SDK1y`YIe@e7>xmB?KxI z*yn2fl{P_`TUJQ9KT>~o^!uvqw%OEd- zcAessnS@hSsP}o2Y8L+r*BL_w{}m~y#!Il^SUmrA--Jt$2{;tOr)T|ROhpMihb`X! z;Ca6R^Ujkp3S!?Yd?V<{IFBqmAQRq}&tXXTzR=bI^xwA2OYY9sjy#%={|7CO58PlJFC+2->z^p1s~w)h(>%|$(OM||0&<7=7r2Kx<jJ7RS)O{ybiarxZ= zA!wGiEkIwNyrWS@PP)c3a`vp$6bE2d`Hb55@o~fK4c87gcyKCnbhbNp%uH=Ta6%rH zhu$^+NXSfqqtI@&MpX25+;mJHmRYR-0)g$!E}pah(0m7K{f;I+AaHxXhVF!(OYD;J_g zvR5C^M|*Iz*{8v=bQi0eMjLR>E!yeBp1a!3o69e^IY$E!c06MY&BU)$svxFDf;cUfn@_`8q69df&W};V=9J8xU_%ArLcL%SJp6N(hU*o6b~h11Dlp2V*grmZWy>fgRk`v z=f^Lw0eC}?lw2Qzzo2nkB8KW3<2#5P3+8)IkLepI#dD2V24gAs$%A)-7uNB0X25I? zvS*!JEz61fV~YL&j021kD9dhae2hU+3J15tiHE}&UcfPT#?`_D{R!+4K=r#Sp2adE z@9~Lvmjk5mEWQIy05bVRtTm$}XoXp`iv&~h9PDh35H8ZOK5*A`j_FOq3RhrH z_R9K~cTIgxf&X%ZfpEjCwv(?{gNWu!m<~0;;6JdTd@5%xsFV>(Yz%a+gS%P7kPPvP zi!xqbvPq`!k9jg+qb8$_!XKHO_`7lIdFJAD;Y_`Q!O?bM#}`3Al3V z09d+p9x3-IEXOz-q9xL#T2RU0lOg!isjcHFXfG)akdhr*&1N0k6m*BuU=ymA8x8BS z?p^WBQa7O;3tHxSmgV&l}}Z-2fR65l3+z51Ai424P0_psN~6cSrB1sE|6_Ud0O?!R01%Ed!4;zfCR z5^&PG4^WinHrl4+Rza{}`Z$WXx;))WlSSm*85?vSf^se6VTNsRFH;VasdFX5zdiA= zzC0?+(Q*@358{>vTX`3U$e-wGG;Y#lI7l%Czx3JN8TyQBF3Bk7C^hclw|$8GA@l11 zdYNA!->k`^1$NLroa)b5%Ac4H|5nR*FoTsADrS$H6?Gr=85y@=Wf-(%_g+^Hw&|G0 zbH4m3tzqurE8Q26NEmV2>wmW6m8_Cr$y!EJn5Jem$iKs7VvtJua#<3{k`_QUcK~_# zc20g1D^zG=n!4g9c}$Qir9)0tuKx8~cqn!iwhD;0BfwQUlMsP{?6Zz%F=JUoV|85% z#TP-L-{2)572?`|zD%$CfzGUQFh4SC^$#Gshofj&hM5tl2rKfjOb8SCd2(70*V@UZ z%y@ldNB?S{Msk<6SmXc41tr|@kC~`wQhdR&)tM;)*D^E=sU#JAa&oa^R&gBC+E3YRt6qa+#stKah=E)$xTii`q$c~VnCjk? zMoBCfOB2IxphQ6{xOMuza8)jqpAraYpMk`OPmy2J`lbcxdwghC9)rTABjz}N5R>%9 zKwfEt*r~;nS*kPA6hpgN{CAOgiEV1$W`u|%Yw`&$qWSF&(tvQYoXr#et2WY<1*GQ`_Xc8 za~5w_Ifq&Wp#w%wuK6oRr}@ornHf;5GadUpiTUO9Umnzb&vY?U7Wd^c>~ha}M!TBD zf}k2kbzEnp&^!iW@IYuShticN61DFhCkQLzbrew325<;b zTk~0EapN5dH(-a3sGy^6D2xie0}{tjy>7Nz{Few#D0BigTPxroN@;I#RWQIHH5rMD zJbCh8UuDn&WHr{^^&0Mp_zbd1@v}ASw>}Pj;AnicR8ptETb$w@m$7~x*a|wOh0GAU zJnbt@s=DlcI*%Nb`MqXl@}aAJ8*Y!Kc`c;hpyy|nD<8Gp;3ZLG*p{N&#-Pw}*01oVGAJzw7*%u9BN?8F=vGm$cQ=y~u zbO`|_Kk&RfEF_v@|JTE+bsufe=d#u zZ-H(>1gB+U;!>mftW}hZb&FF%B%E!Nc?725593bbP}PWR?ZDVPd9&|oyQb5 zj%wk_d=&|;0ydU0U=vKG#PcVvbA;{2Pc;L88)Z>K&$RHh6*QY0YefeY$HZ8uc;NdH z3YrN7A@oJ;F!`WD-gcpBsL!v^?1D!w&)kZWH>QeYLBR4@C>_$Q-@xds;NiiI@Iys9rxkr*8L?@`@j@uUj3;SPcN+B?m zbwjOToR z?~sGOU-h~lV2h=vT0wTb0QgBmr#jPfRRM{|UaxsK6xH3*ZP!Z+GcxfWGlEU3Z0uzj zttDlM%#yHhLlZ!nAo!KfgSfdj3NjsYIbEWABa~>VGKH1VSz~pJYxv2O%8MpqG2WbN zT-zoL`l4A3FyB{0uSkMmzir81QwD5o1|@eSo1#v4F1nj3F&RDSS5c%jfI1MIB-TJz zB!Th#7|S2NUag%>*tDJ1@Qv&X1(gggDy(2g3K&!cg5s3#&HcBl`6Qb^W>D$7&~#t4N-#UV6apBv-=JqSOeY4 zSq3Q<-t0w!VHHdV+W}K`q!XwEcZb>Lbvv=Jcu0!*VE*tSguWnXoyHr25@R6S z(g1Xm0Zep@9V&HEy|LEXfA7*tqM(SxpOSsjpYq-UDi-auD2~ssX2G+)OhaWpX1@sN zd3#y0!=teAMbzmlTeG*4pWnQjig@!^TY=!ByQ^2@1D@DerjgZj#XnHu^sS0rvxD&D z(X4e*;h+Rgi-x3`sO;x{D|ntxJ8>F})wdpg7wxiSgRFMnct`hsk1jF$m}szdIiOQa z&-`ygmxUCKkPlNFXOvFsWJo%mpuByN=Tjm6D zLdY6<Dg)B`|+T^Ex$z^xKmtIOK^V4x zwG}8;1lQa8^&}!J-+Nx6PU8JDC02oZ1kE;XR?&vtjbZKV zq1$kKrwO^;XlW4SoenZvm=Y=U@DTdar;HD=A-*fF5XR`(LH`wYX^3mSnyIB^kKyoYwp(`9O^llD0>T?Wg@6u@hEj8Cstwy^!lO z{};yS@_2&5_Nvq~vZqELqjm!&)?=64Nfg696jLH8l9U2yxLY(67>V4cMK9#c#U9mW z#P{>nJG<>((Nc!b>gM*<3l)fIrVBc+?0+cr_7U6q*Uhgl1XXBE_F#739hRMu6&4ir z@>9!|pxbN*Y#zE`N$}MdpG+cWC*`Sz!D0D;|C5rdSUj+JbJ6IMly>2of5tlkJq&2b z&#aAbnOi-kXMLI&fJ^tjDf=!!93-mlw>)PjTrA$Uj4~Y~?3}cxBn^LRE)M)vS#lG5 z@wfU61ftJzT%wKtULlkk)WEUI+2qvsV4f-`ns?_9>U`s{Q1o9)RdwAr|D)$_}Nt;H4r zMrpkzXfFslgD`6InS3e|m!jXR!v#pV$#1eGE?<~Z>F*-h6^U9WMert3!eoLf{wfaMtte|FHB&( z?D2DfXq#93K7K)V>hvpTjE3ApLfL`}sZWWt>h(U6g1w!yX6aeM>&`14#Wi0~{xKyN zoX4?h>Mua8uY-lnR#=Fes7#0nmVeOx*d8r>Bb^X$3{HUTv}u)tWaNV~_z@}zi7kf-#~GO|Js@?){PpVH)Wab^zpMK1e^?dD zNQ159X?;KkU06j2T8J4|zHi+m3$ePM?gZBoOb=WKCtL-_Q9RtN^sLY}L9d36r+|>I!C883%kwynY0Xi1;-s`fZT0vU|{uWB42oO!F-xdm~1VCGOWQ0NW zBo3$!(};;&ancf_1t0&Zfv@jgjXrRsjg=Gx$kUh@Rtb?tw~HKeYr6R^e^<>_b8GsJ zskrSH^wDtwSrIxZq15Z?SVlBiO)NQG@zGH>fKmScl{^IupPS0otT9m(0*^_h+xcNB z?q5~}>KAo+Aq7fmI?)ChS-^1f+K>Y6^`}iRO#E1JiyuY;e;X-m0e8}6qAo`meZn4i zVkpLm2kZ`}hFu@5c?zX)1`}hoCFAbDGi_i*dGrvwCG0+MZW1q$zo*kL;_5E;?kIw? zFN?G|kp)}hjke=xZq!!4MEq*^5&x=vR&grL7i&rA5RsERS83xXKzsqexgJ`S?u6TH z!YFOr`lB2CT~|$~H*nn}BAbzF$yk&dMp2c=FOixu^DSfTjKR1#1&pVP$C&@EQO zB`o>QF!6BR$Z%WC$Pm*&%>iGdx9pP~;%|>r?)&I2p(|M#>{qA;xUw61ICS*T)w%$q z?-bHpCdy>maX07*c$ zzmh}xVqQWYwUlAtT9hZv_vAiQ4{vp4$mAw_tT#ih!?`uXmPPr}rD{#u({Bb$*~mkF zTN=*74@_aGmej6+RBbBt7G5>}I-Q_7Mw5@3pzAYk53nPTh=NG=c=F&NA z?gQ^a;&P{Fo&fr3$%}~a;gd*%?gkGe;fZTJ4Uh80%k^>i4(GET8Lez$eh>e4(kSr0 zmj;MR4eoX5mVj;Z9VoD=J5Uq1Y|CKFj>qMsbb2ADGwnfzt zs_oP)SD^Q_g?gz;a2Ka($3A`Cx}8!t-6DAQ5LU!yh9#J*f6)3HoF#`J04Jt!nd^1UQ-QRQgX#TLdeOoB*5VKM>K6#{1gEBvHKs&@K~;ZWMkAC?SKt%9 zJi^DeL779#;s$PcoTINSy{@P==k4t)o`oA_R8MPxS4c1DflOlXlQ8T|WP-xMC-A{h zt8^<1nQkxNqb}_njhLF>(>eeB4)voHb{*^|Hi|*$qfb2yQo*ljoEnL*1rv0Zf^S{a zWN_#OdoU7AImt&r4`0K}iUVs1pv)XccIT!>7uTJ(&*WIHg#N*poMhjKL)(ztjW8|% zBsS?X6J)~WWzs@InB9`Sk?S#=?d0IaHB}VRee7Z{fe`o!n(`k4vFR1dO14&nF*RG% z)b_P>H(4AkDapf<0&pxg5O@~G@ZvhjkCgE0c&AOwQ{zB7@J*u$zy1gRm&2Z}5|}j5 z0uM7Ufp~nP9wdDWa8~)g2<__$7)ypV7VEj+!_MSj`$?-n)(@PH)``(Y#~%wK zAoZMdzL5>XfB!=t^Alh*LS?np3;8=V^(!E0d7;p{0)EMhJ2(Fax*gM0-Udc0Ruq8> z#YM0ciH&=#tRulBqYAc%&G)DPg2bz5t9%Dp|9=fbhNg%^=f7u@A-RJ22F}9IhKm|B zVXgU~6ojLn!{R6qCJ=w1RtQKST!1u91H%{slRq1s3`|#7^b;4Q;tXkTqEFa2MjGIs zq0iJut#8bN`v*vBA~X3&OW4WX$9|&=i5UHOV-+WvE3 z@cF8~V57$;mFX~F6(D2<1Q?%S31N@^m%IWmgBpkO@yCrOGfSb-iuZ>>i@nLkxmgP; z(0J1n+`u)ZGKxX3g+2A1mzGQ>OX~=i4)nG!C8o;CNfV+ij^kZofIYF+#Y3BfHtJLz zQr5B8SgpV|QV1d=h%XqPLH-gGqXP5giZeQia8eY<@5UZEOqT14$rhXLuzywVEZ|mN4>by{@+(y1e!W{Jg%jf z>P9P>18d$t7PWN65#@lOD3%5*XOVo?VHm>%^BD7_e!wWRw?P! zLm_ZSxaFWChe=cWg-BP$?db5vhf#~H7?e#J0HD&doat~IrugUNTiWp6Pt$$AOmI?a zyCx}0BDW8cudwpny;u!4t(*=AYM3wirsIIrNma;9u`DtZ=@Xy7$EUh6gYG1JiA?*{E&Qp~3wHKnCzu;uY&9Remj{d|=i9K~{k)!jY&c;T8 z)jc@jc>BRVYBv|Dp?e!rX!c!)5<#KUMFgWfGo4PUXmybkY@)TSrdQ}!7+;9b__2iU z)B6SCGJ=Zl*R51#1I@p5~?sHVm6rPq$Tq1oj!wggf5xv&+!L}I`|%Woq9J! zRdL2+2pz8l71tlZW!*HB(*6V@T-9{G^U{V6<*_lWl$F4_NMVO=wE&4b&Z=`aOwXc< zB^O4Liu1-6k4{y*BL~_5NLkn&ILPzgQbbaKsf-f>`fY?(F4N)+sCTNhhMYmXKUXKi z76P{iXh`SgHXz4ZXnKp-;3A^O?@@9g&xM3=r zA9)%fPyar*F`Kg65_qdRfR`^!>kNpld-B^`+v!DzNVx3m(6?OSg#A6>vA}o2VV}rE zWo5TF9ol+qmI{%DmC6eY!V+&sTR4Dp1GA(B7CQEWM@tY)vXL)8LaVd6^$?P#B-Af$ zWvaPA*68=u6~<%i&sn>e|7X=lDQWkY77}>XUZ1@=XBN5QAWOFNq}f4Nq z2FBK&Q0Ba(G)TCQWv@Afk+hUVoska+bG}_s{D3*V zIn|NSSg_XpiEbu1F2u6eLa}czyiS=I{>hW01WOQwc;S$&woYXrq+e<#n>0VPsmLa- zDCM+%e>gcNXS7~J>Px3XuuzfQf<6nMdHmwZ`k%%)6Ou@mmPgPV22KiOf~Jwo3qd~~ z#HN!3u^($y(5S9&6#g-!IrA?Q#ADA}_OMnJ z7U9ZI|34o)Bphq~!*TkgGDv6LYV%p<IBk2zqfZFD6SGIa$%JLbIslMKD1f}( z!Wfqb%5W%{CR&T3>syeztzckacBj$h0W{Hj`6bZ@kZoiCuWOU zpJ{O(1rBVeJ=rHw5lZ=_=U<@4H4=5=noeSm_^Lp~<@WXUvzcUJe-)UH3;O{ea)LAS zI0Oen3#(8s0SR|Y^claI6$>vc6bkWRyP-(t>)LJ}O`G5fB+%0iHSL$ZCix zG3@)6f28dS6x9tFbF?NC^GyxNUTEfc?8)NILWIq(8Szcep)z|_sT|wP24xabSS)^h zR`+*_(wIHRbRgydfuvHPD`GMFxns1xwuxJ*h5Ulv_9%b;AxzE zQ-1ra_T}G^ls&?)z^TD4HvB?0D}53H3l{|IY7qpy7Y|SNOc=@E0c>&S>RgF;$W4(h z{|hsD6T` zgBPPKud%(xw`one+A*&<>vSm2y4kM~neCu{@i#y^E{T2mq>*1inEHV)@En#cDaRLe z%!@b<46ik?DS8r+>5QcuMdv3?(WT1# za&kEB(s+&&4~qSFqhpcqRa|4eHiU)iu%%m@PeBT?gL8d4H&`onqcC7LoqJyI6g5MH##5t$mjLD<8=ka zut4qx)P3$&wc1r(E>h+g*&MbBR~s#j3qS#mC#epE^<-p4=TenV3H%aUWc6n#F)-dd z55#wYGd~Wc>DLyMc9dDGm3IO4>LQW|SDUsX@pl{G6S83ru#Mcmi_E7V{HHqP^-&xQ zEv&RIcw4yYHRXP@PB`zxz&pKv)hjt^d`;QiN9`L$vcHfxMrXuqo5t956(-g zdd$S}K*?)qTcFety)8NB0CUH#3ilz#>cS1+*D6apQA?d2?%JkjA%Yq1j=5<9(s6xI z@$)s@HPqkjMg85=YSd-{FAC*}Q8Ms7XvIDNm7C$|m)((~uxi9gENJc5amjRvqD`SK ztnIHrr<>#cIC#;#HZ=vxdr9j!Ol{uEq#IR>DN;{I;(Mm3KwFxKF+rHM&kDP$COQba zZqX55|0zj+u0p9}i|~=`V`hi*jzX%k%aM7?gSTW3cNxwL1d|IbC95RM5OBG4h3IczZ3E2?>>lc(5ZF!qOP7 z2y7wwyuI$hw#?x!gmdUpMaqfQ%`ZGR@i#~cjEWHGbXb6=FGM}`B<1Id9~1b#f(=*? z)zgzFeamfVk+ZcveIQZk4-p9$;XIm?9dbxdZaj}+`n`upE2dyd*a3WHtZfLB6ogZZ zhxbaMTD`M1i5feGRxXfRM95_#7&|Vd&lcWZ!l)e{j9x;?4lK25n_%fqX;17@0gqItudSzKh^QYJ{ z;4E+H=9O!ccO-;Fu$4pf956HiRQvas{p*;dG28r0N&OUo1P=Mwi7y0Ft299fppa|q z|KfjDC8CdyM0lq%J>15vTJ(k6{)R{lO>j{T`QBTv{n6rWS*=D5ZxRHM08WvnVEL{X z>#A`qM|Z5{0Y;CEcG=j5q2)qP0QLZEI=_tE>)pYu^-G=mX27YEM>P`&=s%JixZrZ+ z)+WVhxN{yP9v`U2?R!5Yx*+Le^B?WS1eRrqOe0uw2usebA*7~{R~gKTgved|y(mx6 z7_|KLLS&5~Nayl+W6w>69Y_p|Lsmtm(T7RC##b?8lQnkl&K(@L^Sdd%9dB1a!<7jH z6Q++n+XVz(G=0oHk3(bSAR(09bb)9*$#BiR1>MKs8i!uoGK$=KWO!k@mUtTDH^f<@ z_ro7vULz#q;(c?ys$P2IR+?DzK%vZz+Id>~V;%WX*6#I~JB9%9QqLrdwYv`?~WpgYCFM^L)?3?U$J?0+`knzRf)N6yNoBx1TR2|hW%+ubEim;0nfuYGhbzHP_nUw8X1!f=*t zt+ThhfTIv23s}ZIdl-z^p6M2EYT>Fx?N!C=XJapKgwp8`ZPbI%lT5S5txt)16U)Fi`7x{biQ*wOD#sfZ z1zxNT+tl+LhaqBYf;phh{n2tFfQ)8~%-L!GWZ?eJS@R1SZ_((tHs-jjU@=4k^oZW> zHYfvn7brr89f0XKtdH(P<0eL9lWa-)$mH~Rm6`Siie$L<26N8kmU*s>TzBFj(h0wK z=0|(ZDqK+>9wqfbi?nwkk$(tF*Es7XcMil#6P3JXsbwhUM$#RDNP{c z7xAD4zwLdYy|bCkZg^7v+j6)(Em>DGJSA2K3|CDByI)B@t?c^CNjwKet!uPbAB^nB z2RqJo3V;(;?D`MahrgS{CM2)po|^U|4A(CoAPg;GwkyQpTYi<_amO8<;c7moug~KR zm#<)h7`^?@JTY^vzq zX_OVSfBB}KZII*5H0b!z)4OqP+RQUJz*6~2YRBq>GqvTQ>X9htZO`r9+bPze5BsCd zlkiHEq8<%b&<_*8M|ZUo%Tu*$g-!wv4}1{sA7j1$qGSCc62KC|F7}P75wF0P;k>N1 zB1v3;KKeDfSKhpzJ_LAz#iW5Vakx%n37RKT+rRQWGkt;? z;c@NJ#sM}R-((GP7n?l}#G^k6%v&$@t|pERv$u3e$T~fnl>M0TS>lq=nV#8qJT;AF zLO?Vh`;AR~TEPFwlATU*^zyp%&Z%Cq_*CZbnZ$*2~!oDaF};mSYG#GBOzZTB6{qjZHAf+RUE=(Yp5@(rCcXCN~Vd?I9h+CsBW zVF|e)TH&~Vmu}=3s!nvBs4CxyFY$l3HVdTG=dgx|*M7fSN(7!<43jmWxW-B=`kYxg zXz-{F^z~@fxuNKrWH{*B{zcuXkvuLX2HsdWs&il5%{6tGBP-1MC3wmUo#tTIOG0AA zl^TyD9`g1RS{Gg*i=+Uu$O#rh0Q`47*5yO^(zH)am_&g8#F#mIDN}iv$csBZ?{m|GVbl)*#uY_`wn&Ll>Lqonj|Qj0D|OR8s)V`k@>9lEY$>sEwhnzh|7 zl5o3gs4e1ELE&xKN{zGAHeumFx%<$`rRtsIP|vEPOQlqBMY_3KWaVZmbjwJTjpBF7 zqL}SCv6aW}7pfihF_Vc;b9YKp29>O~3)IyQ*^GZTsgg zqa9sq;?bBu^uShZea!d6rdE_q^70hBuCSh^h}V6Y#@A7oE}}-5fI9`~TLO$K>ewf$ zuhkGrM!nz+63^!?MSK%`Ig!vO(reIfdAuR>doW9|H(Gx>uO4t1M}4ee4_b{k8jJ0t z?)eNH2B|6#PlXWXv<{;TL$3<^4FxLoLPNKoiQypE>FzK5+oAG~N=8YJ)?!y)@_bEV zH1vB}=eFnI_S$)b;{0(1hlK+l_dhM>^h&&l(%1*o$MG1K(RXJy@P!UR0C%-$myJw5 zCcEL7cah^n9n4SU&8r8H9Ze^41fjQ|uDHqU=n##*<1%J)q4Q9%Z-=&LNYAv?k~Ves znB`dJBsTs)`+;p31o;(7HtL&uFLtiWg&r1SB8|lGAzII&CWnqYW%i*TL~K)rTkL1h zx)ui?eH5}+sUxJ5==(+IJ|o#^s^Rc%VroFn!C&R)5{KZqq3cyf9a?Q%~Q#dIgtwhzr%mC zp@oBw&7838P3N|!K1b{(@EvZwW(QNg`}guI1(Gs)w2bj;h7^&KMU8(VEc%OO#i8&H zY%(ju7=^-SeGu&M#;>b-ka&c@YI?kg0+OO?j~t9X1Pqg%SBGqEX$iB9fbJzh5U01= zyE{XXW(c!a+15xF31lXlqDGmiS=&QAsVtMak^bbxpkb;5@LPcr;Ub>XsB6d=8||qy z^l1(V@M_E0lKvIbmH$NBc1+*fs%{bt^{)9a`H=I<-2+a|$ELvJ~k zNG~x>5~N|){9NE(z$F!khC9e)pNSFj+eStRoh4Dn`bvFq%7E5G-DoBwP&OAI4I#tKG5Z(fF1ytUy6Ff{YWu$7w!yHt z?Y_n}?+`Ut@Y-2ryt>=ZM?hdeb8DcefV}#5S$5y&-ZOOje1QE*ESeOCpnx_eq zUo5h36~nMvXL!F#&JNL^t+;>}<8b02w8F3uVtW2H_FfV=*OBl7@}|Mock=PO*@rcI zesbbVxZ<;^39^Iw?-P1mMC-|bbZHIoR=A0`JisO5x=Vwyr?lXO+lmc9!u!XsglK!0 zkWZ=!R7h)Y5DY1QHVRGs{SH4E(ub>Cw(?N7y15nPQ(az5JwT@tl2Ryk<0CF-2L*1T z1L<%3aP@4Vky1=1voLxGhWksYa>Xb31xf5N95@fjxbAYG+zLkQY&0`!bu@dZyVca) zO33Qe;<5s@QxM!+gejrU`KH|9XYf;|t0pz=n3-)bA=XI^=V;&*ITnGg5z)`qP)dQ30kfmJ)JU4Ge;;%HYjVWJo z_7dOn9hn2BF(komgd zIqW0A$(hLzgd|>-*xDC~dQ8!|_Or_x(CPgfk7-};CTks+|GMzeTuH|4baq$=+;UoF z%?aD^pAQh`_6)Nhw-4+?VFrPhwM_NIS2$yr>5u@@#gf_;?Iv@EZpBBh*i3oJ6q5Ka z5puGfheb4D2$nZh{QUB;mgL1#;aO#0>2&_Da;H?avKStG6?_#8m`2gHcO9W6KkhMY z+Xq*DpkjBpA|SoXOMn2L#c|bGMnB)~!9~wBdY;7pESEz)x&idI!U^S^m~9jk68;Vcf|?)sx8*Y)9*?Z; zpO2kh_T({b*GiCs^O|fI1>2iE#W?(4_-PLAc;cFe*xB#5VzU^m)4N+s_oZb|`+EnI zMe9KTfwO~4lR~z;nHsFu?mT4o)qL)4<|mwMs@rYVhtDjM5qm^ArySKn@%5Ec5Jz|^ z2xU6WP+yT8YKn=)y)xjRl@%@Vw2$6EVb!{G{KX%`!(fgE^84DgttjM`++#`mgq75R z;5ZejUk`qY}(Z>#@FP(dhMYXA``KuK3k55+12w zBo~#(66msU82Gq$)0xI62#~07J4&7@3v5vIvee*~{YG-f(X9T%oHH*)bB}%Pq}a4N`EL27r623 zE&Z9AiqnZxdbVxLqaxcc&MKIr`IEK|4qV=1ub7i-NPB-N;})W41%mCtiRp|tXY^G;l&kLX z#YlfK2>ylvcYc z142~*1XxdyrdimeFJx41Gj1tj5WEJc+*^sTW*fvB+zPF1cvHZZ7p({Su?kQh94&^xF4& zwXPWR41a_OXB4pQc(Es?D#}z;HKK(Uds;a>65W8#zgPf!GpS@s+^zJ0ldkshHbq8S zID`*uPg53fBK$$aUU|50m)H|v#S)I>vyd)WESn?jhAJdnCuj%EF0^l+-j==495n6` zT{VQPGZ_7B>{VYZIb!g-KjZ$JwdZaRZuqOp@DqVN18B^zs)Zs(219r&a|?w%pg${N zOZrd^1+P5JK8Z~k^o^M2WJg7$@nQQ*id_YI;B|ycUwk{{D59o|89MoDR*mdo&Zywl zOJBv-mlNbw-%DjkjloPMtR<74pS0m|h{keK2ZVX(Z-8yJ*f5D+_SFlhwa5{u*Ehc< zz%l8A@QSY4f3YR)6++&N{fX86VLwX*k2hADPy1^VlJoFt%m(R}l@Du{f^P}h6CXt2 zKuI3dGx-Sa=Tll7IW=sK(ZdtfSzDLYjPJ@0v|%_==$cON(X9VCB{c++g;C`#WhBq~`KQnVY~JYpWxbU;a_GnQJ| zzc1AXL$`td#l+rGCMlTTZVx_&ytm;o`?zar*k3&vpYj}{=`g5A$7#=kRQ&(_Nj0eS zph$P7^vvfCiX6JP=Ix@IIniv{kh_QGG`5cfQ<}w_WsdrlEfT49{A)WR_+eL&>J#M-`;R=#-n@A>+U$`O zRT`Vs{nOg;It^s`Ft(4r;L`aCo0NiMHlpkQpqvNPI8qZ+Eap*Xy+*`g4EpufL)z#s z-P{>loAQ7x-SP#9+viSONy`$x&5JX!fFK#=!gBXRp>v zS&!UCcTgq2FD4+CT$c6$Kh1Fz~~`R(4No+`DY`bqEXH+c0j`uyHhlD12VX zON&4p*Uw2S037g67@E=#TS5O^=!-CY{-^=)c0n7{zB3HRtWdb{daolu#;SHdh1DVM zhmiza86alm_WMM5ffY7O@vHE{8RU@4|7Mt|BZZ!K;v#h&59tW=kR>l$_tR!l3>@B9 zn<;GToZLsX^7m0kDA7u#2P;L5o!{=pcC9@p274fY0!&>2QoGEJt{Jdfpxg_ze%kVg z(D=0sz$Qk%pm|OYEcjYa*8TPmx_nmf_>Y+5J?EzRJMbmb?RV?A6UD@=h_^C@)v2t z2MVMy`5Cu6dnqxwxbOJJ#cxgRZ6tI96~@w37ZF-yM`dw{D^2!j@z`pTCPhn;{KgC+ z>wA!k!4tnD)pqEieDh3K=?_*rNq) zd`JHS#Y1gsLCqY`#Pl^ug9z1e^l)&)V%IZW?;hq`UKY-ZO{7IiEZaOWV?qA)bjBRMtR_%_FGzfSnnus=61oFOB zWg6Ls=$CZcU|ce(NokC@>evOC zSiQ$)MBFOVJIEPkMHDcxum@4>G zj^?g1dXovnJOIiRj?)FUFG9}p`;L}TteA4{-pS9shnSI)G(={g_^VQ?~agHdZ zoD+VuoR^b;ymaJc#{BjdU{8O;6W05NESTnc@n*x-X|MD{BV4%F?t_LFA-p6?B)j$0 zcl^n`bb6UfwM1``>jL6-ewn5cWQccugUAB=$d+j=IAJV`--Ze4j(ld4dti{>tWF5` z%O3@ISZHpf+v9{#+F0a*8iqAdD>=_Uf;P}}ZrDA66c|H=qd_-);m?hRXZ1kOcN&g# zcS~*dr@X~?z#hn;h_!}KH3pIaDwT+uQK&P~99>TK+WpAjesm)}G%S!DH|esW+fUl)EqnE$19!HhulYj*;-B|H`}*pXq)GP4 zoyq<(f;ay8o_Q1=)`fExAnzGk|O^1VJF>~)bidtAoViB(4(m;xizik%q< zmq)#oXS9v!i%`q7P9ke=1|GVKt0ogOmXNOI<-7GLmzbjYtO_%N#GZ5BMf?gJ3hLcAO}g)j^tq03eh!?u_fDGi2Zu4RyGyV|EK z24W#L5CM*BI3g4r-f7_0npn~Rli+@O=IB40HYtYC0x@6lxecvo)JJn+L`n zLDN%-*EnpMFAH*FL_Bl|P2nlmJ&;WkIhK3i{9R%nT=Kj`@Y8M*6jIJyl@~U9FSkExbW1lr$Zx3EN;70{jP$b&UL*co**gvSM6#^St zLu93Cr%N^L%>V3^)w{i#6h_#W72Rbv-#3vntn;ZipYz0xejS!{yOj03?^}adOZq{c z6M60F>Vv7I8soJ5UI^6RYO)x>u3*OvK&N(&_rVk>;eRphthk4?TiDAkSTjUHz^#TR z6!2JqR}GI)-Ig^ks4*IVJAW=d-X1N;%*V>xbCu}xsJY4c4YX8gPjtUW%U-B~BI}5q z#BM?+P!Veo5yZ$~M%wGHDmmY*GD-@7aLYHd`6wz)LD_2>o!R~lVii|Gob?qM8AGi6 z+3k~m#LVHYLmln48f{h0D($bpIp6|)mV1G_Xe!{^6N38rVY$F}s;sp)(ysJn-H~aS}-w&v-rn%&;(MGuh~c z&3wK4SX8jEcBe5r=DAD>xR3!3e{8y_U~g6w~P`X0orr4k=v!IFukTf$Ow6g%ROO z1T}L9ppsGiLv8KUD>|ei_KO;&^QrH)KkV<`OM`8^OCoJV$NR9j{OhVx7V5&cq)Id)W>{IfVfZ4mVrAfTCDn zIZrgUj7W`3U_l3&#ZZuON0kQ~`*;W|$g|sw>L=Oy0Z%wt9p^7=wu>W>x6)=ifc>~1 z!LH5>oX~9)nUT9^FUu_El3A-J1EtK5han_$+~%G=lRY-0A4>=et8}AvWFHnODuXTS zmxug#jax&UU>nzM6})ByAPoMPr`)sGlKld|M_ojNFtEs&mmD2Ye3}Q1*+$Bmxc(Y! zC_lMfX14ASMHd`0sd;p2ONV8+<256NYSAd>>PN>ry&_(;7QO_h;Bco`|Fb};oL`@x z!(N0bsh5NS?8f%6k@h{=j53SWhE?>;Uff;$ zA_D}uXkcXBrLXx7ScDKt9~HX8 z{G%qRv-Gvv^eJZ}sDxcI_ci=M3{+9~Tdt;9%dmkby@9<4uE&vG|5hCim}m(0O(JD6 zTKKLto~9Q&x-Jni*{Q>KM#Bd;Uc`#dd}}+3B(^bbD-K?TmOVvgTkaHkfK9#UD_%^f z{vpBmH$TAVwfBu4ku=YdL3Lk_@#g@lq|Pnj$*74{+xAcz!yL?Cl}3;(RBuYug(TX5 z)&7M@H^rLKVh^XMa9CwfxckEInuUxw)UvJ~^`Fe;TFm48yFLnC#n|{7_DJp3IN02) zr_0ppkuL*YBXBQ`*beI@^9}%Tfl1U#Jd#U);57ZqgqyLc2ORgKke2P7W(oinUU0SV zuwL{B;GBJ8YW<9bDCOB-n!0w@|EY?BDEAXej#7o)=n)EI*67YXnekZDAIPB#b)B?p zF5c&1nBuB%-q&4DWI&omReF;guKQ=GFKm?uDd4l-uCyU^Q+Tibiwc~U9xC*Kag})H zkY+!p;KinOl^h$rxzG6|f$wdwq55+9ELGmTyIz~E^uqd~oA{2UrC>|3^AdnpzS*`t z2rHZSrjj{#4`i$-#h&LbV;(j(rjOGcvrLvQ`f)vn7vOfo6PSm(WLP`Eun8ZCv7MkTBvjy;9R z4`G>`9?U@^@+x@tO#gAab-umZkN78;v(j8BQA*X1|V1lsy@choU zVQ-2@p_u{2X;;g6U~3m+T75LI&b(~}#Z8>NK0_u==hX!m16NXHqQ%AX~_*j4m_De;VOf5kf{rQ!O{@b`SGPGzKBGYXDs;#9JpGr8D z@3KOW5655`seLRvFIx!V2ZX%QBV8UoTePjoTdAIB>;~=ZkD|3h!J}eE-+0zaD3fQM zyzqd>uha*rWq9j{9WcTE>ctP6G$Tm$=crJYo&hbQ4}h1P9o-vwCI9|bVTdDLjFV0F zxp`>@sN*G>VY@e=kMHid2-DYhd67-ba^_0;f68EP+h{6O!A`RELYbcI1O|Jatxw8N zdG!4v-t|5BAYceQQvue>rafiz30HGv7<~D*YQ22W|5qder327{qy^4EC+;)43=CYV zbaC?l%0_{^Vscm~h!N~8Kq`JIz-WZ3vTnWOsl(yuy_U31o6vW^lSYMlc1}gSh2Eqt z!n|t+@_?}rFGXfV7h4YnS_~27_Oqtgb-uS9E)6XGvrG0s=30|Epck!3Hzbc^tpsza z%6QVWYcT{J`Gg)~oVXbgC3>QAs zb&NZB+>!D$5?}0e6G0FRBpk?e1nv(pqSAVNg^kKY_ zG{(og4RygasTy2dM)04Tc(^sUM|N_XSon{&B2cMN{#Gl!+uJH>1tKJ<4!F`!*>EHG z=Gk#`d(`DJfQ5~6OXx5DeEm;L0}%w^ge-jXsTl~Kk0LPrjU@PaY~N1`f5&yloL3cD zOIsOSaMSpKd`u_do9=L*AfiQ!fgTHK&QD6QCYifmUeI)Fc`857IYzcweU+|TjTS9N z7#9|BB76qX_yZah9k+X-30g^((XA`QkhxJ~u}uQ3%AMz7+@8Vdf!|=gRDbd0N8_3< zCSXM!aqC$^B`h8OuNg@#EjK_Gy$PVBE=n!2E~dfw=kZ7+5qel9Hweztt?TC-CUofO zlY0eL!KHlv<~jc5fwSnt6$sNWvlcCCnJ%p;3)9~>{P3OZ?$l&sm&4sXo&=7LF6uYV z;8mZ58SqO^y8QD?yj7h&TupXgiQ3PhlFOKB%6nXu=ietRZm1*A-rt52_lGlUMyvwS z2{qQj8VbYFyRKs*G?CL!vb(2NT~E6iHVr^lqv0IUk=P6MqoxXW1WqcGM}CB!iQd=czx7qhWXQ zjWK3fj6gmEUvxo4%7c=I8qO@EkKg{Z07kS8hGTCm`E*|=-=T?koR7Tps zTjV9&Owc(u#v!lP8)hb@-(9s_|5x`Q>y$&$k1+?)I?pSeu@K;Yeq4?m1LARM+Q02a z^EK|PZ;xFdL5+>b3GJ&n2tr;SyR1ri;2=?!$s6qWKDftTO$h&Deuo!_QJ+0r0dlFPDJkU9Su-ti}X zbPNH*`@w%{29&-D_kM=}M!7nUicF7d3iO&f0zYvA^1%0F+^Epo^9#N=6QpD&nRp4$ zBPc9niAuZ1MGmW}$9KeeYBb4mFq1K{XD3!)4S2s))a=^K=E#srrzNi%4H=oqgoUtR$g>33i#z@fqY;n~Y|L=;=y@ji>-JcoIN$R?O zE?GbJkJa(E?2U{i^yq(?idh2IKdEHmI>+Q|u#Jad4~igWqQocuasvON#^-6Smi)|0 z*LaR!aelqLHSIE_=}ORFOko8R^eQk~JCrjwW*3;)&sd7G$$s(J4qsECvL9E8$oKfzV=>1LcigSk%&#af2jhDZ=!n`#X)~i zDqHj;o+N{5`!#ILcvpHfQK`iDd?*ND_;X=Iq{I5zas1rLI6|_7`6CXZdOE=HP%vejtyus?K)Sz`8wA5Hn{LmSnbaMo#-@)%I1dT^ zzb3IctaTetfTHmpas!RDAC$844KWPl&RU&~X>*!em95!&!4(9)A_h^Ywq)4<=qQhg z&E3u_AEk-93d7H!NaO|KgSma!`=(xAUU|9}l+Y?QTI5Jy=XL#6520}xXpJ2GXBQ9q zWd`4d*(pMhE3$g%afZmkP#R$~p@ieh2)8b+j>Yac?!DKBbg>z#VJm}C*B11tZF^od z|53LPT6*wLV<6RS!38x=!H{5TDG$ih9Nn!`K6yP2i)L--+3g+~$;8dQcSw#8AX8_6 z8)o$~-6j;og^?Kstl`U_2NFs^m?8RN4jITZ!u>+WW#^7}mK*FAEt#F-SZ`(8f1Wn9 zTX&OFMf`LIdt5J3;Hd9lIK8-4t5;hU-_o`kIn-+6cc%*Nc0;h)J~I|ua_YyA(-{#m zMeh-E^-c>pqM_{{MLC}+mW5nkGt24DmuMT8mYxuiryg(_bHQ-mD{CyN%?^E_X1D68 z{+H|c==nSjJN7KQCM%%b1I4EQ{f@Dm8tlPBB3oU=oZ8J3_01s2Gp{>q{EG}>Uc5J> zYs#qx7-$%XuT{jL?ldYm-&y?V$p%nzaK+IHhT29a$H>O(hN-bgb zc|BI~*h&0e&vKKD#l6Lr69vo(*fh-3MxF6+Y~lO;k!UaG3lU)4{jz* z);Ok>j!Z!-Wvm%(tPo~9>aao91VV-&`(Yu8Mk+V%iiRaYhrPweSLq(6{A%1@)UJQi zp-VTUtFTfYMo(z)W_tiC%F7Z6lSqu_{VGKBqS>7--^MDiy9kU1+?f8P>Ee}l1>DvA z*j)9X?mCz#SM_Y^^xBZKn2-@atM$^qt-yw3heZ+Xl9N+uxs{1mtAMyRNO`BoV718P zw$B58;LFVh+tiE!)%XUmIxc^`4)fX87#CggJ+2}f?&9{It5jh@U1_3;IUXk3$l!Gu zF(543?P}(a4B+9HIrx)rD6>MRbEm1xi{BSC!Tu?gu@vJ}*?gimV@mmD_^|$y!71Ri zgo~GD@ddYmFxYQbQjCshH+s-F+&CyRVAGL1luEI%_{*uxX|`jFM2zu<(b95hrt8L2 zyjlN@j4e_sFHJO*fIEGha!^pr%1e^|F27l7}PFewecT<{WfMB=&7#fH-N2 z8`A8M8{!`{opO9ctEdvdkUXshT5J8?sZZP!^T5w!-5QD`9xF=2FFZ0#8~nbV76d*-UmHvn2sb{H!%{Tx~QRu3*? zu$Wi0AkWMF>!0s~tVvf9oUkJb_()=ua{`q+?&=dBXkOP|x&7J+L`S{8#2=JtA7Vy} zz?%}0Kf%)daEqxi}p8ct`N!{%cXaT{=YjYi3OZRzSVi#21?? z{clvXTIG*{u4QNTpvPSsY!Y?DV;rc#Anm8=xdzYpJ>v4NTe)XGWoT3MHJ zX#Uv#6Mq#XzqV_O^MgbjbL|_?o~sX(<;N8~dCEV|3E^!95Y9iiN}$yY0qsJ)1IvFv zxJFdE+FR4*DY=YFA7l8xe*HLO&8SvJ5mICo=tFAzz57H=WadmvOpLxFv-})4^#H>G$5ju>Qs_GE{a>PXzsxH-hUvt zPUPu`5EHy9y&R$5_kEq57cUH=mBi}2CrOnmy4F}KTwg#xs;}Y(f)V=TDf~8?HlyKV9=a$Z5 zr9VE>elv5|z+k{)5cxr%%D%E(*cF0)d9)hhCrdk$hDJDq?;$;E{s=s&9NwlcNMhN0 z;Nxw|*X&rh?fl6{$Vh5No+Ajyb(_i~Gw8duJyi{c9p`qQ8c%>l;+y4Bjf>l#87jOx zx3q1i&@A|t?nk?>1l_ThwUwKCd>sp4jhYn9><*iPoxYyH;Hp`Qeohp76gGJ?*v3o^(O~eT%m~>=y@{9_Xadu`@awYdV z$fQ$XCrh|No z@BD>hOTPaNE$44~g!L0euH+rMX7OZdy`Kh&sZfO<{P%v^{SmZs5~rSm!_tMJjfTO@ zxc~Knsjr{^I!A=G?J|)FJb#7Zk2miKsfF0us^a;24*b2n0%Ay&y9aDGpO>BdMGXWu zFb4Rb5bb&LoU<{HVN!)B%aL#L96Jo^4+V^~!sxV+N2?b1z z42Te2 z-rYSU*xPHb1@}15EI!JkqRBYQOM5kuaMJLLaDbVed^@D%Od)B6sxLv`0vHbf z#Ee(cV^~r6KUV86ED<75D&TD9#<5`(f!`H`ID90nYHn1*)^wbj=7^U|=;JG*;Ia&z zt#)52YzW&GaCS4IoB3FmRDZRay9usgH)@iTs?_v)w5?q7hVzxE6!rARAvocXtC#Oi zm5p;oqItCN^I7#~EBj(H%`K*$C2)mmUYetk5pF)an$f)x8O&3Y)*nIob|TG`ObJ~l z8$Bc?BAW){yo?NE;_(8XV{4l?{X)rw2b0XbhtEAJs4OAej%|fjZN;D?G3h56W{WSJ zh|>P7 zMEtoza<2OCsgN3%&UxOa)zIosqS%{K??W1zFib;ujD$Q-vK>v3tu#Vy9>KHipy_p4 z#GVXJbnF)Y+cpx#F_O?W|14$R#S04Nw-|g467YSUgA)X=(9hII^z#p#$GVq2!sf?h zP))Rq041FxCSa+%WS1C6H_F{HD3e4Y?WsK#ABtGMWFzpyhHl0tgLu9+L+6}l4_m9;!{r$oEp zyg?3C^}LQRdXZN1Yz04+3qUMyNV|mHL9E#cML%}!?&nnpiEw5Yy$u*wD4@J*UQqH-yJ>i^k*J=x&vTza}1BA%#TW@i0EU2_fjOj zH@;j`b{gnvW>*rE0XJ1TtI#fecztoO-{;qpx&zPoJOR96cslO>h&v)Sl}vs;BgyZE z`iiT!OHEoGJjZ7g_)MKOxYX@tGyp)dO!%DQ6c46 zHpSP(RO#Pi&Rce)(cLYq`*7+jJ$k)9YqN_VbF3a%SkozZsJt1yW?psL?byF2RGrKo9Fl+H*Zq zo@B~uys*kUVS}FIK};{8h1{E{uIG^>FTRXmUVH|K@*-^U_JZuq-1++PnsKUtTo^zj zQRyEhF6R@MW)nfnMkhJ{6&EMzAn0>Msc|hYAZ>0?ZFLz#u~V|=Jj-_V zHIv~dkGHemb47090RY-#h1Zs^UQ9&y{pyXgC=TnujI*Y!m>cAOK{d*zF!~3yJL11@+(K;%QJ%_5zzZet1G<*299=Mz$Xd-D0^@%X07C>^a6H`G2 zQ)-v8^8M(}b*pYe5?kERUiGG+3+jwX0Ze?2i zdYw(XBjzrY_`1O@OV$Sbj@-jX*!)CNK4oZyR^c~ZRfCKK|Hi`QMnFfP>~aW5ge3WY zoe1M+J{y-QlNblwt>|M~E8AB%2?{P>PT3dsdEP`=7?^%0l3yQ&vIDXG>DF)+JiTeT zeo_12+qqD4J5;JwE)+WmfyFDTzE?*=0yFAqWDnI#h=NS*gU>w$Qmh!kbTBKdi>Pep zsAlk2%Lg(F{V1%tuqjv|6RpAyWII4lR&F77T-_mNV)m|nRICO|HpmQ~JW@!OY&@(M z*um}y8j2v{R7wTDqO*`5%QmPZl7Fk;$aHpZ(rZm(3LysSOp!{%BTsDd>=aYF%@I1I zma#z8AC>EMKDHY83=cIq8oBEQk5cK9>uXw zWI{us3(;C`@{he@KxIP6@oxTwgwj2HgbvyT0JB*v7>-64lpsV|k=f<8@{yS|ZS3?QNRL?3mc)MY2Lgvn-pqjD6kCB?O$faD(2eN$TE)A?k^6UR| z5MJaeTn6tDj;%`g1L>zS`d6=@+(y$w1X(FUWeFF59dU1s{?8DxaB!*-U0_w04GWyIbd{)XZ&{H;rP)}7`Gch zp`?wf;gW}F20f`fZzlQe--OhzN}=0br4Z_{0XtKu&Fz=dM`vE`lUApAV1i#7 zxgGO20=JImoS5J^bcxsAR8>3CyD)v4<#PX1D3VS;iW~ zmM@)qMP8=z&X>6TxSoiY1<45vThG4a5Aj{0Kz{Gc{?wxsy=VNW_7SS>LR%PJoBsBD z$+ets_3^oT&8dF*PPa-MVvS=59r5ewIQ5LDhe|p@anlV~hF^G-JO)Vnks3p~`sLJ4 zTk7)hS~3VzM=Yn2%WCS$=NM&9<7bZ`JWQ|t8oL%OXxGJ<2;4F5Ew+)rSxKccjX?tU4}^jAoVg2Q5*8lB%`l0B+a2>*GFhQFU|%FS>ZJG;M#nyJ$uq5wTjkCDcdKv z$qPKT<42BuIgmI4A~7H6e4*xuQXeP`OdK8wAr8PibCpNp2B#k=s#ye!MkBtm0W^u zy633dH547R1ki=JcyA~VZ$nq^{kKBu$0>gAycDj@RuCm5@bk}5v5anS{s{>7Q!bMd z6&;`Mmr#8c)?DSLS!0r&ZGre*%6@x!7a@)ihZT~M83UqwE@dOFgPr|n{t;$5b8Hf zO2Hz&bd-?Sd~6Vrp;1-8+voB76YBp}Y%>Oq^_d?EpzZ1n$&ac1ON?`yx|p1$6UH0{ zENOSNgInudJ4ehPS#`HvY)9XNVoM=+9iVon!2 z^h;e8Ym1QXtKuk-U@&y1z^dgo@zysyQCe@(o||$rK5&DCrGj5B17>>ihtXBa+$+B` zU#KK^TtQ5UjTh>o7SvUexy5Y?;l)1>xQ2N>(w23P{)?1TUCha zfHw28j5I|OPziIA`#a{*_(fG3Sa`d>6q>yLgbd$nXXnfl`a#p72i&O|L;B_(_K$AV zWZE4|*5#N%(W`24%t ztf!PbVj}F3+A=KD!EOdWPVFiZ#0n8R z&vNNBQtRO8{&zb2N|b`YJHj$*qxY}PEJ}OBjaJNvQYCxhoSK)(`BCrIeXbIQg^y0} zH~H{;T+|XjSPC{TV`ej(7ejeH&DKqS4Q$Whe(qK`Cwuz+dWX?s>;yO!Zyh_ zP#;4Uk?C>M<;90!79C>Q#fv({&caEq%@othf{2FK7_V2V#|`2Am-7HP4W_6+JTr?p zd#=dNDS`ThlGfPoGHiE{TWHlYZW@S+7yP4F` zeUJbs%_q+Ex4R;ScMGEj+hpQ*HS{ud5C>1z!>Q5zAU9N|4qL%qQ=Y1s`juZXi3_z-J`ZO2-+GW70ZmZSTcC@VUqIcx=vJBFZ`~S z*4&&{4V6q@S4@g70wB{(*FjTn2wD1Wwp}#P=DX7ImoWrOt_ySMwoHoNV#|f3A0vsH z)V$gJiOx#09e~w7z$}RY`3N*YFfY!4YCCuMIy7gm7v5^!(#EWj?>+0~%Kk5%{VA|e z2Cw*Xy{f=@EP$Ldt){@Q{~s1c)S}6{_}NAfQ4W%;2I~?pQst5;07(G+R1xMAKKZSh zC(+NVl-g)S4k9lV{y$x6dHy#?BMc_yQ9^58$P2NK>O0*BeuKD27?ZoN^nx@&65i*aNF1=9cp!R68Ku(<=5VHEM zB$Li_jHXk>aS@1sL?tg?K2(10+m`j@j%l`bPLA|<#$|INUlz4T<~i>a)W~l2`bN%l zN7gtNnv1FktPf2j$tHs-(8SD`gDDNpVRkJ^+Kd%*KR%0c5rCA$XUbW5I9fso=}H7L zD+~v*r>3U`rJEAWA5`r$;=}Q>T=r{A$gbGX<_rmM!8!iaI^wMnC{?4S2nl4gfRuJIGkqxK5)?Nx28-vbzZSxfG*=%WJtjiiRj&ehVay6Ok&Xw ze?5uGrvkNqp?MT>&uh3@yhIDc*u+cy!vKMp^%$-%*JoH^PcN_JD4s{Y=;1|urI<&c zz07)4UW-K>v4x80%ZTa8=NV;NP|pu7wabZE;I!H+s~qXv zREf7ipCq;yn?w+AWeYONkFI3$zNHYuv*FO!LS#rcic9CdU$GNZv9iTNO%O2Z~;D+G{EfM|9A9*c5Z%bjlb=)dFgt|g%r z3NM1$uoN5hSlfiZ@Ohe}^~`hM5g%GBgyrE30K{JyqoyB(D#KMIXq>Q=!yKo--kUr) zDS3Gwh7>rqT?##7uWti0x_t4Fe9yK)^u@<8^j~FNIDgDc)hSQLo~I;XF@=uum>$1p zQH}Z@urqpHe*zGOq(GX>vMc^I3kuak@f*y=a5&>e1;*Qi9!@-j<~7+%A&j*x?H4=%T!}pTqWF_y;SH;n#t=8G>}4ap zb5EjbQ-$i2Kny|P&_Gf5^7rtsFZv92Xbo6C$FtwY;yG=>ks$mf;??09fec%qdhEMm z*dx-^O7oNQbvLOILdKNgb3U+|g*={k261~}Rn6K<0;?*Ogka1e;y%hT`IBoLE1MM4 z_%PY(JMYEIFeZm0PnZPl;%`fAEd^cgqW=(Jz~+j8Y8FEg*!;GL>_xd+V*+@h5>VSV zsaI=>%Q)g z(B;$y?s}K2a~L-HC&ie0O-I7FQ4*Wv0((ARHY%^p@k-@y^va84w+5^oBqqfEi>N_2 zCE_bWIq?Kj!-6{>!Y>>cj;kIJJQkQ(j&mY~8>}lWU(j*`LOdTGYSASPt>0=TSU-babeA?n8^JT1OZpmt%bc z5lJ!-{!z!t)RzZ7;Mrw8V=C%>D~-088OpEpJM9sob)GxM`1qgU3KM+|{IvE%w~&N< zT{xrLO2JYB_nnBBpNsLbhRV# z(RqV(3M`{75ecS7qikogGOXdU#!X=tKM8dEW%(yRX9+ zE~c8RK^q1Q(yXJb{;bZ)I{-%67*}lt^A&h3Z4FcSxHe^QLPO!Yh!K!0+HJ{2M%hlr zwuo&w!tnrXB5(n>--wCq5tvaZ{Lcki;vWG!OqE|zM;%yCKnh2HTasTCuj+4eu(sy@ zJ9MQkuS5s=R&Vp7>Wq#}2SDxP&Zap++vXM3y|o4j(R0a)kSStQDdI2dlw+2E109AV$dc|csbbMFv&s9s98yQVG$E>*N7^8 z+GhFm!$0{*hh$srppho|{K2BFT|TMBLy~<v+Jit=<>(BlotXE# zV)J~8FYX5$x6CeOL7`V@8qW<3KD58L5X63{dC|Cn=eNDC-6UFKXv90~i61*gd*nra zNLt4LH8lal2Z(nQ4U+1w7Vq35cak0r*3Zs{XAhyG@(UK%oZ>*OUM9iniDi!GLBL`R z5JRHVN5=zfN;D@;(dj;YrsNq5Gv1KR&Fu1=sWztlADud90p)I}ftfV7?PfRRNgm1( z2s{7dZ?6Uj8Sw#%I72WYk0#6WzSE{yQFwjh%B;>n=z&}Bl|^Y7D$}}z*N$g3RzhOY zk`E|PoNy@n9v{oz*AYn;NHBjYL5iJMF&$MhGw!8eBz#PDU-*b>|NB!cpf-9er@hc> zY)x_%_;falO0&1Q&L>A<*PP0Nn7U6mC16$zJT&xufo2E>wIsaVd?Do|1198jh@6&J>Eo_1n00wbC@d&Uu%iPCH%TR>I z03=_YCL8g!JA*o$o{se@s;gL_awZP8z<{uIjK7iSIKMO`cCrauIfn~yK%kHf3re5n zLap7A^U@q>}+|VxSb_o{M$qyyYF#)q*W^6G9=+d+Qw)LtXlqp57ev{pF~hYQg7#@xxTEd zo>!yyG6%$a;NX#$oy%CfwWn>e^ca4afc)7JG!2d&sENVDwctW6d7rF(+(!rcj+BG1%GcLMU; zYY(upn;s}z)JUw!&b#k2bY_iY8JA<}v%;oieJ*A&S4O}%gpn*Y%Gc2q%pfq#3}fhU zj{~2uoNTq^M5lKC?X{fSh`C2;An=7u)UDVlCIL`>er>P6mD11KzJT92D8iw^JQIggwHij{~^6(E53)$=eY&3Y2n-sdxnf{m?$brPkVpN^hjzXT5 zgptP)%qQ~CjT+{iV7Lh$&HYUjP~+?PM>-4B~3&L0|XBT{@JS#cP*=tUGs~<-c{{_i) zM-?tHIB?{wR7Q41m)66N4hu@7I_(M58q=CxSNRwTz(AwBp>q8(=mw5nHH6A?@)fY)t};d|55tYTp_FRlrSu>>cquQLSO(aK-#VwU*|ABe8c?B>sNn9 z-Q{H6AuW(1F*mWLd&^QB-DYTos*Io(dJoS92~9gwRf=w;@j3@im^py_!->`4$R#+A z^R69CU5;K*65I2|v15au;%W7C0B6+a8b)YM?b07rJ?OirrHv#ey&Y&}f5ecDYq|g; zUeYG#o4liCk3jySS35+UR|Ke(cSbe`B=Gl@H2d({hrHS8dFhB%NF@mA@*n1)P5I&N zFv8(Q=%IO8>446h$!#+!e_`kDxm1vzx*XN> z0HLYQ#(pLf=;h4A=LhJdgM$oZ+$JZRF5);7dbD}JvQP{nDwg1&megS3++6M9U}U1< zVthg|!`L30Y6+U@08{T}Sk*dCU+Swk47z{_=@q*JHn2efe%fswX?F8lzX%)C(jeMs zW&@6tHvR}fB#N0fJ66{D?dAq{x^f}p)4hDpnOi2Iq^UI{X+Nwm+-!GbURj%^Vgm#O z%>%qFxt8C8mM7|Le~i)THGb;h_QVn~ZFq`b1;Weu4ceC=LT$`8W#&^MP%{ZsxqFk& z58LVM_(ECPa#jEO8LQoE)@i-7<1fVpX}w8v2A1DPzVV~Mh&QBFbavzo@X~J z<0WAKxz$FW-84n=L|W}`OQ=Biv0Q7#CdiB;C>&(8L%CwFzKLRI2~@5g41x3Gc)qm+ zGCyH+Y*mXnd66~dcRwb;5-T)nwQUN)y*mkOxi5n$4aq-`|FQ%B{MhodF>^&^9KGiq zfD^kzYoG%P8FcZBJ4scAOLiu^O<17MY2CQ+AtFB~Cpv8TjB_E`6uyLiV#vaA{PIsC{ick%BCZ3@HFOGrdfA;5|F z^J+KBCnLB4QxfOXFAItmo%o+Wy2g@TL}*M~GQo6=SZLleKuUaYp4~Q_y=p(P^{G0W zQtzrul4BLkDXC8iFZ2dwRv8c8=S~e3@Yg-$QuRl2+vl(MP_%N89F4r1S>dS3)kOwf zdhx~qk3KzykOm0ftaSxCP_Yjyhb`91#x-1GL`U_Z>{1RkFj4&>7hORCu} zC&=i%Zfpb-<}OxodaSJJT$}{2BGerwY{340#AH6Jy7svwO4}vU=r4g65ZoMD&5t z{yir%o)X(tp8_4{VS^ajG4|fI+8I7R3)6ZC6ZJ84PRJ*peuy_Eo%o%sVvHgTi4p@4 z>BZ9Aw$UL2f@jBE0M@f?-wQ@gW&wwqt7 z62Ewa>gY(pQtnPRTkH{V61v3hyC0v!C^}KH2v` z6w`7zf{a$e0v(=5B0bb)n%v~qsPA>>fsO{urtfVs>B@|^R!OEUma>wM?kA$&)%YQ| zpo`i)Y<7(FAT>VZOWA`3wwT!A$u`>Ss;wtxYA6U8jy5=%AjZTQpOjGd2iM!+*;exm z>Pz3sr;x}kCL!MSqjjp4b+)&5G7ASPL&0B1kJd4cMy4rr%00dbs+v0N*A95EsTtu1 z#FqVJB~}t*cLnI^Pf2mLHP&CwBOw0 zG1u{Ov+boix!t5F+uQ>8;b>|Rer4V}LcDbuP)m`D8djfschgjn4ion)HB6gPmi7Q> zR!oalKv3q%F{7Am0B&$F9?lWs_7WO+UoKWaJ)Zv`M`sp{M$cAbr$w1UDRbz6tp=;N z7ycQ>7i-vWF1!|ztZEUtcNnB(J5RbYeunMi=IgX*J0?B>?Bsdp=f7SsQGypxUDP&J zJ*jhupOd>5;S6v-XcJ8M0p-{ zVuCX)Lc_deGyc zxjy?XXGRJ2HLt?MEvhwi+=rt7PjO;&c{xAO4qHATXAf1|4DCVU8-Vw1I{iYnKME|h zouYRc&*3%QOh93#U_E(`u0oV+hbulg2e+mwI*B_HYA}u4f`-WMd3c1*J=wyNv}5dm zeI8$O;5`v^*;9|pF!vd_a-cFH1|P<>M?Am!*h8``hP=Uf05*Pg#WN^Gii?p>t!YpC zJ{i1o^Ya#1lMeJSq{nf_q|Z@Y1FAt_*CnhkNi}gg0pF)2H!=nF#ZI5nO0(~o8_Uvh zBL#tUt0|!KkFW2nMU|ZfT2C&>fE_f`om5%Zq@bcPr=Ok&bx#&5$5z^Pg2C^;TJIB+ ztuW!ewq>IVfDu8McUdMxYDOli_j6OG1oSK}=DtH3kdu0|ZS5)GWdN5n%26X+EZ0UH zFg#CuAkJcP3U|&4_^DXkt?&K}s@;k}d3|{XCDX1227IV?#?VHJa<&5Cq~W#&G3s~E z04v$0ya4$-MB&fejBS|(EMOXy*Wc80U5MBYSvfxg7YIN$bKEk6r@f9Xl_EEmXAIi4 z_AIkM{N6S`WgSw>@Bn|NaM6>(2E8@=)Gs<}rI6GM-8XqtTJChhyp)ZJ=d~4ez4>t5 z50FVW+jB;#1Us!s@G5RT+3bEGxZ&Ele6$DbV-5Aw+LA&x3E8v)TbDKb^KF`uE=3l$ zs?;8|yK4Mg&54HPC9sL}*(Jm3kTtiaNCkVgsQ~O@jT5W5-dO-+h?vSY z0lx}>o)j0AN@Q)~*&)AJm|9(T2Dj?lMri8*choY1pG=t}d;Es>>54S|flu3ojz|8#5U2T$d70jC=Qx z%Ok%cN-bB>j-Tw7nxhK{0ncnSJPvS<%2X%TRl+eRL|tZz#lu;90)Op+y>>+}BAhu8&q2iHw}5@iE>{ilfX@ zwlGf5luGvEyBz;F*V{}hGGY0kGdHx3_$xN10~i4k!QCyc_^PrCu@?2a zqaohd=_e+ibPJ+GnnN(J2xRC?um^suYgQ0^^50Cw3a@!$A_nf`l@E9K2$#@T3j#h8 zBccm$Sryc5xjzzYSP!#rWn53i91!=r^NJQ;RYaH0+uPRm7Bw-5x$^;_Agr|CZKCAn z&3$iB{I}sk|?0g$zjtFugb z1Wm;4aK6_Hb)>qpk^Bj4#mCsU)>~TiaV<6~rseaD!wBOxF`Q%y(JZe_#{tE&^(f=I zv+kgS1Iqp`Ithkwg>|CCgKcPS6=mpn_TKRA!8*?v^lTkk+E!{Wb4UmB~Q2RZA}B?$HlO?d~%Z)H_pj^rW{t@684Z`P~7d=k)esoe8(-d zdg$>>vJe27krufXvNkaX5nxmmVGTv7 zY-n&LY}GACG7i<#py;|!2x@s{-DMo3yXAZX`1WDqI|oA0zZQ5q_(i(E?z;|cHZD@h zd70Vr3|q^07%G2of-At^ky=ZYOW+E^Rhnxglb_d}b!SMSj%^>oFenMst4(?)FG$LC zZ*W+gwhPGP!Bmk6w*+4#pCw80wIxeBk-p4j_%+Asq=+Y1pL7l;%Ro)zHpjUzf1xDx zP#u_M{Jz`GT`xv#5_9FD82Vcz;ELQvJOE2OH7X`umxqC)I zWZ=mY=vwfGu#z~(WvvoIidstKNu=-V(3YTT( zsC`ql+35Q)@U_C1699dB0t#>&oLuUk+IOSrZWh4Lbt6!$*zLsiZlq5HVUh`sG`3)#~Sw-rhpGt z5=7!fS|*#y!`dy5&c2psyUM>8~Vi+(i-<&2fUmmAM{O3avfCb;L;L}VzCdRw%Wjy76sZKBqh9? z|8aQTPLgbC!A-awm9+1d`1{KPYSt?Hu`P8+Q~ymBUpW<`bd-Y5f$0v zkHC>9TshITlg$10U7ivIdk9kxx?@^nE@3zF>}%R)AXIfCPUQGH&I_NkbZ;uYO*W({mei;Rtha->EZl%X&vZay!V`F(sP{K_2^EJA`yNbx*Ptu2br6zLaVlH#QCWRKopyHy9oo%9%o_(>!|%eFU% zXqmg(1?o0pfv%L@qO8RQ&^#iw?GPe%GrfUp-(*2u+aU=b-!)2&kFfpr*wg~X$MgIi zpgMmA=Gp9`qRUU~cEzR>Sp^dl)LTLpXh~~9NXY7`4qzD}sWN3A()H8vAZ$NE*)u|%b*3`UvAgH%Xx22ZM;2)a@0ZFPP zRaZXv%YWJ+9o>8}fl9EG2G@T`?=mywA7|i07$O`*TiwNR7`h_qA1obAXUiGZFPx55 zRT9M>;LS?V2StLfKsQT*{%TBg-nr3Y<5CT)+ZL9&+8kOW;cojMCGxs{|N4;bPrJJ%Idbi?y*{N#GZ$R0i&Umw$$ zoSuWF0esgt))YbYhdcs7ON!ybArfw$)5E53`A7~y;`D5qkAi`*KoN-GGkD8*Dc{By zXCuw0@r~=jBKe8RjU11+hbYw0cSl|F2Pb+f7?Ma!{$@EXo4-vP>?^K8NMEc=PL?wl zGbh_k zf7rPVRks9wJ?(D?OwK70N7Liom9Kdb*M;|Yat2QKLimD5%a=t9 z!HfpIw`EL^DobrWb8QCs7%gPrzq6R2!!8}ZOqH}D42JISyD7FOZBBemuz`z?10Ijf zuzu%%juwDQb9^Muk#(0%Rs(*8^2sop-swOox|JlrEVt6O^_g-t2V@xX(XN*k< z#gGc=akSyAl%5O^_Soa`;a8M)#uyRT;|#;ZJt}2u*4SU$cv_pfO}dW1)#yp@1Ew)c}2)!b;%fNpKv_-Ya=3JbA*nb>R@?pdgao zD!c)dg_}A{U(q-4#q#RMi@&eOeqswjP~X1SdD}cB&=O_7Q9FSIFUr0qt9-XFnJ}t* zbs1p0(4@UUS$;B%L^Q$^WXHLM*jeoeoDG&HO@(qw?c8>o^|!iUKFB zrD`%lNgDk~KgL;CPupL)ziO%ASW{&uuv6_eWQ)@#J|AuTN!`x_psTGFhFGs4Xwpq} zL&?T;esOns-z?SV(oI1-K-7Vn$E1+gN_%{1^5MMgUvsyy5OVsyKjx6V(Fd}6tqm(K z5i&QMgT1SXyW%yDyiU_a_Ety+#X7oYc6KbKzI{@)5*$>Tx?;t|^T1BX9`W9fSxVz3kgax+`KLj+u;QKSqvM zZOo!LmWQ~@4>$sF0a0mj|GGuRoU~=m00l}0m;8>=5k zF;F&5d5X1V0goPmOUORA@-8${RXM7*%-j5)pFPgoPb$C9U$c={@X@MnSV013C9Y!t zh^pJ@M8WN!%uyh1ZRoWau_|m6)IpNSV?8Z9#@>QTJ^DO^WAUZ%U|9NOgTCV$m0+7K z06{>$zvYn{uv2&Wb*zjH&7$9Q)1WK2j_?256mVukq{5gl|KRqqd}msz$llHdb2g?pyPd!r_~o<@}O&@DMl zFRGoy0bwUEvBye>6F<_p2Unr`9!&3Zq^t6b-}Yq(RZurQ(gcO5>n{2FFLuYetW`7w`@`1qW-AG z!Eg0sYa;UW>10a0kNd~K^CR4Dp~4ERL!NF3ZLQ=c4j-1lTS@tjTPb|E(m8F>pb1@s zc=|rHP}$8o%f8{6I5F(h7~?29sYm{13hnNs7%@0Ahep4r*O^A)+o-|yyU@wGfOFcT z@=oi#f{GJ76FQPwGljU+&pR*3k3XBX`CP+#Jyzm9|MI^aEAw<90&;D$&rDX$%Q zf~%5eRofI0MR!NffsO$LKs)CCvsReq(%Xe3L{tbK>5)gpE9xBx=dot>~uZ!u=Xqt~gndgsUmAs|-PnsUYdbh4CA%<=sDL?RB zS;RL#b19@^OQyCwO|HcHp+!9H8s@NUEsdmYPLnin_QClREwpa~pf2j;e~JgSePbb+ z)xaMr75_v_bm?$1)^)&l@sa{_R*c}o7jj+?NA)MU>?6`szoCkrVjH{<$af^yB!=-> z?SmD8IHvVx!eB)}e8GG3#_4EV4CN4v)jW@Gk(1|bX&-o}R*tWja@Bceu~Rh$uYT7T|o9o(-9zN|M%z5 z?KBrkGgW1_^}F;1<@(H2Ltv7nQn|I@Zj+j6TES$yw<1L7Z4ON1gK6*r5n zZ&nmm+}I{@Cu0ovYvlqQGq*WkQBK;o$zULCmNn7fwQMytL)wl<>3m$u>zSu8#J1ooy@VqIb3feSSh6=ZBEAmFy4>{!fW%uQB zj_#FG03C=UtULjot?ysN!ub)yad$%Z4Q4B|YiIe&Y2~Bjxc@S}pE<<9cri}dIVHBF z|L~}ZbbN8Fio*`CS#Oywp$_DhH=Kv7Q*8CdI=7cjuoY$Ucyc`#d2}Qt!eASbtw+ za7Atf-*-h!Mf>a!{%6Gvnc5~HLV?Xyzf;$xmF-6HM?JdtdY>r(Xz4f*WLPiO(tVWX4IIHP*D5X%KXZ#x9%-joMN}U z%_>NUXtAS5{xiY2=nF_V850DrJ_#9s3^rT}n78KKw(P)?z*J}F=FtvYgqDxS|l zr@MZgEYCWT!@^Ahlpl||mmRq+tdhT{Mgj$z`_!d}WVQcvh+pDUFSQaX!2GCdL03v; zIMyW#4DwcEBCPT-V5aKwG=PoiFl*${Me<}s$;s1DZ-HVE-x|+>9#RTKIAUW zQh~cyqPsSn({7f+xW^fHNcc^a6XyUMdF6T!%da2O$gLcDHhhY`KTROrL@?}UUsl_X zck9aKU66+;`wTEs%2rJaF|kx!GQ_vrH}@WQ{-lEp$dVfz91jH&;%{c0@QAw-52Ea% z5SH`Bj<+tNkd|rr+Ck|JMdj{y>tzA^SXexQ6A>XNF>bn7A%31uD?Z~65s%b@_6t=T zew)h|KEcM=kCZrs;rG1Hk;kzYDMmxaUrN!2x({vj1|gpzuZT^DxC@J`5jQ)4_#T83 zzGKg0ep+^rydlJ#oP_#>5SOK70=}CnC146B&hn)1FI*!3`mhPT1+4(N0vx!p5&K*o zV?Z$(3P#?OO;9%%;|g&q*)upAXQ9&)*K6VyLD8z5ym7rRr&#tR>jL;ykO!iMIg@vA z;`l}+A(gWs7uG=~V8UQ=u;!wfK#|UABleI}b{W!CS2=dWE&GZAd}$+9yk={^HFr>h z%BHZ?VM9K+VZ~<8CzthykMhe`lR$XothayUtARv=Bu8#M+fd0gq;;nqsu`6>A6}hL z@zR`(GcNaa9)8YdM&)E><&{m&PjCO=iPc`U4RZ?_0EKROh|n=kMJh@5{X1^$xxPQk zFhm89-hyIzT)c^|w!JnR;gy|3>~qhN3LO5E3SLU*yMs{IrEfPM&tOz?_vO48XMfQa zqp{aiW;?2r1LY;D+P%$2lo);?fe6H}r-OuW2mYOKL{DtTq$@!jI&pnfavTnuv`8jQ z>jJ>m;piM zC>68F-XlL7s=$}Jp91zUv(p@VX#o8$(XXREzk+0JLc+8GU$Kyb zmOxU9cc%8dawQhW$qBRAZ^^=rX`g^qpn9P$Q9P6)i04GhDCX0*-U-J|Lo{UP8_^`Q zxUujrIMYt@d?x1wDgI@G+Ppe!?iD$E)wLO@(v<)K`BV1tNcpOfQfA|?@CP|l`X`;---FSE756i^JRa* zoaQx3qTs99iJCr}#N(R4F9QSgf``Q{08M@VzZ3UPLgw@lRbcj5rd0N8xT3C$9NCC7 zVp(TpGjU30U>1Hv*qC9N7~OFpW_Dc}7v{J~^r7a@C?m;O1|ujuic;t`oQaK83|E0S zD=*FQt+o>Z^RGdknQv+IoTU|Y_>QW0msKn?Y_iz6(dy$0DT6puzYF>+KH@%78b>#d zNLy)swLc#u8(0z$q`b;PFnhnspdzLI?Z+AGXnWfLq_`;HXb3v+ zsP}u>Y&QNv^k&lZ2_HIfU6Fss8nw(=FEu)DHGRb0`0-cPF%=;RklwDR{$`)lO46b0 zDjSACovkbX7WE~feK$`=B?~|NAIxU{qCtOktba`hbRaAW&C%0^TxPO#$ptFf%uk>Y z%n>CnTwhTQQ8gv%0akdPNKD0H$h;Q~Xj@3gn}*Dsfe|c6af@A>4uzEOrwwu`(CD9x zX<-5NVbO=_Z1xKzoicA<1MMs9M4ddq=f#!JcB1se3+@!~hr7jawplJ^9Dh(r<`lyP%TK~UQ9lvDml9V&nsWr@v; z!5L7JNZ7*X`mf^b^4}dX4|$(=3J4C4enfd7w)v&nM{bSK?=i!j@?ekTBN=W9oD6T% zjZ^-{yvnJDyZK-)MF!6n?K1Z@t@lOrE2072%aiB~_LPoZHtWwV^M#nfdLInEt<9oB+-Uo>?;od$A~(vhc=T=j zhyHLMe(d_GkO4yijX^=pMskM0H|5x18W-&kJfZ$p4+g&&t9x}WH%RB6hXw*D9e|s$ zgh0Y-+2ec-q`WSq{;@wvUA>#vK>gZZnjAMfI4}zgd1!%eXZc;OZAeL2O#ZYR5bLk{ zRiEkC<2x=)6Z)>n(ujBBc^{{u3I?Xoex~<=KnUX-YP%9VgmdKSR&?%iuI?5-biwA$ z&IHOxdRSFi(nOv5nCy0i@H4picg3OXR)ELEjapc|Jo zoQD+y?$1SK=LhR4Sh*XhGp?qiw-EQqN&nhH{~MM2zlE+&i6rxI&f?==ff65!Ld#@j zW4*8`pilrVa$BZz(-yc~^j_I`U;qvw@=B7@Ag0%6_lIe=B~rE42BBjGd6_v%Tntf# zJdp~Z&X;1_(wy2ie&_>p_Fr?P{B`tpuWq1BGTRzCc3y;MGil*(qRyczBFB{8er1MQ zu`?fPYeHjlTaxo)h2de_B?e*!@(prL{litof` z|LY?l$7P}Uomi*?#Y@Z@h3}aVo1iQpW*WvulFbY`frxjhtA!_?x@GzaGllaYBEEHU0G=Aal*r!CyxFc)s@A}t1z4Pw8o}Wh^*BuP(EjKt%I@6?BAE1BbrB)c7 zi7#BlXjEw!CG0+K`bz6Hv=+SwB+3_aJcWph&l@I^}kX9j{WO-#E1^)~6^cZduE`lEJa zlf7~)W*2?sxpgPLwi0j)~qcK$_;B;a1-O{?M$Fkdj{_`&=dI(<=k#m86o0 zZrw%c!-7XBb%hhgW(CA`z4xeHVq{^k4<5gFv+6)1ga=MxkOh9qpo|7M+rS`SUyFU*Q#xc<{Nhl9@DyMYWjzfWhqU#6 zbEQKuuFeF0Yq=7xw=T6>4i4^S+p2Aq8ZHE<>PLQMSv8O(06<7lP*$R#uZ6~8@eGZ^XxwJUv0`|i253dC)nlY+ zXnk$uaB$Yc`Cw9qY{@J`(%I~c2qiR3Q*2D*wB{HXKRXqV0;urqIyytyP@T)6;AFQW z)4QTna$$gdP z?1q(hQUIduf@|ysFNnkfx$t(Vk-FD?5)%xqGuW2v2F`_9{D43?*G;M#W?_#^V&S6~ zXAuhFZ_tVsQ&Ws6Y&XzSi<@`2k+}+68`NaxiPJ|7^G~#CpBZ2m1J%lB{sp2&vq=3u zxRDI%u4732V@m*5+d`1Py6=6FsqXR_+u{1dRNV3s9YAg4Rj-z`dnY^QYxogtAGxLZ z$^@9#mK+602E>J+15B@LwIjk*JHa2ERZNVp1iQ}Dt7cNw1!Cf5_?xcN(p233?K;ZS zJH&P;k{ti0F!H7r7Db57{)~;3l<2~HPD^;o?IhUX7U~}AXP8e|gll3Yh8Ps@+x6%~V;N)0!X ziq=b5+Ffw|>1n1VHp3l6?cVZZFwQA?r7_G%V@v)CD8L!a1XLXal9V4Tw)`i;*L+D0 z%~S6F?5G%s68)(jja_o&Dkv<^wK}b<#%KBIeLNUSvHTHA#&>;p)&9^Fe?)YZ5^RKd zzRFiJ4!=6`OpdexZjJq*jih|&UKanSW0Y&jT+{U5kOj$aK*K>B|3MtbIwdKS-JRuS z&$#hd>?={=Ja26gqZWhWqCEXZJ6>uPU=#yvTF`IQRpYO-`rGhEm~4_4MmO>v5=W%f z!m*>x@zI!+c&tj+%mdGrp)0;XlwzUL=sq{qItq!IbD0>wPcQ1+Wm+2UM61ZzMEihf zK*;!%E`6)|QLQU;a8fJj@!biN*3gA^Jawk|C7`;$9SidWHX@AjFB<^BT8%AsQu@S> zWcZcu48};pPkpufF zD?SPFk2DgWlyf5XWsox8r23Bq(0O!QFy;*l82{{92zj0gC7eWM$QVS9*5D-llfh_?ny{$8YPKnR;3q=O@vasWmYtHkH^SGD-1pOGExcs&=WQecU zYf4zwNTo*?4q>3kMyj9J9?jDw;)|pxT)UcAY}Sc5+D-qZ$KUIZ086}n1If$9r;`P? z0~s@_+)aQ$2t^-Aw}kMpI8J#k5y@Gw{S>yZ;RVhswgP;a6$WwqW`A;6 zf}}3}CteV6v=$@*j_w+9*IQ^LJ!z{O0y{jYW}VgnRi_dWZUhC31`GZfA{(nFslijF zs#wa_R+X=T97psXB7k$53Wrqn_4;BOh>BqwPraaz_~@9d%N!OCvaP4aJGD|XM2d9P z5B~#>y!TZX!uVS)|OnL=bpm?dZIC z#Nw_f6+4;bw@WU=cGpb9th_;gM~BEtk_eC?6Hh`YO58I zRdG%j>nf}C;@^}3!OpvyXDA5DI)t1V5Z1wrmlNT1beikvMDY$rq`#z!f?!hKOi=%u zB#<}K)4cn~YuaFDF7QoBVMf6`KDwyQ3vm^iZnpq#2|gpvXj{kzQAu2SBv)7bRb0#P z=9yPmx4D8QMSgUihW?#Ugap1Ljpb%TkZmmYuuY*PbN{Im85S|VpIvK;LMo=8FP=@K z_zx#JfOzbBK(6OJ4$W9(f<0Z6P1Htj{M)x(_jG7jh-kXEI#7!lnxAx%?Asj0?}2vw z597dl;nfBdl^CFy$OkRWIrf_O@;rdUooLNg3S==aDc{@s_W2>K+*#@ABc$S-Z!~NV zmm$&-Ap7hso)I_Z(kJte5s9S78BSAfyMun6;cG$~y_z_M#!{JQjIj4FLw{)E#rnN$ zQID)1x?Mm*f=-1A3sNz!V|mFQBdQP0&a&`xazArMM`aTLkB5!2X*^=`#s<}g4bl$8 zhQ_H0(mM~L590l|r70m>PsI&YR2!<@{zpKFHlL!I*r1O&QD+$O&At|-6k=;eKE@g~ zh8jq_IpL8$)>T26nJNd|+#=@K(l~C;pEQ7sj<$GdzY3W*jCAN4s)n0%4rt);(Gq;z z%drEaS`h*h$*;P2ntKT1vk$^#c2popesA*V8>a~BDYp?y=Mu_N&*d9ja1g+QNn@S)p z5hsLI+Y`twl>k!XCsG!$IlIjQ|IWXOi%d?1KAWk56D$3mnHW+SXyIbqhP&ZG>;J0I z0zmI%qT-)tZhgRbrp~>H{pUOJ&$z97VU7Ndn)D)Ctre(<6SJ7Z{s0t$kJ`dd|7E47 zh4a*ng@FMdXuNgqkwpiG+)xhkWI*}bx);>bNql(LCA6=DnM% z{TdX9AaJy!Apd~6jn}BtDSHeGmQfMx_&2s;u0@61s%z6-L0Xv5X?D>e?NC37m#<>b z#QA}HGa9;+O`>DLx1Ro$x$Wc@R6GBEMCYjV3jhOV*AL*?R-(ofp5R~~`W#6pqQ0qu zhdyyY)gfNh+~~|dU66aoHBQ5Jp*4?C`JoEf!AC7HlKkiQ6mo6{E4p%%MHxGjPP~s6 zL}{r`&QeAK57IBxz z6Due+u_}OleISay={YQRY22X*Dy_Tr6MDKWe@Y$`r=#^`cu3A2bqP@u2t^yO#cpE= zPxp0AJV+iTF7>iWnNx__n|FCh(1Z?~kSFHY3CZ#AOzu-xP|6SoMsY>T1Hh|*RPHVJ z4D*hh!49L&auAI_01$zewQjzT== zcp3|DRhAzR7Jq9peLB5J`wQ#tSIAIj>*%6ceY+*4--poUvh()eFSsNnm z?OQWcgzda6Iz#*Okaf$A%#zk#iKjXv6dBi7m|txcNUNf;k)TIgXF3D-`;Rw5WyEPV z%Sggr68EsHmPW&0c}E~!ZMOehkLbz9rU~w)zQ^)txo`bXgf-_ZFUShyCwI6pc{tT$ zE6*+V;rV+_^xc70Ia$N5RQK&J@V8#Apfh4i#%c&_G{=)r#zV4K>B;Q){2+j&9Qx0! z;p@9cK$4g8;U&JtpFn*Hv9z~7k{LbI0!8&$9}FNRp3Co1+6LqLFY*zvz`=HHersod z_Lzgc?ZU`^jlzFXI9#wgT>1Q`RV~nMjv^#}1ZoW_ALj5od(fttYWybiyfT9CF8Vk> z9x27T6%Kfin4mippAIe{l+{jNh!RIvy^WJ^IU~XZB!+_CtQ55kdaVSoKZ2j}E604}?)dNzPe%2YQzq zgYzdwi46M)?(kEEF9!uSAsZKm1kucQ%2^QM2f`qI!B#S1zH7d8&%qe}rRIh420qSL zEA{j&jpu{O$vh`{aoAWt6<2f8$J7fzPiZhGz*8kACV!kTBNPKIaS?87@|xpr`M=I3 zxluxta|m(uZK{x+SR|W4mEw+SdBwb;SDoO_DljFYA`vP2W&_N^q}&r<*!s7^oRB9K z&Wejk^3gf390y=P*e`;>gk%8qe}EES6-&w#ufl=1iAxDT5v4OY0h9P^nQhOxzz|}* zCeQJRYOK@Z7&R>#qC6}Az>blgr(l9^tnvv+QA&{ZZ!l6>mYXtq_)*YHjqB#?Iaz(t2V7t9W-%A| z;B)34`l$pc(LxX$^z}^9tXgGC9FJ5-@4WSL+{flV3;)gst0)>!yBUM1&wM}d*y6&; z&SH(p;8NF^FtdS%3X}&Lq%wI}BX)pT4t#I;US`}EMt4)&&M<`DQMQ3|b4qa94RJ<~ z08>V!gAp7+I6k+#ad^{|NSx%KhoXkD>iO<7t zH?nrf6&!**oIZe3oAGZw%Zw)SKmj&ap_Ue(XjUJRj@@Q;jaoC3*$kPAT}w~gAUYK} zW2**T+?+uN3;6-UmrVi8>2mZnrY@xf>`$mTrAkn&YJC1;SL28RO`6clH1Iivs`tDZ zCX^0-Z_qf?4c!BS7Y_6$gR#O`YnkSA{_GXIn2BUkN8GD3b#2TYNe7lDOJj2wcc8*v zGG(}$ei^E7c1V<3!b)2Z9J;kJ1!IY83wfonEfF7SGMq;~WLFB=B;R<2xyvVu1XJxh zKBaUmhs!%qAX_WKR-UwQ1OwIfU4o~s6T*vDm2m&C)Ba0J_# zi%_qBi9uu;Wy@q+-PzY8T><7_=>|)4?CH&43qSRx0}xZ=>msd&0Rv`)gzsLa>AvO0 zr-)IW>85>%@O?5Dsc`!F<9J_|NgcBgPkkco0_6)5wuVDnQ;PW;%!(TF-@G&y>zbfa zTcRKKqYY{JV35aSxMn4wSScxMT%HQK`EH~9B24H~)mY1`o=@5%Yuq+LT?ZWz0SPK( zvsnPB`ZLu@U-W0@9d=Pt7j}mxv)-R_+5)k#b?xS#Zg}>`PO$hFCwP_8D4!I})HghF zYR35eeNW&7NTwQ-T&vo~=P6G)pdCRzc^R1Pc?}$Nz>?Y3Bnzi2KYEy)%0Ivzrom84 z=C~Xnc;xh97$rQSMS@-K#802`5cE~>^G5|z@k!5Y0JA2pX|2@QGYjl)=`8%DNDNU5;3FYHx-^abC@^_it3o;viqNZW>h6g2RY z^v**7^N4KMz( zeA>Ptn*68Z9C4*trPU1v8&$H_e;VJf#Sqf_O^P--63$Uar|dqOZ3f+}ll|N>n3VUI zeac0~3`Cmx+7}4!&)-4WS9~LHZKGHq)q9#s`^_zZ*>1(YQ_+x^ zhuPW1dQtJW7i`FJs}=3+f#+KfEWIBl^a3FgRRba3Lgu7qhD zpxBm-sV^jaDbwJFRhD&F|Etm6zJ#DIz|J$Qc`vR4j#FpQ=eQ=-lzsjG1<*#kURBnR zMdpQHg=WBc`v~m-bZrVhyMs3SXU)U(M$ZJ8(J>kPVpj9E(Q@a21VREbRwWOCr2{+% zWW&k!Y`njwMtc+fefYXrx}ZN}rJ9n|U)$vaw-{AX*ERU=31_h5pr~qDE}6SYhWs%& zdA7l%TUP+fk?6?|C%rxCL>baK(HhV$znFp6$pwCCIh1HC-p@Hi@NJH39!j9MWo@oC z&LxyS&a*ENpZ^LT1W4y<5PYb!kzM*G!~~d@{dQaVD9!OC=2q(RG|r6TZ+!DG(nndP z-a;oY`SLd7)ltWp7(6b8h6KIQr8}nbUU@6ZwxS_NUwBVQpL~0=z3sGxuv@_ZnI z_4@!glcQgR430s94%=+Dwzux%I^|eWhdwKh8XgP7@+dP8B||t1q4-mL#AlgApKjrG zhjxtqU6dhjGoceGu!~7HR@FMKkl;tg$Cl4p32DGrA1m<=$-!K>A9xt`QmrMSC1?FC zSgrp<4adKG{==`y$gnTo!==z|%PthI-s1 zZ|!Q?WtAE5EEwvf-RbvCPHQpH(jOqLa@1_zVNel8*1lFq$iFQ^5{fsd(wNFk-JTza zzgYPS=fsZX#H}^W)Fc^GTG`WyIP4Y9v?O$8tV9zY^vZYBr85d)^q%)bNi=av$C*QV23?k`dy^rYhQJ;2|kd)tfa?{B8>b4h*3DH5Q z8Z7?;=7G**izZ12}fV2nC^ z%ZW@jHNcfs#pbbYDyJ%^(LIW}-rhl}ACPAB@2dxv9$KJAt(fC8W;D z>ZArS)&b@4T{-!s@Z-$dS?{VBx>v*p=?7Ze1H%h|sbg)QrS~3AHYYerDOM91-MP9O zbfi={#9@*C=#U*WWvL%=YJx5At*Q^b2?N9bA%5}_A>wIUIo%W@&2O-9hRFl9mSY!(5pAK6q8A9EIEgXYe2QK=_dHwDdXl- zt}Kf~$j1goV=2_X`sAL9CWBQw7p`hZuyZCNzkn}__{exM3wCeCNd^>s*I971>UtVG znMPOxmHIxosg!O+)~HWH#LjUV9n!c6Jxxr3jjVK&d(zlGydc1%cWu?ujg89hmo=xY zlhaI>H_);x2S85Odwy=nr|sZUTN76Qd-3r)1u(nN$bHKTg!#C=#T*T3L33Zt`y zpgghas!9K$0x}>(-VaIz3vJnwf_ewJbcnBbsh`yG|63TnaIxxn0z?RHzUc?;xJCZ| zs8tS<%b_GlaYL~iuZm(^&9~b(cFnI*(R}XLVmA-_gMQ09nlC8ASX#=$>UMPZc`GKG zS5d=&e*EyX?Q(MF8UE?JA2GW^;lXU`mCk&9Tz}8~tAL|rWYnQ1S}wgaq>R_X(H*-; z5fvp6WS&8;N`#Y0W;vNV&>5K;*0ER};?(mFN;ZsP7u~?FvM~?Y%0?n|hYK;*OhgXl9K# z8$DKZZ+zB7A-~i716P+(zAv`N$c??7KMrn3{O0_T&N?|2CvyxGFI%G>@syeriVXv2 zQ(nHJ_VeCp0)h>Uwsp7cjv0v6GO${NGE;Br%rwYBB|*R|d8cYKv0p+a*H&WPJs#4r zg$uf|*{HvD)q1yhx8j5_(hv~4M459=)chkBsfbf%JplX>KWRGsT;A%)ive9LAFlVg zrkgcjQDbCj`rH8~9)w_DkZtkllu1lY}e+ z->mz6;t1cf|7&ei$qAm`ZO&;?$!1pw%;yaS%iM_Y4SwhRl9Cm8h{`0v5c4n)$P3dc zWKay^2_14bE(F%&^UC?>Ljhh1TYji_qLmt@gHg$gmR0kwQ$<}jI|i)l;m&-Wx3rZh z0;b_9+4oNtDD?M?A_zu4T>vT3d)VujFLTIx#kGU8hAlLb!PNn4a6d3#=!whCh!c|G z87ki3EJGQO=*+HD+cGdaxkFiwr^DfYRy5054ecPfTwdm2#ufCjD_90)SfthnDzRLE%LEcL{`8!Q)omGFFAzc+>0m0gC|Yd{|K!p zR#2}%hvyQnXsU*YvqI-85e7R zkx9S^9hqEl^i%%j0^adh28CcOsk{)N7KOUN>5e{6>beivFXf?dMR9}iiUg3#eD~;S z=ov8BEw``8;)b)C{au-NxQDB)^%nd-9vT@ts^nh~lQB$CuF4H*A)R86Y1HabEx(*h za`Eo-Dyr0=fnXjOrUh$HsmFo|Sl2pbNCT<9=#5zjrc7aQ0$@`OJ@DYlr(}NymWOsg zfqgBecLpact7~`}uHPP$m;xf>w?_qWK79Of$N0 zTCz;)`SdERTx64~J_+jTl}2r7Vj>rJK9A^@QJAp^ap)M8bW~EZDZ~dsIjveTI>B0$ z`Q_WWs!hlh&K2uGIZ{ov>mAYkqQ^dO`-@Q}3hl6f(Tuz+*VH4M$dSi;)4?|;-w=S@&ZX~)i2 z7%!5Sq^+~J12zwnIOOv3oqUqDOL|IPHA%y6V@LhdTFMz4#0_%*RFnEzRl&OIzqeS* zY=a;pwm!wsc5ANsRa)z)K;mHUWRxuO=y=A9#%@8N5FFfAQRFuuTtt?4tg0#&$0Z5l z(k~wJEMF(Jds^lZ3_!~wcjYVpXi|Sl$x@S_jm(7rLPRA?%7(e!N=Hg22EgiUJj{%= z;sYAM>+=4T>Z|84#EPnvz3{d>mxZ+@GV5Os*3oLU0i3hCY_!qVH_WM3%ZVM%`yPxa z*G5Y%7DH%J%MiKk6{e%C@LFi52vv)j+jAI!2j)Vw7Q*1Cp$Xl(sfjXypPMt93R|Sj z)IWLgtAvU-#}W#Isj+2&(lQ+38WhSK_s*Kszjjmu{NIo{nku(4Y*Vq)53aRAH8tq$ z&QQlzg7qnMFN{wRhdmO0 z-ar>lXLY&Ki6iv#Fh#zKoNd<&GsM7gQ}&5|xkHs!w@8w9v2smc*wV?I(%rVD5Dfj{ ziI%66rmo-{PyptTea6Ko2uFRmWjEG??L3C1U1fm(1Gj4vlc47Q)Y`7ui~HLNiyx+Bw~8cVm2OB54s-_ z%n{L@+QHX6$+W@AD61v5R-*H1H?B7H?-v@=%WKrwpmWF#$oi8OB&&JVJY+uzRx#B3 zGdp$e5;`bs)~#UP8-vY50^JC;4SX<36EwjRJKAg5VQs3Gf|lG0V^4})9p;J(qbS?~ zooIop9Yd#8#d=r1dK3-*VYfTU$k?Q6;#;dL+P?!!`@rV3d5MtJ`=n}sh6n)~+7f{W z+^%*XD3jLv;FKk1pWsgHNwAlw9e5Re{Ff@#Ahb#!Ygf_u+vCxfJ2qJg{I-#x8iVri z0I=Sw6FwMTP>MfWrL94L;v+3=2-Y@_iIrf%2t0X98>n0!=*x&WdVXxb~1Z z5u+pU)f-9DsaTLts-tz$7Ct$GZS5)^XR-hu9j=Q3Kqyaq)Q^KOdxNZw&<&CPT`}hU zpvKi^T=%UO{ISN^7^0}s4hLH+V>e*#XN{YvA>~5tegfL&GtWYq*##7rIiAO!bxg`l z7sryCW>tJ1o!4HIg}_xHsA!%)U-Me3R>%hht8a4B8(pkSHE)4rxE5aMM%@a8(e_9s z??W$y!w2e=$rVHa>q@&E)Wy9a+F;9+!rrimFTov;PLo=9p#ZJLadUz`n zsAGzD%Y4Tcw9y8UB0(?E-u4}*9A^BX!9HC!w))XA6rnQ2_lHAer2s`XFfKc>)%XnU z$tYTl(Yry_+tTSxb%)4!YiJc^RNMYCeL2H74S<$0e|8JkHy=$fB30$JZ=P_n0SFge z{XPwgmyHp;mYr)LgB<*O?7!Efu>uvewx*arbEq(VkZlKQk6NWiX*EQaVZrXrnl-E) z7)*}5R&qmvdI~I0PisE|!I_Jd(U{LZ$OLAp?z1eVtV9bum zy|F@FZ%fI*6$vb{PC<-eD24;X@g-dKz%wH-Fz^{1y(SdorTAvd&)3w{)x}eiL^&|u z&;P&w1OKBdi{N26p!Fld`hCrfn&neru8KC!4UY$2Wtu5N_k^>@^I4c#6(6A|oU|*`EQG`tDrMnmmPVV729F_Cm<_6u$to)T;qbmj6GO%vBLIKNrdcoh!dwtKbk z1UlUc=oZV#)^HtrT*a%u>ccFim}Ur9KpHE%O7V~HIh>Ul3`hmEt$ZJgIM*^3)=+&r z*EYBL(W>wZR*u&$Wl#L$P%|FqSkW5aRYYH}zfW`qkvoa#@97_HH6GRbtFOzko(oq4 zt1JN-IppHcl1;|AJX6aFsm=<{tKC=Hok>n^Lqj_ zJ@!NMh{hJKIJ?|+w?!_fh48rtp$3?1-mb9tuh9CE0}q(fJWzJe^TwZo-7(O}4a|^n z7weJ4ea#ce9g<>xUj*Gd;@)lDW(rCAWEZ37aM(Sd5P=WLSrmiS zmd@s0LeXxCU+V#YhW*sqk@W+>#I%6#*|LI1`^8T_GIhD_xy(%OQ*4{;qP8M=r^>SU zN=t{AW{D1kb3amOHFEvncBTNt=|-Pspoc4YydY+{E61@awYcm1;+ek`6BrZ(P5gbRf&5+o*eGNR8=6=U@mlk76G%mR=GIjKlZf=q|Wy?fY9Wq z-S)pLT~Na`v8jp@Ijl^-!) z!3@PrOMdK;C?(%Ch}ix%35f#Wc)xvJezo!Z`*xpaL(=&Mi87f$D9to@Jay5+T7 z6a<4*ZQ-ku2?NGGzs1Gd3xzX2;%-+HB%kIO>E zFAg-@PGK8!T6pyw7z5EmQMNY8ED^Pubi!5B4O76ByrK_~qxJ74s4*+t!J`SOV71Cy zuXsGOS>L>GNr~4}0Kq$m*8=`pS{;>U`gs1D?50+Za)XQVIGy{-c&xV2At&QPaJ-f| z)J4HDd^cujU<8wqJ?7H*;VS5BMSMfg33D03@aWnBYWSXQB&f~*i*-4LUDTihexo~6 zGN=rI!#w0H@XS(i*O~~DW2P6pxcgW|OJU1jZ>mKlAA4B>mTBbWt3RuW{k#?~`=ajJ z@eh;|I@he3<`HvzO>7UCB*uYj4}=wjsvx9(`jP1uV>v)bA&e8 zT3bR39)(K$BjPB!NHaGBztAyE%oiLX?{WZr^G32Yu1Wr9iJPjiTxPvYjH3;N z1lyMYt3GomSnT>nIYmI$haOYLmJSWPgMc?ZiQK@xQ&r_Sqqf_hr@O%ePEuBcSONb;#*T_PW?9ggi*~PmzPMTv4;y-bm@1 zcKmM=)7ffN)2N#-Y`4FvX^P}$MMp;{s<0`(Z!b@;nA`A$G2;|WTcTL0@>NLCC&f@< z5UHG@X#2FIU~qiI`kHaYW&KP(mx$mf;-AQ4%PAx(688w|x_+tsIm;3pVkA@A=Y%|) z|51vZR#c5UOl`ZkT9sPj0OaffPcC!8dIEHm?_iP?QLJU#>`@IEsVS;MV4&=&bruV-g7cZ74iCwRQzoZ@-u^0*hMr&pg~N4AC5WwfXS!hK^Bb(f zYor96AW#+jeo^cwC8f5IZk{+u1<9wDk=|Wfd%=a`_cusAA|$3YW5gLPL9g}Bifbi< zm!$|OvSLd<^{U#VZltYy`WwZhd|m)TK)t^a)8rmTKt4eHMmA8Jh$Q#SCi))h;5kt9 zDyT4^I$0h+)E-4+_7{5fc$Vywy9l%gswR3_-pT`I3d ztMBN$LgsyiW?`t1V*h~DIzK;SP+u!dT|$?~ht(#z;#VbjhAkB3z$(zDdF-YOZ*CD@6`k;UvSv^lz9{Xg7vmi+=r zZ4<;oNZR;tIye1`2S0_x2r@Z_VDEAGhc)d+PVf(_koi!AI;g8c)j4H+%i5TcOJfCU zNP>9p3}}n^>K1oR9jm2!oN0MdU|xTqKs;}dH-6(LY5Ukp=t?`s>*5DrYa^vO37)G^ zPO0J$o-GjA?yJ)yWKR2#f$A)_tQQH=Img`S+iz|VIIcKBAY<1uWgHL%eY>59uLGp9 z(v0x>b{))ybJv@%%`Y=1E#sv1`7oGrE;xyS{GOtUSxe7^AWT8$l#aCQIjAWu^G=rtFMw4SH^rgon#A!>C$M7w zdqEs+arae~kC8|R`)-XM>w3t!JAD`))ga;3o9?kQAl0Rz@cJ@jVz~6vXL%0XbX7~r zH|YP^5iB?2>h}jg+=u${^1$~|`;Ala@%4YK*;}pY`gXAwK$jT>T9ZyW?{#0ZQ}zvQHUO*cOxpt$Y!GtQwz<2}{3y zf9mIf(SKa3tBC8-I?A66Y7@1pl=H&o<>sa2Nt4u<)`UAtZ}*E=6@p*u{u0K{p@G9| zhd#G%GhND(7zef7ujowKs6A_M@give6)nYfvM5+SJ!C-y(nd{TM9#tm}pfo$EI2UlvSicn=S?AaW*jHN4D&8P~ zGtdx$p6G0KB~ISeUXu&(&_*we?*}SbS*EmKj-qOqq<R56-LQ`j(_?5Yy-L#*{8$4YQaMn?34C~_`vJZvUXo10FS zC4;+kIZh{1462>~&eNsaG?n?tFx7Y%b-a62Zqk~udFm%MN*Kh=@pKfDtBv;QQNWD6 zig3!=;!B@S8FffgtJcA39RrZ$uy_ucg%^$=#P%ieCD`UKzYpppnL-{Ghx@)nz*AGv zQ3e~|yQ7@TZtRx^X4)CXxZVAwv{C!N46O!u!^30o+=UAH0Svl_`}CCg(A*{Xbb{FTYc8cq6A9jo_B=G6 zpf|6`&@A_^E=($4AQp?FMcI1Zt*fUJk^aJ$zbo#=wtX{5wY85*xIWnjFejg+GMDe; zqQ<~66z19ip%4Zds)%9Ca=GJ8xnw6GK=`V*p66F_ZtCNuAG=Gwy-uPte?^nCVS3GaPxjcH^qj#p{B?1Cen6T4r~=+BV?jV4s6Ut&S;&wb;iO`MNg9pdplzYqx`;QqAYyYRyk)9~e8|v=K-vsq#+0BTjEUsDv&~qweLGv7Awzpy~)vUW9m}Hh-(Y zffZ7l`axAM>^k#@q-O2TMlpuEpy)Y22O$WK&WQN&})5 zy+r;8qhhh{cYzkI2N~z&8by;a>nB8&MA;9DRXJ8A_~295eX_uFpJdrH>GS=O)% z(R(0uhG$2HgO}wyPJCn-iN!>5TvRO9c=|CAPWCHlar%>G1RqBXF>$w?TGJv)s1BAJ zkr1r)sgn&cM^@YJ1#Dqhc&2Czl|#sxUkts`Ux!t`k1MpF5qEQKocynV52i!UbhYF0S-P;B#`II(S8Fo;47+1bXo4 zBoXpcAZ^~1P}8v5btQJ$R}Co=7is)fB7z*=89jQFM!ikw3vcA@{&BO!O?+lkAj->8 z=;IB2x%;H)W+3XdZ~_Yzu0sEZ-s<|gv5tYBf0~Z=wGOXJH_NhGQq`Iqgr(3d-~*_e z?LL^wpC`(jL@AOCML!ShkV#m&%f92NL82FUv@U!|;?RAA0D~aZw{7oPe=U_Lhj?@R z6caO0Jsa(<5a&Y8^end~KyO{VS&>D|VlI1>KR`ox*++1!))?#elm@E$)oJkHGHF~> z5qF3by>1qkT*wk4RMSv5j#Xw5k^THleWw(?)Mdaec&hFzyS*%bj6vO4~e@{_EFw*V8X= z=I04(8qZ|h88y$1_}lAy@C^mw)T~sNuor{Ja8A&y*UNX+xt2%gX4;A`<>R4<1Z^7} z_iqvXz&?T}PrkNHM|I7>!a-|Z?+~2gWoia%ELjK!Ezx2|LQVb@r?E*1DD?vPnGwu; zX;M1>q~`dfi^k4L7&Q+#r6u*oK38dfATx_Dy=T5l%zhvw{*N@xdZ68$KcTpOl?uhc z$(~#J#|zDPg=)-4A=o^UVV=e3q6Z~E=rU%o9$EU7e3gh5rmFi9Nj3+^D{2{gki<|F zcL~JIl$LXc#7wMs$WU$}ww>`YFmDVYiEbX$(9XZy5w}s7zYjkCo8z@MMs`Jd{TTB| zUAKnrH{^E#s9+eoBjf78l)UrE!|l(ojO=6)HP~&FawI8;-ON^(1z3d}+o(zyT-ErD z+D^;3BPo4ywclPncjjC^d2VG9WS|?6%#M{%+SVqkcVL};5^D^bW&j^9KGxvmK!KvR zL6$tQ)f%wZuA7LTDMVJFq#kW4HW#`Pc-Jg&bZ<-7Ekj6kl3c5lq33Zj$DGQIGS=Q+ z0}ozx+bB7zl2S@48K8xONVQyv#^0zfeQwFVi(LvTk@~akhX4u`QE*#chGZ*elTy`4 zEXc`7gl@Ap#G=bV&hGRc&LPrgi4>*61#9||L-8Lk?T^V{{}rFKS4DJQt{AdrvOUIN zH{-QQva!c7*wr!h|HZjw#w5V^eZ>YuFl&j9mBVLda9M*?3VHGmS-+}!=UkwIW_>h)2);()j#8mn&3uw!WL(FOex0J&vi6V8Cf@foBM_;m#Ue1 zXs%8<((Bvry#!4ZmMfk|TaTSJ3_nN)OJ@*G|`=<|MdDJQC#8LsB17L#)hW{)PjSVSoJaWn9+~E$_8X2ywp21`e&SFg&_)1(s zfy}VK2lB|3gaA7)xjIWzx&0RoCFdL+3~adRXSzRmEC>JNdJ!H8v!CkbLsB`Or7;xM zI{A?pJjt-n>5LAG&>jK#%fEeSJ+&&&6HTq;fnD2zswF|o!(;UUFVQ+P(fEXrc^(SQ zJ7raD$uL|QwM6|e@tk9K#}hHd|4g4@FqHU*A_&>wjIezJyLjm6|2h)YX)cq-p1NbQ z+v&A3@nYC&wr7NKw7x5iF>sg;3iawK#6~Psv*NlgkSpEywyA_-dP z4*Svq+z0{LJcWI_z?hjG>kVzqpok2)rg>sXo|x5%-6WNp(e(Tf(4X;`h?n}$&9Mi30L)2gpY?FcI1Kf$Y z{1)l_&l8$(eyoFLe(gc!mROk3Rkj3TD!Eoe5(h&7^{B{0uA-3`b7)*8IqQo+oIS1J zd*C`;PYX|ww+(^2a7{G=+*v8vvAOn^!K9;_CrZtyn{i zsFJQMs^A6U2}C=3RwT>tSRxwc>^%1Lt2;)|rH$tJ|AE;kbh9H}Nl179q0Oz5^E8hj z`Ir=i$XhpCACn7Cd}4!xU_u;=rmzB3Y~YtPa;`S zem_|9!K{6YLa%F8#Q! zwg-ACyiAU9K7lc5{ei3B!1~w!NIW5k{-Fpw;Ds1mankTte3yzrC04M-rY__ncbdFHD9Y}W(8wdh?pST%XC~lm=K;X`fjuUT%fu+`|RKr+hpXAfB&%io%t;F-Vb{jhs z;!8&YtCfc&BzN~wP|r&CO6+fuD3SYnL(5D55yB6g<-9b3ZtjME zpVdr@20d3aD3&~RqOb7F?HWAeKSde~JV?lt5_s;>DqJ&BZ=MT2IBCwdcPc^wpZcqV zTFZX|4m+5t7$en<#=@f(r{1%URG)3cbwBA15|$GsWO0s2?%PaZGxzj&(5fZ?l;6uh zsFaw%sqMMrJ2?x#2vP0~m^rWrd=o1XIS8P;F)pJ{VY=cy$DY66S4LK8?$8+t(`z6z;j%~93S4bwN7^3u_vem|iZM4JGS1db z`01`PQt`I~T9L&Gm&LR|Fq-!OATFt;n1gp;l|i1ihHwsI=BP^|M1v03tYcYG6vO=f zZkAQ~;PvboWLk*|Iq)lg2LV+4&7vEMq3CK;+%(b2I7{u*jXHW=+*{UhX zvfY0rUnkp1z~<|&r@kerirEg>l-b~ zf#TRDOERoy?wIUUq1+#1CnCD&21KF7LZT)BB}oOJ)6Oy1cin^CR?@)G6m$-1sxJia zkUJ>(;G)#O8Hew)n*qWV)#3?ZPd}#Dh`$G!3bo$ES^+J*Uyc_cisvCDnU?cCj%Os@(u_gReN#e^8hHg?Vdb{4sWl!YE`X1M?edAC4k5r&TeJ7+ArK1 z>;Q?+2f7%oWq7+%xc98<=3ZU+DvlHr{ zVrzLVJH|rH;HL?E-!_iCy+BX8C`R&@;tePQTYo>-V>~c{S+EXOF$7_sKW}4vd7G6#7+n zu3$`YG0H(g%#5$mPLoao8hB|ZcR4icB)+lV2cHJ4Jqlo)iu&gaL5?B5`v?M;YB`qs zRqDHfi1ApwB1G2>-3>>3%N#+e4)myig@RCnw+$$l?D>lF5*GcmBPfStvVti-+?EPL zmn5$JKo@TuFEaX_vpaa0u}tP6D)S4-caoPt!0G`AI1`VJ7iV&azciF4UjEZ5aWd4p zc!FF`9F&_sDzxx6-Z_2y?gRsOmW_X_D(#6Js&XtkD5E}6O)5TNX&D&m)!jz}Ob!0! z&O_v!t-DD(F;}Qi!00i*3IEK)kvq$k17U5e<>v1jv)v&9;!P>znFl4`gv^0nfJXE@)wr^-yNj7EPVG9rU|q%G#Dq@c5uT+stIK zLC>y?B7A)MzU_bVzCeXGwCuvx{Z0#|G^l5z4^78@f4D`&$u18K7bERFX2U6aw8i9d zm>3gkZFGlo1o)W9TDQ|TICXfMm62eI=&m7__2zC5YxKy0*${E!k`8T)SB-!V4PoB7 z*|fXYE0&bQpo9&UCcc*0TRU|ODioJg=?j{(D@5MOGY?=aUCvR*Jt&OO;2fyIvw4Ws zZV=bxj(^4}E=yq6y9m4EVSPSImLA1TP!W2SddE^qR57d#ea#*g#2?8O3^yk~bA!xS zH-+AINg{Zw!ACH6yBjHx$QhTmqm)m?-#73w6a&kUfY_{)Mfm9cyk)#m8#uQTv=Cdz z+BgVp;K!lK^=%x)2o7j~ZJbXJV8g}ZL=~angPe_|C-}s(yap(eQ`i#EXkxQsm=sjw z#BNsZDM^2+4}KR^_%6YLG78_E3`&idNO{L>Hk&S1X>`DwGo`Hp5);bw%O^3FIv1nq)KoAp;uPP#8YxeZmurp8-1khC)At(1h?3?IbT1i3O-k- zQ!z-Zq28?y=AP$ppb)uHTrq&j+d%fo1u>zwwk+d6M`);r;jp)9q_Yqs)Gcpk? znhVAJBpBMShz6Q}`Cp}?9?t^im`N3Tt?1FJRiu9AO55{)qI8hJI)Xn$b0uI9LtGSx zC6ufA`I0U@D6t{_NEP|zTU-m}Z}`Sv3{r~x4bsKuwNu$0a&BpfDv#yv_m1Ct&|;s3 zl;|gB{2X?XC$H&MH%Ro)xRlFF+7EDVk)`uxx<}9$Q=H@1Y-3c8oSvhd#8hFTWLzwh z4ryWk*93SAOUScVqmqri^TtdR_D5xs!Exjsd*2Vk)j#n!>Zi{L`gse9E!;K&)GzJ4 z6POp?Ekj=gp{OUva(71`0dOyXE-nfaT$aU3z4fQ8rZI2ZCD`6unS(PJQvM|a^2?y~ zcmkm%&5i1lB43w1=<(BfF;Z)X7Z)fQ7!+qA_6^Ph;xBIftt9^?e|hjqCLN(YF47mw zw=5ZI0pJ?7#1MumE7*_DR#^^s)T8|V@ZLJPl5VS$=9iDjyde7YqmO4O82Rx8z)xX0 z=aZvtAQ~*QeIAfn*EbcoRRpmOpQCW+p0?md7KCN+ISHz&u&sK16bn0H2v&7y4@XQI z&V&vHgL(et9Z;C<*uy4Uks0NtW}15CQS_s>+As$;gekio8a;d_5EsCR9pTi^PR?oq z&Jl+v{1VWMW0q}o@iAlS1zdBsijA?--@?> z@UT^lELCQ)>_~Azh0bWgKmNd*?(XaLIx>J9u0f-sW(NCW@}ImQZJ>*Wb&T1BGOaM~u+kal$ce)6 z8{n|b^s*1);k>0h1);C*IEW3ag?B4(Jh%8qj8_;VBQmb6gMQnBA?l-FJAO%j+aG=wlYgEx&(P13hmMnDp zb~3jqTe(57!NpWEeZAWVfZ>|9-oBFh03dvhd~j%!y(!xLIhqQo5n>oSPNcn$tp+TQ^uQ^{Ka$Ng7D`^iaceW6uEA6r=Ku%M_GzkHe2$torRr&^CS>~W@OT0lZj0{Ct0+M=M9NKjUJ6$5W z6tSRb+s=q+%n@?OgAb^_WkciJsJ#p5ZvbY})55mgN;4eZAr*wcl8h|(*m(Iqhga9! zWINEOu+LSUj8**c!t_?g`=GKd3=!&UTkpz+tvoOi3r-H*nQ+Z7iU~KlX~ze29v)Ej z36e+4ryE@*M;n&40W8hXuGpi^?=TTA8XC2wu{JyTaraTu{1iP-qb_+liTyFlm1wk9 z^%Tj{u@I=gFl2t;UxTGfza;g(OCRyIV%4QufV^17+BMp_0dZQ6!rdJqe_IO8(bG)w ziRul=XLa?Ss=DsQV47|6(comwHmghoipb_&5*q?N;J9Xba5_g24BA93X$+6K-F8%R zTd{`a%IqT~=;u)z-0GONJbdz>ch;tTZr`*VCk`V3kVV5Z&+4Ts+5@c@(68&}$0wL+ zCP{z1C1!G?|AZCG$puG}?Cnmtb%2lytAgyUkC+!Owf}-TUI)5_mcRh5?%|uhfOq=x-Lytsl4WXvvk$!oyhq zi+AuY-P<(U28RTaHfJ>s=eTA%&oLi>GtjUnVk7(dfxZ z1-T)xs{W?V90*Zo(|mf59v?vz0D2(Dra(h)_dR6^l|coh4ShAI#8m1i2g0q!-`5Ly!jj3LQ_nd7x;P947GBW!$5 zLJxn!s331hyE~Yfu5_W}47t8xu0M;G99QI__3#_nfOpv5ooi<3mv!O{_7EI>>+u5Z zX!4uCFknVno1}JzA0_9+ImwTbx#BiZ{=Gwg&%DCCzgn+g#VEFCAhOz`#sqP9@a){@ zN{rixzoO`MW?}M{BNxK^{EM8iyP6^0Ug!pF;!-c=U8dl~r2M{E9ViejUL|bp6gD&| z?32D4$88nN);4&qlJ)P=DysXDlFUFSs5#gGCJ+y}5@^*C#ZWwi^kkD)L<3%V^(YJr z@+op-RxC_MB%XT8Xt7Co@)i?2yD)hQrR zP80gx&du=j6cV`wv`ZU;M#I)5*4>8sI(6d|z{fmP{uN}2&_i7eJZq{UQgpD7e8R=D2v_dG1zs$Xn$Zi=-KLku&3p5ZP%SCq2g`n7iSPr+uXZP{ePg+Z zdY^a=(mTD_QWH#_r(S@k;q4vciSsKWs9DtW30$UX2JO=+MQE2{;jLMrqLu{NzL#iS zX&YsyJ>8zm{sQPX`nZ{U54;>P^csFDNh(I&3t$$V+(j_UscIQ8xxf`jNvhZ_1-eUv z5fbq$f`*PDz|EjygN)ScUQw3Mkel_nr=Cb!3OY3Y7=*Dc8Z$CHO=UcE-ml*+HX^#? zZg1#`dSQsU-nRrjU+uD{$h+pr!ZC#Lqk-Xos*gy;>`{m`7^eyic%#q~b>>aAErK?H zhM%jxRpkmvbZoxXiP>i6N9PFBjNjI6H299qMMqx{%ICOU1uSg@U&9p(hMzU5x*QdcPx8~e zv?*AGoYHErtNd`WHbNyH92bJMBDNR!;R?jXhQ$E9h%7N6Py5u<_(kR5` znMPV>9BTl%s%fki5M(fOqxNxpJ73EbUo%gT&H8A_rj(h#!Y;&o60vD5x1_Vq&kS2H z7geK%w-zarsb948$HvfAu|D?WoobuZq?+AA$E#d|@e#=@DYA#~7$ikSxS_ z#c{p(PCTu!CPs_CkfV0C9uj>iP8Ib@a?7BLD8gphif6o>%vWZxDm>cz$bdy1EaN6s zv+&DO@zVQ!hZEFa_s627Jm~-a1BQtOXw9>m=xago;YFTQP*&XfU!}MMt9>8S#Vw@W zE;L#Y_?oOybg9>mTX5qaZh5#d(E_@sQev4fYzP#qvORLnu$}cicI%}twoj`W*cE2KE&m$o)`<%0?45W6Eu-3Dj#dPO+jbAfQE?TM#z=}-DQR9yRaUI z9g4;=`Hu)BK4L*xOyS!9Gf8Lv%d&=vXmU`L_l(#C73F9Vy8b^3%~1F~gU$Zn(g^Kv zLkcGd*4vHs^kx9~3;|Y_P83p-qW@u?9-X3=xRBGd_knyR0vM$dR#}UVb=T5O8zk6* z7P@!c5cRGK>KYK zpi$Y12C{-~@FXT%Ee)xug^YIcaIMP|)DG3jo=Xuu?Gg zDn}00f!LV+I!TGii4mxF`d0UJsru4oR(JnS^~2lDmE(Up$UjaFr0{wO08AnsvBP)< zwcQ3Ujqic>)oc~>L2i+FxuHFJoqS*tq@Z#pX!Cp}+bQqSN0XPuK2uPl%Uf`R*OcN%q$REVPv;lHP1r%}_1!NNWt1`+j_8KLr z+724fM?B(!`dG$d2Y6DX65E4Dzx^|()fVfGc`pZrejWD`tDd>3nkAPLCXqpIKCvz@ zU^4m!M^^8HBAlG>+E8v8dhi+Yb&@sBkGtyYSo{&3*1GW}5M3L=1r}66HqUG)k|`I_ zdqT6zb85xDMO9`pKNBxpg@&@_*=NyH*Rwk``^ki}G$DE`;jq^Aa<%>>EjcfR<$n2v z^2Dy6RdXf95qIagoF)cV4e(O@txFZ(Wwa*OX73v?N~)t->w^-TGVN((K-)#@Gug>p zxo+KyV{4?p+Ts-P9RrvEU3#zj+c-XtE#l!Eo!3kkox+ID3Itzc-W)QH(Lz~guT65a(odv@sIF`rtgeXF;8KDlGE*?OaH zV*SHw4=AlXabiU|Y;@?{PCA)IEBcdvs}Rf3l81&WTEa2VIQr-)um}s=6lp-KJUF0= zsdc}EsBLX)E=I9*s?#fI4=aNT?p$7(x3ijH&O9s1pXo#wMMcR$EHt0u8^|O)4X`JT zE&_&4=Fui|_PoAOML;RIs>tvV#m8M>45>%v8nyz4+XBhiDp;38%W>@)D|2a6UM4ks z3F?QYUY(CNeCqM%%8wJW!+%0a#YsP^9b~3COh79)mIi^bw1*Z~fmXOqqWrT~;ijCU zc+jryc=En2cC686Wd!KbUSjs}E@os$4rOwlNfi$D?S$~o95w(VN+0z0K_plWbK3_0 zZ}Z3P0X$7&7|grncZ!b(iAajw_;ou@DFVe4LHt)>Z(kUnX>Sb)9? zqZkdfSIHmEG$U%oUw6il>}O;+{(G7_tu?BB1DRJ=%D0i@{}=B{@cwDj_8E+ChtX%W zFo2JT*E|Bg6re-NSTk5E!UL3WB`SmPcRWv^V%b+|I7cZn+JX$Ejdsr&f<+BA2Nito zmqXL8VD$dS`!>wvN%HXO%gj0vZ21=O6*jtS!X#TSt?pV8{!+WDdJQH$ zVuepuqA}1Pc~GQT4b4rLSvF>Li+Xh1|17YFM^WWAYtPcmu}U`0{E8{70~|F*F=sM5 z|JT1Zk3~op_xy?H>2S{k>83PAcJp}Cz4Wm#VJ$Syr5yX19LDv8rlbP(5!wVlBDO)Q zosFwM9E1*>Jb=$a3&r{4?qHLFDR)|WO0U+MfWP6wdDHR_eD<-lI*>Q!_>k?_dBQLS6;K|XcntLT&tmt^d0t5k>t(5{%~XEHAu}jgdf%o|8lvLn zafNAaa>FY~n+sRAk{#m#!aMj(JBqtl949%oesLnipC;iSI9usNCg?AiV#^{3`zI#H zURxa1tgv(cPU<}c0sVj+u>jo>Q$`F%*e(@@3gw_fB75uQtv(S=LU%LCo~5_L$Mve= zsAV>_9Sr)Jg8+0&8T*$GvVh!>zC)Y)79$hcqzxlGcd{ovm(FnpU6ikapSK)`%4GIZ zt1SXcFfpe&f|69LB^Wl>N{+G<1aui42SobQ#l@&C3qSEVo|74US8Jgadrz^&7+84ZRu zCR%@ZJIG`0SCG(3xkjR$myoA}_xps$HKU-`P4G-S*@sjmJZ`g2nMaAT=HnK+bQ^>Q zJVzW(=&Q7zl}@*3N_~zDZ`1~@Y23cn zI&kHf%oI?~B5Oj?{qS8HocQ7&f}3=jpMuIQcB9N7!|+O2TJ}QnXjQuE^jIJKngV;n zu!H=4O_?Vx-jgzwXR+IEnhmgp@RfN&gF9a}nWC7i>qht|L1<3&Yxz`X>hh)>NDvK9Pl|R;}9+yPYgUG zaPeldOub-tkc#64zj+}vS=zm&NzQtZFn4=gz6qC#`wecB>m!oJP;VOl7|T%w7RH3b z9A^C^9r|Lz-hBrn@&17ITCrfMtkJy>9FunckdL_O#|12+9Cy~>MVO? z4g6H1VMSLF;JXzG&w=Zhw=_;YdQ?Pp9E&B^UAt&O8OR&p{*(&=>-zsCOxt#$)a3dX z@*nl|hp)osMvHSobBT3_WzXqtbW#mD#B&CE9I%;4$hBkd+3ijKU;5OtsG-FZqbNV4 z_1Z^Y)UA|;+aD91+``eckeX})UaFVnKvw8Dyv)V3I7@t0ZZ2FX;h+}wuvgJXf zi^wAdClmGl>`%X+FrQ%VuMkT&&2q2f-;*v5y%vssyd-J~l774J$NqxfPZalM_u-gD z9bK1p#&Y}~xwZv)NV2caqQ{v{vVUWqOiGC$bWN;t(|%N}Ns-}dob2gtx=mV0osre?M7A{OCEfg$oFIub#1j2Lj zL(Mou*x7Qvr@b9k%>KfD8zjaPvBcx4+dwPBTl`1LYt=bDg>V;QFr_V!nk&%17a(ne zu`6gN9L*NtoPzb2aB2Ab)k3vxlOE=K{=w9NYRk;c#mo9%@2|^F9;+6@Gr4x(yFB6t zHc;9KSldQo$!mP8+FL0`Cun@p<&h!Vu`c!r&7Akq-rVpQR`k}Cf5n5 ze=L~}?C@`R#*n{U69_Y}71JAa1Ql`tw!s>BC=M-7XNWWAbnR6@r)mPu27M27PQ+e~ zJELB_K#LR)@F1U4(?S*R2Q$s}@!8CqS;+fM{;7=%sP6-3%Q60QyHjnnazP=(F>ze$y3zZa>2^>L}z+J1a@4-u_mU5+xz;xOm+=qq?o1R; ztKpLc|M7LYbqoGah#j?jLZNc%L8GzSMqO@NVkV7&G2tj@(P&NkuK?D?=}T7frkOlKO56B^n0;u`p)9E09wk5@G@E z)zTQX@h}l+s0+zC;j1#i7I`=G#A4tNqqDw~R;p>I(1m+w$K!cJK`j}Fm6SZou##O@ z#!h>qinnU=8&Bb?HP8rA9n&qDgA?`Ey^=M>>{H4j#t8OblBo=dZINyiqskxx!MQH+ z(2Ovr5`HV#YRlV&l&pLNi9c}JqW%|Ql5fkNp+=p}u!r_rEuAf*>*V4hN zbI_g{L@l(Ip7zRO?SrwSvuyaRnb-Y^BuC6PI<_r1gkN>B)slzap=-ARVNo!#swI<` z17G~ZX>U*3SCmz zuXr-4>XC7o=wMj^X!{Ii?Ep@JdjTHnmT$1U-xf!kf}=d8hf`3G<@16;7R{=|+h3F2cI5 zdST1(T%nMU8rgZb55uGq&c^?z(799sxbvZJn{N3#rZTAHZ&WwP8b0sGc@m|G?UCx8 zKF5x@w~p|NBNzp8(3XI|YUu{^>sAl3#8M>Ah){nMdC7J$DP;;UjUxL(MuMfTHh8FG ziI&0oyZUTZOf7ns`O~|J!=$#%w3!$vi!SzkwrpjE{lVxfEvG7d#R{!XBDlEb9Hm6p z7xZYf_cQdp@cFNRjL+6BBGZ8QCc|2h8iw`QzO+r7x7~CJt(;z|^ zi~~ab5__eFf9-)7uX=m8TBqW41>X{OJzUNdlyPtC?k>ciG>~yue0ekLG9q&ig$+@_ zI41K%2MYSz=eBrao^$oZpJi<*f2ZrPRF?64i?NR9VqmO^AX-HGrr!h@FBPh99=5au zr0A$_&*H9V1<5!d%WM+v#>1}MFFLR;L8O6^T0L|(OgT$@s9YqF@mPgct%=)t7`lliJb-Fk#Y1JBB&Z;* zAFc`bui&5PDM<>TX&1s?bs07DLc)6>YCEvn4hip6pzJ0bp3RG#ej!(^)HTg6e32cI zGp${nhTPYSf-Yd#*&?C(jq_3>CW+VBoa@e(TouH;UhQ2g2(X4A7#9PQZ+mU3lJ2S~ z{;unws+tT5XTFW`jxX{1#fV?lAKmf3$i0KK$Eo#FaQm5xY`s`QV@dcV^vOr35ELU< zfawIIp#3ntc?i>sLmJBiX@AqH3GJ6OTjR7d!PVk^=ig>$}>_s+Q%8SUeJ+7Av%fh)RXbVl=fHfqu~l*sa5`+;t=5%ph3w&~gYw4cKeo|`S3o(k zj}#Ia7~qQ(=R$aS;C`}gt z9Mex(4e*mbIyXaajBDv@EBvLS8;Le9*WFqoC^^Am&5hVdoi=-#b;}C zg1D*&FCWfU+OadXga5uyJgb?j?hG6+!<-HWVh|0j-tokFK8l+S>PgWSpX@)rdQRZ2 zNma(7y%{uDh~=eL=c=z7D$LIK&$CC$miYhcE`cKvE}OfuQ3p`XLU@X=A^gF{{^*s&D62%m(Cjb&T7q&x3=Sg&kVthspdLY;7!(t#5590`eFL{EuCt<1l)3B=s_&8*2^e;k%BsgZlZjy!m zkHPvg!N6vSCjI7cH@R9r_P25SI_<*k#xOz$yal zS|*KA{w-!!cpFD<9>9ns6n5N5R^3D(i;lBEqq7DeLM$SC);$v;Ii;$4R-s$a2))L> ztO7$`rG)T`iCrQ6Pjrgsf@UIi1~?*x(EsvpY4c_z@GD>d-AP^M!&#-#;K?QYHwspN zQz?3}_ND8&Y;S&rRh%G0g~4vj+C|2Nm6b5*^yQR%>GYDM(pO*WZI%+>(p52NC78;7 zMXEGa*8Ox8RRbZg+jgq7*$L_X?h19LOn4fh{xBLi9sdcnv{u?c&Y$XUve6MK(nt}x zHAv`JzKeRrs%keN&>4~^h{*by;A6KXTN)PR?` zDo6gIY%isUmbPjJz51d&r~mzn$N8uOPD$_2RsVRXh2?}d1=k-7cK{3LZv{%)#NJOt zy;svnW!fVx( z?Gl~M43Fmt+lCUos^lhvlpY%MzYL;zq!)a|XwUJ6cFN+|&OB)*woaKI?G<6gu)RyG zbHk@*kZK|z2o(Vs(_+J53Nu&gTjL3T*;A6cU7QBs1oA2-G58sRn)`HN6GB0*Xf%!? z0}i~kj}NB1*h-mnGmsdz?Bo04aoeq^@;r3tRcY=YY3=m^MOkFio6_^HD}GsLc5kea zyFc5QI>5C(=^qB_M5&fVu__5%Wp-Jo1^X*gif;^w7g1XbLs=hq zS1*Kn;CZuX3FjknZRiCf-vu)%<1xhzuU8qwuY^kDb5ykc)dNC$GpE>V92)|LT-fFa zFm;g_$|XAa4_}z%h8z=wfj)YJLQ2lg(#|;TKzI| zd0X?uh+EgMNn)TFX}Zg{TFiZ1wvWM1f}d1}u~rM%mPa5Ja%XYVgG@*>uwy(oeAicW z@>E_9laW8bK(BCf`GaAm?lf{(wPjux5bMyD1~H*(BhBijs(C>F-#-62h4*7%%>oz2 zX(RtJhFs-3TU+tdkPLX%??da40WqR&Q$8c>R%kTj%u+i~fL<5oc+vQfHOlHJsP9?6? zc-Ct;7lsd?3^!ev&HW5|uR>JX!-EM>ON_{eicH0RY6whh7OH5opqm`5Sf&qWd7|1x z1zo*KpTt26%M~Ld!YFY~gQWUBDTX`N;n5u#J}6a%7|I!CtqfcYy$ssrJTg=QRyg4+ zeQUY7mKKH6Ua*p%<(j9p6|REbe}gFz8)<71Z2&hw$iFW0 zF$=b-TC404ou1S^@`qYgAWK4{NlqnZXKspE4d<6aUD&w1Ivcew2wA9#g1hHCS5PP+fc|^3mCQ#h@l#ly z{wREj^S}^T1^eaar|{aJW16|;;|})8=DDVSH#VYwua~oNucUpf7^AoQIh_g&>TCB@_&>d z6gbQ_jEg;w4pJiT#w_ne=`I<149e;5uTtuh4ddpN*Kk>^hR0VzUNQs=HC+^Q+jY} z;c>)BOVgLVTL^inzUji9sayKOZCY&n$+>Xb#gtAHA_Pufx$7k#v^Prod0hn%5NRZj zDpx;JlmFT(>?iZERXyewQN7+gZK%a6@73;VY|90VRnien)VcTZzD)| z6gs$h5^*)*8`#h~9IIYukZ*9W|DhJ~BS?&i>h-US#zolM>UC@D>UN^R4kOGN$PX>@ z@v80UmaX4Zf`&l9+$9hB*Q;9|k5zdUf=n>2&- zVc+Ggh0=G;*rN|#;fOBf`H<RXPqT)(4G1Fm)mAf@_p zKK$euL*khh#(5yC$U%}=qJ)(=zoqY(utqq ziEWktQ?+j1%eadJfGL$N{%kq?5`?W#Wv0s0eVKz50v+^+MN>sq<7RNz;B8wzTw4t$ zU(L?YMXiodu2Rx0PV(ZvP*H(TT^{%4d{R_hXmU92nf;NjL$g^7%wjYr&>`0JyuXbf zNJ9D;>3Xl88c5n0nvi^a(_j6!w_kw2x9g>`08$o*R>ta=o9}#PC@@xJ+dZzVvyw6VKmFpa|NegbT{Lu07H#y`wB$Ii2{E{8MhPDxP$LD?7`FBl^TjL#pC3Hzk(nEKnVJSx-#FK;O2h z^+xcub!)6;SJ1~aJfF6Q*c`5aX1Gb_OYN^?1osrBU$+;3z_*Z5fG)9}>8Lp?&&c9i zw*A$_L`Rt9LW!ahz_Hk}KWRpp0bMEjw4hq88iFj)JMx5+O^hS;qz*X)2gJSGqG+xPeIUz^318y97=1_( zPPm#QfB`w8w0etTsu`-ikMN1U-ki%9d8I7t$)qM5&XU@4)ZePx2dUcFlC?5knQwi} zy1ttwjM(8dM|z@XYu20L1(`EKnXh8)pued+xGXN<*-hDK;wY=ykDVtNb*WLCwu0*vper2pYc11O?6EuC*Lz*u-)l0l+*{f9 z^z<`0^FBp1{Tp~@8ulKo3?WU&yqPByyXR_ZO-~u@G$$%&G{g=d8KaTnQI4AYSi(6v=b(2`QiT%Z7is^MI1P51332&6H zx~gVGdD8~yb|ZZgpD_t1Xfd0cw|=LnS>C(g{ZaJ0Tl2U5d8%Yik@vEOq-dYBL@7-- z<)^{kl8U{fFv(AvUTJna6|}tT`E?rvR7mzMO{4XWI)x@>>7L-4F}t0Wh2CRrod?inryH;7lyqq8glW=J%1UBQ)2r9l(hozGKsdv*N!+V+Pb>TPU@-GBUT{ZsG zt4mBV?=nNLu@oc1DMVxC)u)klf^M#M6bdEBIZ6`@PnifpwwvtD1c%eW3Z5#^N@`OF z1xXg`zm0s-NB769B)h=Ueddux%AS>qZ2T?g?@z_>`nq`YR-j!QE$j1V$%#8LwiMbS z_EF0mJCcALc?o78{nf)`5PN~|d#z{;u<)UVwskkb4S#H<$p^CkAGxW03d6UIj-QK= zz;u$~Oz9*Lc6Fn{J`YbUA1jY<(l|M?JLLlCS{`sL+M|%l+;O7H>cU`hBl|Hqj=;%^ zkT|$rB%{i8qNb(`ixw_x?=S$PFlv~Cwh9;dX!m&@m~j7Z{g!ggBcl`F{fnkawnns+sTVaXB6RK1gD zT)8(&2Za>yvSkRBuK^1|3(k=KKLbN=O;B-6(1*g)ovt`ZJ0j*k@ z^v}z z!|ifm*XnfL@bvee~M$wvD_ra zWd;?-iK!kh;Y2{AE&*Y>PD~)d87Hi&?YMZE4YevgWO8TTV{KqYL12`~tvYG2*>+3we-Kf9RF(n0}i@{B5T#$N@4n9j@3}q?FA$0cWC3z{YkSs z5T--IkAPpkI!T60K-gw|{|K8sEy);SM|Fv7t6*y9-ZO$s{b}s_t-c0Al0-6uaNpn_ zuN*=-la|*zX^C&Cr!e{xH>J6nZB-HVo1OTR`Hb%H#p&dJn(Y@Oqq60m4Cs>}Ios4G zH`*U$c!jQogy^HAHp}Ixxs~(uWuGVBa+ctor0ZOl5XS;x6;e!r_YX&I$QA6yNQ>gPpQAsTo< z{H?5Q_@hme(<~N!Y#qq_U~a9UqBty_M^pFKC0kb|VC=n);1tP6RV_(0>KyoKX&d{o zi@R$~P)|zr-%6k!$D`SyujS zOsnNWpjdnsM_1;&!~tX4-a+9yQG|eD)s-(j-p=j_MMB)rKx8;In}`v24c?fOpCWrl zbP6zv?fi3yj~wH99A5WNekZ%#3$l$Yz=tbv3hj*=OcqVGfnpX6j@|ChR&$6e0Zin7 zv-*m*KC0wjla&Wo`fb__{GOXY2&<^7`0x(}7FNh(OF9n~liStr5veTr+1|*y<#6wd z<*KF$l08JD-A*Uymnc5ZQmiJqbH; zJZ%~h{vvxiPC7!P1e!WPZx!SJntdtd#4?*un5beNKns3?@J^^MRKNfA%8>cszWJ(^LvR97YWZVq)Nh1GT!rbs&hQAW8sxWr= zG0;SuChpCqFRvI2q?d*pS3n*n_~r1eL>>3$&ord@-A5`^%onYAaJeF~1;O&%GB+aV z`h?;(gBB%wKvuJqyRktLI+KZdeV!@y*?s>!J>eOrd_D3Oy%&|Fc)1=lo?f0W`J-R1 zEh0>(oJj42j^oumVd`+CtbslDh)%u%)4s>s*jER?r`2z;fsuM0L~;~wwvbv=hqrhj z=Gv=~Uj5@!R#Sx7cWUZq=GTGi9VCq#@AUeZH}@JRt_?mY=NewMP;@Vh2xn@>vz*!n zzRY_Cj(}UMs}E9pBr9-eFCv8Ue!bvoRB3nmYlm>aH=^SW*@~$SU!xLc5vk# zTV&<*tCzgmKazob$*K%wPu5XNe}w;0cELr*qQ8v!>ZZq&xQe>>xhiZm8UmuQ@i4L$NE%ZA;WTSaPluaL!kraqv8ujN`Jn0+NpH13b2v}OI-T6x ziRMl_(D-}1R048&b{*5!=CF9M*D&#TxQ~QdV!G4pc;x8&{tXalk#NI2udjICT5j(>XZm z)ewp%fxYxi1FhL%0)W)-2+;>pY+anXn2nbl&bjR2X|7{AkFrrWw9;^*NceZQmR7-b zO{>`SU~X#?@e2c_fu%EcO6SFH8rz&x0F`>gZf|V=yiTxk#C_D?a0y;&r(EdrikNtq zjYM=A0AhigWG7N5AiSz#tl~%V?f?5#QK9|;wM;vN#AT(<&M?^JJ5o$Qq#?t+<}EIL zh-r;+C)TIrjT261tl0Sp3d^4eyg#j)yu-h+u&c@h2Ewt!Yh;9ALRZnmng#Kg^8fCl z#uZ$Xqp6!s9_gkEC|w zc$Um>CC0Ir(F8g$bIh`-APJN&)gvXSO%9ne*I8O5n{YHJP;`zQs0}ZxXjaXH^R+U5 zj#KVhN_2u2CF}F6n*keNbDh`wD80<03i*X@O0^5G>}i@WRrRb3O9~frqUADmkYZbuxH?aQgS=_0N3VPib;8%O<$h9EV+N$rAygm%N zj&&He1#J{Ow8sfSE|tr+j~g803VMG9`yDgSsi?eto!j7{v>i&4$hqaCHjS7L&zCny-)SAD4hn z*3-2)yarBmq3(d}Po4Qh5s$#=dMi5C=-LwbTjn*jk~pr<@e2A9fk3R>VsNGT8owmN zo@(#B*z8?)w4>d1H|=|DqZE^FDXL%&OC_Ex&$(rQ-r|eTmOIP#4G|k5ew7#!dSnk~ zcaTpw65*kDiBiRa4H|V|5=)vmhmDo)ST=V-o zLA=FG*9y2xUf&zYXnyVY!Vbi^_0HaE-Pi4-m28R2p(#DoL9K8l!-V>G!I;Bxa93*H z@^y0oEtF3>QlW|nc8ZovTz)sEecV+JR4XV`|6jLJX-oYTT;u+(-%arLWF2i3hkUPT z7Y{Q1rYlIKhF>ddn7JCa9BI#Mx_5JNJ&{5PzegScMhg;QCQEiwPEq>=u0Wwx0US4D zXBaMUTjrDoLw41B4@6$;UW$9)+7UEZ;p6ZbXkIg2csjionMs^79}402@GL_4>?wb;)Wv zJ*jJ;k}T{-wF&>|3zo%fL(`RlkOFDT=(mvNGHctp;?cc@tw;Sk#4-B_oOF z5-Db&XcNL*AT0)CDbB|+xI&dLfsY<7GK_&0d5TX7h-dq{JO@xd8@UWOQhV)d{?lMV z`q3hF4{0r9kmEfc>}2ttJ@H9I^rj7iVn` z7ecIPGp)J$FM#EDQjcD#ptRZhXha(^L&BD6g0Bs2(we{{FKm}Mjm8;>{(96;*x1uM zz?KgFvN8$SUt8e4yMHu85R(&9$IP%Vg!Wv7Nsb6#XO2M`8$pHZXC zM^(`6CT@~LwIczhZO~$X3q#GdZOskPg0bBY;I@v=n@n<-rKC^~FIt#MDi4rf zuw%eN_KfRQsg&(ata73hFZ-+uzw5*r$?_2E1nLGZ;P!Kq>X(c7=xMoEhSUslbh4>8 zNhX=>bg1DiGnDtFcjh$e+TvbbhG$-RXo%*KE8st^c9#z?LlfcAM=WXvb5=J>wf?lkxP37BOqn8Z-3kFTANcKYJO*Pn~rjR|U56LohJFa8)aZNxA0;-d za5<%~?U?*5@i!oEEBC8{qglhI4-i{&aZVDva_dRDcxO5RpxXgZFyK4vx&n>w$kuH<8&~80AHgiF`yX!b=Hm2q zTykw#I<@je8^e}MWAT^QjpLvJ;5-yrc~IzM%t?z}^w@mT5E`uON15uWtn3d$>VTZ*^S!_Ca>4Hz|_QGThV z`{Wf4G`RJhtexZ}fS2Vu?bzD|RS@fH@`2HqaP=t|NH#bc7XUdQ{&dy@SiSKn_b*z9 zGotNba^6#XLEP}jgdKl?`e0M1lvbwZHtm)eMQ$}V{cAwpQhE{uU6S68sdcqad}6@9 zMEf;bbRI`(EMLf;*Arsu;Q<`*flx1@nd+5fcs9d6y*S%81c=z|uZ#`}J;wQT{aGEm zU59^93w!0)O9*#4$!6jS`N1z*oG1=J{KSSO(&_B8w0T{=Z>8WtkVw?$`j#u_g*@VG zF=h|K@cylMJQ^*{>Aat< ze;((o`0?wdf9|fvC#Viet^97-9pZG$P7iK5c{=j|7BR)dKiQv4^;8S`n!1&+cF!@ zQzAtoiiFUd*iyRbWT0|Ck7shh|F&x3}08>a94XUN^E5ID# zZ5vZ8>+i%>LAm(IsTI&;CS!wti=oTTvuVSd51zvIJ{#d%sXUPKn_e0+vkaxi@0u-> z=A5!*0%x^;dmXE+2yK9@eh|qh-`~ru65nh?VhE_2Sv`;y!`bIi*?GVVf_Xzs-yXlM z?1|@6cf3atXb9|>hy230?xOB%sWIT-gE4lmzoz-J@Y=`se3eW4e<~V%E-k;v$AhGt zfB#tgA!+##;7(VCVK_la#(*c-q2^+4QSxA~Q^np9>jZi?6$x9#kn3mN=~Ejsqy61F zqL9O?Xaz`Zd`{hAzRX#u=)u+-kOz^e*KZsa(Gj8^q{LmQcpIMozwj_C1D_vQ&EI5&p8#Kmg#?PeC-XIaz9EG_7*Ui z^6`dak;{e{PSnF}qmNZFMVOY>iJUeCzvx&$lJ5Bwp?xU4A1CaD=`tX#2a?mBSGbWD z=^qOv$6{~40iM{bnH3L1SRPGnxSNg9IBs&(kc%|A#;8)tp(MEU_R_HllTDZ|!5%}m zg{1FXYGIvb`pP7z4xLP2M90Cl=f04I;4}BS(oxdm?DL{*x~^tLDnf35Gr>0&o9Q(J zjZba&{m@c!CdqjWLPMY>8LV~(R&tqG{6aL_Nn{9g9x*N;xw?&ERib{I=H4l6&8Hde zwqjbK)eQ|y%s9I74{a9Zd6IXoJ&W|rQ|}I@#)1#3++zgT*4Ghj$=`L74G?U5UhrYG zt3KgKJS3F`TA7u2zh^u{+~(4zh951!{ zRGTys>E*L@PHYH{cpre0u7Uth>bb8b0CWwcCy!37rt}3`DEP#T)!Yh~QtIy^j4#FI zYFnM%^m^%fDq@m~O7nR&IkY)7WCSo@^{ipB{RKbfKcever%w#wu4{cY_uAsNVm~E& zV@N63>Tu%*VoumpAFt&yaj^*1ktZ+&c~R}eT6c$LrDH-K?PUH{k6s<*zFTuF zG?aoB8OEA5Ns!c9E>aKl5gvTCgXk{wH^T4_<17k>P?e2)6{qyu!Yu+WM!rBHCc+f>fB!$?2-2Sm1S|j<7kdyf2UE~7<_vE&E)B~ zX-|7~HGP)BG^DAaP}6Ovo5uk8-YmJ354)z5BzAf>tyqD=%@}O`>?y_LgT0__`C>U) zJT{nrs$(6cMGx4bEwi(Ax?YV~h;XFeGx82$92Qdd^uu)I4MOH?{+s&MhTWF|#lV(3 zBhJrzg61e=P3Kst$y@_1cu0BlOQxF|&e?!+d|O^(_#O4zHI#cHB;B;=wo2!9OqF2U z1lO=zu2~C3Q5@3;qnp`aM*rX|*lU>m05}>@3Yt*2YT)OEm{a6|K}$(l#9l3n%)*R1U5}9E}>Hb3lUz1$8_KPCz(Ob`j0GPxz zmS)&JkZ~MyiAxD6u&cy9dOArpj;pk+j~Wj0rFsFPObI5-b`%1!xcrpOJHJZ#0r6L; z5`Qfv!NMAxctS4OSyETC9!DZeN=l|g0l?u+Fapf7G)Hy0-)Uljyif6iq33d<$^|MM zTPoT6!tWI>Nt4x!McvrSea;$zuJW$POKVqtIU6VF!skuD2LS!x{67eb%j^P;OoW%aE2z6Lq(>)A zmH)RXU;7w@1z)f~CVcMooT4?TEhr`ZPS{_3+k$q%g#5wgk+Mr_wIYOgV5Mg3pEu5+ zMeyeySUeo8i9c&ym_m=t-|gC4w@2&kokjH~V~9XY)(# z@_O6w$FP)PwD{}x>l-f^Ts{ZK$?K2>>2x=f$1&u)WisF|yrj6EV!Qe!2<{7TaaDxe zffT)<5TM~$dnKZYyNE^{MfF2*W4V#=UwXJDdpzDR&|O4KmY`99z`#WM&i$GW8N;wx z(nJ8QWy};r-A^|@3s8&_c(73qgpKWy22*yTq!iSR?`RY_(Yc*)I4dbMbZh*Ut=Gwy zXSRTu9-Jz+PUnG3_L82OePu}99feGF0LJzHT%FmziTViNt+Y*U^09c?>LWFGaU%ni z6ewz3uSWr}HfWJ5m9vddRyO?tu`&kn^0Un8s8l#7)M{94NJvl^Zm1V|ncgB1kpjLU zBdp>VTFf<%-86Fbo;QeRWlIiSx{Y)d-v=;qHxM-e?}ZdEIKnB(of_he9BgYO41UiF3{@~7 z7^nCy-j}xzTn@8EQE&qpVH3W`txEYI_tEB;QeP!<7|u9YKNQ20N4mRZ;)DtQMN`_> z;FZ|ci8<+`KaD>=9PROe-5X;?~u)32jNgy^$j**a+otIMX`R(&N|6V+sT6W+Vb z59j%@7SOHwayX+j@2gPe>xKwB3)R!2J}AZro*9a2-u z9G@DAs`KP49n0rjNOR0E{#d{7ValdzD;iT>;ZR*M9AP3s+s|=o)Z<|@RlyCqbdX02 z#$&TxK+7adk4-8He`{nD?mInWuW?mO8L8hKQg-gAVH%b3q3va*Yer}4$LndhGaclQ zg!I%cnQV)yJ^-bx`f@e#P4%k)W#a+&I&Z8m@gim-v5N|S!Pm91h5{s+8~oAUj+U*? zQk_w>i{k7IeICu1u<(QH`;(4}uwwunUbNM>MJ#S@h`v1)g8(7>`xl zdCUiP@b6ZGm-^L!=yCD>@#l;4LHpJGn*P=xMxz-j1d4rYX~J~v4I@;;2uaU7lrr1c zaHyCEKJ!vsz8n~fop6(K5uHsrc`GZD!T`8n50a>Q`=Qk$_IOC*j@p0sh;H|~=IgLLW zov&-8hJ@fd4HV@L)5doRPCe3Uxs8GqtlWfch2$-5g{-EFe>^dm>V5tkXPp1%I2 z6l_gZz7$~Q#9A05PS#$CnSet6KxDn4m6P06fDj~rkQNXF6qY!!oDKddeYnm@YL56s ziD79k%4Gw|p0%HTWCRtr+p45HYe=>fGVda<0f+vD*;Ze{TZv54XdW)MY}{{9bMO-@ zvWW&C>tbzdL6o|3ZJC(5%P(5(ud)Q`qM|Ga5cUgX$6{NC)bux3P6sfDQid@qz5-4b zt3qgr`y4<7vo2dLwGTvLsxHzv{Y5e!AU`+gAR#5mBxjUZO}#eWMo0Wp$YW+p_H+UWk%Y`JyV#$mO?#;U5>;R!#*ql5z`>-F*CCAbbP`l;CcqPD*}V^cMn&dHz^HB$yC7smwX+3an-DGQiY z-@wZiZGtgbwXqi$u3Q|~*KWx^sLhB#hxH^6^l1#d;Vz!-1Xi98zm5}^@G0`b^mhec zf?}6-`9um;UI^VehC30S#jJDgFW^gkp{K2g@+o-KF#Ciy*J}vMjx*)%An~#r(R%4AY#%q>qDWID!v zVmn3I#zExK-LAv)xF;~T0F`Ft0oI5UG`R*mNW^xBZkY}t4C?@GI{)Hy25IzjI_!q0 zEcod@55{wJs$W>&s3R_hMumng0 zpY+n8Dd+;cB8os$EQ9jTSt{OwK&6&BBr^e@kJG!hO572(WJjWt{YU~Tmvj>nOn1jY zOLmfGSvAL!Fcc%D4#6>h6L64-pPlF)*#xBqLja|9pII{dTslHj?5R+YGB- z5Ww&fD76M|o!kl!uRBPW%I3*cP`~-VW3UN-KwA7NYfOwl^`@DJw4CBtCz{JSBDWX_ z(_V@YpRS-+CO~cjwk#?XO>eKyQh%IAkjil9GSCj`$;w&Nv9RR*Ek+oyhb+t*e^WL3;rCFJ#w3?%JBOr>V|IoPDOi_jj-xk?NCy)`d1^IC@Pjrm#!iZy*5JRQ);euilggAU< zr@s`cH$;2c1l^Ux*Eu{%sBGUj-z^Ly5zB>~QUSz7 z8j%7pk-mK{@H(9{R0qPLRXGn!a$8Vl?d-~u8V*QipKU}aVGpvQwN%3tYv9(bidAEM zC@rV`sA#S!z8OgJyl^KpfmFggX6r27##Xt7{>rMp-P9AqoT4zbb%HPNIUDsAE<+H|vI!-8C&|`ql$(UZ z)Zk9M8?aPHse4o*NL>YO!&ZDCUsnYnHj|F@9AY}@TgI+8c_>ETmJ5RCXFPL*sLnM7 zKF?S>YBn%)m!mCZ)qo}K7eu-*#20sl5KLvqZ`QKdJWyATk^Toy_pCfwQ8@W2Fa~3R zkbM=;G>~NoOvrh;j0C6aP> z+z@ectBkj5_767^^Z0WQ(qTL6Nl=UhZc)hFe#EL9An;QSrRyxm`;!Y^+<9gvy}NVI@9cw3ZU;}#|6)) zTJG5mON2N-DN7+;u;2m?QHqLdcP?{No|0?{*-Ut%J)>5X;x^>c2A<9*x9({0;^+Lc zka%N^uIW{*zQPxra0jN$6ZhXy*$;?!(?hk<2^yY zrEoFn&GwP{wTXn;-~U)hN?2Uii3`l$D1R31&iHhZjE9W(sShRF-wI=S3YP23ok+kG1O>6i>4{J7p849$ zmz@cJ>HHtinxQ9mjRQPa(E0_O(3gdH#@3csiyahFoKN0FrS>URs5TA{gciI z4lNT$SsYPrbL0px7Kr|i2};!grSF)9dd7|b+h-!jU6*nVDLA7B$8SB0=&e>h}S(DPE{3U9n_dzDEYa9I{(a{eVnZ?^~ax9LGbeW$%- z)+%4b7{sZNwA@=Kr2yrP!{X4|`h&`ApYjT}Jtt!Fv2`C;eubV<_f&)umgl+A7Pvq2 zwGw2mKrp_9sXT->QB#?n@mDga$ZoQQ*G=Uj#x2veifQAW(my^fMv&c7{HalfXv)$Fx6KT8he7@{ckmh}9~M(6|$ING91@ zgj(FP;u>bt2&72{s@&3q9>RtAWbvM1n}N55ukTeV!vyslyNHzhcek62QE|10Q9*){ z!)fzNC?F@6Qc@E=lx9 zwKKf@2`;8JI0mj-M>Ldaw>hDo*6mT9Y8K@r;=31wY)cyg3d?SAjFy*>ltUJAri#2) z1g~}f5kxzyR`9MN@y-PlcWY<>MUMybz1CXma4rXoh2K^e2}~t#Ui_fX`CGvW-kBQ9 zstC|}SnG;X)&RLvj4ishX%DRoUF%?Ccd`)pj|nH!P9_tnoH8>&KYoZnug?GP`3;kV zf=h+ICsuu^6RF)hg6TD6O}UP}>A5cbC&iR>pL_KiTQe9YrIXRX+C)50)w1H5aBPW955O)h~Yk2I3Mt zc_Q}$JzW(eAAYstZ2Xjy;fvN=fz%>wVDqp+S1q=wmHFEBU5`G1nbD_%6=URKw#|Ef z+?QJ8lQ98HNpt*0z7T@^4&hhs7l=@1BySR;jca=~?t2%;4m&UJ9@|LZaqC>Xwqo4F z*@@YbtdIA(jKeJSrCXJs04mLnW;;cZL8oO$w1L1l-046p-#?7MW9vv72V+-e&qa93 zRCjoBx7jdSpo52>aqK4H*CPQJv;F3L#e2m7{9Sj0!!l=I^!n}(?hj=9{ zWMc25$@sd`mc*##8ZT|+eC0$1$kCDjA3--24(}@RD}n0@G81ZJO3HFUv)gY zETT1XGpSxX;?S7KMf8D`@Ov0|1@oO35COXK2PM}xfE0nyao7nWgnmR{|nU``YbO48($gf#rQNo&1bGMp(xwGmH~ZUa?R zqI5;sb!%rnVoFoJuLXUIJ*rfYEI)qq(wJ!VGzV=sl`@+>E_{u z5}bCHF%kMUIu^Y`!a!Iy{BIysv8@Ka zvtvChNo0f-jMEGBP6CF%TviaGB48pjkcr8dvgRrj`Y$GHg=AG#ivxb)&~lWICf%_I z>K7X>HJM1&xj=)GDI|3Olod~%esbn9DmmmPkoB&H@9|CM{tT7>aR%g&*-hTf(KdTa z|7J6$5Z@&+_D)z?e*1%Jd#{lI)GhJH5pUui5T_`u|)pb_KlNJ$qU45VF^mCnwGppcu)(1 z`}Z}G;JPD&o6?#$O~C8=#iJ%$ilm>6J&*7lW_%&Gas30{x7)F+# zt_kCa!rCUjF`S{^BWA~q0XIB{5Vd6bpt)I2PnGdkgD;~)p=}@Z9VH~t2m1lfVO)Yd zB=GY6ldfsK_d^Mu$p_U+<~~LV`)yte(61>f!=n(|x{SVGn-`L%`H6iBt?PSpFgwxq zyQzD1%zDuYfH?YBrVeO-25)_*`|vCU)9Ua5+J%@J2)Drw3M(fH<9bk5?Qe<09FfL9ZpyexeTf#&R`U_{C|%`!SGlv zfDOJgpW{~0Sd>!RZYr?V`7oz+uKS=Unf4pS3XIw55^s5rh@V`@W#A&P2a1EQO_JXTDp=heDRj0>#C*2TWGr?AaVfEe-WY4?dq+_^XmUBR_Q>_t;208_m%TmS!-59l>x#CwkRv5^qGGw`Z_)T}=g~q*cB0;r=g7lfAs6yhH_dcbD5I4XEhS5Q)(YE}YH}hRSp{D?$_3~3H9`!5h zre!s8S`3p?D}$oTzbfv>9tUPJrIs{S3eI)6X$`)+-xj0%ls+|TjYBnc=L{afGc@%b zI{zY%KI%ud&3w(M`|DuPb;L8`w#G-*pOv@gH-^y!G_Ik}HF}M|GPrftaa{3B(z%!! zbOdGebI%P`T4E@8l*z~F+^Jeqjou3-7A{W6|Z*U@Uzf&9(fJaSHR5K_F zEIB{_1xwap7P?QJ$eJD4jDj@#4;m;L)P7gptg8oBEc-n5Nol5KzJ7!Sk>)sUBi2M( zy1S1c_+D~ky@d>?QlTXz75PrT&Ka-{?>ACUa;M2bKOjidz+c5&h+!Y=+OxcR&`m7G zuYF7B)m50UX*XZrZ*JG-dsMp`-!!;}m3lrBYXw7o{B=XS;8}EQ{DquaDPLa+wJsfFcqVwx6#YE95yzs?4c7rZVHMOg}p!CH210R3rteov*G z>=8%#YMg;sjV#v{jzP6-e94Jas92>uuprescXkcRO2Xp~5#?vjwcf;}OR&pQ0km6+ zVjJGJVq!NWr<3b4&Tb9J)16)9kO-(UfBrLG&A z?&KP1QLY0hFOm%;5oyZ(DBlOfSJaI$FRfb2gmV)^^wi*t>L6xHLOt1fd1p}5MAad@ z6^fmi%&5qtfE|=34i8~YQ8ul4c#<#yCi0j_{Vl5Yu*itFFjM*E_j9z_Y z0i*a3y3JWr#<+ZsKvxI!ZUw_X*M7|#&6)ebe2&tFBDQOkbf&0hblB$>_->8WwsZD4 z`6)FU5WkCd?!fg)$^A)T?PxdPUO>;DnYL3J>w!`13FbIiQCZkP76pQK zIGR@m$Kf!1rkDc8R1pa$EfZ16so8c-8fIL#=pE#*%WW!_UQ6;t;1t&k%hVold>9O* zCRt#U982?AC1;lgHMHQEzE+~Mj;Y}i)Xjez23jeE&Ch?&h9k@?!n)m7C5)1{twDE) z5^hduxGOrLv|9q&5$#jr$Ou7ay%ez{j_W;ZjFg2;L+Q}j1)gef{lvMqU{E9Gn<(h_7)CD~ygEo@@RH2gkf9qlju4KJg zEKAdRIwn8iL?WW&>|W^r#cyy}@60*o((xjbkEl6t#z$?lmd75i^dGA7;8+!;0|hyU zH1uKdc27JqM;2x-Lld5EaL`cupzHO@hZ6*T&XBxWUdn6lhzQXYhLs~6Nh=g zQE-T@48Mv%wZ^j@SD(;bvI^sC;j%x(i=I=bSKtztB|LM^asF$A=S>pYqYH6Mu0MRStn2T-RG2ZhrT!n6Q1i|*eI2IO`J9ZVQv7=RTK zS1&NYIZh)4LZ@nn(+f;CXi0C}?G**SuSv+Y4E?F9z}3pS^&JGBCI8(wuT+|j3RRoG zR`H|Mm@UL3P=TOVzbsm79=fSq3yw7Rh%xq>+_tYW9qX>kM63+>?s|?S3)ymQGS?ZN`}KutU`PeoJ7C48?G%fSe6Dumknt2*)e_r@4;&1YMoazboJi( z3nbNtuvOq`;H8jYzT4y#+_T;O)nOrVdnwuyFfe^=1ZdPW5J&`UJjn{X)s(6__1M@& z&AOG9=mS1)T?%=DTKYr+)$b=Vi<#vxQq$QP-YW733~ICfqIvm|hU`X^%h=8{se7ig zYK1RFa?k*-U6MRP|H-YTI51Wvs!k4rWRHrR==c8k8s@AsHbYPqH5xA9i4}^hvD{xN z9`c#mW~9jx)Y6X=e{1z`JTg^`L;qY#))t`5wFTU~{5?MGa6J5|Y?Z;^0zc+y(Yt-f zhYKW$W+0V{)TSC<+N^tc4=6dG@!V0ux(a3lt`QYeuLar3t(7`AM@H%}LyQbjOZ+s% z37nXAGtc4;5>goBO~56nxExxRb^djjZ%9zFFfbx6jn|A3tD(>MxJ**HuoYTA>K3OI z(E_<%=@@ohzfK57K^h8!cKGAz3Ax`4K?gzM?zf;44lD2+Ra&H<%lw|wzpKtVP7idv zw$ZTO&;Uh1y1&0nP;ztp4l6}6o-M6EeNrR!{#oXFvmH-aqn$({3vbj7Riem7NjL)oGmfCoL6bJJGKK zq`ufzij%t)U;bVLC8WwM2z|=Mc9ZVzrk=*gQ6M@=S^g}t`;dFw80JvR1&3PTE8lMq zG2awO=RY3^c0L~KisA2XP-@@c2(X@g0DQ_Kbph{o#L%{X7?qwP+X|$l<*W zHVTj7wnf95WbG+Cr3cNOR#|P;h&qABa1|N!La(FkygmatT_Ihq8(HPvC|bU+#u56Q zkHRAu;_=XPXCJGtC7IN9NEA|hEFQ>Vwe6NlZ@x#xvuLACS^T-o12g;tNWNYdi7Dj# z&meYCvaP?GL*O>@SgSUx!%!SJqsAhxKDSKmOx#!@Cn$=h|5N(uL#!1SmuDvWbKftp z1G4Xa$MbnGy+w6@l>0#n&N`CIBG8>{K_%)t^?xi_ExyfOc_S~G%Dori%rKH&Q48LMnpa8bWdG$e;lnqc=0);l1?{K5S3lY2#_L>pALt0 zfqqWK!kFwo3x>0l>3&o1_Q=0LG}xUJ14I!IWD~U@+qASWpQKVp;E+6w7mK^!YO(Ne zTan0M8G}+l08lwzln2vb+3#eby*N%U})TI!&-_%+UUbxXvL04V~*_ z6IhFMpH7v=m*|#U*embO1dn8e;yO^7*M~lmnIGlu>kL-5%8!tcv-aSCCRweo`7EQZ z^Dz&lE$K?9WN@K=8Xc$2!OV3AN=6DEFt+2-Er&uRxAI}5mn`K*In5igFh*B}ocIM4 ztCk9my}zdod-Whf!UnHMPd+nh5}PV_xGr&T9%lSH7l^tpZ2#UVTAs$(-hj5c5U)My zyINuR=KA)|9qLtd{Z)j9>M#ndiei1_7kiejg7ooa;se*Fal`xzWvL@4LZGy56wC&j zA&Y#cIM;Kj?eYk~fFGEev&|>3%e%+yI%&(bWVuaI(UV-~6jTx|^54k4!5>rl@$6yOme=Mzz8~*y?iC?MC_x024NN+pDy>ARrKo@jm8XR7+ZT zPRIoqLbhChhxB|DA6R}!s!-2|(7djmTlzxj@^P=xmip8NBRKrTaHqi_g$NXdp3wiz z>5?^Tt9Z^Q2q377UcubF@M6CwI?-8D+^6ir@h|8gK z{ep|4)x#wc+MFERl$Tbel&R^4-Yp4RZcv!k28+tkf=p@$Z@ls@I|CL)U#5@OlE-uf zVzXOw*u$}-7el2Dq^JBMw(F{33Fmq~!8mr4RDD504vYRBT?+6ryuHnh;pnA~QtB{k z%U9nx$}mjn9I7SLR?_6$ol2m3Yum?k(~RkOpIkjesC5)$>%8B3I>+TSD2N`PtDCle z<4HltzIfcq_-g1M%uYh-s7_G4$P5+}fTosAcmO!d<*HwV*tu^2(Pj=FcS5GdZBmay zZhiL?FhxfwjQ)V10PKI;bD>FA$_2~W^jq!TL3{_-siUzJ?1N|tInpjn9cQjY{_RlJ zDmJ(G+~qT}@?_LcAXvdN`3s0>_ZZ6#GzufH?TbcJ@74@AxtF@*e%BT?^sCMFG9X3~ zR*KgM#ms}%llqer6g3+RU4O4qL!gWpW~_|#(V<~f-N+;*2j{kt0fFvre&{dC=Ioy! z24}^ZCs(sjvO72I0cRRzgf2`PTj(8#)koXU9fp!fBt+a?Q|97Y*$w%jSx=9}q*(F% zg-=+edMXF2uy5$SVy=rOTHc(Hl!FxP%D~9szb;fN!N46BHP+E% zf|9FOzRj9;xttLyafvgWOj}+OZ#JF;bGtNwe7P4z< zVG5E1j@xJS_zefO0B&W`jIypPL6r+j(WG&+XZy zJ-NQcqnQ;CC5Y9E3uHfEG$uMfeEl+zIyn{EHgOKDFap7s?uD0GpYJmIWqM3&C_C-p z-Q1xqC$Hho!s20Q5e!I9!`OMAUZb(&`winhClh6yA%=XXzTo zfod)#=Ha4pECdm+_#Pn|Dv(pN{3V*n;1*3}isWZo2G)OLWwxMEV+mLKxN_ira~x)> zC#T@@{xW3~C8hi;yK)1N5pfwk@E)r)yvR0Ev13srmGUc-Ra|R(+YEE||8l zoRD_ijx*2f6{}B&u`B3IJSzuYm)X#5KZw3vwqJHZ@)seaUi^oBqfN?L7|C9_%>od~ zk0eNCBf&e>4jyf6bE6RNKZ)6yVAry*%AgC*8y|ePvi7;pEH=)ok-qsg(g@+^o%)Ay zkP{q(1agQBM6FF<| z&vAJSX7LojJ?9qRFf4ERgJF5qeBE$A_vt>-#W=^>-JqI3C>{c>z3J+&K$Wo3$8(w&7BDG{kaUt5-8Q z)B0V)TP9BDwnRTkxiB`+bJW(qk_acWlIdO?LzOLCUwm()H$}Pb9k{TH9l-CKhw^PSN7#2aYhrC1X#3Xs}(o1y+S0%|xGf*J!^oIlP=1+cZ4jq#S@L_Xo^$+5!X+b6)4$SIlm)ZFN(lzG7W4a!4wTs^+ z$mu0Qel2yi9&#U(9Vj~rb<|EgzGy~Df_9S64C%LZjx~Q9nwz4xO~T~{$ns~QdX`uK z(_-$Vxo;Yu@sWZjPn?O$9Zcr*Bm=2wZjoY*LS4*8%m)zcWiEg`yU!V7s`A|0vRDGq z+;AwAuR`IaXig?~qsN>G;&oQ?7OFOLJBof6EMi=|EzFWyDd340ELx*8b5%`FZZMH= z^+pQXfu*A5x(j4N?JHCJEnkY7-VLKaR z^Rj(;5vAtWCEL!zGE+4WG;e^of8z>WO8fEU$Hf<2r6$i;!#>1lN8jjzgx72M>m&Mb zb23*+dgm2?$zLaZ$9{7DYHCqqIGxTNdV&UP!ZAAn zf>RoxxCvs2GjvlDG8>`As9%S-Z5Ls^nagAPyN)+A>IAau_BFw9pedU2pVle*=|MU5 zLfRLZnzNUyd$vZ2-$59|BPnTX$O9o?FqX`{kCL{n9@#p+C|9vFx82#4d(_e zNmfKxr*NJJ!l9k*Du zUK8IyQ0OQ(8D;3tvf?R|;>~od`xmW9wTQDYA{*8!;c@Evt-;Idoeh~ap0U?ZLjt#M zB?oTOo%PuM=3y0!9W~q%#Wnddq`o4_sLNCQWtF? z5!f8tk=UQMt!FeNghWJwsHtyG?c8O3v*wQ@5ixk zW7Aa90VKDdYI#I!I^!Yr`})b3jV|rC&gZrNC=t|P!j{XfLbcf2h^Jf&-LskkjI$0I zqDT>oBpLf@xQzr^sF8!Q@JS)fxe?R;w&m<=xheghx#`!|Qhcv2soDp$c}{HBmkAu z@!r+(M-jWa;s%MK?p zIdJTL#`Rydt3ReV6tn-e?Ee_%aFGiZbZ`zk!fQ->aHAObybqF18?SN`=!RdT`2KBfDr)%Y5M>&TRkAbI08ycn5H zXV5LY=SSGl%RW1^GQx`ZhD6fXlV5` zKp+eSC7uxv#AnuzKYg?lP17BSYMPG9ZDVUHjG=xI`+=}$*;TKEXJe$(XKP~D0Ge

xzncCcEC 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

T`j6?d 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�i&&Q@kwT+DKad;4iHT2 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%0Dqb_6Id6 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 I|GWqOH()a(9RL6T diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1c240d5..7026dc2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -71,6 +71,7 @@ include_directories( ${THIRDPARTY_PATH}/spdlog-1.13.0/include ${THIRDPARTY_PATH}/OpenXLSX/include ${THIRDPARTY_PATH}/GmSSL-3.1.1/include + ${THIRDPARTY_PATH}/OpenSSL-3.5.3/include #${PVLIBS_PATH}/include/pvserver #${PVLIBS_PATH}/include/rllib ) @@ -108,7 +109,7 @@ target_link_libraries(${PROJECT_NAME} ${THIRDPARTY_PATH}/paho_mqtt/lib/paho-mqtt3c.lib ${THIRDPARTY_PATH}/OpenXLSX/lib/OpenXLSX.lib ${THIRDPARTY_PATH}/GmSSL-3.1.1/lib/gmssl.lib + ${THIRDPARTY_PATH}/OpenSSL-3.5.3/lib/VC/x64/MD/libcrypto.lib #${PVLIBS_PATH}/x64/serverlib.lib #${PVLIBS_PATH}/x64/rllib.lib - ) \ No newline at end of file diff --git a/src/app/Application.cpp b/src/app/Application.cpp index e430be7..16acd66 100644 --- a/src/app/Application.cpp +++ b/src/app/Application.cpp @@ -115,7 +115,7 @@ void Application::runThreadStat() while (!isQuit) { static TimeTick ttStat(1); - if(ttStat.elapse(10)) + if(Config::option.stat.enabled && ttStat.elapse(Config::option.stat.interval)) { // 设备历史数据(电压、电流、功率),存储到 history_day // 统计数据,存储到 stat_day diff --git a/src/app/Config.cpp b/src/app/Config.cpp index 2c1ce7d..7ed4d4c 100644 --- a/src/app/Config.cpp +++ b/src/app/Config.cpp @@ -24,6 +24,7 @@ bool Config::init(std::string filename) JSON::read(jsonroot, "weburl", option.webSrvUrl); JSON::read(jsonroot, "launchdate", option.lunchDate); JSON::read(jsonroot, "exportpath", option.exportpath); + JSON::read(jsonroot, "windowEnabled", option.windowEnabled); if (jsonroot.contains("database")) { @@ -110,6 +111,14 @@ bool Config::init(std::string filename) JSON::read(jsonItem, "enabled", info.enabled); } } + + if (jsonroot.contains("statistics")) + { + njson& json = jsonroot["statistics"]; + JSON::read(json, "enabled", option.stat.enabled); + JSON::read(json, "interval", option.stat.interval); + if (option.stat.interval <= 0) { option.stat.interval = 60; } + } return true; } diff --git a/src/app/Config.h b/src/app/Config.h index 47fad85..a0d0442 100644 --- a/src/app/Config.h +++ b/src/app/Config.h @@ -46,6 +46,12 @@ struct AppOption std::map mapVideo; + int windowEnabled {0}; + + struct { + int enabled {0}; + int interval {60}; + } stat; }; class Config diff --git a/src/app/DataStruct.cpp b/src/app/DataStruct.cpp index bccf39b..9ba79e7 100644 --- a/src/app/DataStruct.cpp +++ b/src/app/DataStruct.cpp @@ -2,18 +2,8 @@ #include "common/JsonN.h" #include "common/Utils.h" -std::string REGAddrOffset(std::string addr, int offset) -{ - unsigned int val; - std::stringstream ss; - ss << std::hex << addr; - ss >> val; - return Utils::toHexStr(val + offset); -} - std::map> REGAddr::s_mapReg; - void REGAddr::load(std::string filename) { njson json; diff --git a/src/app/DataStruct.h b/src/app/DataStruct.h index 013f6d4..701fc23 100644 --- a/src/app/DataStruct.h +++ b/src/app/DataStruct.h @@ -32,7 +32,7 @@ enum class EDeviceType PCU = 103, //103 PCU 1 BMS = 104, //104 BMS 1 BCU = 105, //105 BCU 1 - //106 充电桩 2 + CHARGER = 106, //106 充电桩 2 //107 充电枪 2 //108 集中器 2 //109 光伏板 3 diff --git a/src/app/Device.cpp b/src/app/Device.cpp index de62fbf..0428df5 100644 --- a/src/app/Device.cpp +++ b/src/app/Device.cpp @@ -241,16 +241,16 @@ bool Device::cache(int npos) if (iter != s_mapDeviceAddrCurve.end()) { auto& vecAddr = iter->second; - auto size = addrV.size(); + auto size = vecAddr.size(); if (size >= 1) { addrV = vecAddr[0]; } - else if (size >= 2) { addrI = vecAddr[1]; } - else if (size >= 3) { addrP = vecAddr[2]; } + if (size >= 2) { addrI = vecAddr[1]; } + if (size >= 3) { addrP = vecAddr[2]; } } // 根据设备类型从参数(寄存器地址)中读取实时数据进行保存 int U = Utils::toInt(this->getParam(addrV, "0")); int I = Utils::toInt(this->getParam(addrI, "0")); - int P = addrP.empty() ? U*I : Utils::toInt(this->getParam(addrP, "0")); + int P = addrP.empty() ? U*I*0.001 : Utils::toInt(this->getParam(addrP, "0")); mapCacheVoltage[npos] = U; mapCacheCurrent[npos] = I; mapCachePower[npos] = P; @@ -299,33 +299,33 @@ void Device::setParam(std::string k, int v) { running = 1; } - else if (type == 101) // EMS + else if (type == int(EDeviceType::EMS)) // 101 EMS { running = 1; } - else if (type == 102) // PCS + else if (type == int(EDeviceType::PCS)) // 102 PCS { if (k == "0x1003") err = v; // 故障状态 R uint16 1故障,0正常 0 0x1003 else if (k == "0x1005") online = v; // 设备在线 R uint16 1在线,0无效 1 0x1005 else if (k == "0x1009") running = (v==1 || v==2); //充放状态 R uint16 0:待机, 1:充电, 2:放电, 3:搁置 0 0x1009 } - else if (type == 103) // PCU + else if (type == int(EDeviceType::PCU)) // 103 PCU { if (k == "0x1002") err = v; //故障状态 R uint16 1故障,0正常 0 0x1002 else if (k == "0x1004") online = v; //设备在线 R uint16 1在线,0无效 1 0x1004 else if (k == "0x1006") running = v; //启停状态 R uint16 1开机,0关机 1 0x1006 } - else if (type == 104) // BMS + else if (type == int(EDeviceType::BMS)) // 104 BMS { - if (k == "0x004A") { err = (v==1); } //运行状态 R uint16 0 运行状态 0-正常 1-告警 2-保护 0x004A - else if (k == "0x004B") running = (v==1 || v==2); //充放电状态 R uint16 0 0-待机 1-充电 2-放电 0x004B + if (k == "0x0049") { err = (v==1); } //运行状态 R uint16 0 运行状态 0-正常 1-告警 2-保护 0x0049 + else if (k == "0x004A") { running = (v==1 || v==2); } //充放电状态 R uint16 0 0-待机 1-充电 2-放电 0x004A } else if (type == int(EDeviceType::BCU)) // BCU { if (k == "0xA003") { running = (v==0x33 || v==0x44); } //蓄电池充放电状态 R uint16 "0x11开路,0x22待机,0x33充电,0x44放电" 34 0xA003 else if (k == "0xA004") { err = (v==0x55); } //电池组运行状态 R uint16 "0x11跳机,0x22待机,0x33放空,0x44充满,0x55预警,0x66正常" 102 0xA004 } - else if (type == 106) // 充电桩 + else if (type == int(EDeviceType::CHARGER)) // 106 充电桩 { if (k == "21") { running = (mapParams["11"] == "充电" || mapParams["21"] == "充电"); // 充电状态: 0:空闲,1:充电 diff --git a/src/app/Station.cpp b/src/app/Station.cpp index 61ac872..038d18c 100644 --- a/src/app/Station.cpp +++ b/src/app/Station.cpp @@ -205,16 +205,23 @@ void Station::checkDevice() } } -void Station::readAlert(std::shared_ptr device, int v, std::string text) +void Station::readAlert(std::shared_ptr device, std::string addr, int v, std::string text) { - Fields fields; - fields.set("log_id", Snowflake::instance().getIdStr()); - if (device) { fields.set("device_id", device->deviceId); } - fields.set("type", int(EAlertType::DEVICE)); - fields.set("context", text + ":故障(" + std::to_string(v) + ")"); - fields.set("status", 1); - auto dao = DaoEntity::create("log_alert"); - dao->insertFields(fields); + int64_t ts = Utils::time(); + std::string alertId = std::to_string(device->deviceId) + "_" + addr; + int tsCache = mapAlertCache[alertId]; + if (ts - tsCache > 60*5) + { + Fields fields; + fields.set("log_id", Snowflake::instance().getIdStr()); + if (device) { fields.set("device_id", device->deviceId); } + fields.set("type", int(EAlertType::DEVICE)); + fields.set("content", text + ":故障(" + std::to_string(v) + ")"); + fields.set("status", 1); + auto dao = DaoEntity::create("log_alert"); + dao->insertFields(fields); + mapAlertCache[alertId] = ts; + } } void Station::readRuntimeData(int deviceNo, string addr, int val) @@ -360,12 +367,13 @@ void Station::writeStatistic() std::string dt = Utils::dateStr(); int64_t tTime = Utils::time(); int64_t tDate = Utils::date(); + int64_t tDelta = tTime - tDate; int npos = (tTime-tDate) / 600; for (auto iter = mapDevice.begin(); iter!=mapDevice.end(); ++iter) { auto device = iter->second; - if (device->cache(npos)) + if (device->cache(npos) && device->type == int(EDeviceType::BMS)) { Fields fields; fields.set("dt", dt); @@ -391,7 +399,6 @@ void Station::writeStatistic() Fields fields; fields.set("dt", Utils::dateStr(statData.ts)); fields.set("station_id", this->stationId); - fields.set("category", 1); fields.set("device_id", 0); fields.set("elect_in", statData.dayElectIn); fields.set("elect_out", statData.dayElectOut); diff --git a/src/app/Station.h b/src/app/Station.h index 7109251..c5b0e32 100644 --- a/src/app/Station.h +++ b/src/app/Station.h @@ -114,7 +114,7 @@ public: void setGarewayWorkMode(); void checkDevice(); - void readAlert(std::shared_ptr device, int v, std::string text); + void readAlert(std::shared_ptr device, std::string addr, int v, std::string text); void readRuntimeData(int deviceNo, string addr, int val); void readTHData(int deviceNo, string addr, int val); void readFire40Data(int deviceNo, string addr, int val); @@ -123,6 +123,7 @@ public: void readGatewayStatus(int cdzStatus, int emuStatus); void writeStatistic(); + int posDayStat {0}; public: int stationId {}; @@ -244,4 +245,6 @@ public: int cdzStatus {-1}; int emuStatus {-1}; + + std::map mapAlertCache; }; \ No newline at end of file diff --git a/src/common/Crypto.cpp b/src/common/Crypto.cpp index bc1b77c..86536fa 100644 --- a/src/common/Crypto.cpp +++ b/src/common/Crypto.cpp @@ -150,6 +150,79 @@ string Crypto::md5(string src) return md5_format(tempA) + md5_format(tempB) + md5_format(tempC) + md5_format(tempD); } +#include "common/Utils.h" + +static std::vector hexToByte(const std::string& hexstr) +{ + std::vector v; + v.reserve(hexstr.size() / 2); + for (std::string::const_iterator it = hexstr.begin(); it != hexstr.end(); it += 2) + { + v.push_back(static_cast(strtol(std::string(it, it + 2).c_str(), nullptr, 16))); + } + return v; +} + +std::string Crypto::gmssl_sm2Encrypt(std::string pubKeyHex, std::string priKeyHex, std::string plainByte) +{ + std::vector pub_key = hexToByte(pubKeyHex); + + std::vector pri_keyBuf = hexToByte(priKeyHex); + sm2_z256_t pri_key {0}; + sm2_z256_from_bytes(pri_key, pri_keyBuf.data()); + + SM2_KEY sm2k; + sm2_key_set_public_key(&sm2k, (SM2_Z256_POINT*)pub_key.data()); // +1 跳过 0x04 标记 + sm2_key_set_private_key(&sm2k, pri_key); + sm2_key_print(stderr, 0, 4, "SM2_KEY", &sm2k); + + //std::vector plainText(plainByte.begin(), plainByte.end()); + std::vector ciphertext(SM2_MAX_CIPHERTEXT_SIZE); + size_t ciphertext_len = 0; + + int ret = sm2_encrypt(&sm2k, (const uint8_t*)plainByte.data(), plainByte.size(), ciphertext.data(), &ciphertext_len); + return std::string(ciphertext.begin(), ciphertext.begin()+ciphertext_len); +} + + +std::string Crypto::gmssl_sm2Decrypt(std::string pubKeyHex, std::string priKeyHex, std::string cipherByte) +{ + std::vector pub_key = hexToByte(pubKeyHex); + + std::vector pri_keyBuf = hexToByte(priKeyHex); + sm2_z256_t pri_key {0}; + sm2_z256_from_bytes(pri_key, pri_keyBuf.data()); + + SM2_KEY sm2k; + sm2_key_set_public_key(&sm2k, (SM2_Z256_POINT*)pub_key.data()); // +1 跳过 0x04 标记 + sm2_key_set_private_key(&sm2k, pri_key); + sm2_key_print(stderr, 0, 4, "SM2_KEY", &sm2k); + + //std::string ciphertHex = "44d37f6c644f22508b5387663e3a174384917eba7ce3b2a5bb9f79e191d40dfc6c0cfaf1819af562c1ee1bffcc55d2fb1da8114527e3a6993aaadda12a26b4b6f688ecd5d7700c8bd82a069ab4b30e0b499eef82d1dfeea261d2fd19d1f0ae95a4b3fd"; + //Utils::toHex(ciphertext, ciphertext_len); + //std::vector buf = hexToByte(ciphertHex); + std::vector plainText(SM2_MAX_PLAINTEXT_SIZE); + size_t len = 0; + int ret = sm2_decrypt(&sm2k, (const uint8_t*)cipherByte.data(), cipherByte.size(), plainText.data(), &len); + return std::string(plainText.begin(), plainText.begin() + len); +} + + +string Crypto::sm3(std::string data) +{ + SM3_CTX ctx; + sm3_init(&ctx); + sm3_update(&ctx, (const unsigned char*)data.data(), data.length()); + std::vector digest(SM3_DIGEST_SIZE); + sm3_finish(&ctx, digest.data()); + std::stringstream ss; + for (int i = 0; i < digest.size(); ++i) + { + ss << std::hex << std::setw(2) << std::setfill('0') << (int)digest[i]; + } + return ss.str(); +} + std::vector Crypto::sm4EcbEncrypt(const std::vector& key, const std::vector& plaintext) { SM4_KEY sm4_key; @@ -172,4 +245,175 @@ std::vector Crypto::sm4EcbDecrypt(const std::vector& key, cons sm4_encrypt(&sm4_key, &ciphertext[i], &plaintext[i]); // 注意解密时也是用sm4_encrypt函数,但密钥是解密密钥 } return plaintext; +} + + +// 错误处理函数 +static void HandleOpensslError() +{ + ERR_print_errors_fp(stderr); + unsigned long err = ERR_get_error(); +} + +// SM2 加密函数 +std::string Crypto::ssl_sm2Encrypt(const std::string& public_key_hex, const std::string& plaintext) +{ + EVP_PKEY* pubkey = Crypto::create_sm2_public_key_from_hex(public_key_hex); + + EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(pubkey, NULL); + if (!ctx) HandleOpensslError(); + + if (EVP_PKEY_encrypt_init(ctx) <= 0) HandleOpensslError(); + + // 获取加密后数据的长度 + size_t ciphertext_len; + if (EVP_PKEY_encrypt(ctx, NULL, &ciphertext_len, (const uint8_t*)plaintext.data(), plaintext.size()) <= 0) { + HandleOpensslError(); + } + + // 执行加密 + std::vector ciphertext(ciphertext_len); + if (EVP_PKEY_encrypt(ctx, ciphertext.data(), &ciphertext_len, (const uint8_t*)plaintext.data(), plaintext.size()) <= 0) { + HandleOpensslError(); + } + + // 清理资源 + EVP_PKEY_CTX_free(ctx); + EVP_PKEY_free(pubkey); + // 清理 OpenSSL + EVP_cleanup(); + ERR_free_strings(); + + return std::string(ciphertext.begin(), ciphertext.begin() + ciphertext_len); +} + +// SM2 解密函数 +std::string Crypto::ssl_sm2Decrypt(const std::string& private_key_hex, const std::string& ciphertext) +{ + EVP_PKEY* privkey = Crypto::create_sm2_private_key_from_hex(private_key_hex); + EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(privkey, NULL); + if (!ctx) HandleOpensslError(); + + if (EVP_PKEY_decrypt_init(ctx) <= 0) HandleOpensslError(); + + // 获取解密后数据的长度 + size_t plaintext_len; + if (EVP_PKEY_decrypt(ctx, NULL, &plaintext_len, (const uint8_t*)ciphertext.data(), ciphertext.size()) <= 0) { + HandleOpensslError(); + } + + // 执行解密 + std::vector plaintext(plaintext_len); + if (EVP_PKEY_decrypt(ctx, plaintext.data(), &plaintext_len, (const uint8_t*)ciphertext.data(), ciphertext.size()) <= 0) { + HandleOpensslError(); + } + + EVP_PKEY_CTX_free(ctx); + EVP_PKEY_free(privkey); + + // 清理 OpenSSL + EVP_cleanup(); + ERR_free_strings(); + + return std::string(plaintext.begin(), plaintext.begin() + plaintext_len); +} + +// 将16进制字符串转换为字节数组 +static std::vector hexToBytes(const std::string& hex) { + std::vector bytes; + for (size_t i = 0; i < hex.length(); i += 2) + { + std::string byteString = hex.substr(i, 2); + unsigned char byte = static_cast(strtol(byteString.c_str(), NULL, 16)); + bytes.push_back(byte); + } + + return bytes; +} + +// 从16进制字符串创建SM2私钥 +EVP_PKEY* Crypto::create_sm2_private_key_from_hex(const std::string& private_key_hex) +{ + // 将16进制私钥转换为字节 + std::vector private_key_bytes = hexToBytes(private_key_hex); + + // 创建BIGNUM + BIGNUM* privBN = BN_bin2bn(private_key_bytes.data(), private_key_bytes.size(), NULL); + if (!privBN) HandleOpensslError(); + + // 创建EC_KEY并设置曲线和私钥 + EC_KEY* ecKey = EC_KEY_new_by_curve_name(NID_sm2); + if (!ecKey) HandleOpensslError(); + + if (!EC_KEY_set_private_key(ecKey, privBN)) { + HandleOpensslError(); + } + + // 计算公钥 + const EC_GROUP* group = EC_KEY_get0_group(ecKey); + EC_POINT* pub_point = EC_POINT_new(group); + if (!pub_point) HandleOpensslError(); + + if (!EC_POINT_mul(group, pub_point, privBN, NULL, NULL, NULL)) { + HandleOpensslError(); + } + + if (!EC_KEY_set_public_key(ecKey, pub_point)) { + HandleOpensslError(); + } + + // 创建EVP_PKEY + EVP_PKEY* pkey = EVP_PKEY_new(); + if (!pkey) HandleOpensslError(); + + if (!EVP_PKEY_set1_EC_KEY(pkey, ecKey)) { + HandleOpensslError(); + } + + // 清理资源 + BN_free(privBN); + EC_POINT_free(pub_point); + EC_KEY_free(ecKey); + + return pkey; +} + + + +// 从16进制字符串创建SM2公钥 +EVP_PKEY* Crypto::create_sm2_public_key_from_hex(const std::string& public_key_hex) +{ + // 将16进制公钥转换为字节 + std::vector public_key_bytes = hexToBytes(public_key_hex); + + // 创建EC_KEY + EC_KEY* ec_key = EC_KEY_new_by_curve_name(NID_sm2); + if (!ec_key) HandleOpensslError(); + + // 从字节创建公钥点 + const EC_GROUP* group = EC_KEY_get0_group(ec_key); + EC_POINT* pub_point = EC_POINT_new(group); + if (!pub_point) HandleOpensslError(); + + if (!EC_POINT_oct2point(group, pub_point, public_key_bytes.data(), public_key_bytes.size(), NULL)) { + HandleOpensslError(); + } + + if (!EC_KEY_set_public_key(ec_key, pub_point)) { + HandleOpensslError(); + } + + // 创建EVP_PKEY + EVP_PKEY* pkey = EVP_PKEY_new(); + if (!pkey) HandleOpensslError(); + + if (!EVP_PKEY_set1_EC_KEY(pkey, ec_key)) { + HandleOpensslError(); + } + + // 清理资源 + EC_POINT_free(pub_point); + EC_KEY_free(ec_key); + + return pkey; } \ No newline at end of file diff --git a/src/common/Crypto.h b/src/common/Crypto.h index 384b3cd..afb04fa 100644 --- a/src/common/Crypto.h +++ b/src/common/Crypto.h @@ -1,14 +1,29 @@ #ifndef _Crypto_H_ #define _Crypto_H_ - -#include -#include #include #include +#include +#include +#include +#include + +#include +#include #include #include -#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + using namespace std; @@ -16,7 +31,14 @@ using namespace std; class Crypto { public: - static string md5(string src); + static string md5(string data); + + static string sm3(std::string data); + + + static std::string gmssl_sm2Encrypt(std::string pubKeyHex, std::string priKeyHex, std::string plain); + static std::string gmssl_sm2Decrypt(std::string pubKeyHex, std::string priKeyHex, std::string cipher); + /** * @brief SM4-ECB 加密示例 @@ -33,6 +55,13 @@ public: * @return 明文字节向量 */ static std::vector sm4EcbDecrypt(const std::vector& key, const std::vector& ciphertext); + + + static std::string ssl_sm2Encrypt(const std::string& public_key_hex, const std::string& plaintext); + static std::string ssl_sm2Decrypt(const std::string& private_key_hex, const std::string& ciphertext); + + static EVP_PKEY* create_sm2_private_key_from_hex(const std::string& private_key_hex); + static EVP_PKEY* create_sm2_public_key_from_hex(const std::string& public_key_hex); }; #endif // ! _Crypto_H_ \ No newline at end of file diff --git a/src/common/Utils.cpp b/src/common/Utils.cpp index 0e8fed2..9acb97a 100644 --- a/src/common/Utils.cpp +++ b/src/common/Utils.cpp @@ -6,6 +6,36 @@ #include using namespace std; +std::string Utils::toHex(std::vector& s, int len/*=0*/) +{ + if (len == 0) len = s.size(); + std::stringstream ss; + for (int i = 0; i < len; ++i) + { + ss << std::hex << std::setw(2) << std::setfill('0') << (int)s[i]; + } + return ss.str(); +} +std::string Utils::toHex(const std::string& s) +{ + std::stringstream ss; + for (int i = 0; i < s.size(); ++i) + { + ss << std::hex << std::setw(2) << std::setfill('0') << (int)static_cast(s[i]); + } + return ss.str(); +} +std::string Utils::fromHex(const std::string& hexstr) +{ + std::vector v; + v.reserve(hexstr.size() / 2); + for (std::string::const_iterator it = hexstr.begin(); it != hexstr.end(); it += 2) + { + v.push_back(static_cast(strtol(std::string(it, it + 2).c_str(), nullptr, 16))); + } + return std::string(v.begin(), v.end()); +} + string Utils::toStr(int v) { return std::to_string(v); @@ -499,9 +529,3 @@ std::string Utils::readFile(std::string filename) } -std::string Utils::toHexStr(int64_t val) -{ - std::stringstream ss; - ss << "0x" << std::uppercase << setw(4) << setfill('0') << std::hex << val; - return ss.str(); -} \ No newline at end of file diff --git a/src/common/Utils.h b/src/common/Utils.h index 853d950..cc806b6 100644 --- a/src/common/Utils.h +++ b/src/common/Utils.h @@ -16,6 +16,10 @@ using namespace std; class Utils { public: + static std::string toHex(std::vector& s, int len = 0); + static std::string toHex(const std::string& s); + static std::string fromHex(const std::string& hexstr); + static string toStr(int v); static string toStr(float v, int precision = 2); static string toStr(double v, int precision = 2); @@ -85,8 +89,6 @@ public: static void split(string buf, string c, vector& res); static std::string readFile(std::string filename); - - static std::string toHexStr(int64_t val); }; class TimeTick diff --git a/src/main.cpp b/src/main.cpp index 7c2163e..ecfd920 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,130 +1,179 @@ #include +#include #include - -#include -#include -#include - -#include "common/Utils.h" -#include "common/Snowflake.h" -#include "common/JsonN.h" - -#include "app/Application.h" -#include "app/Config.h" -#include "protocol/TcpEntity.h" - -#include "widgets/MainWindow.h" - - -#include "common/Spdlogger.h" -#include "database/DaoEntity.h" - #include #include #include #include #include -#include -#include "DataStruct.h" +#include +#include +#include -#include "qt/MainWeb.h" +#include "common/Utils.h" +#include "common/Snowflake.h" +#include "common/JsonN.h" +#include "common/Spdlogger.h" +#include "common/XlsxEntity.h" +#include "common/Crypto.h" + +#include "app/Application.h" +#include "app/Config.h" +#include "app/DataStruct.h" #include "database/Dao.h" -#include "common/XlsxEntity.h" +#include "protocol/TcpEntity.h" +#include "widgets/MainWindow.h" +#include "qt/MainWeb.h" +#include "qt/MainApp.h" -void memberJsonTest() +int SM2_test() { - std::string fromJson = "fromJson(const std::string& str) {\nNJsonNode jsonroot;\nauto ret = NJson::parse(str, jsonroot);\nif (!ret) { return; }\n"; - std::string toJson = "toJson() {\nNJsonNode jsonroot;"; + // 未压缩格式(最常见) + // 前缀 : 04 (1字节) X坐标 : 32字节(64个十六进制字符), Y坐标 : 32字节(64个十六进制字符),总长度 : 1 + 32 + 32 = 65字节 = 130个十六进制字符 + std::string hex_pub_key = "04661013d0b881d817085a251f0c0a7024e72c76e6eb0fd22c0170a508b123864ef7514df30cecb45deecf9b35810d0315b5164d63199c971ac3323c228ab48606"; + std::string hex_pri_key = "b935087295c448b221abc571d88018ee9d037407c32aa4d7fbf627a143ad86a0"; - std::ifstream ifs("", std::ios::in); - std::string line; - std::string cpp = "#include \"DataStruct.h\"\n\n"; - if (ifs.is_open()) - { - std::string s1; - std::string s2; - while (std::getline(ifs, line)) - { - int pos = line.find("struct"); - if (pos != std::string::npos) - { - std::string className = line.substr(pos+7); - s1 = "void " + className + "::" + fromJson; - s2 = "}\nstd::string " + className + "::" + toJson; - } - else - { - std::string key; - pos = line.find("uint"); - if (pos != std::string::npos) { key = line.substr(pos+9); } - if (!key.empty()) - { - pos = key.find(";"); - if (pos != std::string::npos) { key = key.substr(0, pos); } - } - if (!key.empty()) - { - s1 += ("NJson::read(jsonroot, \"" + key + "\", " + key + ");\n"); - s2 += ("jsonroot[\"" + key + "\"] = " + key + ";\n"); - } - } - } - ifs.close(); - } + std::string cipherText = Crypto::gmssl_sm2Encrypt(hex_pub_key, hex_pri_key, "123456"); + std::cout << "加密: " << Utils::toHex(cipherText) << std::endl; - //std::string strTmp = R"()"; - //std::vector vecTmp; - //Utils::split(strTmp, "\n", vecTmp); + std::string text = "306f022100f180bb383cddea024dfb6fea6c321f4b6901a468646df3da7d0040ebf107199f022009c363df8958c037f658da7060d429647802ac40560140e79685884a38f81cb10420783eb5b893994afdf7f68e2123e0c6e9469b3ea1f26297cb2b8e9cf6e27162a60406f99e4cbe6655"; + std::string plainText = Crypto::gmssl_sm2Decrypt(hex_pub_key, hex_pri_key, Utils::fromHex(text)); + std::cout << "解密: " << plainText << std::endl; - //std::string from = "void fromJson(const std::string& str) {\nNJsonNode jsonroot;\nauto ret = NJson::parse(str, jsonroot);\nif (!ret) { return; }\n"; - //std::string to = "std::string toJson() {\nNJsonNode jsonroot;"; - //for (auto& item: vecTmp) //{ - // std::string key; - // int pos = item.find_first_of("_"); - // if (pos != std::string::npos) { key = item.substr(pos+3); } - // pos = key.find_first_of(";"); - // if (pos != std::string::npos) { key = key.substr(0, pos); } + // SM2_KEY sm2k; - // if (!key.empty()) + // FILE* f = fopen("D:/sm2pub.pem", "rb"); + // if (f) // { - // from += ("NJson::read(jsonroot, \"" + key + "\", " + key + ");\n"); - // to += ("jsonroot[\"" + key + "\"] = " + key + ";\n"); + // sm2_public_key_info_from_pem(&sm2k, f); + // std::vector plainText(SM2_MAX_PLAINTEXT_SIZE); + // std::vector ciphertext(SM2_MAX_CIPHERTEXT_SIZE); + // size_t ciphertext_len = -1; + // int ret = sm2_encrypt(&sm2k, plainText.data(), plainText.size(), ciphertext.data(), &ciphertext_len); + // std::cout << "加密: " << Utils::toHex(ciphertext, ciphertext_len) << std::endl; // } + + // FILE* f1 = fopen("D:/sm2.pem", "rb"); + // if (f1) + // { + // sm2_private_key_info_from_pem(&sm2k, f1); + // } + // sm2_key_print(stderr, 0, 4, "SM2_KEY", &sm2k); + + // std::cout << ""; //} - //from += "}"; - //to += "return jsonroot.dump();\n}"; - //std::cout << from << std::endl; - //std::cout << to << std::endl; + + return 0; } -#include "common/Crypto.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// 错误处理函数 +void HandleOpensslError() { + ERR_print_errors_fp(stderr); + exit(EXIT_FAILURE); +} + +// 将16进制字符串转换为字节数组 +std::vector hexToBytes(const std::string& hex) { + std::vector bytes; + + for (size_t i = 0; i < hex.length(); i += 2) { + std::string byteString = hex.substr(i, 2); + unsigned char byte = static_cast(strtol(byteString.c_str(), NULL, 16)); + bytes.push_back(byte); + } + + return bytes; +} + +// 将字节数组转换为16进制字符串 +std::string bytes_to_hex(const std::vector& bytes) { + std::stringstream ss; + ss << std::hex << std::setfill('0'); + + for (unsigned char byte : bytes) { + ss << std::setw(2) << static_cast(byte); + } + + return ss.str(); +} + +void OpensslSM2_test() +{ + // 初始化 OpenSSL + OpenSSL_add_all_algorithms(); + + ERR_load_crypto_strings(); + + // 示例16进制密钥 + std::string private_key_hex = "b935087295c448b221abc571d88018ee9d037407c32aa4d7fbf627a143ad86a0"; + std::string public_key_hex = "04661013d0b881d817085a251f0c0a7024e72c76e6eb0fd22c0170a508b123864ef7514df30cecb45deecf9b35810d0315b5164d63199c971ac3323c228ab48606"; + + // 要加密的明文 + std::string plaintext = "123"; + + std::cout << "Original text: " << plaintext << std::endl; + std::cout << "Private key (hex): " << private_key_hex << std::endl; + std::cout << "Public key (hex): " << public_key_hex << std::endl; + + // 加密 + auto ciphertext = Crypto::ssl_sm2Encrypt(public_key_hex, plaintext); + std::cout << "Ciphertext (hex): " << Utils::toHex(ciphertext) << std::endl; + + // 解密^ + auto decryptedText = Crypto::ssl_sm2Decrypt(private_key_hex, ciphertext); + std::cout << "Decrypted text: " << decryptedText << std::endl; + + // 验证加解密是否正确 + if (plaintext == decryptedText) { + std::cout << "SM2 encryption and decryption successful!" << std::endl; + } + else { + std::cout << "SM2 encryption and decryption failed!" << std::endl; + } + + { + // 未压缩格式(最常见) + // 前缀 : 04 (1字节) X坐标 : 32字节(64个十六进制字符), Y坐标 : 32字节(64个十六进制字符),总长度 : 1 + 32 + 32 = 65字节 = 130个十六进制字符 + //std::string private_key_hex = "04661013d0b881d817085a251f0c0a7024e72c76e6eb0fd22c0170a508b123864ef7514df30cecb45deecf9b35810d0315b5164d63199c971ac3323c228ab48606"; + //std::string public_key_hex = "b935087295c448b221abc571d88018ee9d037407c32aa4d7fbf627a143ad86a0"; + + //std::string cipherText = Crypto::sm2Encrypt(public_key_hex, private_key_hex, "123456"); + //std::cout << "加密: " << Utils::toHex(cipherText) << std::endl; + + std::string text(ciphertext.begin(), ciphertext.end()); + //std::string textHex = "306f022100f180bb383cddea024dfb6fea6c321f4b6901a468646df3da7d0040ebf107199f022009c363df8958c037f658da7060d429647802ac40560140e79685884a38f81cb10420783eb5b893994afdf7f68e2123e0c6e9469b3ea1f26297cb2b8e9cf6e27162a60406f99e4cbe6655"; + //std::string text = Utils::fromHex(text); + std::string plainText = Crypto::gmssl_sm2Decrypt(public_key_hex, private_key_hex, text); + std::cout << "解密: " << plainText << std::endl; + } +} int main(int argc, char** argv) { - // 示例密钥 (16字节) - std::string key = "1234567890123456"; - // 示例明文 (必须是16字节的整数倍,本例为16字节) - std::string plaintext = "HelloWorld"; - - // 加密 - auto encryptText = Crypto::sm4EcbEncrypt(vector(key.begin(), key.end()), vector(plaintext.begin(), plaintext.end())); - // 解密 - auto decryptText = Crypto::sm4EcbDecrypt(vector(key.begin(), key.end()), encryptText); - - // 输出十六进制结果 - std::cout << "Original: " << plaintext << std::endl; - std::cout << "Encrypted: " << std::string(encryptText.begin(), encryptText.end()) << std::endl; - std::cout << "Decrypted: " << std::string(decryptText.begin(), decryptText.end()) << std::endl; - // 设置控制台输出为 UTF-8 编码 SetConsoleOutputCP(CP_UTF8); // 设置控制台输入为 UTF-8 编码(如果需要输入中文) SetConsoleCP(CP_UTF8); + + //OpensslSM2_test(); + //SM2_test(); + // 初始化日志 Spdlogger::init(spdlog::level::info, ""); spdlog::info("[main] start ... ======================================================================"); @@ -133,7 +182,24 @@ int main(int argc, char** argv) // 运行后台服务 Application::instance().init(); - while (1) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); }; + + if (Config::option.windowEnabled) + { + QApplication qapp(argc, argv); + + QFont font("微软雅黑", 10, 600); + QApplication::setFont(font); + MainApp mainApp; + return qapp.exec(); + } + else + { + while (1) + { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + }; + return 0; + } // 启动 PV 服务主线程 //std::thread([=]() diff --git a/src/protocol/HttpEntity.cpp b/src/protocol/HttpEntity.cpp index d72384b..429ebf4 100644 --- a/src/protocol/HttpEntity.cpp +++ b/src/protocol/HttpEntity.cpp @@ -1042,19 +1042,16 @@ Errcode HttpEntity::updateAlertLog(const httplib::Request& req, njson& json, std Errcode HttpEntity::queryPredictionDetail(const httplib::Request& req, njson& json, std::string& errmsg) { - njson jsonData = njson::array(); - - std::vector vecStoreIn(144), vecStoreOut(144), vecCharge(144), vecSolar(144), vecSolarP(144); - for (int i = 0; i<144; ++i) + const int num = 144; + std::vector vecStoreIn(num, 0), vecStoreOut(num, 0), vecCharge(num, 0), vecSolar(num, 0), vecSolarP(num, 0); + for (int i = 0; iqos, len, payload); + spdlog::info("[mqtt] <<< message arrived: topic=[{},{}], len={}, payload={}", topic, msg->qos, len, payload); njson json; bool ret = JSON::parse(payload, json); @@ -388,9 +388,9 @@ void MqttClient::ParseArrivedMessage(njson& json, string command, std::shared_pt { auto addr = iter->first; auto& regUnit = iter->second; - if (regUnit.alert && val>=0) + if (regUnit.alert && val > 0) { - station->readAlert(device, val, "[" + command + "]" + regUnit.name + "(" + addr + ")"); + station->readAlert(device, addr, val, "[" + command + "]" + regUnit.name + "(" + addr + ")"); } device->setParam(addr, val); diff --git a/src/qt/MainApp.cpp b/src/qt/MainApp.cpp new file mode 100644 index 0000000..03483ed --- /dev/null +++ b/src/qt/MainApp.cpp @@ -0,0 +1,178 @@ +#include "MainApp.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static const std::string QSS_BTN_MENU = +"QPushButton{background:rgba(50,128,218,200);color:white;border-radius:5px;border:2px solid rgb(10,120,215);font:bold 18px;}" +"QPushButton:hover{background-color:rgb(32,164,128);}" +"QPushButton:pressed{border-width:3px 0 0 3px;background-color:rgb(1,32,54);border-style:inset;}" +"QPushButton:disabled{color:rgb(150,150,150);}"; + +static const std::string QSS_LINE = +"QLineEdit { background-color: rgb(14, 49, 66); color: #ffffff; border: 1px solid rgb(18, 251, 255); border-radius: 5px; font: normal 13px; }"; + +static const std::string QSS_GROUP = +"QGroupBox { border: 1px solid gray; margin-top: 8px; border-radius: 5px;}" +"QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; left:10px; margin-left: 0px; padding:0 1px; }"; + +MainApp::MainApp() +{ + QPalette palette(this->palette()); + + // 设置背景为黑色 + palette.setColor(QPalette::Window, QColor(1, 32, 54)); + this->setAutoFillBackground(true); + this->setPalette(palette); + this->setStyleSheet("color: white;"); + + this->resize(1440, 900); + this->show(); + + //ui.bkg.setGeometry(0, 0, 1440, 900); + //ui.bkg.setStyleSheet("background-color: rgb(17, 36, 102);"); + + //ui.weburl = std::make_shared(this, 10, 10, 240, 30); + //ui.weburl->setTitle("页面地址:"); + //ui.weburl->setValue("http://www.baidu.com"); + + this->setMyLayout(); +} + +class MyMenu : public QWidget +{ +public: + MyMenu(QWidget* parent) : QWidget(parent), layout(this) + { + this->setObjectName("menu"); + this->setStyleSheet("#menu { background-color:rgba(120,120,120,80); }"); + this->show(); + vecMenuItems.reserve(20); + + layout.setSpacing(2); + layout.setContentsMargins(2, 2, 2, 2); + + this->addMenuItem("系统总览"); + this->addMenuItem("运行监控"); + } + + void addMenuItem(std::string name) + { + int row = vecMenuItems.size(); + auto item = std::make_shared(this); + vecMenuItems.push_back(item); + item->setText(name.c_str()); + item->setStyleSheet(QSS_BTN_MENU.c_str()); + + QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + item->setSizePolicy(sizePolicy); + layout.addWidget(item.get(), row, 0, 1, 1); + + // 设置列宽和行高 + layout.setRowMinimumHeight(row, 50); // 设置第0列的最小宽度为100像素 + // 设置列和行的伸缩因子 + layout.setRowStretch(row, 0); // 设置第0列的伸缩因子为0,不伸缩 + layout.setRowStretch(row+1, 2); // 设置第1列的伸缩因子为2,使其更宽 + } + + std::vector> vecMenuItems; + + QGridLayout layout; +}; + +void PairLine(QWidget* parent, int x, int y, string k, string v) +{ + auto key = new QLabel(parent); + key->setText(k.c_str()); + key->setGeometry(x, y, 80, 26); + auto value = new QLineEdit(parent); + value->setText(v.c_str()); + value->setGeometry(x+80, y, 180, 26); + value->setStyleSheet(QSS_LINE.c_str()); +} + + +class MyWorkspace : public QWidget +{ +public: + MyWorkspace(QWidget* parent) : QWidget(parent) + { + this->setObjectName("workspace"); + this->setStyleSheet("#workspace { background-color:rgba(100,100,100,50); }"); + + int x=10, y=10; + { + QGroupBox* groupBox = new QGroupBox("HTTP", this); + groupBox->setGeometry(x, y, 300, 120); + groupBox->setStyleSheet(QSS_GROUP.c_str()); + + PairLine(groupBox, 20, 20, "服务类型: ", "服务端"); + PairLine(groupBox, 20, 50, "服务地址: ", "92.168.0.13:17900"); + PairLine(groupBox, 20, 80, "服务状态: ", "---"); + } + { + x += 320; + QGroupBox* groupBox = new QGroupBox("MQTT", this); + groupBox->setGeometry(x, y, 300, 120); + groupBox->setStyleSheet(QSS_GROUP.c_str()); + + PairLine(groupBox, 20, 20, "服务类型: ", "客户端"); + PairLine(groupBox, 20, 50, "服务地址: ", "92.168.0.13:17800"); + PairLine(groupBox, 20, 80, "服务状态: ", "---"); + } + { + x += 320; + QGroupBox* groupBox = new QGroupBox("数据库", this); + groupBox->setGeometry(x, y, 300, 120); + groupBox->setStyleSheet(QSS_GROUP.c_str()); + + PairLine(groupBox, 20, 20, "数据库名: ", "ees"); + PairLine(groupBox, 20, 50, "主机地址: ", "92.168.0.13:17800"); + PairLine(groupBox, 20, 80, "用 户 名: ", "root"); + } + } + +}; + +void MainApp::setMyLayout() +{ + layout.main = std::make_shared(this); + + auto Widget = this; + + layout.main->setObjectName(QString::fromUtf8("layout.main")); + layout.main->setSpacing(6); + layout.main->setContentsMargins(11, 11, 11, 11); + //// 设置间距和边距 + //layout->setHorizontalSpacing(10); // 设置列间距为10像素 + //layout->setVerticalSpacing(10); // 设置行间距为10像素 + //layout->setContentsMargins(10, 10, 10, 10); // 设置内容边距为10像素 + + QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + + MyMenu* menu = new MyMenu(this); + menu->setSizePolicy(sizePolicy); + layout.main->addWidget(menu, 0, 0, 1, 1); + + MyWorkspace* workspace = new MyWorkspace(this); + workspace->setSizePolicy(sizePolicy); + layout.main->addWidget(workspace, 0, 1, 1, 1); + + // 设置列宽和行高 + layout.main->setColumnMinimumWidth(0, 200); // 设置第0列的最小宽度为100像素 + //gridLayout->setRowMinimumHeight(0, 200); // 设置第0行的最小高度为50像素 + + // 设置列和行的伸缩因子 + layout.main->setColumnStretch(0, 0); // 设置第0列的伸缩因子为0,不伸缩 + layout.main->setColumnStretch(1, 2); // 设置第1列的伸缩因子为2,使其更宽 + //gridLayout->setRowStretch(0, 1); // 设置第0行的伸缩因子为1 + +} \ No newline at end of file diff --git a/src/qt/MainApp.h b/src/qt/MainApp.h new file mode 100644 index 0000000..b157694 --- /dev/null +++ b/src/qt/MainApp.h @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include +using namespace std; + +class LabelPair +{ +public: + LabelPair(QWidget* parent, int x, int y, int w, int h) + { + title.setParent(parent); + value.setParent(&title); + + title.setGeometry(x, y, w, h); + value.setGeometry(80, 0, w-80, h); + + title.show(); + value.show(); + } + + void setTitle(std::string text) + { + title.setText(text.c_str()); + } + + void setValue(std::string text) + { + value.setText(text.c_str()); + } + + QLabel title; + QLabel value; +}; + +class MainApp : public QWidget +{ + Q_OBJECT +public: + MainApp(); + + void setMyLayout(); + + struct { + std::shared_ptr weburl {}; + } ui; + + struct { + std::shared_ptr main; + } layout; + +}; \ No newline at end of file diff --git a/thirdparty/GmSSL-3.1.1/bin/gmssl.dll b/thirdparty/GmSSL-3.1.1/bin/gmssl.dll index a1ec03db09eb755688a243098860808882c34745..48bfef738c4600df45632c55675f2ceb7f944fdf 100644 GIT binary patch literal 1107968 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

{QpS*oNt`|$=KoPAICjU|C|JblzXSc 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

xzncCcEC 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

T`j6?d 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�i&&Q@kwT+DKad;4iHT2 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%0Dqb_6Id6 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 I|GWqOH()a(9RL6T diff --git a/thirdparty/GmSSL-3.1.1/bin/gmssl.exe b/thirdparty/GmSSL-3.1.1/bin/gmssl.exe index 7f5202a3daf1161641bec6f4837cad799cbdb7b0..bfc57536760333a8b840041b81e387434e8bfe96 100644 GIT binary patch literal 217600 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
ZaUO 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 diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/aead.h b/thirdparty/GmSSL-3.1.1/include/gmssl/aead.h deleted file mode 100644 index 1bc13b5..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/aead.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -#ifndef GMSSL_AEAD_H -#define GMSSL_AEAD_H - -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef struct { - SM4_CBC_CTX enc_ctx; - SM3_HMAC_CTX mac_ctx; - uint8_t mac[SM3_HMAC_SIZE]; - size_t maclen; -} SM4_CBC_SM3_HMAC_CTX; - -#define SM4_CBC_SM3_HMAC_KEY_SIZE 48 -#define SM4_CBC_SM3_HMAC_IV_SIZE 16 - -_gmssl_export int sm4_cbc_sm3_hmac_encrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx, - const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen); -_gmssl_export int sm4_cbc_sm3_hmac_encrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx, - const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -_gmssl_export int sm4_cbc_sm3_hmac_encrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx, - uint8_t *out, size_t *outlen); -_gmssl_export int sm4_cbc_sm3_hmac_decrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx, - const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen); -_gmssl_export int sm4_cbc_sm3_hmac_decrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx, - const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -_gmssl_export int sm4_cbc_sm3_hmac_decrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx, - uint8_t *out, size_t *outlen); - - -typedef struct { - SM4_CTR_CTX enc_ctx; - SM3_HMAC_CTX mac_ctx; - uint8_t mac[SM3_HMAC_SIZE]; - size_t maclen; -} SM4_CTR_SM3_HMAC_CTX; - -#define SM4_CTR_SM3_HMAC_KEY_SIZE 48 -#define SM4_CTR_SM3_HMAC_IV_SIZE 16 - -_gmssl_export int sm4_ctr_sm3_hmac_encrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx, - const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen); -_gmssl_export int sm4_ctr_sm3_hmac_encrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx, - const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -_gmssl_export int sm4_ctr_sm3_hmac_encrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx, - uint8_t *out, size_t *outlen); -_gmssl_export int sm4_ctr_sm3_hmac_decrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx, - const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen); -_gmssl_export int sm4_ctr_sm3_hmac_decrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx, - const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -_gmssl_export int sm4_ctr_sm3_hmac_decrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx, - uint8_t *out, size_t *outlen); - - -typedef struct { - SM4_CTR_CTX enc_ctx; - GHASH_CTX mac_ctx; - uint8_t Y[16]; // E(K, Y_0) - size_t taglen; - uint8_t mac[16]; - size_t maclen; -} SM4_GCM_CTX; - -#define SM4_GCM_KEY_SIZE 16 -#define SM4_GCM_DEFAULT_TAG_SIZE 16 - -_gmssl_export int sm4_gcm_encrypt_init(SM4_GCM_CTX *ctx, - const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen, size_t taglen); -_gmssl_export int sm4_gcm_encrypt_update(SM4_GCM_CTX *ctx, - const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -_gmssl_export int sm4_gcm_encrypt_finish(SM4_GCM_CTX *ctx, - uint8_t *out, size_t *outlen); -_gmssl_export int sm4_gcm_decrypt_init(SM4_GCM_CTX *ctx, - const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen, size_t taglen); -_gmssl_export int sm4_gcm_decrypt_update(SM4_GCM_CTX *ctx, - const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -_gmssl_export int sm4_gcm_decrypt_finish(SM4_GCM_CTX *ctx, - uint8_t *out, size_t *outlen); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/api.h b/thirdparty/GmSSL-3.1.1/include/gmssl/api.h deleted file mode 100644 index d8fd184..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/api.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -#ifndef GMSSL_API_H -#define GMSSL_API_H - - -#ifdef WIN32 -#define _gmssl_export __declspec(dllexport) -#elif defined(__GNUC__) -// use -fvisibility=hidden to change the "default" behavior -#define _gmssl_export __attribute__((visibility("default"))) -#else -#define _gmssl_export -#endif - -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/asm.h b/thirdparty/GmSSL-3.1.1/include/gmssl/asm.h new file mode 100644 index 0000000..225883e --- /dev/null +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/asm.h @@ -0,0 +1,20 @@ +/* + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + + +#ifndef GMSSL_ASM_H +#define GMSSL_ASM_H + +#ifdef ENABLE_ASM_UNDERSCORE_PREFIX +# define func(foo) _##foo +#else +# define func(foo) foo +#endif + +#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/asn1.h b/thirdparty/GmSSL-3.1.1/include/gmssl/asn1.h index 49c0b0b..77b66fc 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/asn1.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/asn1.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may @@ -86,8 +86,8 @@ int asn1_type_from_der(int tag, const uint8_t **d, size_t *dlen, const uint8_t * int asn1_nonempty_type_to_der(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen); int asn1_nonempty_type_from_der(int tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); int asn1_any_type_from_der(int *tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); -int asn1_any_to_der(const uint8_t *a, size_t alen, uint8_t **out, size_t *outlen); // 调用方应保证a,alen为TLV -int asn1_any_from_der(const uint8_t **a, size_t *alen, const uint8_t **in, size_t *inlen); // 该函数会检查输入是否为TLV +int asn1_any_to_der(const uint8_t *a, size_t alen, uint8_t **out, size_t *outlen); // NOTE: a,alen MUST be TLV +int asn1_any_from_der(const uint8_t **a, size_t *alen, const uint8_t **in, size_t *inlen); // asn1_any_from_der check if input is TLV #define ASN1_TRUE 0xff #define ASN1_FALSE 0x00 @@ -101,7 +101,7 @@ int asn1_boolean_from_der_ex(int tag, int *val, const uint8_t **in, size_t *inle #define asn1_implicit_boolean_to_der(i,val,out,outlen) asn1_boolean_to_der_ex(ASN1_TAG_IMPLICIT(i),val,out,outlen) #define asn1_implicit_boolean_from_der(i,val,in,inlen) asn1_boolean_from_der_ex(ASN1_TAG_IMPLICIT(i),val,in,inlen) -// asn1_integer_ 不支持负数编解码 +// asn1_integer_ does not support negative value int asn1_integer_to_der_ex(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen); int asn1_integer_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); #define asn1_integer_to_der(d,dlen,out,outlen) asn1_integer_to_der_ex(ASN1_TAG_INTEGER,d,dlen,out,outlen) @@ -109,15 +109,15 @@ int asn1_integer_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const uin #define asn1_implicit_integer_to_der(i,d,dlen,out,outlen) asn1_integer_to_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,out,outlen) #define asn1_implicit_integer_from_der(i,d,dlen,in,inlen) asn1_integer_from_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,in,inlen) -// asn1_int_ 只支持小的无符号整数的编解码,不支持负数 -int asn1_int_to_der_ex(int tag, int val, uint8_t **out, size_t *outlen); // 当 val == -1 时,不输出,返回 0 -int asn1_int_from_der_ex(int tag, int *val, const uint8_t **in, size_t *inlen); // 不支持负数,返回0时 *val 设置为 -1 +// asn1_int_ only support small unsigned int, does not support negative integer +int asn1_int_to_der_ex(int tag, int val, uint8_t **out, size_t *outlen); // when val == -1, return 0 and no output +int asn1_int_from_der_ex(int tag, int *val, const uint8_t **in, size_t *inlen); // when return 0, *val is set to -1 #define asn1_int_to_der(val,out,outlen) asn1_int_to_der_ex(ASN1_TAG_INTEGER,val,out,outlen) #define asn1_int_from_der(val,in,inlen) asn1_int_from_der_ex(ASN1_TAG_INTEGER,val,in,inlen) #define asn1_implicit_int_to_der(i,val,out,outlen) asn1_int_to_der_ex(ASN1_TAG_IMPLICIT(i),val,out,outlen) #define asn1_implicit_int_from_der(i,val,in,inlen) asn1_int_from_der_ex(ASN1_TAG_IMPLICIT(i),val,in,inlen) -// 比特长度不必须为8的整数倍 +// bit_string can be any length int asn1_bit_string_to_der_ex(int tag, const uint8_t *d, size_t nbits, uint8_t **out, size_t *outlen); int asn1_bit_string_from_der_ex(int tag, const uint8_t **d, size_t *nbits, const uint8_t **in, size_t *inlen); #define asn1_bit_string_to_der(d,nbits,out,outlen) asn1_bit_string_to_der_ex(ASN1_TAG_BIT_STRING,d,nbits,out,outlen) @@ -125,7 +125,7 @@ int asn1_bit_string_from_der_ex(int tag, const uint8_t **d, size_t *nbits, const #define asn1_implicit_bit_string_to_der(i,d,nbits,out,outlen) asn1_bit_string_to_der_ex(ASN1_TAG_IMPLICIT(i),d,nbits,out,outlen) #define asn1_implicit_bit_string_from_der(i,d,nbits,in,inlen) asn1_bit_string_from_der_ex(ASN1_TAG_IMPLICIT(i),d,nbits,in,inlen) -// 比特长度必须为8的整数倍,因此使用字节长度 +// bit string MUST be multiple 8 bits int asn1_bit_octets_to_der_ex(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen); int asn1_bit_octets_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); #define asn1_bit_octets_to_der(d,dlen,out,outlen) asn1_bit_octets_to_der_ex(ASN1_TAG_BIT_STRING,d,dlen,out,outlen) @@ -133,14 +133,14 @@ int asn1_bit_octets_from_der_ex(int tag, const uint8_t **d, size_t *dlen, const #define asn1_implicit_bit_octets_to_der(i,d,dlen,out,outlen) asn1_bit_octets_to_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,out,outlen) #define asn1_implicit_bit_octets_from_der(i,d,dlen,in,inlen) asn1_bit_octets_from_der_ex(ASN1_TAG_IMPLICIT(i),d,dlen,in,inlen) -// bits == -1 不编码,只支持较少的比特数量 +// bits == -1 means no input int asn1_bits_to_der_ex(int tag, int bits, uint8_t **out, size_t *outlen); int asn1_bits_from_der_ex(int tag, int *bits, const uint8_t **in, size_t *inlen); #define asn1_bits_to_der(bits,out,outlen) asn1_bits_to_der_ex(ASN1_TAG_BIT_STRING,bits,out,outlen) #define asn1_bits_from_der(bits,in,inlen) asn1_bits_from_der_ex(ASN1_TAG_BIT_STRING,bits,in,inlen) #define asn1_implicit_bits_to_der(i,bits,out,outlen) asn1_bits_to_der_ex(ASN1_TAG_IMPLICIT(i),bits,out,outlen) #define asn1_implicit_bits_from_der(i,bits,in,inlen) asn1_bits_from_der_ex(ASN1_TAG_IMPLICIT(i),bits,in,inlen) -// names[i]对应第i个比特 +// names[i] is the i-th bit int asn1_bits_print(FILE *fp, int fmt, int ind, const char *label, const char **names, size_t names_cnt, int bits); #define asn1_octet_string_to_der_ex(tag,d,dlen,out,outlen) asn1_type_to_der(tag,d,dlen,out,outlen) @@ -182,7 +182,8 @@ typedef struct { const ASN1_OID_INFO *asn1_oid_info_from_name(const ASN1_OID_INFO *infos, size_t count, const char *name); const ASN1_OID_INFO *asn1_oid_info_from_oid(const ASN1_OID_INFO *infos, size_t count, int oid); -// 如果一个正确解析的OID并不在infos列表中,那么仍然返回1,但是调用方必须检查返回的info是否为空 + +// well-formed but unknown OID will return 1, caller should check if *info == NULL when return 1 int asn1_oid_info_from_der_ex(const ASN1_OID_INFO **info, uint32_t *nodes, size_t *nodes_cnt, const ASN1_OID_INFO *infos, size_t count, const uint8_t **in, size_t *inlen); int asn1_oid_info_from_der(const ASN1_OID_INFO **info, @@ -283,7 +284,7 @@ int asn1_header_to_der(int tag, size_t dlen, uint8_t **out, size_t *outlen); #define asn1_explicit_to_der(i,d,dlen,out,outlen) asn1_nonempty_type_to_der(ASN1_TAG_EXPLICIT(i),d,dlen,out,outlen) #define asn1_explicit_from_der(i,d,dlen,in,inlen) asn1_nonempty_type_from_der(ASN1_TAG_EXPLICIT(i),d,dlen,in,inlen) -// d,dlen 是 SEQUENCE OF, SET OF 中的值 +// d,dlen is the V (of TLV) of SEQUENCE OF, SET OF int asn1_types_get_count(const uint8_t *d, size_t dlen, int tag, size_t *cnt); int asn1_types_get_item_by_index(const uint8_t *d, size_t dlen, int tag, int index, const uint8_t **item_d, size_t *item_dlen); diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/base64.h b/thirdparty/GmSSL-3.1.1/include/gmssl/base64.h index e981aef..d11d3f5 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/base64.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/base64.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -19,19 +19,6 @@ extern "C" { #endif -/* -BASE64 Public API - - BASE64_CTX - base64_encode_init - base64_encode_update - base64_encode_finish - base64_decode_init - base64_decode_update - base64_decode_finish - -*/ - typedef struct { /* number saved in a partial encode/decode */ diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/block_cipher.h b/thirdparty/GmSSL-3.1.1/include/gmssl/block_cipher.h index e928663..afd2a8c 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/block_cipher.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/block_cipher.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -7,9 +7,6 @@ * http://www.apache.org/licenses/LICENSE-2.0 */ - - - #ifndef GMSSL_BLOCK_CIPHER_H #define GMSSL_BLOCK_CIPHER_H @@ -17,8 +14,10 @@ #include #include #include -#include #include +#ifdef ENABLE_AES +#include +#endif #ifdef __cplusplus @@ -37,7 +36,9 @@ typedef struct BLOCK_CIPHER_KEY BLOCK_CIPHER_KEY; struct BLOCK_CIPHER_KEY { union { SM4_KEY sm4_key; +#ifdef ENABLE_AES AES_KEY aes_key; +#endif } u; const BLOCK_CIPHER *cipher; }; @@ -58,7 +59,9 @@ struct BLOCK_CIPHER { }; const BLOCK_CIPHER *BLOCK_CIPHER_sm4(void); +#ifdef ENABLE_AES const BLOCK_CIPHER *BLOCK_CIPHER_aes128(void); +#endif const BLOCK_CIPHER *block_cipher_from_name(const char *name); const char *block_cipher_name(const BLOCK_CIPHER *cipher); diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/cms.h b/thirdparty/GmSSL-3.1.1/include/gmssl/cms.h index e52e057..18e4f18 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/cms.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/cms.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may @@ -62,7 +62,7 @@ int cms_content_info_to_der( uint8_t **out, size_t *outlen); int cms_content_info_from_der( int *content_type, - const uint8_t **content, size_t *content_len, // 这里获得的是完整的TLV + const uint8_t **content, size_t *content_len, // content is the full TLV const uint8_t **in, size_t *inlen); int cms_content_info_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *d, size_t dlen); @@ -269,13 +269,13 @@ typedef struct { int cms_signed_data_sign_to_der( const CMS_CERTS_AND_KEY *signers, size_t signers_cnt, - int content_type, const uint8_t *data, size_t datalen, // 当OID_cms_data时为raw data - const uint8_t *crls, size_t crls_len, // 可以为空 + int content_type, const uint8_t *data, size_t datalen, // with OID_cms_data, `data` is the raw data + const uint8_t *crls, size_t crls_len, // crls can be NULL uint8_t **out, size_t *outlen); int cms_signed_data_verify_from_der( const uint8_t *extra_certs, size_t extra_certs_len, const uint8_t *extra_crls, size_t extra_crls_len, - int *content_type, const uint8_t **content, size_t *content_len, // 是否应该返回raw data呢? + int *content_type, const uint8_t **content, size_t *content_len, // should we return raw data const uint8_t **certs, size_t *certs_len, const uint8_t **crls, size_t *crls_len, const uint8_t **signer_infos, size_t *signer_infos_len, @@ -289,8 +289,8 @@ RecipientInfo ::= SEQUENCE { keyEncryptionAlgorithm AlgorithmIdentifier, encryptedKey OCTET STRING -- DER-encoding of SM2Cipher } -由于encryptedKey的类型为SM2Cipher, 而SM2Cipher中有2个INTEGER,因此长度是不固定的。 -因此不能预先确定输出长度 + +DER-encoding length of RecipientInfo is not fixed (caused by INTEGERs) */ int cms_recipient_info_to_der( int version, @@ -303,7 +303,7 @@ int cms_recipient_info_from_der( int *version, const uint8_t **issuer, size_t *issuer_len, const uint8_t **serial_number, size_t *serial_number_len, - int *pke_algor, const uint8_t **params, size_t *params_len,// SM2加密只使用SM3,没有默认参数,但是ECIES可能有 + int *pke_algor, const uint8_t **params, size_t *params_len,// sm2encrypt has no params, but ECIES might have params const uint8_t **enced_key, size_t *enced_key_len, const uint8_t **in, size_t *inlen); int cms_recipient_info_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *d, size_t dlen); @@ -452,35 +452,29 @@ int cms_key_agreement_info_print(FILE *fp, int fmt, int ind, const char *label, -// 下面是公开API -// 公开API的设计考虑: -// 1. 不需要调用其他函数 -// 2. 在逻辑上容易理解 -// 3. 将cms,cmslen看做对象 - -// 生成ContentInfo, type == data +// generate ContentInfo, type == data int cms_set_data(uint8_t *cms, size_t *cmslen, const uint8_t *d, size_t dlen); int cms_encrypt( - uint8_t *cms, size_t *cmslen, // 输出的ContentInfo (type encryptedData) - int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, // 对称加密算法、密钥和IV - int content_type, const uint8_t *content, size_t content_len, // 待加密的输入数据 - const uint8_t *shared_info1, size_t shared_info1_len, // 附加信息 + uint8_t *cms, size_t *cmslen, + int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, + int content_type, const uint8_t *content, size_t content_len, + const uint8_t *shared_info1, size_t shared_info1_len, const uint8_t *shared_info2, size_t shared_info2_len); int cms_decrypt( - const uint8_t *cms, size_t cmslen, // 输入的ContentInfo (type encryptedData) - int *enc_algor, const uint8_t *key, size_t keylen, // 解密密钥(我们不知道解密算法) - int *content_type, uint8_t *content, size_t *content_len, // 输出的解密数据类型及数据 - const uint8_t **shared_info1, size_t *shared_info1_len, // 附加信息 + const uint8_t *cms, size_t cmslen, // should be ContentInfo (type encryptedData) + int *enc_algor, const uint8_t *key, size_t keylen, + int *content_type, uint8_t *content, size_t *content_len, + const uint8_t **shared_info1, size_t *shared_info1_len, const uint8_t **shared_info2, size_t *shared_info2_len); int cms_sign( uint8_t *cms, size_t *cms_len, - const CMS_CERTS_AND_KEY *signers, size_t signers_cnt, // 签名者的签名私钥和证书 - int content_type, const uint8_t *content, size_t content_len, // 待签名的输入数据 + const CMS_CERTS_AND_KEY *signers, size_t signers_cnt, + int content_type, const uint8_t *content, size_t content_len, const uint8_t *crls, size_t crls_len); int cms_verify( @@ -494,17 +488,17 @@ int cms_verify( int cms_envelop( uint8_t *cms, size_t *cms_len, - const uint8_t *rcpt_certs, size_t rcpt_certs_len, // 接收方证书,注意这个参数的类型可以容纳多个证书,但是只有在一个接受者时对调用方最方便 - int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, // 对称加密算法及参数 - int content_type, const uint8_t *content, size_t content_len, // 待加密的输入数据 - const uint8_t *shared_info1, size_t shared_info1_len, // 附加输入信息 + const uint8_t *rcpt_certs, size_t rcpt_certs_len, + int enc_algor, const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, + int content_type, const uint8_t *content, size_t content_len, + const uint8_t *shared_info1, size_t shared_info1_len, const uint8_t *shared_info2, size_t shared_info2_len); int cms_deenvelop( const uint8_t *cms, size_t cms_len, - const SM2_KEY *rcpt_key, const uint8_t *rcpt_cert, size_t rcpt_cert_len, // 接收方的解密私钥和对应的证书,注意只需要一个解密方 + const SM2_KEY *rcpt_key, const uint8_t *rcpt_cert, size_t rcpt_cert_len, int *content_type, uint8_t *content, size_t *content_len, - const uint8_t **rcpt_infos, size_t *rcpt_infos_len, // 解析得到,用于显示 + const uint8_t **rcpt_infos, size_t *rcpt_infos_len, const uint8_t **shared_info1, size_t *shared_info1_len, const uint8_t **shared_info2, size_t *shared_info2_len); @@ -531,7 +525,7 @@ int cms_deenvelop_and_verify( const uint8_t **shared_info1, size_t *shared_info1_len, const uint8_t **shared_info2, size_t *shared_info2_len); -// 生成ContentInfo, type == keyAgreementInfo +// create ContentInfo, type == keyAgreementInfo int cms_set_key_agreement_info( uint8_t *cms, size_t *cms_len, const SM2_KEY *temp_public_key_r, diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/des.h b/thirdparty/GmSSL-3.1.1/include/gmssl/des.h deleted file mode 100644 index c79d281..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/des.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - -/* FIPS PUB 46-3 "Data Encryption Standard (DES)" */ - -#ifndef GMSSL_DES_H -#define GMSSL_DES_H - - -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - -#define DES_KEY_BITS 56 -#define DES_BLOCK_BITS 64 -#define DES_KEY_SIZE ((DES_KEY_BITS)/7) -#define DES_BLOCK_SIZE (DES_BLOCK_BITS/8) - -#define DES_RK_BITS 48 -#define DES_RK_SIZE (DES_RK_BITS/8) -#define DES_ROUNDS 16 - -#define DES_EDE_KEY_SIZE (DES_KEY_SIZE * 3) - -typedef struct { - uint64_t rk[DES_ROUNDS]; -} DES_KEY; - -void des_set_encrypt_key(DES_KEY *key, const uint8_t raw_key[DES_KEY_SIZE]); -void des_set_decrypt_key(DES_KEY *key, const uint8_t raw_key[DES_KEY_SIZE]); -void des_encrypt(DES_KEY *key, const uint8_t in[DES_BLOCK_SIZE], uint8_t out[DES_BLOCK_SIZE]); - - -typedef struct { - DES_KEY K[3]; -} DES_EDE_KEY; - -void des_ede_set_encrypt_key(DES_EDE_KEY *key, const uint8_t raw_key[DES_EDE_KEY_SIZE]); -void des_ede_set_decrypt_key(DES_EDE_KEY *key, const uint8_t raw_key[DES_EDE_KEY_SIZE]); -void des_ede_encrypt(DES_EDE_KEY *key, const uint8_t in[DES_BLOCK_SIZE], uint8_t out[DES_BLOCK_SIZE]); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/digest.h b/thirdparty/GmSSL-3.1.1/include/gmssl/digest.h index 18a9d69..0b158c9 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/digest.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/digest.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -16,12 +16,12 @@ #include #include #include -#ifdef ENABLE_BROKEN_CRYPTO -#include +#ifdef ENABLE_SHA1 #include #endif +#ifdef ENABLE_SHA2 #include - +#endif #ifdef __cplusplus extern "C" { @@ -39,14 +39,15 @@ typedef struct DIGEST_CTX DIGEST_CTX; struct DIGEST_CTX { union { SM3_CTX sm3_ctx; -#ifdef ENABLE_BROKEN_CRYPTO - MD5_CTX md5_ctx; +#ifdef ENABLE_SHA1 SHA1_CTX sha1_ctx; #endif +#ifdef ENABLE_SHA2 SHA224_CTX sha224_ctx; SHA256_CTX sha256_ctx; SHA384_CTX sha384_ctx; SHA512_CTX sha512_ctx; +#endif } u; const DIGEST *digest; }; @@ -62,16 +63,17 @@ struct DIGEST { }; const DIGEST *DIGEST_sm3(void); -#ifdef ENABLE_BROKEN_CRYPTO -const DIGEST *DIGEST_md5(void); +#ifdef ENABLE_SHA1 const DIGEST *DIGEST_sha1(void); #endif +#ifdef ENABLE_SHA2 const DIGEST *DIGEST_sha224(void); const DIGEST *DIGEST_sha256(void); const DIGEST *DIGEST_sha384(void); const DIGEST *DIGEST_sha512(void); const DIGEST *DIGEST_sha512_224(void); const DIGEST *DIGEST_sha512_256(void); +#endif const DIGEST *digest_from_name(const char *name); const char *digest_name(const DIGEST *digest); diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/ec.h b/thirdparty/GmSSL-3.1.1/include/gmssl/ec.h index 2dc1c00..a3d9010 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/ec.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/ec.h @@ -11,7 +11,6 @@ #ifndef GMSSL_EC_H #define GMSSL_EC_H - #include #include #include diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/endian.h b/thirdparty/GmSSL-3.1.1/include/gmssl/endian.h index 8f4345c..6d0003b 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/endian.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/endian.h @@ -35,7 +35,7 @@ (uint64_t)(p)[7]) -// 注意:PUTU32(buf, val++) 会出错! +// WARNING: must not write PUTU32(buf, val++) #define PUTU16(p,V) \ ((p)[0] = (uint8_t)((V) >> 8), \ (p)[1] = (uint8_t)(V)) diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/error.h b/thirdparty/GmSSL-3.1.1/include/gmssl/error.h index a5902ef..497501e 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/error.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/error.h @@ -33,16 +33,16 @@ extern "C" { #define DEBUG 1 #define warning_print() \ - do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __func__); } while (0) + do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0) #define error_print() \ - do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __func__); } while (0) + do { if (DEBUG) fprintf(stderr, "%s:%d:%s():\n",__FILE__, __LINE__, __FUNCTION__); } while (0) #define error_print_msg(fmt, ...) \ - do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, __LINE__, __func__, __VA_ARGS__); } while (0) + do { if (DEBUG) fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__); } while (0) #define error_puts(str) \ - do { if (DEBUG) fprintf(stderr, "%s: %d: %s: %s", __FILE__, __LINE__, __func__, str); } while (0) + do { if (DEBUG) fprintf(stderr, "%s: %d: %s: %s\n", __FILE__, __LINE__, __FUNCTION__, str); } while (0) void print_der(const uint8_t *in, size_t inlen); diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/file.h b/thirdparty/GmSSL-3.1.1/include/gmssl/file.h index 435c37c..a065e05 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/file.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/file.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/gcm.h b/thirdparty/GmSSL-3.1.1/include/gmssl/gcm.h deleted file mode 100644 index 97c62fc..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/gcm.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - -#ifndef GMSSL_GCM_H -#define GMSSL_GCM_H - - -#include -#include -#include -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - -#define GCM_IV_MIN_SIZE 1 -#define GCM_IV_MAX_SIZE ((uint64_t)(1 << (64-3))) -#define GCM_IV_DEFAULT_BITS 96 -#define GCM_IV_DEFAULT_SIZE 12 - -#define GCM_MIN_AAD_SIZE 0 -#define GCM_MAX_AAD_SIZE ((uint64_t)(1 << (64-3))) - -#define GCM_MIN_PLAINTEXT_SIZE 0 -#define GCM_MAX_PLAINTEXT_SIZE ((((uint64_t)1 << 39) - 256) >> 3) - - -#define GHASH_SIZE (16) - - -#define GCM_IS_LITTLE_ENDIAN 1 - - -void ghash(const uint8_t h[16], const uint8_t *aad, size_t aadlen, - const uint8_t *c, size_t clen, uint8_t out[16]); - -typedef struct { - gf128_t H; - gf128_t X; - size_t aadlen; - size_t clen; - uint8_t block[16]; - size_t num; -} GHASH_CTX; - -void ghash_init(GHASH_CTX *ctx, const uint8_t h[16], const uint8_t *aad, size_t aadlen); -void ghash_update(GHASH_CTX *ctx, const uint8_t *c, size_t clen); -void ghash_finish(GHASH_CTX *ctx, uint8_t out[16]); - - -int gcm_encrypt(const BLOCK_CIPHER_KEY *key, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, - uint8_t *out, size_t taglen, uint8_t *tag); - -int gcm_decrypt(const BLOCK_CIPHER_KEY *key, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, - const uint8_t *tag, size_t taglen, uint8_t *out); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/gf128.h b/thirdparty/GmSSL-3.1.1/include/gmssl/gf128.h index 8263e4a..f1ef126 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/gf128.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/gf128.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -7,11 +7,7 @@ * http://www.apache.org/licenses/LICENSE-2.0 */ - -/* GF(2^128) defined by f(x) = x^128 + x^7 + x^2 + x + 1 - * A + B mod f(x) = a xor b - * A * 2 mod f(x) - */ +// GF(2^128) defined by f(x) = x^128 + x^7 + x^2 + x + 1 #ifndef GMSSL_GF128_H #define GMSSL_GF128_H @@ -27,24 +23,19 @@ extern "C" { #endif -//typedef unsigned __int128 gf128_t; -typedef struct { - uint64_t hi; - uint64_t lo; -} gf128_t; +typedef uint64_t gf128_t[2]; - -// Note: send by value is comptabile with uint128_t and sse2 -gf128_t gf128_from_hex(const char *s); -int gf128_equ_hex(gf128_t a, const char *s); -gf128_t gf128_zero(void); -gf128_t gf128_add(gf128_t a, gf128_t b); -gf128_t gf128_mul(gf128_t a, gf128_t b); -gf128_t gf128_mul2(gf128_t a); -gf128_t gf128_from_bytes(const uint8_t p[16]); -void gf128_to_bytes(gf128_t a, uint8_t p[16]); -int gf128_print(FILE *fp, int fmt ,int ind, const char *label, gf128_t a); +void gf128_set_zero(gf128_t r); +void gf128_set_one(gf128_t r); +void gf128_add(gf128_t r, const gf128_t a, const gf128_t b); +void gf128_mul(gf128_t r, const gf128_t a, const gf128_t b); +void gf128_mul_by_2(gf128_t r, const gf128_t a); +void gf128_from_bytes(gf128_t r, const uint8_t p[16]); +void gf128_to_bytes(const gf128_t a, uint8_t p[16]); +int gf128_from_hex(gf128_t r, const char *s); +int gf128_equ_hex(const gf128_t a, const char *s); +int gf128_print(FILE *fp, int fmt, int ind, const char *label, const gf128_t a); #ifdef __cplusplus diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/ghash.h b/thirdparty/GmSSL-3.1.1/include/gmssl/ghash.h new file mode 100644 index 0000000..73fbca8 --- /dev/null +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/ghash.h @@ -0,0 +1,49 @@ +/* + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +#ifndef GMSSL_GHASH_H +#define GMSSL_GHASH_H + + +#include +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +#define GHASH_SIZE (16) + + +// h = ENC_k(0^128) +void ghash(const uint8_t h[16], const uint8_t *aad, size_t aadlen, + const uint8_t *c, size_t clen, uint8_t out[16]); + +typedef struct { + gf128_t H; + gf128_t X; + size_t aadlen; + size_t clen; + uint8_t block[16]; + size_t num; +} GHASH_CTX; + +void ghash_init(GHASH_CTX *ctx, const uint8_t h[16], const uint8_t *aad, size_t aadlen); +void ghash_update(GHASH_CTX *ctx, const uint8_t *c, size_t clen); +void ghash_finish(GHASH_CTX *ctx, uint8_t out[16]); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/hash_drbg.h b/thirdparty/GmSSL-3.1.1/include/gmssl/hash_drbg.h deleted file mode 100644 index db6d187..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/hash_drbg.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - -/* NIST SP800-90A Rev.1 "Recommendation for Random Number Generation - * Using Deterministic Random Bit Generators", 10.1.1 Hash_DRBG */ - -#ifndef GMSSL_HASH_DRBG_H -#define GMSSL_HASH_DRBG_H - - -#include -#include -#include - - -/* seedlen for hash_drgb, table 2 of nist sp 800-90a rev.1 */ -#define HASH_DRBG_SM3_SEED_BITS 440 /* 55 bytes */ -#define HASH_DRBG_SHA1_SEED_BITS 440 -#define HASH_DRBG_SHA224_SEED_BITS 440 -#define HASH_DRBG_SHA512_224_SEED_BITS 440 -#define HASH_DRBG_SHA256_SEED_BITS 440 -#define HASH_DRBG_SHA512_256_SEED_BITS 440 -#define HASH_DRBG_SHA384_SEED_BITS 888 /* 110 bytes */ -#define HASH_DRBG_SHA512_SEED_BITS 888 -#define HASH_DRBG_MAX_SEED_BITS 888 - -#define HASH_DRBG_SM3_SEED_SIZE (HASH_DRBG_SM3_SEED_BITS/8) -#define HASH_DRBG_SHA1_SEED_SIZE (HASH_DRBG_SHA1_SEED_BITS/8) -#define HASH_DRBG_SHA224_SEED_SIZE (HASH_DRBG_SHA224_SEED_BITS/8) -#define HASH_DRBG_SHA512_224_SEED_SIZE (HASH_DRBG_SHA512_224_SEED_BITS/8) -#define HASH_DRBG_SHA256_SEED_SIZE (HASH_DRBG_SHA256_SEED_BITS/8) -#define HASH_DRBG_SHA512_256_SEED_SIZE (HASH_DRBG_SHA512_256_SEED_BITS/8) -#define HASH_DRBG_SHA384_SEED_SIZE (HASH_DRBG_SHA384_SEED_BITS/8) -#define HASH_DRBG_SHA512_SEED_SIZE (HASH_DRBG_SHA512_SEED_BITS/8) -#define HASH_DRBG_MAX_SEED_SIZE (HASH_DRBG_MAX_SEED_BITS/8) - -#define HASH_DRBG_RESEED_INTERVAL ((uint64_t)1 << 48) - -#ifdef __cplusplus -extern "C" { -#endif - - -typedef struct { - const DIGEST *digest; - uint8_t V[HASH_DRBG_MAX_SEED_SIZE]; - uint8_t C[HASH_DRBG_MAX_SEED_SIZE]; - size_t seedlen; - uint64_t reseed_counter; -} HASH_DRBG; - - -int hash_drbg_init(HASH_DRBG *drbg, - const DIGEST *digest, - const uint8_t *entropy, size_t entropy_len, - const uint8_t *nonce, size_t nonce_len, - const uint8_t *personalstr, size_t personalstr_len); - -int hash_drbg_reseed(HASH_DRBG *drbg, - const uint8_t *entropy, size_t entropy_len, - const uint8_t *additional, size_t additional_len); - -int hash_drbg_generate(HASH_DRBG *drbg, - const uint8_t *additional, size_t additional_len, - size_t outlen, uint8_t *out); - - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/hkdf.h b/thirdparty/GmSSL-3.1.1/include/gmssl/hkdf.h index bbefded..6fc03bb 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/hkdf.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/hkdf.h @@ -32,9 +32,9 @@ int hkdf_expand(const DIGEST *digest, const uint8_t *prk, size_t prklen, int sm3_hkdf_extract(const uint8_t *salt, size_t saltlen, const uint8_t *ikm, size_t ikmlen, - uint8_t *prk, size_t *prklen); + uint8_t prk[32]); -int sm3_hkdf_expand(const uint8_t *prk, size_t prklen, +int sm3_hkdf_expand(const uint8_t prk[32], const uint8_t *opt_info, size_t opt_infolen, size_t L, uint8_t *okm); diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/md5.h b/thirdparty/GmSSL-3.1.1/include/gmssl/md5.h deleted file mode 100644 index dc4b91d..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/md5.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - -#ifndef GMSSL_MD5_H -#define GMSSL_MD5_H - - -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - -#define MD5_IS_BIG_ENDIAN 0 - -#define MD5_DIGEST_SIZE 16 -#define MD5_BLOCK_SIZE 64 -#define MD5_STATE_WORDS (MD5_BLOCK_SIZE/sizeof(uint32_t)) - -typedef struct { - uint32_t state[MD5_STATE_WORDS]; - uint64_t nblocks; - uint8_t block[MD5_BLOCK_SIZE]; - size_t num; -} MD5_CTX; - - -void md5_init(MD5_CTX *ctx); -void md5_update(MD5_CTX *ctx, const uint8_t *data, size_t datalen); -void md5_finish(MD5_CTX *ctx, uint8_t dgst[MD5_DIGEST_SIZE]); -void md5_digest(const uint8_t *data, size_t datalen, uint8_t dgst[MD5_DIGEST_SIZE]); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/oid.h b/thirdparty/GmSSL-3.1.1/include/gmssl/oid.h index f733676..ae817ef 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/oid.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/oid.h @@ -147,7 +147,7 @@ enum { OID_aes192_cbc, OID_aes256_cbc, - OID_aes128, // 没有OID + OID_aes128, // No OID OID_ecdsa_with_sha1, OID_ecdsa_with_sha224, diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/pbkdf2.h b/thirdparty/GmSSL-3.1.1/include/gmssl/pbkdf2.h index 20aabb5..06233b2 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/pbkdf2.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/pbkdf2.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -22,16 +22,6 @@ extern "C" { #endif -/* -PBKDF2 Public API - - PBKDF2_MIN_ITER - PBKDF2_DEFAULT_SALT_SIZE - PBKDF2_MAX_SALT_SIZE - - pbkdf2_hmac_sm3_genkey -*/ - #define PBKDF2_MIN_ITER 10000 #define PBKDF2_MAX_ITER (INT_MAX) diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/pkcs8.h b/thirdparty/GmSSL-3.1.1/include/gmssl/pkcs8.h index 9233b5c..e4a27f1 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/pkcs8.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/pkcs8.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may @@ -34,7 +34,7 @@ PBKDF2-params ::= SEQUENCE { otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}} }, iterationCount INTEGER (1..MAX), - keyLength INTEGER (1..MAX) OPTIONAL, -- 这个参数可以由函数指定 + keyLength INTEGER (1..MAX) OPTIONAL, prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1 } diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/rand.h b/thirdparty/GmSSL-3.1.1/include/gmssl/rand.h index 86f5b05..44b000d 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/rand.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/rand.h @@ -13,7 +13,6 @@ #include #include -#include #ifdef __cplusplus extern "C" { @@ -22,7 +21,7 @@ extern "C" { #define RAND_BYTES_MAX_SIZE (256) -_gmssl_export int rand_bytes(uint8_t *buf, size_t buflen); +int rand_bytes(uint8_t *buf, size_t buflen); #ifdef __cplusplus diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/rc4.h b/thirdparty/GmSSL-3.1.1/include/gmssl/rc4.h deleted file mode 100644 index a6a523c..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/rc4.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - -#ifndef GMSSL_RC4_H -#define GMSSL_RC4_H - - -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - -#define RC4_MIN_KEY_BITS 40 -#define RC4_STATE_NUM_WORDS 256 - - -typedef struct { - uint8_t d[RC4_STATE_NUM_WORDS]; -} RC4_STATE; - -void rc4_init(RC4_STATE *state, const uint8_t *key, size_t keylen); -void rc4_generate_keystream(RC4_STATE *state, size_t outlen, uint8_t *out); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sdf.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sdf.h index 77cf6a0..084c537 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sdf.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sdf.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -14,29 +14,13 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { #endif -/* -SDF Public API - - sdf_load_library - sdf_unload_library - - SDF_DEVICE - sdf_open_device - sdf_close_device - sdf_print_device_info - sdf_rand_bytes - sdf_load_sign_key - - SDF_KEY - sdf_sign - sdf_release_key -*/ typedef struct { void *handle; @@ -46,19 +30,60 @@ typedef struct { } SDF_DEVICE; typedef struct { - SM2_KEY public_key; + void *session; +} SDF_DIGEST_CTX; + +typedef struct { + void *session; + void *handle; +} SDF_KEY; + +typedef struct { + SDF_KEY key; + uint8_t iv[SM4_BLOCK_SIZE]; + uint8_t block[SM4_BLOCK_SIZE]; + size_t block_nbytes; +} SDF_CBC_CTX; + +typedef struct { void *session; int index; -} SDF_KEY; +} SDF_PRIVATE_KEY; + +typedef struct { + SM3_CTX sm3_ctx; + SM3_CTX saved_sm3_ctx; + SDF_PRIVATE_KEY key; +} SDF_SIGN_CTX; int sdf_load_library(const char *so_path, const char *vendor); int sdf_open_device(SDF_DEVICE *dev); int sdf_print_device_info(FILE *fp, int fmt, int ind, const char *lable, SDF_DEVICE *dev); -int sdf_rand_bytes(SDF_DEVICE *dev, uint8_t *buf, size_t len); -int sdf_load_sign_key(SDF_DEVICE *dev, SDF_KEY *key, int index, const char *pass); -int sdf_sign(SDF_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen); -int sdf_release_key(SDF_KEY *key); +int sdf_digest_init(SDF_DIGEST_CTX *ctx, SDF_DEVICE *dev); +int sdf_digest_update(SDF_DIGEST_CTX *ctx, const uint8_t *data, size_t datalen); +int sdf_digest_finish(SDF_DIGEST_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]); +int sdf_digest_reset(SDF_DIGEST_CTX *ctx); +int sdf_digest_cleanup(SDF_DIGEST_CTX *ctx); +int sdf_generate_key(SDF_DEVICE *dev, SDF_KEY *key, const SM2_KEY *sm2_key, uint8_t *wrappedkey, size_t *wrappedkey_len); +int sdf_import_key(SDF_DEVICE *dev, unsigned int key_index, const char *pass, const uint8_t *wrappedkey, size_t wrappedkey_len, SDF_KEY *key); // XXX: Is `pass` needed? see impl in sdf.c +int sdf_cbc_encrypt_init(SDF_CBC_CTX *ctx, const SDF_KEY *key, const uint8_t iv[16]); +int sdf_cbc_encrypt_update(SDF_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sdf_cbc_encrypt_finish(SDF_CBC_CTX *ctx, uint8_t *out, size_t *outlen); +int sdf_cbc_decrypt_init(SDF_CBC_CTX *ctx, const SDF_KEY *key, const uint8_t iv[16]); +int sdf_cbc_decrypt_update(SDF_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sdf_cbc_decrypt_finish(SDF_CBC_CTX *ctx, uint8_t *out, size_t *outlen); +int sdf_destroy_key(SDF_KEY *key); +int sdf_export_sign_public_key(SDF_DEVICE *dev, int key_index, SM2_KEY *public_key); +int sdf_export_encrypt_public_key(SDF_DEVICE *dev, int key_index, SM2_KEY *public_key); +int sdf_load_private_key(SDF_DEVICE *dev, SDF_PRIVATE_KEY *key, int key_index, const char *pass); +int sdf_decrypt(const SDF_PRIVATE_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sdf_sign(const SDF_PRIVATE_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen); +int sdf_sign_init(SDF_SIGN_CTX *ctx, const SDF_PRIVATE_KEY *key, const char *id, size_t idlen); +int sdf_sign_update(SDF_SIGN_CTX *ctx, const uint8_t *data, size_t datalen); +int sdf_sign_finish(SDF_SIGN_CTX *ctx, uint8_t *sig, size_t *siglen); +int sdf_sign_reset(SDF_SIGN_CTX *ctx); +int sdf_release_private_key(SDF_PRIVATE_KEY *key); int sdf_close_device(SDF_DEVICE *dev); void sdf_unload_library(void); diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sha1.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sha1.h index 38aef90..409886d 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sha1.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sha1.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -36,7 +36,6 @@ typedef struct { void sha1_init(SHA1_CTX *ctx); void sha1_update(SHA1_CTX *ctx, const uint8_t *data, size_t datalen); void sha1_finish(SHA1_CTX *ctx, uint8_t dgst[SHA1_DIGEST_SIZE]); -void sha1_digest(const uint8_t *data, size_t datalen, uint8_t dgst[SHA1_DIGEST_SIZE]); #ifdef __cplusplus diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sha2.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sha2.h index 744e7dc..d4c2c86 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sha2.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sha2.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -38,8 +38,6 @@ typedef struct { void sha224_init(SHA224_CTX *ctx); void sha224_update(SHA224_CTX *ctx, const uint8_t* data, size_t datalen); void sha224_finish(SHA224_CTX *ctx, uint8_t dgst[SHA224_DIGEST_SIZE]); -void sha224_digest(const uint8_t *data, size_t datalen, - uint8_t dgst[SHA224_DIGEST_SIZE]); #define SHA256_DIGEST_SIZE 32 @@ -56,8 +54,6 @@ typedef struct { void sha256_init(SHA256_CTX *ctx); void sha256_update(SHA256_CTX *ctx, const uint8_t* data, size_t datalen); void sha256_finish(SHA256_CTX *ctx, uint8_t dgst[SHA256_DIGEST_SIZE]); -void sha256_digest(const uint8_t *data, size_t datalen, - uint8_t dgst[SHA256_DIGEST_SIZE]); #define SHA384_DIGEST_SIZE 48 @@ -74,8 +70,6 @@ typedef struct { void sha384_init(SHA384_CTX *ctx); void sha384_update(SHA384_CTX *ctx, const uint8_t* data, size_t datalen); void sha384_finish(SHA384_CTX *ctx, uint8_t dgst[SHA384_DIGEST_SIZE]); -void sha384_digest(const uint8_t *data, size_t datalen, - uint8_t dgst[SHA384_DIGEST_SIZE]); #define SHA512_DIGEST_SIZE 64 @@ -92,8 +86,6 @@ typedef struct { void sha512_init(SHA512_CTX *ctx); void sha512_update(SHA512_CTX *ctx, const uint8_t* data, size_t datalen); void sha512_finish(SHA512_CTX *ctx, uint8_t dgst[SHA512_DIGEST_SIZE]); -void sha512_digest(const uint8_t *data, size_t datalen, - uint8_t dgst[SHA512_DIGEST_SIZE]); #ifdef __cplusplus diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sha3.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sha3.h deleted file mode 100644 index cb546cc..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sha3.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - - - -#ifndef GMSSL_SHA3_H -#define GMSSL_SHA3_H - - -#include -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - -#define SHA3_KECCAK_P_SIZE (1600/8) - -#define SHA3_224_DIGEST_SIZE (224/8) -#define SHA3_256_DIGEST_SIZE (256/8) -#define SHA3_384_DIGEST_SIZE (384/8) -#define SHA3_512_DIGEST_SIZE (512/8) - -#define SHA3_224_CAPACITY (SHA3_224_DIGEST_SIZE * 2) -#define SHA3_256_CAPACITY (SHA3_256_DIGEST_SIZE * 2) -#define SHA3_384_CAPACITY (SHA3_384_DIGEST_SIZE * 2) -#define SHA3_512_CAPACITY (SHA3_512_DIGEST_SIZE * 2) - -#define SHA3_224_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 144 -#define SHA3_256_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 136 -#define SHA3_384_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 104 -#define SHA3_512_BLOCK_SIZE (SHA3_KECCAK_P_SIZE - SHA3_224_CAPACITY) // 72 - - -typedef struct { - uint64_t A[5][5]; - uint8_t buf[SHA3_224_BLOCK_SIZE]; - int num; -} SHA3_224_CTX; - -void sha3_224_init(SHA3_224_CTX *ctx); -void sha3_224_update(SHA3_224_CTX *ctx, const uint8_t *data, size_t datalen); -void sha3_224_finish(SHA3_224_CTX *ctx, uint8_t dgst[SHA3_224_DIGEST_SIZE]); - -typedef struct { - uint64_t A[5][5]; - uint8_t buf[SHA3_256_BLOCK_SIZE]; - int num; -} SHA3_256_CTX; - -void sha3_256_init(SHA3_256_CTX *ctx); -void sha3_256_update(SHA3_256_CTX *ctx, const uint8_t *data, size_t datalen); -void sha3_256_finish(SHA3_256_CTX *ctx, uint8_t dgst[SHA3_256_DIGEST_SIZE]); - -typedef struct { - uint64_t A[5][5]; - uint8_t buf[SHA3_384_BLOCK_SIZE]; - int num; -} SHA3_384_CTX; - -void sha3_384_init(SHA3_384_CTX *ctx); -void sha3_384_update(SHA3_384_CTX *ctx, const uint8_t *data, size_t datalen); -void sha3_384_finish(SHA3_384_CTX *ctx, uint8_t dgst[SHA3_384_DIGEST_SIZE]); - -typedef struct { - uint64_t A[5][5]; - uint8_t buf[SHA3_512_BLOCK_SIZE]; - int num; -} SHA3_512_CTX; - -void sha3_512_init(SHA3_512_CTX *ctx); -void sha3_512_update(SHA3_512_CTX *ctx, const uint8_t *data, size_t datalen); -void sha3_512_finish(SHA3_512_CTX *ctx, uint8_t dgst[SHA3_512_DIGEST_SIZE]); - -void sha3_shake128(const uint8_t *in, size_t *inlen, size_t outlen, uint8_t *out); -void sha3_shake256(const uint8_t *in, size_t *inlen, size_t outlen, uint8_t *out); -void sha3_keccak_p(uint8_t state[SHA3_KECCAK_P_SIZE]); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/skf.h b/thirdparty/GmSSL-3.1.1/include/gmssl/skf.h index 2f23de8..88efe58 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/skf.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/skf.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -22,42 +22,6 @@ extern "C" { #endif -/* -SKF Public API - - skf_load_library - skf_unload_library - skf_list_devices - skf_print_device_info - - SKF_DEVICE - skf_open_device - skf_close_deivce - skf_set_label - skf_change_authkey - skf_list_apps - skf_create_app - skf_delete_app - skf_change_app_admin_pin - skf_change_app_user_pin - skf_unblock_user_pin - skf_list_objects - skf_import_object - skf_export_object - skf_delete_object - skf_list_containers - skf_create_container - skf_delete_container - skf_import_sign_cert - skf_export_sign_cert - skf_rand_bytes - skf_load_sign_key - - SKF_KEY - skf_sign - skf_release_key -*/ - typedef struct { void *handle; char manufacturer[65]; diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2.h index 1d39fde..d6edd45 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2.h @@ -1,5 +1,5 @@ -/* - * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. +/* + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -16,205 +16,34 @@ #include #include #include -#include +#include #ifdef __cplusplus extern "C" { #endif -/* -SM2 Public API - - SM2_DEFAULT_ID - SM2_MAX_ID_LENGTH - SM2_MAX_SIGNATURE_SIZE - SM2_MAX_PLAINTEXT_SIZE - SM2_MAX_CIPHERTEXT_SIZE - - SM2_KEY - sm2_key_generate - sm2_private_key_info_encrypt_to_der - sm2_private_key_info_decrypt_from_der - sm2_private_key_info_encrypt_to_pem - sm2_private_key_info_decrypt_from_pem - sm2_public_key_info_to_der - sm2_public_key_info_from_der - sm2_public_key_info_to_pem - sm2_public_key_info_from_pem - - sm2_sign - sm2_verify - sm2_encrypt - sm2_decrypt - sm2_ecdh - - SM2_SIGN_CTX - sm2_sign_init - sm2_sign_update - sm2_sign_finish - sm2_verify_init - sm2_verify_update - sm2_verify_finish -*/ - -typedef uint64_t SM2_BN[8]; - -int sm2_bn_is_zero(const SM2_BN a); -int sm2_bn_is_one(const SM2_BN a); -int sm2_bn_is_odd(const SM2_BN a); -int sm2_bn_cmp(const SM2_BN a, const SM2_BN b); -int sm2_bn_from_hex(SM2_BN r, const char hex[64]); -int sm2_bn_from_asn1_integer(SM2_BN r, const uint8_t *d, size_t dlen); -int sm2_bn_equ_hex(const SM2_BN a, const char *hex); -int sm2_bn_print(FILE *fp, int fmt, int ind, const char *label, const SM2_BN a); -int sm2_bn_rshift(SM2_BN ret, const SM2_BN a, unsigned int nbits); - -void sm2_bn_to_bytes(const SM2_BN a, uint8_t out[32]); -void sm2_bn_from_bytes(SM2_BN r, const uint8_t in[32]); -void sm2_bn_to_hex(const SM2_BN a, char hex[64]); -void sm2_bn_to_bits(const SM2_BN a, char bits[256]); -void sm2_bn_set_word(SM2_BN r, uint32_t a); -void sm2_bn_add(SM2_BN r, const SM2_BN a, const SM2_BN b); -void sm2_bn_sub(SM2_BN ret, const SM2_BN a, const SM2_BN b); -int sm2_bn_rand_range(SM2_BN r, const SM2_BN range); - -#define sm2_bn_init(r) memset((r),0,sizeof(SM2_BN)) -#define sm2_bn_set_zero(r) memset((r),0,sizeof(SM2_BN)) -#define sm2_bn_set_one(r) sm2_bn_set_word((r),1) -#define sm2_bn_copy(r,a) memcpy((r),(a),sizeof(SM2_BN)) -#define sm2_bn_clean(r) memset((r),0,sizeof(SM2_BN)) - - -// GF(p) -typedef SM2_BN SM2_Fp; - -void sm2_fp_add(SM2_Fp r, const SM2_Fp a, const SM2_Fp b); -void sm2_fp_sub(SM2_Fp r, const SM2_Fp a, const SM2_Fp b); -void sm2_fp_mul(SM2_Fp r, const SM2_Fp a, const SM2_Fp b); -void sm2_fp_exp(SM2_Fp r, const SM2_Fp a, const SM2_Fp e); -void sm2_fp_dbl(SM2_Fp r, const SM2_Fp a); -void sm2_fp_tri(SM2_Fp r, const SM2_Fp a); -void sm2_fp_div2(SM2_Fp r, const SM2_Fp a); -void sm2_fp_neg(SM2_Fp r, const SM2_Fp a); -void sm2_fp_sqr(SM2_Fp r, const SM2_Fp a); -void sm2_fp_inv(SM2_Fp r, const SM2_Fp a); -int sm2_fp_rand(SM2_Fp r); - -int sm2_fp_sqrt(SM2_Fp r, const SM2_Fp a); - -#define sm2_fp_init(r) sm2_bn_init(r) -#define sm2_fp_set_zero(r) sm2_bn_set_zero(r) -#define sm2_fp_set_one(r) sm2_bn_set_one(r) -#define sm2_fp_copy(r,a) sm2_bn_copy(r,a) -#define sm2_fp_clean(r) sm2_bn_clean(r) - -// GF(n) -typedef SM2_BN SM2_Fn; - -void sm2_fn_add(SM2_Fn r, const SM2_Fn a, const SM2_Fn b); -void sm2_fn_sub(SM2_Fn r, const SM2_Fn a, const SM2_Fn b); -void sm2_fn_mul(SM2_Fn r, const SM2_Fn a, const SM2_Fn b); -void sm2_fn_mul_word(SM2_Fn r, const SM2_Fn a, uint32_t b); -void sm2_fn_exp(SM2_Fn r, const SM2_Fn a, const SM2_Fn e); -void sm2_fn_neg(SM2_Fn r, const SM2_Fn a); -void sm2_fn_sqr(SM2_Fn r, const SM2_Fn a); -void sm2_fn_inv(SM2_Fn r, const SM2_Fn a); -int sm2_fn_rand(SM2_Fn r); - -#define sm2_fn_init(r) sm2_bn_init(r) -#define sm2_fn_set_zero(r) sm2_bn_set_zero(r) -#define sm2_fn_set_one(r) sm2_bn_set_one(r) -#define sm2_fn_copy(r,a) sm2_bn_copy(r,a) -#define sm2_fn_clean(r) sm2_bn_clean(r) - - typedef struct { - SM2_BN X; - SM2_BN Y; - SM2_BN Z; -} SM2_JACOBIAN_POINT; - -void sm2_jacobian_point_init(SM2_JACOBIAN_POINT *R); -void sm2_jacobian_point_set_xy(SM2_JACOBIAN_POINT *R, const SM2_BN x, const SM2_BN y); -void sm2_jacobian_point_get_xy(const SM2_JACOBIAN_POINT *P, SM2_BN x, SM2_BN y); -void sm2_jacobian_point_neg(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P); -void sm2_jacobian_point_dbl(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P); -void sm2_jacobian_point_add(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P, const SM2_JACOBIAN_POINT *Q); -void sm2_jacobian_point_sub(SM2_JACOBIAN_POINT *R, const SM2_JACOBIAN_POINT *P, const SM2_JACOBIAN_POINT *Q); -void sm2_jacobian_point_mul(SM2_JACOBIAN_POINT *R, const SM2_BN k, const SM2_JACOBIAN_POINT *P); -void sm2_jacobian_point_to_bytes(const SM2_JACOBIAN_POINT *P, uint8_t out[64]); -void sm2_jacobian_point_from_bytes(SM2_JACOBIAN_POINT *P, const uint8_t in[64]); -void sm2_jacobian_point_mul_generator(SM2_JACOBIAN_POINT *R, const SM2_BN k); -void sm2_jacobian_point_mul_sum(SM2_JACOBIAN_POINT *R, const SM2_BN t, const SM2_JACOBIAN_POINT *P, const SM2_BN s); -void sm2_jacobian_point_from_hex(SM2_JACOBIAN_POINT *P, const char hex[64 * 2]); // for testing only - -int sm2_jacobian_point_is_at_infinity(const SM2_JACOBIAN_POINT *P); -int sm2_jacobian_point_is_on_curve(const SM2_JACOBIAN_POINT *P); -int sm2_jacobian_point_equ_hex(const SM2_JACOBIAN_POINT *P, const char hex[128]); // for testing only -int sm2_jacobian_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_JACOBIAN_POINT *P); - -#define sm2_jacobian_point_set_infinity(R) sm2_jacobian_point_init(R) -#define sm2_jacobian_point_copy(R, P) memcpy((R), (P), sizeof(SM2_JACOBIAN_POINT)) - -typedef uint8_t sm2_bn_t[32]; - -typedef struct { - uint8_t x[32]; - uint8_t y[32]; -} SM2_POINT; - -#define sm2_point_init(P) memset((P),0,sizeof(SM2_POINT)) -#define sm2_point_set_infinity(P) sm2_point_init(P) -int sm2_point_from_octets(SM2_POINT *P, const uint8_t *in, size_t inlen); -void sm2_point_to_compressed_octets(const SM2_POINT *P, uint8_t out[33]); -void sm2_point_to_uncompressed_octets(const SM2_POINT *P, uint8_t out[65]); - -int sm2_point_from_x(SM2_POINT *P, const uint8_t x[32], int y); -int sm2_point_from_xy(SM2_POINT *P, const uint8_t x[32], const uint8_t y[32]); -int sm2_point_is_on_curve(const SM2_POINT *P); -int sm2_point_is_at_infinity(const SM2_POINT *P); -int sm2_point_add(SM2_POINT *R, const SM2_POINT *P, const SM2_POINT *Q); -int sm2_point_sub(SM2_POINT *R, const SM2_POINT *P, const SM2_POINT *Q); -int sm2_point_neg(SM2_POINT *R, const SM2_POINT *P); -int sm2_point_dbl(SM2_POINT *R, const SM2_POINT *P); -int sm2_point_mul(SM2_POINT *R, const uint8_t k[32], const SM2_POINT *P); -int sm2_point_mul_generator(SM2_POINT *R, const uint8_t k[32]); -int sm2_point_mul_sum(SM2_POINT *R, const uint8_t k[32], const SM2_POINT *P, const uint8_t s[32]); // R = k * P + s * G - -/* -RFC 5480 Elliptic Curve Cryptography Subject Public Key Information -ECPoint ::= OCTET STRING -*/ -#define SM2_POINT_MAX_SIZE (2 + 65) -int sm2_point_to_der(const SM2_POINT *P, uint8_t **out, size_t *outlen); -int sm2_point_from_der(SM2_POINT *P, const uint8_t **in, size_t *inlen); -int sm2_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_POINT *P); -int sm2_point_from_hash(SM2_POINT *R, const uint8_t *data, size_t datalen); - - -typedef struct { - SM2_POINT public_key; - uint8_t private_key[32]; + SM2_Z256_POINT public_key; + sm2_z256_t private_key; } SM2_KEY; - -_gmssl_export int sm2_key_generate(SM2_KEY *key); -int sm2_key_set_private_key(SM2_KEY *key, const uint8_t private_key[32]); // key->public_key will be replaced -int sm2_key_set_public_key(SM2_KEY *key, const SM2_POINT *public_key); // key->private_key will be cleared // FIXME: support octets as input? +int sm2_key_generate(SM2_KEY *key); int sm2_key_print(FILE *fp, int fmt, int ind, const char *label, const SM2_KEY *key); +int sm2_key_set_private_key(SM2_KEY *key, const sm2_z256_t private_key); +int sm2_key_set_public_key(SM2_KEY *key, const SM2_Z256_POINT *public_key); int sm2_public_key_equ(const SM2_KEY *sm2_key, const SM2_KEY *pub_key); -//int sm2_public_key_copy(SM2_KEY *sm2_key, const SM2_KEY *pub_key); // do we need this? int sm2_public_key_digest(const SM2_KEY *key, uint8_t dgst[32]); int sm2_public_key_print(FILE *fp, int fmt, int ind, const char *label, const SM2_KEY *pub_key); + /* from RFC 5915 ECPrivateKey ::= SEQUENCE { version INTEGER, -- value MUST be (1) - privateKey OCTET STRING, -- big endian encoding of integer 这里不是以INTEGER编码的,因此长度固定 + privateKey OCTET STRING, -- big endian encoding of integer, fixed length parameters [0] EXPLICIT ECParameters OPTIONAL, -- ONLY namedCurve OID is permitted, by RFC 5480 -- MUST always include this field, by RFC 5915 @@ -247,10 +76,10 @@ SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING -- uncompressed octets of ECPoint } */ -_gmssl_export int sm2_public_key_info_to_der(const SM2_KEY *a, uint8_t **out, size_t *outlen); -_gmssl_export int sm2_public_key_info_from_der(SM2_KEY *a, const uint8_t **in, size_t *inlen); -_gmssl_export int sm2_public_key_info_to_pem(const SM2_KEY *a, FILE *fp); -_gmssl_export int sm2_public_key_info_from_pem(SM2_KEY *a, FILE *fp); +int sm2_public_key_info_to_der(const SM2_KEY *a, uint8_t **out, size_t *outlen); +int sm2_public_key_info_from_der(SM2_KEY *a, const uint8_t **in, size_t *inlen); +int sm2_public_key_info_to_pem(const SM2_KEY *a, FILE *fp); +int sm2_public_key_info_from_pem(SM2_KEY *a, FILE *fp); /* PKCS #8 PrivateKeyInfo from RFC 5208 @@ -278,13 +107,14 @@ EncryptedPrivateKeyInfo ::= SEQUENCE { encryptionAlgorithm EncryptionAlgorithmIdentifier, -- id-PBES2 encryptedData OCTET STRING } */ -_gmssl_export int sm2_private_key_info_encrypt_to_der(const SM2_KEY *key, +int sm2_private_key_info_encrypt_to_der(const SM2_KEY *key, const char *pass, uint8_t **out, size_t *outlen); -_gmssl_export int sm2_private_key_info_decrypt_from_der(SM2_KEY *key, const uint8_t **attrs, size_t *attrs_len, +int sm2_private_key_info_decrypt_from_der(SM2_KEY *key, const uint8_t **attrs, size_t *attrs_len, const char *pass, const uint8_t **in, size_t *inlen); -_gmssl_export int sm2_private_key_info_encrypt_to_pem(const SM2_KEY *key, const char *pass, FILE *fp); +int sm2_private_key_info_encrypt_to_pem(const SM2_KEY *key, const char *pass, FILE *fp); // FIXME: #define default buffer size -_gmssl_export int sm2_private_key_info_decrypt_from_pem(SM2_KEY *key, const char *pass, FILE *fp); +int sm2_private_key_info_decrypt_from_pem(SM2_KEY *key, const char *pass, FILE *fp); + typedef struct { @@ -293,17 +123,31 @@ typedef struct { } SM2_SIGNATURE; int sm2_do_sign(const SM2_KEY *key, const uint8_t dgst[32], SM2_SIGNATURE *sig); -int sm2_do_sign_fast(const SM2_Fn d, const uint8_t dgst[32], SM2_SIGNATURE *sig); int sm2_do_verify(const SM2_KEY *key, const uint8_t dgst[32], const SM2_SIGNATURE *sig); +int sm2_fast_sign_compute_key(const SM2_KEY *key, sm2_z256_t fast_private); + +typedef struct { + sm2_z256_t k; + sm2_z256_t x1_modn; +} SM2_SIGN_PRE_COMP; + +#define SM2_SIGN_PRE_COMP_COUNT 32 + +int sm2_fast_sign_pre_compute(SM2_SIGN_PRE_COMP pre_comp[32]); +int sm2_fast_sign(const sm2_z256_t fast_private, SM2_SIGN_PRE_COMP *pre_comp, + const uint8_t dgst[32], SM2_SIGNATURE *sig); +int sm2_fast_verify(const SM2_Z256_POINT point_table[16], + const uint8_t dgst[32], const SM2_SIGNATURE *sig); + #define SM2_MIN_SIGNATURE_SIZE 8 #define SM2_MAX_SIGNATURE_SIZE 72 int sm2_signature_to_der(const SM2_SIGNATURE *sig, uint8_t **out, size_t *outlen); int sm2_signature_from_der(SM2_SIGNATURE *sig, const uint8_t **in, size_t *inlen); int sm2_signature_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *sig, size_t siglen); -_gmssl_export int sm2_sign(const SM2_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen); -_gmssl_export int sm2_verify(const SM2_KEY *key, const uint8_t dgst[32], const uint8_t *sig, size_t siglen); +int sm2_sign(const SM2_KEY *key, const uint8_t dgst[32], uint8_t *sig, size_t *siglen); +int sm2_verify(const SM2_KEY *key, const uint8_t dgst[32], const uint8_t *sig, size_t siglen); enum { SM2_signature_compact_size = 70, @@ -312,28 +156,48 @@ enum { }; int sm2_sign_fixlen(const SM2_KEY *key, const uint8_t dgst[32], size_t siglen, uint8_t *sig); + + #define SM2_DEFAULT_ID "1234567812345678" #define SM2_DEFAULT_ID_LENGTH (sizeof(SM2_DEFAULT_ID) - 1) // LENGTH for string and SIZE for bytes #define SM2_DEFAULT_ID_BITS (SM2_DEFAULT_ID_LENGTH * 8) #define SM2_MAX_ID_BITS 65535 #define SM2_MAX_ID_LENGTH (SM2_MAX_ID_BITS/8) -int sm2_compute_z(uint8_t z[32], const SM2_POINT *pub, const char *id, size_t idlen); +int sm2_compute_z(uint8_t z[32], const SM2_Z256_POINT *pub, const char *id, size_t idlen); + typedef struct { SM3_CTX sm3_ctx; + SM3_CTX saved_sm3_ctx; SM2_KEY key; + sm2_z256_t fast_sign_private; + SM2_SIGN_PRE_COMP pre_comp[SM2_SIGN_PRE_COMP_COUNT]; + unsigned int num_pre_comp; + + // verify public point table, P, 2P, ..., 16P + SM2_Z256_POINT public_point_table[16]; } SM2_SIGN_CTX; -_gmssl_export int sm2_sign_init(SM2_SIGN_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen); -_gmssl_export int sm2_sign_update(SM2_SIGN_CTX *ctx, const uint8_t *data, size_t datalen); -_gmssl_export int sm2_sign_finish(SM2_SIGN_CTX *ctx, uint8_t *sig, size_t *siglen); +int sm2_sign_init(SM2_SIGN_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen); +int sm2_sign_update(SM2_SIGN_CTX *ctx, const uint8_t *data, size_t datalen); +int sm2_sign_finish(SM2_SIGN_CTX *ctx, uint8_t *sig, size_t *siglen); +int sm2_sign_reset(SM2_SIGN_CTX *ctx); int sm2_sign_finish_fixlen(SM2_SIGN_CTX *ctx, size_t siglen, uint8_t *sig); -_gmssl_export int sm2_verify_init(SM2_SIGN_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen); -_gmssl_export int sm2_verify_update(SM2_SIGN_CTX *ctx, const uint8_t *data, size_t datalen); -_gmssl_export int sm2_verify_finish(SM2_SIGN_CTX *ctx, const uint8_t *sig, size_t siglen); +typedef struct { + SM3_CTX sm3_ctx; + SM3_CTX saved_sm3_ctx; + SM2_KEY key; + SM2_Z256_POINT public_point_table[16]; +} SM2_VERIFY_CTX; + +int sm2_verify_init(SM2_VERIFY_CTX *ctx, const SM2_KEY *key, const char *id, size_t idlen); +int sm2_verify_update(SM2_VERIFY_CTX *ctx, const uint8_t *data, size_t datalen); +int sm2_verify_finish(SM2_VERIFY_CTX *ctx, const uint8_t *sig, size_t siglen); +int sm2_verify_reset(SM2_VERIFY_CTX *ctx); + /* SM2Cipher ::= SEQUENCE { @@ -345,6 +209,11 @@ SM2Cipher ::= SEQUENCE { #define SM2_MIN_PLAINTEXT_SIZE 1 // re-compute SM2_MIN_CIPHERTEXT_SIZE when modify #define SM2_MAX_PLAINTEXT_SIZE 255 // re-compute SM2_MAX_CIPHERTEXT_SIZE when modify +typedef struct { + uint8_t x[32]; + uint8_t y[32]; +} SM2_POINT; + typedef struct { SM2_POINT point; uint8_t hash[32]; @@ -352,6 +221,9 @@ typedef struct { uint8_t ciphertext[SM2_MAX_PLAINTEXT_SIZE]; } SM2_CIPHERTEXT; + +int sm2_kdf(const uint8_t *in, size_t inlen, size_t outlen, uint8_t *out); + int sm2_do_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, SM2_CIPHERTEXT *out); int sm2_do_decrypt(const SM2_KEY *key, const SM2_CIPHERTEXT *in, uint8_t *out, size_t *outlen); @@ -360,8 +232,8 @@ int sm2_do_decrypt(const SM2_KEY *key, const SM2_CIPHERTEXT *in, uint8_t *out, s int sm2_ciphertext_to_der(const SM2_CIPHERTEXT *c, uint8_t **out, size_t *outlen); int sm2_ciphertext_from_der(SM2_CIPHERTEXT *c, const uint8_t **in, size_t *inlen); int sm2_ciphertext_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *a, size_t alen); -_gmssl_export int sm2_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -_gmssl_export int sm2_decrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm2_encrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm2_decrypt(const SM2_KEY *key, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); enum { SM2_ciphertext_compact_point_size = 68, @@ -372,8 +244,41 @@ int sm2_do_encrypt_fixlen(const SM2_KEY *key, const uint8_t *in, size_t inlen, i int sm2_encrypt_fixlen(const SM2_KEY *key, const uint8_t *in, size_t inlen, int point_size, uint8_t *out, size_t *outlen); -int sm2_do_ecdh(const SM2_KEY *key, const SM2_POINT *peer_public, SM2_POINT *out); -_gmssl_export int sm2_ecdh(const SM2_KEY *key, const uint8_t *peer_public, size_t peer_public_len, SM2_POINT *out); +int sm2_do_ecdh(const SM2_KEY *key, const SM2_Z256_POINT *peer_public, SM2_Z256_POINT *out); +int sm2_ecdh(const SM2_KEY *key, const uint8_t *peer_public, size_t peer_public_len, uint8_t out[64]); + + +typedef struct { + sm2_z256_t k; + SM2_POINT C1; +} SM2_ENC_PRE_COMP; + +#define SM2_ENC_PRE_COMP_NUM 8 +int sm2_encrypt_pre_compute(SM2_ENC_PRE_COMP pre_comp[SM2_ENC_PRE_COMP_NUM]); +int sm2_do_encrypt_ex(const SM2_KEY *key, const SM2_ENC_PRE_COMP *pre_comp, + const uint8_t *in, size_t inlen, SM2_CIPHERTEXT *out); + +typedef struct { + SM2_ENC_PRE_COMP pre_comp[SM2_ENC_PRE_COMP_NUM]; + size_t pre_comp_num; + uint8_t buf[SM2_MAX_PLAINTEXT_SIZE]; + size_t buf_size; +} SM2_ENC_CTX; + +int sm2_encrypt_init(SM2_ENC_CTX *ctx); +int sm2_encrypt_update(SM2_ENC_CTX *ctx, const uint8_t *in, size_t inlen); +int sm2_encrypt_finish(SM2_ENC_CTX *ctx, const SM2_KEY *public_key, uint8_t *out, size_t *outlen); +int sm2_encrypt_reset(SM2_ENC_CTX *ctx); + +typedef struct { + uint8_t buf[SM2_MAX_CIPHERTEXT_SIZE]; + size_t buf_size; +} SM2_DEC_CTX; + +int sm2_decrypt_init(SM2_DEC_CTX *ctx); +int sm2_decrypt_update(SM2_DEC_CTX *ctx, const uint8_t *in, size_t inlen); +int sm2_decrypt_finish(SM2_DEC_CTX *ctx, const SM2_KEY *key, uint8_t *out, size_t *outlen); +int sm2_decrypt_reset(SM2_DEC_CTX *ctx); #ifdef __cplusplus diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_key_share.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_key_share.h index 7288d32..574b2c4 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_key_share.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_key_share.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_recover.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_recover.h index 92d2c01..9331560 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_recover.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_recover.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_ring.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_ring.h index 6ce4e49..0c3a367 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_ring.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_ring.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_z256.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_z256.h new file mode 100644 index 0000000..2fcb993 --- /dev/null +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm2_z256.h @@ -0,0 +1,156 @@ +/* + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + + +#ifndef GMSSL_SM2_Z256_H +#define GMSSL_SM2_Z256_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +// z256 means compact presentation of uint256 +typedef uint64_t sm2_z256_t[4]; +typedef uint64_t sm2_z512_t[8]; + + +void sm2_z256_set_one(sm2_z256_t r); +void sm2_z256_set_zero(sm2_z256_t r); + +int sm2_z256_rand_range(sm2_z256_t r, const sm2_z256_t range); +void sm2_z256_copy(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_copy_conditional(sm2_z256_t dst, const sm2_z256_t src, uint64_t move); +void sm2_z256_from_bytes(sm2_z256_t r, const uint8_t in[32]); +void sm2_z256_to_bytes(const sm2_z256_t a, uint8_t out[32]); +int sm2_z256_cmp(const sm2_z256_t a, const sm2_z256_t b); +uint64_t sm2_z256_is_zero(const sm2_z256_t a); +uint64_t sm2_z256_equ(const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_rshift(sm2_z256_t r, const sm2_z256_t a, unsigned int nbits); +uint64_t sm2_z256_add(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +uint64_t sm2_z256_sub(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_mul(sm2_z512_t r, const sm2_z256_t a, const sm2_z256_t b); +int sm2_z256_get_booth(const sm2_z256_t a, unsigned int window_size, int i); +void sm2_z256_from_hex(sm2_z256_t r, const char *hex); +int sm2_z256_equ_hex(const sm2_z256_t a, const char *hex); +int sm2_z256_print(FILE *fp, int ind, int fmt, const char *label, const sm2_z256_t a); + +void sm2_z256_modp_add(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_modp_dbl(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modp_tri(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modp_sub(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_modp_neg(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modp_haf(sm2_z256_t r, const sm2_z256_t a); + +void sm2_z256_modp_to_mont(const sm2_z256_t a, sm2_z256_t r); +void sm2_z256_modp_from_mont(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modp_mont_mul(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_modp_mont_sqr(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modp_mont_exp(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t e); +void sm2_z256_modp_mont_inv(sm2_z256_t r, const sm2_z256_t a); +int sm2_z256_modp_mont_sqrt(sm2_z256_t r, const sm2_z256_t a); + +void sm2_z256_modn_add(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_modn_sub(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_modn_neg(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modn_mul(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_modn_sqr(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modn_exp(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t e); +void sm2_z256_modn_inv(sm2_z256_t r, const sm2_z256_t a); + +void sm2_z256_modn_to_mont(const sm2_z256_t a, sm2_z256_t r); +void sm2_z256_modn_from_mont(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modn_mont_mul(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t b); +void sm2_z256_modn_mont_sqr(sm2_z256_t r, const sm2_z256_t a); +void sm2_z256_modn_mont_exp(sm2_z256_t r, const sm2_z256_t a, const sm2_z256_t e); +void sm2_z256_modn_mont_inv(sm2_z256_t r, const sm2_z256_t a); + + +typedef struct { + sm2_z256_t X; + sm2_z256_t Y; + sm2_z256_t Z; +} SM2_Z256_POINT; + +void sm2_z256_point_set_infinity(SM2_Z256_POINT *P); +int sm2_z256_point_is_at_infinity(const SM2_Z256_POINT *P); +int sm2_z256_point_to_bytes(const SM2_Z256_POINT *P, uint8_t out[64]); +int sm2_z256_point_from_bytes(SM2_Z256_POINT *P, const uint8_t in[64]); +int sm2_z256_point_from_hex(SM2_Z256_POINT *P, const char *hex); +int sm2_z256_point_equ_hex(const SM2_Z256_POINT *P, const char *hex); +int sm2_z256_point_is_on_curve(const SM2_Z256_POINT *P); +int sm2_z256_point_equ(const SM2_Z256_POINT *P, const SM2_Z256_POINT *Q); // equivalent jacobian points +int sm2_z256_point_get_xy(const SM2_Z256_POINT *P, uint64_t x[4], uint64_t y[4]); + +void sm2_z256_point_dbl(SM2_Z256_POINT *R, const SM2_Z256_POINT *A); +void sm2_z256_point_add(SM2_Z256_POINT *r, const SM2_Z256_POINT *a, const SM2_Z256_POINT *b); +void sm2_z256_point_neg(SM2_Z256_POINT *R, const SM2_Z256_POINT *P); +void sm2_z256_point_sub(SM2_Z256_POINT *R, const SM2_Z256_POINT *A, const SM2_Z256_POINT *B); +void sm2_z256_point_get_affine(const SM2_Z256_POINT *P, uint64_t x[4], uint64_t y[4]); +int sm2_z256_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_Z256_POINT *P); + + +typedef struct { + sm2_z256_t x; + sm2_z256_t y; +} SM2_Z256_AFFINE_POINT; + +void sm2_z256_point_copy_affine(SM2_Z256_POINT *R, const SM2_Z256_AFFINE_POINT *P); +void sm2_z256_point_add_affine(SM2_Z256_POINT *r, const SM2_Z256_POINT *a, const SM2_Z256_AFFINE_POINT *b); +void sm2_z256_point_sub_affine(SM2_Z256_POINT *R, const SM2_Z256_POINT *A, const SM2_Z256_AFFINE_POINT *B); +int sm2_z256_point_affine_print(FILE *fp, int fmt, int ind, const char *label, const SM2_Z256_AFFINE_POINT *P); + +void sm2_z256_point_mul_generator(SM2_Z256_POINT *R, const sm2_z256_t k); +void sm2_z256_point_mul_pre_compute(const SM2_Z256_POINT *P, SM2_Z256_POINT T[16]); +void sm2_z256_point_mul_ex(SM2_Z256_POINT *R, const sm2_z256_t k, const SM2_Z256_POINT P_table[16]); +void sm2_z256_point_mul(SM2_Z256_POINT *R, const sm2_z256_t k, const SM2_Z256_POINT *P); +void sm2_z256_point_mul_sum(SM2_Z256_POINT *R, const sm2_z256_t t, const SM2_Z256_POINT *P, const sm2_z256_t s); + + +const uint64_t *sm2_z256_prime(void); +const uint64_t *sm2_z256_order(void); +const uint64_t *sm2_z256_order_minus_one(void); +const uint64_t *sm2_z256_one(void); + + +enum { + SM2_point_at_infinity = 0x00, + SM2_point_compressed_y_even = 0x02, + SM2_point_compressed_y_odd = 0x03, + SM2_point_uncompressed = 0x04, + SM2_point_uncompressed_y_even = 0x06, + SM2_point_uncompressed_y_odd = 0x07, +}; + +int sm2_z256_point_from_x_bytes(SM2_Z256_POINT *P, const uint8_t x_bytes[32], int y_is_odd); +int sm2_z256_point_from_hash(SM2_Z256_POINT *R, const uint8_t *data, size_t datalen, int y_is_odd); +int sm2_z256_point_from_octets(SM2_Z256_POINT *P, const uint8_t *in, size_t inlen); + +int sm2_z256_point_to_uncompressed_octets(const SM2_Z256_POINT *P, uint8_t out[65]); +int sm2_z256_point_to_compressed_octets(const SM2_Z256_POINT *P, uint8_t out[33]); + +/* +RFC 5480 Elliptic Curve Cryptography Subject Public Key Information +ECPoint ::= OCTET STRING +*/ +#define SM2_POINT_MAX_SIZE (2 + 65) +int sm2_z256_point_to_der(const SM2_Z256_POINT *P, uint8_t **out, size_t *outlen); +int sm2_z256_point_from_der(SM2_Z256_POINT *P, const uint8_t **in, size_t *inlen); +int sm2_z256_point_print(FILE *fp, int fmt, int ind, const char *label, const SM2_Z256_POINT *P); + + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm3.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm3.h index ba02da8..35ae3ff 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm3.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm3.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -18,32 +18,10 @@ extern "C" { #endif -/* -SM3 Public API - - SM3_DIGEST_SIZE - SM3_HMAC_SIZE - - SM3_CTX - sm3_init - sm3_update - sm3_finish - - SM3_HMAC_CTX - sm3_hmac_init - sm3_hmac_update - sm3_hmac_finish - - sm3_digest - sm3_hmac -*/ - -#define SM3_IS_BIG_ENDIAN 1 #define SM3_DIGEST_SIZE 32 #define SM3_BLOCK_SIZE 64 #define SM3_STATE_WORDS 8 -#define SM3_HMAC_SIZE (SM3_DIGEST_SIZE) typedef struct { @@ -53,12 +31,14 @@ typedef struct { size_t num; } SM3_CTX; +void sm3_compress_blocks(uint32_t digest[8], const uint8_t *data, size_t blocks); + void sm3_init(SM3_CTX *ctx); void sm3_update(SM3_CTX *ctx, const uint8_t *data, size_t datalen); void sm3_finish(SM3_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]); -void sm3_digest(const uint8_t *data, size_t datalen, uint8_t dgst[SM3_DIGEST_SIZE]); -void sm3_compress_blocks(uint32_t digest[8], const uint8_t *data, size_t blocks); + +#define SM3_HMAC_SIZE (SM3_DIGEST_SIZE) typedef struct { SM3_CTX sm3_ctx; @@ -68,9 +48,6 @@ typedef struct { void sm3_hmac_init(SM3_HMAC_CTX *ctx, const uint8_t *key, size_t keylen); void sm3_hmac_update(SM3_HMAC_CTX *ctx, const uint8_t *data, size_t datalen); void sm3_hmac_finish(SM3_HMAC_CTX *ctx, uint8_t mac[SM3_HMAC_SIZE]); -void sm3_hmac(const uint8_t *key, size_t keylen, - const uint8_t *data, size_t datalen, - uint8_t mac[SM3_HMAC_SIZE]); typedef struct { @@ -79,10 +56,33 @@ typedef struct { } SM3_KDF_CTX; void sm3_kdf_init(SM3_KDF_CTX *ctx, size_t outlen); -void sm3_kdf_update(SM3_KDF_CTX *ctx, const uint8_t *data, size_t datalen); +void sm3_kdf_update(SM3_KDF_CTX *ctx, const uint8_t *in, size_t inlen); void sm3_kdf_finish(SM3_KDF_CTX *ctx, uint8_t *out); +#define SM3_PBKDF2_MIN_ITER 10000 +#define SM3_PBKDF2_MAX_ITER (16777216-1) +#define SM3_PBKDF2_MAX_SALT_SIZE 64 +#define SM3_PBKDF2_DEFAULT_SALT_SIZE 8 + +int sm3_pbkdf2(const char *pass, size_t passlen, + const uint8_t *salt, size_t saltlen, size_t count, + size_t outlen, uint8_t *out); + + +typedef struct { + union { + SM3_CTX sm3_ctx; + SM3_HMAC_CTX hmac_ctx; + }; + int state; +} SM3_DIGEST_CTX; + +int sm3_digest_init(SM3_DIGEST_CTX *ctx, const uint8_t *key, size_t keylen); +int sm3_digest_update(SM3_DIGEST_CTX *ctx, const uint8_t *data, size_t datalen); +int sm3_digest_finish(SM3_DIGEST_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]); + + #ifdef __cplusplus } #endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_rng.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_rng.h deleted file mode 100644 index 418ddf3..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_rng.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -#ifndef GMSSL_SM3_RNG_H -#define GMSSL_SM3_RNG_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -#define SM3_RNG_MAX_RESEED_COUNTER (1<<20) -#define SM3_RNG_MAX_RESEED_SECONDS 600 - - -typedef struct { - uint8_t V[55]; - uint8_t C[55]; - uint32_t reseed_counter; - time_t last_reseed_time; -} SM3_RNG; - -int sm3_rng_init(SM3_RNG *rng, const uint8_t *nonce, size_t nonce_len, - const uint8_t *label, size_t label_len); -int sm3_rng_reseed(SM3_RNG *rng, const uint8_t *addin, size_t addin_len); -int sm3_rng_generate(SM3_RNG *rng, const uint8_t *addin, size_t addin_len, - uint8_t *out, size_t outlen); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_x8_avx2.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_x8_avx2.h index f3674c2..2695cb5 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_x8_avx2.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_x8_avx2.h @@ -7,7 +7,10 @@ * http://www.apache.org/licenses/LICENSE-2.0 */ -#ifndef GMSSL_SM3_X8_AVX2_H +// TODO: a new header for coarse-grained parallelism SM3, implemented by sm3_avx2/avx512, sm3_sve/sve2, sm3_cl +// and used by sm3_xmss or other algors + +#ifndef GMSSL_SM3_X8_AVX2_H // GMSSL_SM3_MULTI_H ? #define GMSSL_SM3_X8_AVX2_H #include diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_xmss.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_xmss.h new file mode 100644 index 0000000..1c10a78 --- /dev/null +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm3_xmss.h @@ -0,0 +1,127 @@ +/* + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +#ifndef GMSSL_SM3_XMSS_H +#define GMSSL_SM3_XMSS_H + +#include +#include +#include +#include +#ifdef ENABLE_SHA2 +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +// Crosscheck with data from xmss-reference (SHA-256), except the XMSS signature. +#if defined(ENABLE_SM3_XMSS_CROSSCHECK) && defined(ENABLE_SHA2) +# define HASH256_CTX SHA256_CTX +# define hash256_init sha256_init +# define hash256_update sha256_update +# define hash256_finish sha256_finish +# define hash256_digest sha256_digest +#else +# define HASH256_CTX SM3_CTX +# define hash256_init sm3_init +# define hash256_update sm3_update +# define hash256_finish sm3_finish +# define hash256_digest sm3_digest +#endif + +typedef uint8_t hash256_bytes_t[32]; + +// Derive wots+ sk from a secret seed use the spec of xmss-reference. +void sm3_wots_derive_sk(const uint8_t secret[32], + const uint8_t seed[32], const uint8_t in_adrs[32], + hash256_bytes_t sk[67]); +void sm3_wots_derive_pk(const hash256_bytes_t sk[67], + const HASH256_CTX *prf_seed_ctx, const uint8_t in_adrs[32], + hash256_bytes_t pk[67]); +void sm3_wots_do_sign(const hash256_bytes_t sk[67], + const HASH256_CTX *prf_seed_ctx, const uint8_t in_adrs[32], + const uint8_t dgst[32], hash256_bytes_t sig[67]); +void sm3_wots_sig_to_pk(const hash256_bytes_t sig[67], const uint8_t dgst[32], + const HASH256_CTX *prf_seed_ctx, const uint8_t in_adrs[32], + hash256_bytes_t pk[67]); + +void sm3_xmss_derive_root(const uint8_t xmss_secret[32], int height, + const uint8_t seed[32], + hash256_bytes_t *tree, uint8_t xmss_root[32]); +void sm3_xmss_do_sign(const uint8_t xmss_secret[32], int index, + const uint8_t seed[32], const uint8_t in_adrs[32], int height, + const hash256_bytes_t *tree, + const uint8_t dgst[32], + hash256_bytes_t wots_sig[67], + hash256_bytes_t *auth_path); + +void sm3_xmss_sig_to_root(const hash256_bytes_t wots_sig[67], int index, const hash256_bytes_t *auth_path, + const uint8_t seed[32], const uint8_t in_adrs[32], int height, + const uint8_t dgst[32], + uint8_t xmss_root[32]); + +enum { + XMSS_SM3_10 = 0x10000001, + XMSS_SM3_16 = 0x10000002, + XMSS_SM3_20 = 0x10000003, + XMSS_SHA256_10 = 0x00000001, + XMSS_SHA256_16 = 0x00000002, + XMSS_SHA256_20 = 0x00000003, +}; + +int sm3_xmss_height_from_oid(uint32_t *height, uint32_t id); + +typedef struct { + uint32_t oid; + uint8_t seed[32]; + uint8_t root[32]; + uint8_t secret[32]; + uint8_t prf_key[32]; + uint32_t index; + hash256_bytes_t *tree; +} SM3_XMSS_KEY; + +int sm3_xmss_key_generate(SM3_XMSS_KEY *key, uint32_t oid); +int sm3_xmss_key_print(FILE *fp, int fmt, int ind, const char *label, const SM3_XMSS_KEY *key); +int sm3_xmss_key_get_height(const SM3_XMSS_KEY *key, uint32_t *height); +int sm3_xmss_key_to_bytes(const SM3_XMSS_KEY *key, uint8_t *out, size_t *outlen); +int sm3_xmss_key_from_bytes(SM3_XMSS_KEY *key, const uint8_t *in, size_t inlen); +int sm3_xmss_public_key_to_bytes(const SM3_XMSS_KEY *key, uint8_t *out, size_t *outlen); +int sm3_xmss_public_key_from_bytes(SM3_XMSS_KEY *key, const uint8_t *in, size_t inlen); +void sm3_xmss_key_cleanup(SM3_XMSS_KEY *key); + +typedef struct { + uint8_t index[4]; + uint8_t random[32]; + hash256_bytes_t wots_sig[67]; + hash256_bytes_t auth_path[20]; +} SM3_XMSS_SIGNATURE; + +int sm3_xmss_signature_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *in, size_t inlen); + +typedef struct { + uint8_t random[32]; + HASH256_CTX hash256_ctx; +} SM3_XMSS_SIGN_CTX; + +int sm3_xmss_sign_init(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key); +int sm3_xmss_sign_update(SM3_XMSS_SIGN_CTX *ctx, const uint8_t *data, size_t datalen); +int sm3_xmss_sign_finish(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key, uint8_t *sigbuf, size_t *siglen); +int sm3_xmss_verify_init(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key, const uint8_t *sigbuf, size_t siglen); +int sm3_xmss_verify_update(SM3_XMSS_SIGN_CTX *ctx, const uint8_t *data, size_t datalen); +int sm3_xmss_verify_finish(SM3_XMSS_SIGN_CTX *ctx, const SM3_XMSS_KEY *key, const uint8_t *sigbuf, size_t siglen); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4.h index d4c4678..5e876a7 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -13,35 +13,13 @@ #include #include +#include #ifdef __cplusplus extern "C" { #endif -/* -SM4 Public API - - SM4_KEY_SIZE - SM4_BLOCK_SIZE - - SM4_CBC_CTX - sm4_cbc_encrypt_init - sm4_cbc_encrypt_update - sm4_cbc_encrypt_finish - sm4_cbc_decrypt_init - sm4_cbc_decrypt_update - sm4_cbc_decrypt_finish - - SM4_CTR_CTX - sm4_ctr_encrypt_init - sm4_ctr_encrypt_update - sm4_ctr_encrypt_finish - sm4_ctr_decrypt_init - sm4_ctr_decrypt_update - sm4_ctr_decrypt_finish -*/ - #define SM4_KEY_SIZE (16) #define SM4_BLOCK_SIZE (16) #define SM4_NUM_ROUNDS (32) @@ -54,54 +32,21 @@ typedef struct { void sm4_set_encrypt_key(SM4_KEY *key, const uint8_t raw_key[SM4_KEY_SIZE]); void sm4_set_decrypt_key(SM4_KEY *key, const uint8_t raw_key[SM4_KEY_SIZE]); void sm4_encrypt(const SM4_KEY *key, const uint8_t in[SM4_BLOCK_SIZE], uint8_t out[SM4_BLOCK_SIZE]); -#define sm4_decrypt(key,in,out) sm4_encrypt(key,in,out) - -void sm4_cbc_encrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE], +void sm4_encrypt_blocks(const SM4_KEY *key, const uint8_t *in, size_t nblocks, uint8_t *out); +void sm4_cbc_encrypt_blocks(const SM4_KEY *key, uint8_t iv[SM4_BLOCK_SIZE], const uint8_t *in, size_t nblocks, uint8_t *out); -void sm4_cbc_decrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE], +void sm4_cbc_decrypt_blocks(const SM4_KEY *key, uint8_t iv[SM4_BLOCK_SIZE], const uint8_t *in, size_t nblocks, uint8_t *out); -int sm4_cbc_padding_encrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE], +void sm4_ctr_encrypt_blocks(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t nblocks, uint8_t *out); +void sm4_ctr32_encrypt_blocks(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t nblocks, uint8_t *out); + +int sm4_cbc_padding_encrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE], const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); -int sm4_cbc_padding_decrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE], +int sm4_cbc_padding_decrypt(const SM4_KEY *key, const uint8_t iv[SM4_BLOCK_SIZE], const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); - - -void sm4_ctr_encrypt(const SM4_KEY *key, uint8_t ctr[SM4_BLOCK_SIZE], - const uint8_t *in, size_t inlen, uint8_t *out); -#define sm4_ctr_decrypt(key,ctr,in,inlen,out) sm4_ctr_encrypt(key,ctr,in,inlen,out) - - -#define SM4_GCM_IV_MIN_SIZE 1 -#define SM4_GCM_IV_MAX_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951 - -#define SM4_GCM_IV_DEFAULT_BITS 96 -#define SM4_GCM_IV_DEFAULT_SIZE 12 - -//#define NIST_SP800_GCM_MAX_IV_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951 - -#define SM4_GCM_MAX_IV_SIZE 64 -#define SM4_GCM_MIN_IV_SIZE 1 -#define SM4_GCM_DEFAULT_IV_SIZE 12 - -#define SM4_GCM_MIN_AAD_SIZE 0 -#define SM4_GCM_MAX_AAD_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951 - -#define SM4_GCM_MIN_PLAINTEXT_SIZE 0 -#define SM4_GCM_MAX_PLAINTEXT_SIZE ((((uint64_t)1 << 39) - 256) >> 3) // 68719476704 - -#define SM4_GCM_MAX_TAG_SIZE 16 -#define SM4_GCM_MIN_TAG_SIZE 12 -// For certain applications (voice or video), tag may be 64 or 32 bits -// see NIST Special Publication 800-38D, Appendix C for more details - - -int sm4_gcm_encrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, - uint8_t *out, size_t taglen, uint8_t *tag); -int sm4_gcm_decrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen, - const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, - const uint8_t *tag, size_t taglen, uint8_t *out); +void sm4_ctr_encrypt(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t inlen, uint8_t *out); +void sm4_ctr32_encrypt(const SM4_KEY *key, uint8_t ctr[16], const uint8_t *in, size_t inlen, uint8_t *out); typedef struct { @@ -114,12 +59,16 @@ typedef struct { int sm4_cbc_encrypt_init(SM4_CBC_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]); int sm4_cbc_encrypt_update(SM4_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); int sm4_cbc_encrypt_finish(SM4_CBC_CTX *ctx, uint8_t *out, size_t *outlen); - int sm4_cbc_decrypt_init(SM4_CBC_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]); int sm4_cbc_decrypt_update(SM4_CBC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); int sm4_cbc_decrypt_finish(SM4_CBC_CTX *ctx, uint8_t *out, size_t *outlen); +void sm4_ctr_encrypt(const SM4_KEY *key, uint8_t ctr[SM4_BLOCK_SIZE], + const uint8_t *in, size_t inlen, uint8_t *out); +void sm4_ctr32_encrypt(const SM4_KEY *key, uint8_t ctr[SM4_BLOCK_SIZE], + const uint8_t *in, size_t inlen, uint8_t *out); + typedef struct { SM4_KEY sm4_key; uint8_t ctr[SM4_BLOCK_SIZE]; @@ -130,10 +79,184 @@ typedef struct { int sm4_ctr_encrypt_init(SM4_CTR_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t ctr[SM4_BLOCK_SIZE]); int sm4_ctr_encrypt_update(SM4_CTR_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); int sm4_ctr_encrypt_finish(SM4_CTR_CTX *ctx, uint8_t *out, size_t *outlen); +int sm4_ctr32_encrypt_init(SM4_CTR_CTX *ctx, const uint8_t key[SM4_KEY_SIZE], const uint8_t ctr[SM4_BLOCK_SIZE]); +int sm4_ctr32_encrypt_update(SM4_CTR_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_ctr32_encrypt_finish(SM4_CTR_CTX *ctx, uint8_t *out, size_t *outlen); -#define sm4_ctr_decrypt_init(ctx,key,ctr) sm4_ctr_encrypt_init(ctx,key,ctr) -#define sm4_ctr_decrypt_update(ctx,in,inlen,out,outlen) sm4_ctr_encrypt_update(ctx,in,inlen,out,outlen) -#define sm4_ctr_decrypt_finish(ctx,out,outlen) sm4_ctr_encrypt_finish(ctx,out,outlen) + +#define NIST_SP800_GCM_MAX_IV_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951 +#define SM4_GCM_MAX_IV_SIZE 64 +#define SM4_GCM_MIN_IV_SIZE 1 +#define SM4_GCM_DEFAULT_IV_SIZE 12 + +#define NIST_SP800_GCM_MAX_AAD_SIZE (((uint64_t)1 << (64-3)) - 1) // 2305843009213693951 +#define SM4_GCM_MIN_AAD_SIZE 0 +#define SM4_GCM_MAX_AAD_SIZE (1<<24) // 16MiB + +#define SM4_GCM_MIN_PLAINTEXT_SIZE 0 +#define SM4_GCM_MAX_PLAINTEXT_NBLOCKS (((uint64_t)1 << 32) - 2) +#define SM4_GCM_MAX_PLAINTEXT_SIZE (SM4_GCM_MAX_PLAINTEXT_NBLOCKS * 16) // 68719476704 + +#define SM4_GCM_MAX_TAG_SIZE 16 +#define SM4_GCM_MIN_TAG_SIZE 12 +#define SM4_GCM_DEFAULT_TAG_SIZE 16 +// For certain applications (voice or video), tag may be 64 or 32 bits +// see NIST Special Publication 800-38D, Appendix C for more details + +int sm4_gcm_encrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen, + const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, + uint8_t *out, size_t taglen, uint8_t *tag); +int sm4_gcm_decrypt(const SM4_KEY *key, const uint8_t *iv, size_t ivlen, + const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, + const uint8_t *tag, size_t taglen, uint8_t *out); + + +typedef struct { + SM4_CTR_CTX enc_ctx; + GHASH_CTX mac_ctx; + uint8_t Y[16]; // E(K, Y_0) + size_t taglen; + uint8_t mac[16]; + size_t maclen; + uint64_t encedlen; +} SM4_GCM_CTX; + +int sm4_gcm_encrypt_init(SM4_GCM_CTX *ctx, + const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, + const uint8_t *aad, size_t aadlen, size_t taglen); +int sm4_gcm_encrypt_update(SM4_GCM_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_gcm_encrypt_finish(SM4_GCM_CTX *ctx, + uint8_t *out, size_t *outlen); +int sm4_gcm_decrypt_init(SM4_GCM_CTX *ctx, + const uint8_t *key, size_t keylen, const uint8_t *iv, size_t ivlen, + const uint8_t *aad, size_t aadlen, size_t taglen); +int sm4_gcm_decrypt_update(SM4_GCM_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_gcm_decrypt_finish(SM4_GCM_CTX *ctx, + uint8_t *out, size_t *outlen); + + +#ifdef ENABLE_SM4_ECB +// call `sm4_set_decrypt_key` before decrypt + +typedef struct { + SM4_KEY sm4_key; + uint8_t block[SM4_BLOCK_SIZE]; + size_t block_nbytes; +} SM4_ECB_CTX; + +int sm4_ecb_encrypt_init(SM4_ECB_CTX *ctx, const uint8_t key[SM4_BLOCK_SIZE]); +int sm4_ecb_encrypt_update(SM4_ECB_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_ecb_encrypt_finish(SM4_ECB_CTX *ctx, uint8_t *out, size_t *outlen); + +int sm4_ecb_decrypt_init(SM4_ECB_CTX *ctx, const uint8_t key[SM4_BLOCK_SIZE]); +int sm4_ecb_decrypt_update(SM4_ECB_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_ecb_decrypt_finish(SM4_ECB_CTX *ctx, uint8_t *out, size_t *outlen); +#endif // ENABLE_SM4_ECB + + +#ifdef ENABLE_SM4_OFB +// always call `sm4_set_encrypt_key` before encrypt/decrypt +// `sm4_ofb_encrypt` will change the param `iv` +void sm4_ofb_encrypt(const SM4_KEY *key, uint8_t iv[16], const uint8_t *in, size_t inlen, uint8_t *out); + +typedef struct { + SM4_KEY sm4_key; + uint8_t iv[SM4_BLOCK_SIZE]; + uint8_t block[SM4_BLOCK_SIZE]; + size_t block_nbytes; +} SM4_OFB_CTX; + +int sm4_ofb_encrypt_init(SM4_OFB_CTX *ctx, + const uint8_t key[SM4_BLOCK_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]); +int sm4_ofb_encrypt_update(SM4_OFB_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_ofb_encrypt_finish(SM4_OFB_CTX *ctx, uint8_t *out, size_t *outlen); +#endif // ENABLE_SM4_OFB + + +#ifdef ENABLE_SM4_CFB +#define SM4_CFB_MIN_SBYTES 1 +#define SM4_CFB_MAX_SBYTES 16 + +// pre-defined values for `sbytes` +#define SM4_CFB_8 1 +#define SM4_CFB_64 8 +#define SM4_CFB_128 16 + +// always call `sm4_set_encrypt_key` before encrypt/decrypt +// `sm4_cfb_encrypt/decrypt` will change the param `iv` +void sm4_cfb_encrypt(const SM4_KEY *key, size_t sbytes, uint8_t iv[16], + const uint8_t *in, size_t inlen, uint8_t *out); +void sm4_cfb_decrypt(const SM4_KEY *key, size_t sbytes, uint8_t iv[16], + const uint8_t *in, size_t inlen, uint8_t *out); + +typedef struct { + SM4_KEY sm4_key; + uint8_t iv[SM4_BLOCK_SIZE]; + uint8_t block[SM4_BLOCK_SIZE]; + size_t block_nbytes; + size_t sbytes; +} SM4_CFB_CTX; + +int sm4_cfb_encrypt_init(SM4_CFB_CTX *ctx, size_t sbytes, + const uint8_t key[SM4_BLOCK_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]); +int sm4_cfb_encrypt_update(SM4_CFB_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_cfb_encrypt_finish(SM4_CFB_CTX *ctx, uint8_t *out, size_t *outlen); + +int sm4_cfb_decrypt_init(SM4_CFB_CTX *ctx, size_t sbytes, + const uint8_t key[SM4_BLOCK_SIZE], const uint8_t iv[SM4_BLOCK_SIZE]); +int sm4_cfb_decrypt_update(SM4_CFB_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_cfb_decrypt_finish(SM4_CFB_CTX *ctx, uint8_t *out, size_t *outlen); +#endif // ENABLE_SM4_CFB + + +#ifdef ENABLE_SM4_CCM +#define SM4_CCM_MIN_IV_SIZE 7 +#define SM4_CCM_MAX_IV_SIZE 13 +#define SM4_CCM_MIN_TAG_SIZE 4 +#define SM4_CCM_MAX_TAG_SIZE 16 +#define SM4_CCM_DEFAULT_TAG_SIZE 16 + +// make sure inlen < 2^((15 - ivlen) * 8) +int sm4_ccm_encrypt(const SM4_KEY *sm4_key, const uint8_t *iv, size_t ivlen, + const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, + uint8_t *out, size_t taglen, uint8_t *tag); +int sm4_ccm_decrypt(const SM4_KEY *sm4_key, const uint8_t *iv, size_t ivlen, + const uint8_t *aad, size_t aadlen, const uint8_t *in, size_t inlen, + const uint8_t *tag, size_t taglen, uint8_t *out); +#endif // ENABLE_SM4_CCM + + +#ifdef ENABLE_SM4_XTS +// call `sm4_set_encrypt_key` to set both `key1` and `key2` +int sm4_xts_encrypt(const SM4_KEY *key1, const SM4_KEY *key2, const uint8_t tweak[16], + const uint8_t *in, size_t inlen, uint8_t *out); +// call `sm4_set_decrypt_key(key1)` and `sm4_set_encrypt_key(key2)` +int sm4_xts_decrypt(const SM4_KEY *key1, const SM4_KEY *key2, const uint8_t tweak[16], + const uint8_t *in, size_t inlen, uint8_t *out); + +typedef struct { + SM4_KEY key1; + SM4_KEY key2; + uint8_t tweak[16]; + size_t data_unit_size; + uint8_t *block; + size_t block_nbytes; +} SM4_XTS_CTX; + +int sm4_xts_encrypt_init(SM4_XTS_CTX *ctx, const uint8_t key[32], const uint8_t iv[16], size_t data_unit_size); +int sm4_xts_encrypt_update(SM4_XTS_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_xts_encrypt_finish(SM4_XTS_CTX *ctx, uint8_t *out, size_t *outlen); +int sm4_xts_decrypt_init(SM4_XTS_CTX *ctx, const uint8_t key[32], const uint8_t iv[16], size_t data_unit_size); +int sm4_xts_decrypt_update(SM4_XTS_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_xts_decrypt_finish(SM4_XTS_CTX *ctx, uint8_t *out, size_t *outlen); +#endif // ENABLE_SM4_XTS #ifdef __cplusplus diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_mac.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_mac.h index e803c8d..26deb18 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_mac.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_mac.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -24,6 +24,8 @@ typedef struct { size_t ivlen; } SM4_CBC_MAC_CTX; +#define SM4_CBC_MAC_SIZE (SM4_BLOCK_SIZE) + void sm4_cbc_mac_init(SM4_CBC_MAC_CTX *ctx, const uint8_t key[16]); void sm4_cbc_mac_update(SM4_CBC_MAC_CTX *ctx, const uint8_t *data, size_t datalen); void sm4_cbc_mac_finish(SM4_CBC_MAC_CTX *ctx, uint8_t mac[16]); diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_sm3_hmac.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_sm3_hmac.h new file mode 100644 index 0000000..ff1410e --- /dev/null +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cbc_sm3_hmac.h @@ -0,0 +1,52 @@ +/* + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +#ifndef GMSSL_SM4_CBC_SM3_HMAC_H +#define GMSSL_SM4_CBC_SM3_HMAC_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct { + SM4_CBC_CTX enc_ctx; + SM3_HMAC_CTX mac_ctx; + uint8_t mac[SM3_HMAC_SIZE]; + size_t maclen; +} SM4_CBC_SM3_HMAC_CTX; + +#define SM4_CBC_SM3_HMAC_KEY_SIZE 48 +#define SM4_CBC_SM3_HMAC_IV_SIZE 16 + +int sm4_cbc_sm3_hmac_encrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx, + const uint8_t key[48], const uint8_t iv[16], + const uint8_t *aad, size_t aadlen); +int sm4_cbc_sm3_hmac_encrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_cbc_sm3_hmac_encrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx, + uint8_t *out, size_t *outlen); +int sm4_cbc_sm3_hmac_decrypt_init(SM4_CBC_SM3_HMAC_CTX *ctx, + const uint8_t key[48], const uint8_t iv[16], + const uint8_t *aad, size_t aadlen); +int sm4_cbc_sm3_hmac_decrypt_update(SM4_CBC_SM3_HMAC_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_cbc_sm3_hmac_decrypt_finish(SM4_CBC_SM3_HMAC_CTX *ctx, + uint8_t *out, size_t *outlen); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cl.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cl.h index 5f1ca13..ac73f97 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cl.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_cl.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -10,44 +10,39 @@ #ifndef GMSSL_SM4_CL_H #define GMSSL_SM4_CL_H - -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include #include - - -#ifdef APPLE +#ifdef MACOS #include #else #include #endif +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { uint32_t rk[32]; + //size_t workgroup_size; cl_context context; cl_command_queue queue; cl_program program; cl_kernel kernel; cl_mem mem_rk; cl_mem mem_io; - size_t workgroup_size; } SM4_CL_CTX; int sm4_cl_set_encrypt_key(SM4_CL_CTX *ctx, const uint8_t key[16]); int sm4_cl_set_decrypt_key(SM4_CL_CTX *ctx, const uint8_t key[16]); -int sm4_cl_encrypt(SM4_CL_CTX *ctx, const uint8_t *in, size_t nblocks, uint8_t *out); +int sm4_cl_ctr32_encrypt_blocks(SM4_CL_CTX *ctx, uint8_t iv[16], const uint8_t *in, size_t nblocks, uint8_t *out); void sm4_cl_cleanup(SM4_CL_CTX *ctx); -int test_sm4_cl_encrypt(void); - #ifdef __cplusplus } diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_ctr_sm3_hmac.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_ctr_sm3_hmac.h new file mode 100644 index 0000000..838e478 --- /dev/null +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_ctr_sm3_hmac.h @@ -0,0 +1,52 @@ +/* + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +#ifndef GMSSL_SM4_CTR_SM3_HMAC_H +#define GMSSL_SM4_CTR_SM3_HMAC_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct { + SM4_CTR_CTX enc_ctx; + SM3_HMAC_CTX mac_ctx; + uint8_t mac[SM3_HMAC_SIZE]; + size_t maclen; +} SM4_CTR_SM3_HMAC_CTX; + +#define SM4_CTR_SM3_HMAC_KEY_SIZE 48 +#define SM4_CTR_SM3_HMAC_IV_SIZE 16 + +int sm4_ctr_sm3_hmac_encrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx, + const uint8_t key[48], const uint8_t iv[16], + const uint8_t *aad, size_t aadlen); +int sm4_ctr_sm3_hmac_encrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_ctr_sm3_hmac_encrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx, + uint8_t *out, size_t *outlen); +int sm4_ctr_sm3_hmac_decrypt_init(SM4_CTR_SM3_HMAC_CTX *ctx, + const uint8_t key[48], const uint8_t iv[16], + const uint8_t *aad, size_t aadlen); +int sm4_ctr_sm3_hmac_decrypt_update(SM4_CTR_SM3_HMAC_CTX *ctx, + const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +int sm4_ctr_sm3_hmac_decrypt_finish(SM4_CTR_SM3_HMAC_CTX *ctx, + uint8_t *out, size_t *outlen); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_rng.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_rng.h deleted file mode 100644 index 67e86dc..0000000 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm4_rng.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ - -#ifndef GMSSL_SM4_RNG_H -#define GMSSL_SM4_RNG_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -#define SM4_RNG_MAX_RESEED_COUNTER (1<<20) -#define SM4_RNG_MAX_RESEED_SECONDS 600 - -typedef struct { - uint8_t V[16]; - uint8_t K[16]; - uint32_t reseed_counter; - time_t last_reseed_time; -} SM4_RNG; - - -int sm4_rng_init(SM4_RNG *rng, const uint8_t *nonce, size_t nonce_len, - const uint8_t *label, size_t label_len); -int sm4_rng_update(SM4_RNG *rng, const uint8_t seed[32]); -int sm4_rng_reseed(SM4_RNG *rng, const uint8_t *addin, size_t addin_len); -int sm4_rng_generate(SM4_RNG *rng, const uint8_t *addin, size_t addin_len, - uint8_t *out, size_t outlen); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm9.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm9.h index bda9189..4e9646b 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/sm9.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm9.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -7,6 +7,8 @@ * http://www.apache.org/licenses/LICENSE-2.0 */ +#ifndef GMSSL_SM9_H +#define GMSSL_SM9_H #include #include @@ -14,346 +16,15 @@ #include #include #include - - -#ifndef GMSSL_SM9_H -#define GMSSL_SM9_H +#include #ifdef __cplusplus extern "C" { #endif -/* -SM9 Public API - - SM9_SIGNATURE_SIZE - SM9_MAX_PLAINTEXT_SIZE - SM9_MAX_CIPHERTEXT_SIZE - - SM9_SIGN_MASTER_KEY - sm9_sign_master_key_generate - sm9_sign_master_key_extract_key - sm9_sign_master_key_info_encrypt_to_der - sm9_sign_master_key_info_decrypt_from_der - sm9_sign_master_key_info_encrypt_to_pem - sm9_sign_master_key_info_decrypt_from_pem - sm9_sign_master_public_key_to_der - sm9_sign_master_public_key_from_der - sm9_sign_master_public_key_to_pem - sm9_sign_master_public_key_from_pem - - SM9_SIGN_KEY - sm9_sign_key_info_encrypt_to_der - sm9_sign_key_info_decrypt_from_der - sm9_sign_key_info_encrypt_to_pem - sm9_sign_key_info_decrypt_from_pem - - SM9_SIGN_CTX - sm9_sign_init - sm9_sign_update - sm9_sign_finish - sm9_verify_init - sm9_verify_update - sm9_verify_finish - - SM9_ENC_MASTER_KEY - sm9_enc_master_key_generate - sm9_enc_master_key_extract_key - sm9_enc_master_key_info_encrypt_to_der - sm9_enc_master_key_info_decrypt_from_der - sm9_enc_master_key_info_encrypt_to_pem - sm9_enc_master_key_info_decrypt_from_pem - sm9_enc_master_public_key_to_der - sm9_enc_master_public_key_from_der - sm9_enc_master_public_key_to_pem - sm9_enc_master_public_key_from_pem - - SM9_ENC_KEY - sm9_enc_key_info_encrypt_to_der - sm9_enc_key_info_decrypt_from_der - sm9_enc_key_info_encrypt_to_pem - sm9_enc_key_info_decrypt_from_pem - - sm9_encrypt - sm9_decrypt -*/ - -#define SM9_HEX_SEP '\n' - -typedef uint64_t sm9_bn_t[8]; - -#define sm9_bn_init(r) sm9_bn_set_zero(r) -#define sm9_bn_clean(r) sm9_bn_set_zero(r) - -void sm9_bn_set_zero(sm9_bn_t r); -void sm9_bn_set_one(sm9_bn_t r); -int sm9_bn_is_zero(const sm9_bn_t a); -int sm9_bn_is_one(const sm9_bn_t a); -void sm9_bn_set_word(sm9_bn_t r, uint32_t a); -void sm9_bn_copy(sm9_bn_t r, const sm9_bn_t a); -int sm9_bn_rand_range(sm9_bn_t r, const sm9_bn_t range); -int sm9_bn_equ(const sm9_bn_t a, const sm9_bn_t b); -int sm9_bn_cmp(const sm9_bn_t a, const sm9_bn_t b); -void sm9_bn_add(sm9_bn_t r, const sm9_bn_t a, const sm9_bn_t b); -void sm9_bn_sub(sm9_bn_t ret, const sm9_bn_t a, const sm9_bn_t b); -void sm9_bn_to_bits(const sm9_bn_t a, char bits[256]); -void sm9_bn_to_bytes(const sm9_bn_t a, uint8_t out[32]); -void sm9_bn_from_bytes(sm9_bn_t r, const uint8_t in[32]); -void sm9_bn_to_hex(const sm9_bn_t a, char hex[64]); -int sm9_bn_from_hex(sm9_bn_t r, const char hex[64]); -int sm9_bn_print(FILE *fp, int fmt, int ind, const char *label, const sm9_bn_t a); -void sm9_print_bn(const char *prefix, const sm9_bn_t a); // 标准打印格式 -typedef sm9_bn_t sm9_fp_t; - -#define sm9_fp_init(r) sm9_fp_set_zero(r) -#define sm9_fp_clean(f) sm9_fp_set_zero(r) -#define sm9_fp_set_zero(r) sm9_bn_set_zero(r) -#define sm9_fp_set_one(r) sm9_bn_set_one(r) -#define sm9_fp_copy(r,a) sm9_bn_copy((r),(a)) -#define sm9_fp_rand(r) sm9_bn_rand_range((r), SM9_P) -#define sm9_fp_is_zero(a) sm9_bn_is_zero(a) -#define sm9_fp_is_one(a) sm9_bn_is_one(a) -#define sm9_fp_equ(a,b) sm9_bn_equ((a),(b)) -#define sm9_fp_to_bytes(a,buf) sm9_bn_to_bytes((a),(buf)) -#define sm9_fp_to_hex(a,s) sm9_bn_to_hex((a),(s)) -#define sm9_fp_print(fp,fmt,ind,label,a) sm9_bn_print(fp,fmt,ind,label,a) - -void sm9_fp_add(sm9_fp_t r, const sm9_fp_t a, const sm9_fp_t b); -void sm9_fp_sub(sm9_fp_t r, const sm9_fp_t a, const sm9_fp_t b); -void sm9_fp_dbl(sm9_fp_t r, const sm9_fp_t a); -void sm9_fp_tri(sm9_fp_t r, const sm9_fp_t a); -void sm9_fp_neg(sm9_fp_t r, const sm9_fp_t a); -void sm9_fp_mul(sm9_fp_t r, const sm9_fp_t a, const sm9_fp_t b); -void sm9_fp_sqr(sm9_fp_t r, const sm9_fp_t a); -void sm9_fp_pow(sm9_fp_t r, const sm9_fp_t a, const sm9_bn_t e); -void sm9_fp_inv(sm9_fp_t r, const sm9_fp_t a); -void sm9_fp_div2(sm9_fp_t r, const sm9_fp_t a); -int sm9_fp_from_bytes(sm9_fp_t r, const uint8_t buf[32]); -int sm9_fp_from_hex(sm9_fp_t r, const char hex[64]); - - -typedef sm9_bn_t sm9_fn_t; - -#define sm9_fn_init(r) sm9_fn_set_zero(r) -#define sm9_fn_clean(f) sm9_fn_set_zero(r) -#define sm9_fn_set_zero(r) sm9_bn_set_zero(r) -#define sm9_fn_set_one(r) sm9_bn_set_one(r) -#define sm9_fn_copy(r,a) sm9_bn_copy((r),(a)) -#define sm9_fn_rand(r) sm9_bn_rand_range((r), SM9_N) -#define sm9_fn_is_zero(a) sm9_bn_is_zero(a) -#define sm9_fn_is_one(a) sm9_bn_is_one(a) -#define sm9_fn_equ(a,b) sm9_bn_equ((a),(b)) -#define sm9_fn_to_bytes(a,out) sm9_bn_to_bytes((a),(out)) -#define sm9_fn_to_hex(a,s) sm9_bn_to_hex((a),(s)) -#define sm9_fn_print(fp,fmt,ind,label,a) sm9_bn_print(fp,fmt,ind,label,a) - -void sm9_fn_add(sm9_fn_t r, const sm9_fn_t a, const sm9_fn_t b); -void sm9_fn_sub(sm9_fn_t r, const sm9_fn_t a, const sm9_fn_t b); -void sm9_fn_mul(sm9_fn_t r, const sm9_fn_t a, const sm9_fn_t b); -void sm9_fn_pow(sm9_fn_t r, const sm9_fn_t a, const sm9_bn_t e); -void sm9_fn_inv(sm9_fn_t r, const sm9_fn_t a); -void sm9_fn_from_hash(sm9_fn_t h, const uint8_t Ha[40]); -int sm9_fn_from_bytes(sm9_fn_t a, const uint8_t in[32]); -int sm9_fn_from_hex(sm9_fn_t r, const char hex[64]); - - -typedef uint64_t sm9_barrett_bn_t[9]; - -int sm9_barrett_bn_cmp(const sm9_barrett_bn_t a, const sm9_barrett_bn_t b); -void sm9_barrett_bn_add(sm9_barrett_bn_t r, const sm9_barrett_bn_t a, const sm9_barrett_bn_t b); -void sm9_barrett_bn_sub(sm9_barrett_bn_t ret, const sm9_barrett_bn_t a, const sm9_barrett_bn_t b); - - -typedef sm9_fp_t sm9_fp2_t[2]; -extern const sm9_fp2_t SM9_FP2_ZERO; -extern const sm9_fp2_t SM9_FP2_ONE; -extern const sm9_fp2_t SM9_FP2_U; - -#define sm9_fp2_init(a) sm9_fp2_set_zero(a) -#define sm9_fp2_clean(a) sm9_fp2_set_zero(a) -#define sm9_fp2_set_zero(a) sm9_fp2_copy((a), SM9_FP2_ZERO) -#define sm9_fp2_set_one(a) sm9_fp2_copy((a), SM9_FP2_ONE) -#define sm9_fp2_set_u(a) sm9_fp2_copy((a), SM9_FP2_U) -#define sm9_fp2_is_zero(a) sm9_fp2_equ((a), SM9_FP2_ZERO) -#define sm9_fp2_is_one(a) sm9_fp2_equ((a), SM9_FP2_ONE) - -void sm9_fp2_set_fp(sm9_fp2_t r, const sm9_fp_t a); -void sm9_fp2_set(sm9_fp2_t r, const sm9_fp_t a0, const sm9_fp_t a1); -void sm9_fp2_copy(sm9_fp2_t r, const sm9_fp2_t a); -int sm9_fp2_rand(sm9_fp2_t r); -int sm9_fp2_equ(const sm9_fp2_t a, const sm9_fp2_t b); -void sm9_fp2_add(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b); -void sm9_fp2_dbl(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_tri(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_sub(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b); -void sm9_fp2_neg(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_mul(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b); -void sm9_fp2_mul_u(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b); -void sm9_fp2_mul_fp(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp_t k); -void sm9_fp2_sqr(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_sqr_u(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_inv(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_div(sm9_fp2_t r, const sm9_fp2_t a, const sm9_fp2_t b); -void sm9_fp2_div2(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_to_hex(const sm9_fp2_t a, char hex[129]); -int sm9_fp2_from_hex(sm9_fp2_t r, const char hex[129]); -int sm9_fp2_print(FILE *fp, int fmt, int ind, const char *label, const sm9_fp2_t a); - - -typedef sm9_fp2_t sm9_fp4_t[2]; -extern const sm9_fp4_t SM9_FP4_ZERO; -extern const sm9_fp4_t SM9_FP4_ONE; -extern const sm9_fp4_t SM9_FP4_U; -extern const sm9_fp4_t SM9_FP4_V; - -#define sm9_fp4_init(a) sm9_fp4_set_zero(a) -#define sm9_fp4_clean(a) sm9_fp4_set_zero(a) -#define sm9_fp4_set_zero(a) sm9_fp4_copy((a), SM9_FP4_ZERO) -#define sm9_fp4_set_one(a) sm9_fp4_copy((a), SM9_FP4_ONE) -#define sm9_fp4_is_zero(a) sm9_fp4_equ((a), SM9_FP4_ZERO) -#define sm9_fp4_is_one(a) sm9_fp4_equ((a), SM9_FP4_ONE) - -void sm9_fp4_set_u(sm9_fp4_t r); -void sm9_fp4_set_v(sm9_fp4_t r); -void sm9_fp4_set_fp(sm9_fp4_t r, const sm9_fp_t a); -void sm9_fp4_set_fp2(sm9_fp4_t r, const sm9_fp2_t a); -void sm9_fp4_set(sm9_fp4_t r, const sm9_fp2_t a0, const sm9_fp2_t a1); -void sm9_fp4_copy(sm9_fp4_t r, const sm9_fp4_t a); -int sm9_fp4_rand(sm9_fp4_t r); -int sm9_fp4_equ(const sm9_fp4_t a, const sm9_fp4_t b); -void sm9_fp4_add(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b); -void sm9_fp4_dbl(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_sub(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b); -void sm9_fp4_neg(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_mul(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b); -void sm9_fp4_mul_fp(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp_t k); -void sm9_fp4_mul_fp2(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp2_t b0); -void sm9_fp4_mul_v(sm9_fp4_t r, const sm9_fp4_t a, const sm9_fp4_t b); -void sm9_fp4_sqr(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_sqr_v(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_inv(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_to_bytes(const sm9_fp4_t a, uint8_t buf[128]); -int sm9_fp4_from_bytes(sm9_fp4_t r, const uint8_t buf[128]); -void sm9_fp4_to_hex(const sm9_fp4_t a, char hex[259]); -int sm9_fp4_from_hex(sm9_fp4_t r, const char hex[259]); - - -typedef sm9_fp4_t sm9_fp12_t[3]; - -#define sm9_fp12_init(r) sm9_fp12_set_zero(a) -#define sm9_fp12_clean(r) sm9_fp12_set_zero(a) - -void sm9_fp12_set_zero(sm9_fp12_t r); -void sm9_fp12_set_one(sm9_fp12_t r); -void sm9_fp12_set_u(sm9_fp12_t r); -void sm9_fp12_set_v(sm9_fp12_t r); -void sm9_fp12_set_w(sm9_fp12_t r); -void sm9_fp12_set_w_sqr(sm9_fp12_t r); -void sm9_fp12_set_fp(sm9_fp12_t r, const sm9_fp_t a); -void sm9_fp12_set_fp2(sm9_fp12_t r, const sm9_fp2_t a); -void sm9_fp12_set_fp4(sm9_fp12_t r, const sm9_fp4_t a); -void sm9_fp12_set(sm9_fp12_t r, const sm9_fp4_t a0, const sm9_fp4_t a1, const sm9_fp4_t a2); -void sm9_fp12_copy(sm9_fp12_t r, const sm9_fp12_t a); -int sm9_fp12_rand(sm9_fp12_t r); -int sm9_fp12_is_one(const sm9_fp12_t a); -int sm9_fp12_is_zero(const sm9_fp12_t a); -int sm9_fp12_equ(const sm9_fp12_t a, const sm9_fp12_t b); -void sm9_fp12_add(sm9_fp12_t r, const sm9_fp12_t a, const sm9_fp12_t b); -void sm9_fp12_dbl(sm9_fp12_t r, const sm9_fp12_t a); -void sm9_fp12_tri(sm9_fp12_t r, const sm9_fp12_t a); -void sm9_fp12_sub(sm9_fp12_t r, const sm9_fp12_t a, const sm9_fp12_t b); -void sm9_fp12_neg(sm9_fp12_t r, const sm9_fp12_t a); -void sm9_fp12_mul(sm9_fp12_t r, const sm9_fp12_t a, const sm9_fp12_t b); -void sm9_fp12_sqr(sm9_fp12_t r, const sm9_fp12_t a); -void sm9_fp12_inv(sm9_fp12_t r, const sm9_fp12_t a); -void sm9_fp12_pow(sm9_fp12_t r, const sm9_fp12_t a, const sm9_bn_t k); -void sm9_fp12_to_bytes(const sm9_fp12_t a, uint8_t buf[32 * 12]); -int sm9_fp12_from_bytes(sm9_fp12_t r, const uint8_t in[32 * 12]); -void sm9_fp12_to_hex(const sm9_fp12_t a, char hex[65 * 12]); -int sm9_fp12_from_hex(sm9_fp12_t r, const char hex[65 * 12]); // 这个明显是不对的 -void sm9_fp12_print(const char *prefix, const sm9_fp12_t a); - - -void sm9_fp2_conjugate(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp2_frobenius(sm9_fp2_t r, const sm9_fp2_t a); -void sm9_fp4_frobenius(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_conjugate(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_frobenius2(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp4_frobenius3(sm9_fp4_t r, const sm9_fp4_t a); -void sm9_fp12_frobenius(sm9_fp12_t r, const sm9_fp12_t x); -void sm9_fp12_frobenius2(sm9_fp12_t r, const sm9_fp12_t x); -void sm9_fp12_frobenius3(sm9_fp12_t r, const sm9_fp12_t x); -void sm9_fp12_frobenius6(sm9_fp12_t r, const sm9_fp12_t x); - - -typedef struct { - sm9_fp_t X; - sm9_fp_t Y; - sm9_fp_t Z; -} SM9_POINT; - -#define sm9_point_init(R) sm9_point_set_infinity(R) -#define sm9_point_clean(R) sm9_point_set_infinity(R) - -void sm9_point_set_infinity(SM9_POINT *R); -void sm9_point_copy(SM9_POINT *R, const SM9_POINT *P); -void sm9_point_get_xy(const SM9_POINT *P, sm9_fp_t x, sm9_fp_t y); -int sm9_point_is_at_infinity(const SM9_POINT *P); -int sm9_point_equ(const SM9_POINT *P, const SM9_POINT *Q); -int sm9_point_is_on_curve(const SM9_POINT *P); -void sm9_point_dbl(SM9_POINT *R, const SM9_POINT *P); -void sm9_point_add(SM9_POINT *R, const SM9_POINT *P, const SM9_POINT *Q); -void sm9_point_neg(SM9_POINT *R, const SM9_POINT *P); -void sm9_point_sub(SM9_POINT *R, const SM9_POINT *P, const SM9_POINT *Q); -void sm9_point_mul(SM9_POINT *R, const sm9_bn_t k, const SM9_POINT *P); -void sm9_point_mul_generator(SM9_POINT *R, const sm9_bn_t k); -void sm9_point_from_hex(SM9_POINT *R, const char hex[65 * 2]); -int sm9_point_to_uncompressed_octets(const SM9_POINT *P, uint8_t octets[65]); -int sm9_point_from_uncompressed_octets(SM9_POINT *P, const uint8_t octets[65]); -int sm9_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_POINT *P); - - -typedef struct { - sm9_fp2_t X; - sm9_fp2_t Y; - sm9_fp2_t Z; -} SM9_TWIST_POINT; - -#define sm9_twist_point_copy(R, P) memcpy((R), (P), sizeof(SM9_TWIST_POINT)) - -int sm9_twist_point_to_uncompressed_octets(const SM9_TWIST_POINT *P, uint8_t octets[129]); -int sm9_twist_point_from_uncompressed_octets(SM9_TWIST_POINT *P, const uint8_t octets[129]); - - -void sm9_twist_point_from_hex(SM9_TWIST_POINT *R, const char hex[65 * 4]); -int sm9_twist_point_is_at_infinity(const SM9_TWIST_POINT *P); -void sm9_twist_point_set_infinity(SM9_TWIST_POINT *R); -void sm9_twist_point_get_xy(const SM9_TWIST_POINT *P, sm9_fp2_t x, sm9_fp2_t y); - -int sm9_twist_point_equ(const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q); -int sm9_twist_point_is_on_curve(const SM9_TWIST_POINT *P); -void sm9_twist_point_neg(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P); -void sm9_twist_point_dbl(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P); -void sm9_twist_point_add(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q); -void sm9_twist_point_sub(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q); -void sm9_twist_point_add_full(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P, const SM9_TWIST_POINT *Q); -void sm9_twist_point_mul(SM9_TWIST_POINT *R, const sm9_bn_t k, const SM9_TWIST_POINT *P); -void sm9_twist_point_mul_generator(SM9_TWIST_POINT *R, const sm9_bn_t k); -int sm9_twist_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_TWIST_POINT *P); - - - -void sm9_eval_g_tangent(sm9_fp12_t num, sm9_fp12_t den, const SM9_TWIST_POINT *P, const SM9_POINT *Q); -void sm9_eval_g_line(sm9_fp12_t num, sm9_fp12_t den, const SM9_TWIST_POINT *T, const SM9_TWIST_POINT *P, const SM9_POINT *Q); -void sm9_twist_point_pi1(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P); -void sm9_twist_point_pi2(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P); -void sm9_twist_point_neg_pi2(SM9_TWIST_POINT *R, const SM9_TWIST_POINT *P); -void sm9_final_exponent_hard_part(sm9_fp12_t r, const sm9_fp12_t f); -void sm9_final_exponent(sm9_fp12_t r, const sm9_fp12_t f); -void sm9_pairing(sm9_fp12_t r, const SM9_TWIST_POINT *Q, const SM9_POINT *P); - +int sm9_z256_hash1(sm9_z256_t h1, const char *id, size_t idlen, uint8_t hid); /* private key extract algorithms */ #define SM9_HID_SIGN 0x01 @@ -363,9 +34,6 @@ void sm9_pairing(sm9_fp12_t r, const SM9_TWIST_POINT *Q, const SM9_POINT *P); #define SM9_HASH1_PREFIX 0x01 #define SM9_HASH2_PREFIX 0x02 -int sm9_hash1(sm9_bn_t h1, const char *id, size_t idlen, uint8_t hid); - - const char *sm9_oid_name(int oid); int sm9_oid_from_name(const char *name); int sm9_oid_to_der(int oid, uint8_t **out, size_t *outlen); @@ -397,13 +65,13 @@ SM9SignPrivateKey ::= SEQUENCE { Ppubs BIT STRING -- uncompressed octets of twisted point } */ typedef struct { - SM9_TWIST_POINT Ppubs; // Ppubs = ks * P2 - sm9_fn_t ks; + SM9_Z256_TWIST_POINT Ppubs; // Ppubs = ks * P2 + sm9_z256_t ks; } SM9_SIGN_MASTER_KEY; typedef struct { - SM9_TWIST_POINT Ppubs; - SM9_POINT ds; + SM9_Z256_TWIST_POINT Ppubs; + SM9_Z256_POINT ds; } SM9_SIGN_KEY; int sm9_sign_master_key_generate(SM9_SIGN_MASTER_KEY *master); @@ -443,8 +111,8 @@ SM9Signature ::= SEQUENCE { S BIT STRING -- uncompressed octets of ECPoint } */ typedef struct { - sm9_fn_t h; - SM9_POINT S; + sm9_z256_t h; + SM9_Z256_POINT S; } SM9_SIGNATURE; int sm9_do_sign(const SM9_SIGN_KEY *key, const SM3_CTX *sm3_ctx, SM9_SIGNATURE *sig); @@ -468,6 +136,7 @@ int sm9_verify_finish(SM9_SIGN_CTX *ctx, const uint8_t *sig, size_t siglen, const SM9_SIGN_MASTER_KEY *mpk, const char *id, size_t idlen); + /* SM9EncMasterKey ::= SEQUENCE { de INTEGER, @@ -482,13 +151,13 @@ SM9EncPrivateKey ::= SEQUENCE { */ typedef struct { - SM9_POINT Ppube; // Ppube = ke * P1 - sm9_fn_t ke; + SM9_Z256_POINT Ppube; // Ppube = ke * P1 + sm9_z256_t ke; } SM9_ENC_MASTER_KEY; typedef struct { - SM9_POINT Ppube; - SM9_TWIST_POINT de; + SM9_Z256_POINT Ppube; + SM9_Z256_TWIST_POINT de; } SM9_ENC_KEY; int sm9_enc_master_key_generate(SM9_ENC_MASTER_KEY *master); @@ -534,18 +203,18 @@ SM9Cipher ::= SEQUENCE { CipherText OCTET STRING } */ -int sm9_kem_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen, size_t klen, uint8_t *kbuf, SM9_POINT *C); -int sm9_kem_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, const SM9_POINT *C, size_t klen, uint8_t *kbuf); +int sm9_kem_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen, size_t klen, uint8_t *kbuf, SM9_Z256_POINT *C); +int sm9_kem_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, const SM9_Z256_POINT *C, size_t klen, uint8_t *kbuf); int sm9_do_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen, - const uint8_t *in, size_t inlen, SM9_POINT *C1, uint8_t *c2, uint8_t c3[SM3_HMAC_SIZE]); + const uint8_t *in, size_t inlen, SM9_Z256_POINT *C1, uint8_t *c2, uint8_t c3[SM3_HMAC_SIZE]); int sm9_do_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, - const SM9_POINT *C1, const uint8_t *c2, size_t c2len, const uint8_t c3[SM3_HMAC_SIZE], uint8_t *out); + const SM9_Z256_POINT *C1, const uint8_t *c2, size_t c2len, const uint8_t c3[SM3_HMAC_SIZE], uint8_t *out); #define SM9_MAX_PLAINTEXT_SIZE 255 #define SM9_MAX_CIPHERTEXT_SIZE 367 // calculated in test_sm9_ciphertext() -int sm9_ciphertext_to_der(const SM9_POINT *C1, const uint8_t *c2, size_t c2len, +int sm9_ciphertext_to_der(const SM9_Z256_POINT *C1, const uint8_t *c2, size_t c2len, const uint8_t c3[SM3_HMAC_SIZE], uint8_t **out, size_t *outlen); -int sm9_ciphertext_from_der(SM9_POINT *C1, const uint8_t **c2, size_t *c2len, +int sm9_ciphertext_from_der(SM9_Z256_POINT *C1, const uint8_t **c2, size_t *c2len, const uint8_t **c3, const uint8_t **in, size_t *inlen); int sm9_ciphertext_print(FILE *fp, int fmt, int ind, const char *label, const uint8_t *a, size_t alen); int sm9_encrypt(const SM9_ENC_MASTER_KEY *mpk, const char *id, size_t idlen, @@ -554,6 +223,19 @@ int sm9_decrypt(const SM9_ENC_KEY *key, const char *id, size_t idlen, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); +// SM9 Key Exchange (To be continued) +#define SM9_EXCH_MASTER_KEY SM9_ENC_MASTER_KEY +#define SM9_EXCH_KEY SM9_ENC_KEY +#define sm9_exch_master_key_generate(msk) sm9_enc_master_key_generate(msk) +int sm9_exch_master_key_extract_key(SM9_EXCH_MASTER_KEY *master, const char *id, size_t idlen, SM9_EXCH_KEY *key); + +int sm9_exch_step_1A(const SM9_EXCH_MASTER_KEY *mpk, const char *idB, size_t idBlen, SM9_Z256_POINT *RA, sm9_z256_t rA); +int sm9_exch_step_1B(const SM9_EXCH_MASTER_KEY *mpk, const char *idA, size_t idAlen, const char *idB, size_t idBlen, + const SM9_EXCH_KEY *key, const SM9_Z256_POINT *RA, SM9_Z256_POINT *RB, uint8_t *sk, size_t klen); +int sm9_exch_step_2A(const SM9_EXCH_MASTER_KEY *mpk, const char *idA, size_t idAlen, const char *idB, size_t idBlen, + const SM9_EXCH_KEY *key, const sm9_z256_t rA, const SM9_Z256_POINT *RA, const SM9_Z256_POINT *RB, uint8_t *sk, size_t klen); +int sm9_exch_step_2B(); + #ifdef __cplusplus } diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/sm9_z256.h b/thirdparty/GmSSL-3.1.1/include/gmssl/sm9_z256.h new file mode 100644 index 0000000..01f8c0c --- /dev/null +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/sm9_z256.h @@ -0,0 +1,247 @@ +/* + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +#ifndef GMSSL_SM9_Z256_H +#define GMSSL_SM9_Z256_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef uint64_t sm9_z256_t[4]; + +void sm9_z256_set_one(sm9_z256_t r); +void sm9_z256_set_zero(sm9_z256_t r); +void sm9_z256_copy(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_copy_conditional(sm9_z256_t r, const sm9_z256_t a, uint64_t move); +int sm9_z256_cmp(const sm9_z256_t a, const sm9_z256_t b); +uint64_t sm9_z256_is_zero(const sm9_z256_t a); +uint64_t sm9_z256_equ(const sm9_z256_t a, const sm9_z256_t b); +uint64_t sm9_z256_add(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +uint64_t sm9_z256_sub(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_mul(uint64_t r[8], const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_from_bytes(sm9_z256_t r, const uint8_t in[32]); +void sm9_z256_to_bytes(const sm9_z256_t a, uint8_t out[32]); +int sm9_z256_from_hex(sm9_z256_t r, const char *hex); +void sm9_z256_to_hex(const sm9_z256_t r, char hex[64]); +int sm9_z256_equ_hex(const sm9_z256_t a, const char *hex); +void sm9_z256_to_bits(const sm9_z256_t a, char bits[256]); +int sm9_z256_rand_range(sm9_z256_t r, const sm9_z256_t range); +void sm9_z256_print_bn(const char *prefix, const sm9_z256_t a); +int sm9_z256_print(FILE *fp, int ind, int fmt, const char *label, const sm9_z256_t a); + +const uint64_t *sm9_z256_prime(void); + +void sm9_z256_modp_add(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_modp_sub(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_modp_dbl(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_modp_tri(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_modp_haf(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_modp_neg(sm9_z256_t r, const sm9_z256_t a); + +void sm9_z256_modp_to_mont(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_modp_from_mont(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_modp_mont_mul(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_modp_mont_sqr(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_modp_mont_pow(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t e); +void sm9_z256_modp_mont_inv(sm9_z256_t r, const sm9_z256_t a); + +const uint64_t *sm9_z256_order(void); + +void sm9_z256_modn_add(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_modn_sub(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_modn_mul(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t b); +void sm9_z256_modn_pow(sm9_z256_t r, const sm9_z256_t a, const sm9_z256_t e); +void sm9_z256_modn_inv(sm9_z256_t r, const sm9_z256_t a); +void sm9_z256_modn_from_hash(sm9_z256_t h, const uint8_t Ha[40]); + + +typedef sm9_z256_t sm9_z256_fp2_t[2]; + +void sm9_z256_fp2_set_one(sm9_z256_fp2_t r); +void sm9_z256_fp2_set_zero(sm9_z256_fp2_t r); +int sm9_z256_fp2_is_one(const sm9_z256_fp2_t a); +int sm9_z256_fp2_is_zero(const sm9_z256_fp2_t a); +int sm9_z256_fp2_equ(const sm9_z256_fp2_t a, const sm9_z256_fp2_t b); +void sm9_z256_fp2_copy(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +int sm9_z256_fp2_rand(sm9_z256_fp2_t r); +void sm9_z256_fp2_to_bytes(const sm9_z256_fp2_t a, uint8_t buf[64]); +int sm9_z256_fp2_from_bytes(sm9_z256_fp2_t r, const uint8_t buf[64]); +void sm9_z256_fp2_to_hex(const sm9_z256_fp2_t a, char hex[129]); +int sm9_z256_fp2_from_hex(sm9_z256_fp2_t r, const char hex[129]); +void sm9_z256_fp2_add(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b); +void sm9_z256_fp2_dbl(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_tri(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_sub(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b); +void sm9_z256_fp2_neg(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_a_mul_u(sm9_z256_fp2_t r, sm9_z256_fp2_t a); +void sm9_z256_fp2_mul(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b); +void sm9_z256_fp2_mul_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b); +void sm9_z256_fp2_mul_fp(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_t k); +void sm9_z256_fp2_sqr(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_sqr_u(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_inv(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_div(sm9_z256_fp2_t r, const sm9_z256_fp2_t a, const sm9_z256_fp2_t b); +void sm9_z256_fp2_haf(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_conjugate(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); +void sm9_z256_fp2_frobenius(sm9_z256_fp2_t r, const sm9_z256_fp2_t a); + + +typedef sm9_z256_fp2_t sm9_z256_fp4_t[2]; + +int sm9_z256_fp4_is_zero(const sm9_z256_fp4_t a); +int sm9_z256_fp4_equ(const sm9_z256_fp4_t a, const sm9_z256_fp4_t b); +int sm9_z256_fp4_rand(sm9_z256_fp4_t r); +void sm9_z256_fp4_copy(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_to_bytes(const sm9_z256_fp4_t a, uint8_t buf[128]); +int sm9_z256_fp4_from_bytes(sm9_z256_fp4_t r, const uint8_t buf[128]); +int sm9_z256_fp4_from_hex(sm9_z256_fp4_t r, const char hex[259]); +void sm9_z256_fp4_to_hex(const sm9_z256_fp4_t a, char hex[259]); +void sm9_z256_fp4_add(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b); +void sm9_z256_fp4_dbl(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_sub(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b); +void sm9_z256_fp4_neg(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_haf(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_a_mul_v(sm9_z256_fp4_t r, sm9_z256_fp4_t a); +void sm9_z256_fp4_mul(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b); +void sm9_z256_fp4_mul_fp(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_t k); +void sm9_z256_fp4_mul_fp2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp2_t b0); +void sm9_z256_fp4_mul_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a, const sm9_z256_fp4_t b); +void sm9_z256_fp4_sqr(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_sqr_v(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_inv(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_frobenius(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_conjugate(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_frobenius2(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); +void sm9_z256_fp4_frobenius3(sm9_z256_fp4_t r, const sm9_z256_fp4_t a); + + +typedef sm9_z256_fp4_t sm9_z256_fp12_t[3]; + +void sm9_z256_fp12_set_one(sm9_z256_fp12_t r); +void sm9_z256_fp12_set_zero(sm9_z256_fp12_t r); +void sm9_z256_fp12_copy(sm9_z256_fp12_t r, const sm9_z256_fp12_t a); +int sm9_z256_fp12_rand(sm9_z256_fp12_t r); +int sm9_z256_fp12_from_hex(sm9_z256_fp12_t r, const char hex[779]); // 779 = 64*12 + 11 +void sm9_z256_fp12_to_hex(const sm9_z256_fp12_t a, char hex[779]); +void sm9_z256_fp12_to_bytes(const sm9_z256_fp12_t a, uint8_t buf[384]); +int sm9_z256_fp12_from_bytes(sm9_z256_fp12_t r, const uint8_t buf[384]); + +void sm9_z256_fp12_print(const char *prefix, const sm9_z256_fp12_t a); +void sm9_z256_fp12_set(sm9_z256_fp12_t r, const sm9_z256_fp4_t a0, const sm9_z256_fp4_t a1, const sm9_z256_fp4_t a2); +int sm9_z256_fp12_equ(const sm9_z256_fp12_t a, const sm9_z256_fp12_t b); +void sm9_z256_fp12_add(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b); +void sm9_z256_fp12_dbl(sm9_z256_fp12_t r, const sm9_z256_fp12_t a); +void sm9_z256_fp12_tri(sm9_z256_fp12_t r, const sm9_z256_fp12_t a); +void sm9_z256_fp12_sub(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b); +void sm9_z256_fp12_neg(sm9_z256_fp12_t r, const sm9_z256_fp12_t a); +void sm9_z256_fp12_mul(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp12_t b); +void sm9_z256_fp12_sqr(sm9_z256_fp12_t r, const sm9_z256_fp12_t a); +void sm9_z256_fp12_inv(sm9_z256_fp12_t r, const sm9_z256_fp12_t a); +void sm9_z256_fp12_pow(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_t k); +void sm9_z256_fp12_frobenius(sm9_z256_fp12_t r, const sm9_z256_fp12_t x); +void sm9_z256_fp12_frobenius2(sm9_z256_fp12_t r, const sm9_z256_fp12_t x); +void sm9_z256_fp12_frobenius3(sm9_z256_fp12_t r, const sm9_z256_fp12_t x); +void sm9_z256_fp12_frobenius6(sm9_z256_fp12_t r, const sm9_z256_fp12_t x); + + +// E(F_p): y^2 = x^3 + 5 + +typedef struct { + sm9_z256_t X; // is mont(X) + sm9_z256_t Y; // is mont(Y) + sm9_z256_t Z; // is mont(Z) +} SM9_Z256_POINT; + +const SM9_Z256_POINT *sm9_z256_generator(void); + +int sm9_z256_point_from_hex(SM9_Z256_POINT *R, const char hex[129]); +int sm9_z256_point_is_at_infinity(const SM9_Z256_POINT *P); +void sm9_z256_point_set_infinity(SM9_Z256_POINT *R); +void sm9_z256_point_get_xy(const SM9_Z256_POINT *P, sm9_z256_t x, sm9_z256_t y); +int sm9_z256_point_equ(const SM9_Z256_POINT *P, const SM9_Z256_POINT *Q); +int sm9_z256_point_is_on_curve(const SM9_Z256_POINT *P); +void sm9_z256_point_dbl(SM9_Z256_POINT *R, const SM9_Z256_POINT *P); +void sm9_z256_point_neg(SM9_Z256_POINT *R, const SM9_Z256_POINT *P); +void sm9_z256_point_add(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_POINT *Q); +void sm9_z256_point_sub(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_POINT *Q); +void sm9_z256_point_mul(SM9_Z256_POINT *R, const sm9_z256_t k, const SM9_Z256_POINT *P); +void sm9_z256_point_mul_generator(SM9_Z256_POINT *R, const sm9_z256_t k); +int sm9_z256_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_Z256_POINT *P); +int sm9_z256_point_to_uncompressed_octets(const SM9_Z256_POINT *P, uint8_t octets[65]); +int sm9_z256_point_from_uncompressed_octets(SM9_Z256_POINT *P, const uint8_t octets[65]); + + +typedef struct { + uint64_t X[4]; + uint64_t Y[4]; +} SM9_Z256_AFFINE_POINT; + +void sm9_z256_point_copy_affine(SM9_Z256_POINT *R, const SM9_Z256_AFFINE_POINT *P); +void sm9_z256_point_add_affine(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_AFFINE_POINT *Q); +void sm9_z256_point_sub_affine(SM9_Z256_POINT *R, const SM9_Z256_POINT *P, const SM9_Z256_AFFINE_POINT *Q); + + +typedef struct { + sm9_z256_fp2_t X; + sm9_z256_fp2_t Y; + sm9_z256_fp2_t Z; +} SM9_Z256_TWIST_POINT; + +const SM9_Z256_TWIST_POINT *sm9_z256_twist_generator(void); + +int sm9_z256_twist_point_to_uncompressed_octets(const SM9_Z256_TWIST_POINT *P, uint8_t octets[129]); +int sm9_z256_twist_point_from_uncompressed_octets(SM9_Z256_TWIST_POINT *P, const uint8_t octets[129]); + +int sm9_z256_twist_point_print(FILE *fp, int fmt, int ind, const char *label, const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_from_hex(SM9_Z256_TWIST_POINT *R, const char hex[259]); // 259 = 64 * 4 + 3 +int sm9_z256_twist_point_is_at_infinity(const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_set_infinity(SM9_Z256_TWIST_POINT *R); +void sm9_z256_twist_point_get_xy(const SM9_Z256_TWIST_POINT *P, sm9_z256_fp2_t x, sm9_z256_fp2_t y); +int sm9_z256_twist_point_equ(const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q); +int sm9_z256_twist_point_is_on_curve(const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_neg(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_dbl(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_add(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q); +void sm9_z256_twist_point_sub(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q); +void sm9_z256_twist_point_add_full(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *Q); +void sm9_z256_twist_point_mul(SM9_Z256_TWIST_POINT *R, const sm9_z256_t k, const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_mul_generator(SM9_Z256_TWIST_POINT *R, const sm9_z256_t k); + + +void sm9_z256_point_to_affine(SM9_Z256_AFFINE_POINT *Q, const SM9_Z256_POINT *P); +void sm9_z256_eval_g_tangent(SM9_Z256_TWIST_POINT *R, sm9_z256_fp2_t lw[3], + const SM9_Z256_TWIST_POINT *P, const SM9_Z256_AFFINE_POINT *Q); +void sm9_z256_eval_g_line(SM9_Z256_TWIST_POINT *R, sm9_z256_fp2_t lw[3], sm9_z256_fp2_t pre[5], + const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_AFFINE_POINT *Q); +void sm9_z256_eval_g_line_no_pre(SM9_Z256_TWIST_POINT *R, sm9_z256_fp2_t lw[3], + const SM9_Z256_TWIST_POINT *P, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_AFFINE_POINT *Q); +void sm9_z256_fp12_line_mul(sm9_z256_fp12_t r, const sm9_z256_fp12_t a, const sm9_z256_fp2_t lw[3]); +//void sm9_z256_eval_g_tangent(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q); +//void sm9_z256_eval_g_line(sm9_z256_fp12_t num, sm9_z256_fp12_t den, const SM9_Z256_TWIST_POINT *T, const SM9_Z256_TWIST_POINT *P, const SM9_Z256_POINT *Q); +void sm9_z256_twist_point_pi1(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); +void sm9_z256_twist_point_neg_pi2(SM9_Z256_TWIST_POINT *R, const SM9_Z256_TWIST_POINT *P); +void sm9_z256_final_exponent_hard_part(sm9_z256_fp12_t r, const sm9_z256_fp12_t f); +void sm9_z256_final_exponent(sm9_z256_fp12_t r, const sm9_z256_fp12_t f); +void sm9_z256_pairing(sm9_z256_fp12_t r, const SM9_Z256_TWIST_POINT *Q, const SM9_Z256_POINT *P); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/socket.h b/thirdparty/GmSSL-3.1.1/include/gmssl/socket.h index e5c5d92..926d22b 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/socket.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/socket.h @@ -13,6 +13,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { @@ -35,7 +36,7 @@ typedef int tls_socklen_t; #define tls_socket_send(sock,buf,len,flags) send(sock,buf,(int)(len),flags) #define tls_socket_recv(sock,buf,len,flags) recv(sock,buf,(int)(len),flags) #define tls_socket_close(sock) closesocket(sock) - +#define tls_socket_wait() Sleep(1) #else @@ -55,6 +56,7 @@ typedef socklen_t tls_socklen_t; #define tls_socket_send(sock,buf,len,flags) send(sock,buf,len,flags) #define tls_socket_recv(sock,buf,len,flags) recv(sock,buf,len,flags) #define tls_socket_close(sock) close(sock) +#define tls_socket_wait() usleep(1000) #endif diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/tls.h b/thirdparty/GmSSL-3.1.1/include/gmssl/tls.h index 4d39ac9..23c077d 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/tls.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/tls.h @@ -1,5 +1,5 @@ -/* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. +/* + * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -27,39 +27,6 @@ extern "C" { #endif -/* -TLS Public API - - TLS_PROTOCOL - TLS_protocol_tlcp - TLS_protocol_tls12 - TLS_protocol_tls13 - - TLS_CIPHER_SUITE - TLS_cipher_ecc_sm4_cbc_sm3 - TLS_cipher_ecc_sm4_gcm_sm3 - TLS_cipher_ecdhe_sm4_cbc_sm3 - TLS_cipher_ecdhe_sm4_gcm_sm3 - TLS_cipher_sm4_gcm_sm3 - - TLS_CTX - tls_ctx_init - tls_ctx_set_cipher_suites - tls_ctx_set_ca_certificates - tls_ctx_set_certificate_and_key - tls_ctx_set_tlcp_server_certificate_and_keys - tls_ctx_cleanup - - TLS_CONNECT - tls_init - tls_set_socket - tls_do_handshake - tls_send - tls_recv - tls_shutdown - tls_cleanup -*/ - typedef uint32_t uint24_t; #define tls_uint8_size() 1 @@ -108,7 +75,7 @@ typedef enum { TLS_cipher_sm4_ccm_sm3 = 0x00c7, // TLCP, GB/T 38636-2020, GM/T 0024-2012 - TLS_cipher_ecdhe_sm4_cbc_sm3 = 0xe011, // 可以让TLSv1.2使用这个 + TLS_cipher_ecdhe_sm4_cbc_sm3 = 0xe011, // TODO: let TLSv1.2 use this as default cipher suite TLS_cipher_ecdhe_sm4_gcm_sm3 = 0xe051, TLS_cipher_ecc_sm4_cbc_sm3 = 0xe013, TLS_cipher_ecc_sm4_gcm_sm3 = 0xe053, @@ -286,8 +253,6 @@ typedef enum { const char *tls_curve_type_name(int type); -// 与其支持v2,还不如直接修改v2,让v2和v3兼容 - typedef enum { TLS_curve_secp256k1 = 22, TLS_curve_secp256r1 = 23, @@ -304,7 +269,7 @@ typedef enum { TLS_curve_sm2p256v1 = 41, // GmSSLv2: 30 } TLS_NAMED_CURVE; -const char *tls_named_curve_name(int curve); +const char *tls_curve_name(int curve); typedef enum { @@ -342,6 +307,7 @@ typedef enum { typedef enum { + TLS_alert_level_undefined = 0, TLS_alert_level_warning = 1, TLS_alert_level_fatal = 2, } TLS_ALERT_LEVEL; @@ -440,14 +406,15 @@ typedef struct { #define tls_record_protocol(record) (((uint16_t)((record)[1]) << 8) | (record)[2]) #define tls_record_data(record) ((record)+TLS_RECORD_HEADER_SIZE) #define tls_record_data_length(record) (((uint16_t)((record)[3]) << 8) | (record)[4]) -#define tls_record_length(record) (TLS_RECORD_HEADER_SIZE + tls_record_data_length(record)) +#define tls_record_length(record) ((size_t)(TLS_RECORD_HEADER_SIZE + tls_record_data_length(record))) int tls_record_set_type(uint8_t *record, int type); int tls_record_set_protocol(uint8_t *record, int protocol); int tls_record_set_data_length(uint8_t *record, size_t length); int tls_record_set_data(uint8_t *record, const uint8_t *data, size_t datalen); -// 握手消息ServerKeyExchange, ClientKeyExchange的解析依赖当前密码套件 + +// parse ServerKeyExchange, ClientKeyExchange depends on current cipher_suite #define tls_format_set_cipher_suite(fmt,cipher) do {(fmt)|=((cipher)<<8);} while (0) int tls_record_print(FILE *fp, const uint8_t *record, size_t recordlen, int format, int indent); int tlcp_record_print(FILE *fp, const uint8_t *record, size_t recordlen, int format, int indent); @@ -534,13 +501,13 @@ int tls13_process_client_supported_versions(const uint8_t *ext_data, size_t ext_ int tls13_process_server_supported_versions(const uint8_t *ext_data, size_t ext_datalen); -int tls13_key_share_entry_to_bytes(const SM2_POINT *point, uint8_t **out, size_t *outlen); -int tls13_client_key_share_ext_to_bytes(const SM2_POINT *point, uint8_t **out, size_t *outlen); -int tls13_server_key_share_ext_to_bytes(const SM2_POINT *point, uint8_t **out, size_t *outlen); +int tls13_key_share_entry_to_bytes(const SM2_Z256_POINT *point, uint8_t **out, size_t *outlen); +int tls13_client_key_share_ext_to_bytes(const SM2_Z256_POINT *point, uint8_t **out, size_t *outlen); +int tls13_server_key_share_ext_to_bytes(const SM2_Z256_POINT *point, uint8_t **out, size_t *outlen); int tls13_process_client_key_share(const uint8_t *ext_data, size_t ext_datalen, - const SM2_KEY *server_ecdhe_key, SM2_POINT *client_ecdhe_public, + const SM2_KEY *server_ecdhe_key, SM2_Z256_POINT *client_ecdhe_public, uint8_t **out, size_t *outlen); -int tls13_process_server_key_share(const uint8_t *ext_data, size_t ext_datalen, SM2_POINT *point); +int tls13_process_server_key_share(const uint8_t *ext_data, size_t ext_datalen, SM2_Z256_POINT *point); int tls13_certificate_authorities_ext_to_bytes(const uint8_t *ca_names, size_t ca_names_len, @@ -555,8 +522,8 @@ int tls_process_server_exts(const uint8_t *exts, size_t extslen, // Certificate int tls_record_set_handshake_certificate(uint8_t *record, size_t *recordlen, const uint8_t *certs, size_t certslen); -// 这个函数比较特殊,是直接解析了证书链,而不是返回指针 -// 应该提供一个独立的解析函数来解析TLS的证书链 +// see the impl of tls_record_get_handshake_certificate +// a standalone cert-chain parsing function should be given int tls_record_get_handshake_certificate(const uint8_t *record, uint8_t *certs, size_t *certslen); // ServerKeyExchange @@ -565,14 +532,14 @@ int tls_server_key_exchange_print(FILE *fp, const uint8_t *ske, size_t skelen, i #define TLS_MAX_SIGNATURE_SIZE SM2_MAX_SIGNATURE_SIZE int tls_sign_server_ecdh_params(const SM2_KEY *server_sign_key, const uint8_t client_random[32], const uint8_t server_random[32], - int curve, const SM2_POINT *point, uint8_t *sig, size_t *siglen); + int curve, const SM2_Z256_POINT *point, uint8_t *sig, size_t *siglen); int tls_verify_server_ecdh_params(const SM2_KEY *server_sign_key, const uint8_t client_random[32], const uint8_t server_random[32], - int curve, const SM2_POINT *point, const uint8_t *sig, size_t siglen); + int curve, const SM2_Z256_POINT *point, const uint8_t *sig, size_t siglen); int tls_record_set_handshake_server_key_exchange_ecdhe(uint8_t *record, size_t *recordlen, - int curve, const SM2_POINT *point, const uint8_t *sig, size_t siglen); + int curve, const SM2_Z256_POINT *point, const uint8_t *sig, size_t siglen); int tls_record_get_handshake_server_key_exchange_ecdhe(const uint8_t *record, - int *curve, SM2_POINT *point, const uint8_t **sig, size_t *siglen); + int *curve, SM2_Z256_POINT *point, const uint8_t **sig, size_t *siglen); int tls_server_key_exchange_ecdhe_print(FILE *fp, const uint8_t *data, size_t datalen, int format, int indent); @@ -615,8 +582,8 @@ int tls_client_key_exchange_pke_print(FILE *fp, const uint8_t *cke, size_t ckele int tls_client_key_exchange_print(FILE *fp, const uint8_t *cke, size_t ckelen, int format, int indent); int tls_record_set_handshake_client_key_exchange_ecdhe(uint8_t *record, size_t *recordlen, - const SM2_POINT *point); // 这里不应该支持SM2_POINT类型 -int tls_record_get_handshake_client_key_exchange_ecdhe(const uint8_t *record, SM2_POINT *point); + const SM2_Z256_POINT *point); // shoulde we use SM2_Z256_POITN? +int tls_record_get_handshake_client_key_exchange_ecdhe(const uint8_t *record, SM2_Z256_POINT *point); int tls_client_key_exchange_ecdhe_print(FILE *fp, const uint8_t *data, size_t datalen, int format, int indent); @@ -650,8 +617,8 @@ int tls_client_verify_finish(TLS_CLIENT_VERIFY_CTX *ctx, const uint8_t *sig, siz void tls_client_verify_cleanup(TLS_CLIENT_VERIFY_CTX *ctx); // Finished -// FIXME: 支持TLS 1.3 提供MIN, MAX或TLS12, TLS13, TLCP... -#define TLS_VERIFY_DATA_SIZE 12 // TLS 1.3或者其他版本支持更长的verify_data +// FIXME: to support TLS 1.3 need MIN, MAX or TLS12, TLS13, TLCP... +#define TLS_VERIFY_DATA_SIZE 12 // TLS 1.3 use longer verify_data (>= 12 bytes) #define TLS_FINISHED_RECORD_SIZE (TLS_RECORD_HEADER_SIZE + TLS_HANDSHAKE_HEADER_SIZE + TLS_VERIFY_DATA_SIZE) // 21 #define TLS_MAX_PADDING_SIZE (1 + 255) #define TLS_MAC_SIZE SM3_HMAC_SIZE @@ -716,6 +683,8 @@ typedef struct { SM2_KEY signkey; SM2_KEY kenckey; int verify_depth; + + int quiet; } TLS_CTX; int tls_ctx_init(TLS_CTX *ctx, int protocol, int is_client); @@ -748,15 +717,14 @@ typedef struct { uint8_t record[TLS_MAX_RECORD_SIZE]; - // 其实这个就不太对了,还是应该有一个完整的密文记录 - uint8_t databuf[TLS_MAX_PLAINTEXT_SIZE]; + uint8_t databuf[TLS_MAX_RECORD_SIZE]; uint8_t *data; size_t datalen; int cipher_suite; uint8_t session_id[32]; size_t session_id_len; - uint8_t server_certs[TLS_MAX_CERTIFICATES_SIZE]; // 动态的可能会好一点 + uint8_t server_certs[TLS_MAX_CERTIFICATES_SIZE]; // TODO: use ptr and malloc size_t server_certs_len; uint8_t client_certs[TLS_MAX_CERTIFICATES_SIZE]; size_t client_certs_len; @@ -783,10 +751,11 @@ typedef struct { BLOCK_CIPHER_KEY client_write_key; BLOCK_CIPHER_KEY server_write_key; + int quiet; } TLS_CONNECT; -#define TLS_MAX_EXTENSIONS_SIZE 512 // 这个应该再考虑一下数值,是否可以用其他的缓冲区装载? +#define TLS_MAX_EXTENSIONS_SIZE 512 // FIXME: no reason to give fixed max length int tls_init(TLS_CONNECT *conn, const TLS_CTX *ctx); @@ -854,20 +823,23 @@ int tls13_gcm_decrypt(const BLOCK_CIPHER_KEY *key, const uint8_t iv[12], int *record_type, uint8_t *out, size_t *outlen); -#ifdef TLS_DEBUG +#ifdef ENABLE_TLS_DEBUG # define tls_trace(s) fprintf(stderr,(s)) # define tls_record_trace(fp,rec,reclen,fmt,ind) tls_record_print(fp,rec,reclen,fmt,ind) +# define tls_encrypted_record_trace(fp,rec,reclen,fmt,ind) tls_encrypted_record_print(fp,rec,reclen,fmt,ind) # define tlcp_record_trace(fp,rec,reclen,fmt,ind) tlcp_record_print(fp,rec,reclen,fmt,ind) # define tls12_record_trace(fp,rec,reclen,fmt,ind) tls12_record_print(fp,rec,reclen,fmt,ind) # define tls13_record_trace(fp,rec,reclen,fmt,ind) tls13_record_print(fp,fmt,ind,rec,reclen) #else # define tls_trace(s) # define tls_record_trace(fp,rec,reclen,fmt,ind) +# define tls_encrypted_record_trace(fp,rec,reclen,fmt,ind) # define tlcp_record_trace(fp,rec,reclen,fmt,ind) # define tls12_record_trace(fp,rec,reclen,fmt,ind) # define tls13_record_trace(fp,rec,reclen,fmt,ind) #endif +int tls_encrypted_record_print(FILE *fp, const uint8_t *record, size_t recordlen, int format, int indent); #ifdef __cplusplus } diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/version.h b/thirdparty/GmSSL-3.1.1/include/gmssl/version.h index be56ada..c516bd8 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/version.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/version.h @@ -12,19 +12,17 @@ #ifndef GMSSL_VERSION_H #define GMSSL_VERSION_H -#include - #ifdef __cplusplus extern "C" { #endif // Also update CPACK_PACKAGE_VERSION in CMakeLists.txt -#define GMSSL_VERSION_NUM 30101 -#define GMSSL_VERSION_STR "GmSSL 3.1.1" +#define GMSSL_VERSION_NUM 30102 +#define GMSSL_VERSION_STR "GmSSL 3.1.2 Dev" -_gmssl_export int gmssl_version_num(void); -_gmssl_export const char *gmssl_version_str(void); +int gmssl_version_num(void); +const char *gmssl_version_str(void); #ifdef __cplusplus } diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/x509.h b/thirdparty/GmSSL-3.1.1/include/gmssl/x509.h index 1b57971..e16f72f 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/x509.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/x509.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/x509_cer.h b/thirdparty/GmSSL-3.1.1/include/gmssl/x509_cer.h index f8d3857..eb29de9 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/x509_cer.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/x509_cer.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2014-2023 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may diff --git a/thirdparty/GmSSL-3.1.1/include/gmssl/zuc.h b/thirdparty/GmSSL-3.1.1/include/gmssl/zuc.h index 20db893..f743eb0 100644 --- a/thirdparty/GmSSL-3.1.1/include/gmssl/zuc.h +++ b/thirdparty/GmSSL-3.1.1/include/gmssl/zuc.h @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. + * Copyright 2014-2024 The GmSSL Project. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. @@ -11,41 +11,14 @@ #ifndef GMSSL_ZUC_H #define GMSSL_ZUC_H - #include #include - #ifdef __cplusplus extern "C" { #endif -/* -ZUC Public API - - ZUC_KEY_SIZE - ZUC_IV_SIZE - ZUC_MAC_SIZE - - ZUC_CTX - zuc_encrypt_init - zuc_encrypt_update - zuc_encrypt_finish - zuc_decrypt_init - zuc_decrypt_update - zuc_decrypt_finish - - ZUC_MAC_CTX - zuc_mac_init - zuc_mac_update - zuc_mac_finish - - zuc_eea_encrypt - zuc_eia_generate_mac -*/ - - # define ZUC_KEY_SIZE 16 # define ZUC_IV_SIZE 16 # define ZUC_MAC_SIZE 4 @@ -103,8 +76,8 @@ ZUC_UINT32 zuc_eia_generate_mac(const ZUC_UINT32 *data, size_t nbits, typedef ZUC_STATE ZUC256_STATE; void zuc256_init(ZUC256_STATE *state, const uint8_t key[ZUC256_KEY_SIZE], const uint8_t iv[ZUC256_IV_SIZE]); -#define zuc256_generate_keystream(state,nwords,words) zuc_generate_keystream(state,nwords,words) -#define zuc256_generate_keyword(state) zuc_generate_keyword(state) +void zuc256_generate_keystream(ZUC_STATE *state, size_t nwords, ZUC_UINT32 *words); +ZUC_UINT32 zuc256_generate_keyword(ZUC_STATE *state); typedef struct ZUC256_MAC_CTX_st { @@ -124,8 +97,6 @@ void zuc256_mac_update(ZUC256_MAC_CTX *ctx, const uint8_t *data, size_t len); void zuc256_mac_finish(ZUC256_MAC_CTX *ctx, const uint8_t *data, size_t nbits, uint8_t mac[ZUC_MAC_SIZE]); -// Public API - typedef struct { ZUC_STATE zuc_state; uint8_t block[4]; @@ -136,10 +107,6 @@ int zuc_encrypt_init(ZUC_CTX *ctx, const uint8_t key[ZUC_KEY_SIZE], const uint8_ int zuc_encrypt_update(ZUC_CTX *ctx, const uint8_t *in, size_t inlen, uint8_t *out, size_t *outlen); int zuc_encrypt_finish(ZUC_CTX *ctx, uint8_t *out, size_t *outlen); -#define zuc_decrypt_init(ctx,key,iv) zuc_encrypt_init(ctx,key,iv) -#define zuc_decrypt_update(ctx,in,inlen,out,outlen) zuc_encrypt_update(ctx,in,inlen,out,outlen) -#define zuc_decrypt_finish(ctx,out,outlen) zuc_encrypt_finish(ctx,out,outlen) - #ifdef __cplusplus } diff --git a/thirdparty/GmSSL-3.1.1/lib/gmssl.lib b/thirdparty/GmSSL-3.1.1/lib/gmssl.lib index 6647dea63ba21dd734009a64844b9a0ed8826761..9fef94783bc581de447786853ff1199e774cf310 100644 GIT binary patch literal 343470 zcmd3veVi3l{rJz^dzT1_$dHJLhzN-gaYaHRQba>UBt$YYF8gqoU0in8ySs>FW@ct) zW@ct)WM*b&W@ct&WM)QYWM)J}L_}mnL}o-p^n0I&nK|donY-)vuV1g;9_I6OKIdW1 zJlvVt*UoIHHnq+gbo?0if5)BRZpT|w%s-}2KWW;V)W4Sx65^;iqVT}AqVV9oqVTPq zqOfHa+$RdZ9t&5)K2bcjT@)7{5XD8eiQ;*eiNd$18}6Wl^@9vmO37BucV>%%;%-WK zc(~yTO3AaD?=BVv#Rf{)Fwt-$rR0$2d(EPt*hC4BOf}q33E!V$xRVkd9c8$I5`Hky zu$EGCQ1jSIQBZ8Agdd)7c!m-lKf~}4CH#o|6t_{rM%tyIA2-5}3x*y_$xh7^3q(Qj zFeUtCs^L~jc(P>Zpp=k{ZD zo}Om7of3XA*sz*XvP<*KB2iG_^9=lwycKs)!sg+It0*P=G{2%>6`LtxEB&f?iV}W9 zzbfvdgl!`Y^x-zi5zTK~MM1HN61G#nVjU&?j&W6x^Y0|PG&>fGf?_=-{C<*ww*DS= z4mVKOPWXc`bWuvSYIe;P1qEZa3;sCSa0?~u9&D&mN_J@eG+z`H8!6%0*#_GBEc|)A zff#>=J%bEuC?$I}e_1993fle`*gMm3CnfxKnBf{q3H>J7*KVNi_rc$&U%?#y8|C1$B;uS5dEG10{?ie+4l|!K>+i#T}F| zdb~mY8(uTca5E*08ECkSQnFw3+LfZH*iH#!7Z@I+gx5_o+(!xHCK=XI!s|;0;=Eq+ zq-Ok7QB>SU3CGgkif1Tc!b}5WGXdT}`xMtx!bD*p=0wR>%^PQnqT)_Um^8#dUrv(H z2FY=!7_d1GCJ#1rQA)OGj-Mln3UW9erW|d!lv1)&bHY4PR6IZl^`i}!QA&1ePMj}_ z3T#eqT&fkIAywlx=w*p zM;NZ6lpN5^rrnBXDB-kOhPx?Y4)rOjl#=H(r!!`XeUxy(n<(KN z=9l6=N?173K%Xpxw_jj*oDvpI)0{g%6cyxgu7tjlES_n&lM>DwYS={yOXeBwrG$5o zr{Ypd3G-QUK6Z-xDdC-rmx8`~r{r19(gmWZc#sm_ML#R9q?9lpBo{0*(B=!^-Lnkj z_-*szvTvRhMLB#MehC}H_T!}XMsLz;#bQB-WEghu*7aR((d4K#F6O15d5X{UnR zo1rqna3dwO6bvgVCEGPC$V>4sCA89R#Wj?Y=QM52qNpIJHdr~&uz?aToMn*zhIaB+ ztfz!k^@h7Cp<|5UCQ9g}-xQZpO7>~GmW!fd3ng5%z(5@rL3NU09VK)RH(W;vJtYHU z(IeTT>0K&{3S#uaYWhoY3ng5PpQ4>oLYpOPPBGk13760g1!H)L z!^=cb@f0OoGt+PvC46Lr;Yvygev)e!8yKr=;iL72+bH3>VTNlc;bX$kK`EiFlIv-& z;!#TY_*4URe;jV0-xSwV!Y2k8R#Qs$X>M#5Ma9#U@Jae#v7QocBCdip;U@SL`6+1A zrzD3oH!~iJEtK$S`c*+2KMl9gKZ<)O;WLvA^zmolR@$kcjkijOA^Gea!+n&nZiIol z*GZn!d~TU2DmGHWZRD-Eg%UnrGIUW&wrXyty$W)=9lkKsu$EG?Q*+0BQB>Sd311`+ z#Z{D&=QVdO7e&P;O8C+&!`+l{*J#6al<;NRtsti_OQ=tB_d>%Xl<<`q2I~F_+%wj2 z10{TwI0|BXRkBNS?-Ef|JWdH;n{FVNufctz4A)Xhj%dD43|5{;+ob(HWV?NVGuDcP&}=@L;?Y@~!u(+$j(P4Kf}hN~zg2Q*KS zv*IaA`1vdYK0k-2M;WfAlpNOlqEQqT^wBTinQ4YwDdCqT1O5F=$$rh|c2QL9ri5QD zHxT1ju!a3a@cT#MB^;V+V9p$Z|BN(TMJYL`IovFY z3dZCx{FnAB?xutzBMhufMN*VDDPh1o!-JIYqH%^BDPf>6;5SgRP4nWpqNI3$5(eR?z-JH~ zg`WbSqa@@g8BBeOhbZAC_$lyt2@JtcQKgiSqvWOdDai4qFm!_97D{;8V8dmUl6{(^ zmx_|&aY}gkG{fzbFl?yda!Lt)l4I~w;ByQNuQ%LA39q0&#if*zJ(>~ci<06oN_ZuH z3VdD(BL^8)Q%ZJfUbR@16pv8Cs7Z#KDdE*6Ll>olagdB&U|3HHufb2TjuOVuKE)N3 z651wtE$vf0K?!5&7X?0J;dKKIJ(Lpil#E+qc#;xcKf`c0C5#_oxP}sr9c-YFj+H#G znXpon6k90a4GRq$C}HAc!yT0H#-j~aQA!SJCao1E#V$%XjyMWp90!vp8g8PL9MK$4 z{ff<$Fy$1(1C($A^Gm^)odEU23|CXaiNYZNEg`OCDs5C8q=b{&4SOhI+A;%mPJ=hi zGi;!Q=~E5&QNqdN40lt)j3I_DO3BljH_sF$#hsKelX<6DM+tA4Xt;|KX3?LD%P1v# zHE*qol7j8G!YRuPjL|7@>LSBqlrWp|S3E=sr%f{4LJ4z926CMvA%^7i#Rg)W4rfd= z+)fE^qn!$Jdz)mxW-j?Ch%pz=oNw4b3G=2K?x%#a$VYK6CCr~-pfBgc*&_|tP{M-2 zhMOqioY4mQ>>OA)-f$x&ynVQVIr4T`RBu>M3Fpo+JW2_Rsb6s&C7d_Na5W_?VO}ZZ zzu_GN3|CRY`REm^DJ45J?_4NK3hI0(ES+K?r={?&A%-g{;evvpol>${^X|E#qnBFSM*b)_gNc2Pq2QUi5&L(dGu{glu< z)gb>3tEU+5qJ)d7M{x%wtfAeC%P1v#G?$z&N{YuRVeK@-eU$K?Ne1T7d*D*WO+g)( z!h0th=#%%tWit&MDdBx{43AO5Fs zVh1IBu+^}S60Yhn(7#u~hlnM)x@5SL5Qu3_kBj<~fg0c7rTsy&V zEv1C{DfwulVG|`>NBa~HQo_d=H^n`aaQ$!tZM$CbyyoLQqNF%T2{*JGwot++W*Zoz zPr!|%4A)UgXtU&#t%hBcaMN7FLzM6-=857~O1OEb;c`mJKFz0_MM**3pN3nAqo7T< zz-Ne~xRDZW9cZ8rZI)hDRuYdpeqXDdF=I4R=t&?V}CX zQ^FU7p^H+oLvzP6QBrKBgfA{J(3UU4oop+};ZFDxc_=ng!d<5r9-@RVk2O%|mnBCu zcQZ~3`ucA8%3{N#lyFbI;Q>nc>Nvw~lyL8G!_}1VHDOpoDcP&JuThi~Pg26yXBp_D zufzQ#4OdZ0mloHkh$v26spq_8SgDnR790PsuEqI9h74*SF z66%nAyTh=B64uiXiYF-HJH%0JpoE8~8_4}(`0jYaEtIffh~WxK$sx`6+C@pRgAyKD zVxUhRf$yJUps&9Vk4`kKql6z2S8+L|WS{1-3q(n=of3Z7Y}iH#k5i9g7bW}%y#m`G z!N#SAos{t7g@z53@WdR$eU$K%F$VhZCz2zYCwoLmv6~XOSEG4^5;jdU+)W8T8*R9b z5}p!;Qn<-)Qe8UDx_|;Sc zF@FVHMjCFRgkMvS;(AKhI>^8nZ?52cm%MH}I4Sq|#ipMBnJN>J8loEc& z{8HRQ2|LCc)=|RmsaLUbStmtiX<{C%N;KKwg8H_h-MCH!Nm;XX=uev08PO86&vD5&F~aDY4%ms3g( zX#Pc?EA~^u!Ig%6l<@Bk1G<01p=JX)9)kbOGpwhC!;=iRQo?_S8ZM)h5L0rb(ZHA- zf&VQsY^2;M>cnirW0Vk0G2BN9g^`9EDWN#Xa0R7gkEXOt)G3~!gt}RVJ1Jqn2*b6M zl0%votrT^N&6F^3fq~ox!i$Ncc#skXO*Gs>2}cb!TuBLog<%b)N zZrDNzFP(3AloEzcH&EwLcv-#SUP?HcJQR0O!plb+=%bgzut5g;Xc!zbz(CuNf#Kw> zxQ-HDG1PDsrR1tA4y(=pJF{FjG1Dp!1$9q{lZO~Cqm=B@%vdDq6dNev&65o4C}Adk z3i@HDWSizKb41-+=9J54p1ts#MT^UGPCxgwMQ1Kte9ofsidEg+?V?;>aNhj+S+#hd z(rfMFx#ul7t32n_#iwH5wyLXq?%DO_rS&IGE1!MNoCW-6!Q%2c3r-Ix7iN_wYtMxz zB<8WCJ|pSsZR|F}=C&1;?w)c_Lt}fzh`O6w%Bw0pt)0!5pu3@?yV7I{R#!TjJF8;$ z{Buq_t9;s-3+JA`sNB73s}6SO7izw7Jc5U$MHI%%4z#FeF6 zCvta9cc?2%w@x}C?i5$%Y?VW~;Hl)EWgsVIi9EJkb)uIPf^+AbQ9iAqy{Wgop{H{8 zsizr>j93ZUJG(1$Dy!R?;(_v|$@aOG?(VkE4m+B3j>XEZTA|7_+LBTCgmQCErKx&J zSC17YmS}BzB@)pqUrQ`e+BHqB4IL{gbJ|w4^_ z)&X)1?O01H)wY&wk86KRDSghURw@k5X>DDtm8vxjUAeS;Tcty0RylPAE~_dXJ#!j* z8cywKW^mup*3;^aZ$FH4WA-yzY-YzHmxT>&Rj=>kWNdB7%k6OAE1qMPJWjzJpR7)@ zI>oC=`7AsuKSkRh$2T|8*f%HFGyAGHHVD)!RW<944FbMroqm=zwY(0LO50~q1BcF4 z0ehp+wmo{SKeMBy(=oN>#`5%PwX?dY($MX!`ERTA*a~C2u-dkoInMB%+SJ5xVo}?Q zR(pxZD{LbD=Qeb=p3%k;Z(x%`o#Ws=Gq z3ppLmJlCIViLtE?`nlts@r!4fqj1MMqf+&B=%vUUFTGvi%z)PR3a_uRm#wwE(oxG> zVB-jRmQJ+zu-0d=u%R7G9!+w(AW_-&)&iccJ8|-sQu@sAY-pa})>v(*+Ox%$N~^O^ zUp)7mIpr4Cb!$%9Qp>8HkmdGFOk?e6rPqSW#i7HCBbIh_WJl)o%@W2o@mX5hbZHbz zr4{4Hu}Pf?daHx4NvuN|D&tgP+om(b>aN({QaV2ILyVQuJ8NCJ zw0uXkEpv+P%gW{U&ZdU;a(7R2TW7gT&W)CGXO}#|k{5Y3m2F&fx+dLC4IO#zzD{~K zRJzMejZNidbFJWS>pqXA6?3ldZ@X4q4b9DM9V;?1eRY$&%AHL;m7eazt6W*5v&qqg zy>&Vv-&Esyaz!d&xj z8bdNWW@jhMRY#!d0Y#o)N5iU$Ny+w7;($-qJkQc^hKZhvt>{gym8J`I7W$u-juXy? zq>0+b75TQh2Fub2EV~uza&fh?X;CXu+CDXUnK-H5iqgvAt5P*1 zuQPW=mTgb=QLeD-8q^rO>6}h&R6?8zh zL7Z>@-DVyh(4;%%sf3vn^^xN=I3(2bnmj z-ip%A4#lZtrQF%VD5lG|ZdvKKU-SlW>d_$U`r{7Dy ze?}jS(%aKA-AofdfUU~<+MT6y&h$}FLwY)^gF6x{rY$e?vruzqM?04n@**It@_gyY zCVifpI$1K$I^FkVaDR`JGJ79ArP8oU)Y5t0s?!sDYo;`sf>uqw|t9eneIkcsJ! zzN@u5D5ywlWAEa&i8I?xMX@bY+M}hi0i`+;_&jw;7x?FFk z$L$0Iy=|-Ao(^d28r1_zrkC}+bI5o{wBQyIDH3nvxwNwQ|t5vmoSAbE1Nq&=90|09~8^vvmffxHzRN&sk;@% z#JY1~Bz6GnI@)N>y&`u@N3S%g%DEuyt*%agNEdnXd@ogP$j!>fQ-@sgt<7xnVmNaU zU00|4RYZ@rx0&RQRz8WV4s)qxMyTyucvC~&oG&-Dw+na6vgqb%1g%y7GMdgRKRj_e zxu?=CTI>x+uX8YZz2WH1J$_?gwv2@`ZxJn~)KdFtC;Q*2)|`Hc>=REbT282+F3(X! z`Y+?BH2nTlZspdv*2Y`5g*s^IHftkGkg-ccDJ!{Y+pOwsH#NzBc^Y}2zCKm!P1{EI zrB1@`S1pleI{ZFw0>oRkzm%!R22uyLY1=RX?Y1VH#-^2Lu*C}XUrQ1%3`!Ai*m|{# zYpu1nYk}FFoekqFUxDKlvQ=w%K}^5zW;Sd+uaoiUXSs=|k76rF6tE>q)2c2L(ij_= zZOyVMUw=|R4(RG_Nyt+EIOJMNiMC`e)Hk+uh`3Co@=&k)996nu^cV6LU1d!dCy%1l z`nRL)sWvqA#A>}^^s5@0M63Kyx*d;?6vzM0Xw}K8IV@O)w%GDfW2(%o(N)`KaP5B^ zzn-2h`HPlljsIcEyBeze)?KZ1ck%3LMVolCjCF6d%{G*q+J=EG$Ir&t|4y`WcA=1k zmUT5&y6agVx%ru%5(R}>d%a)U#`d0S%gs_B5ZO^#*}|Cw6k$I*qtq#zRjP9`%ZTk- z7?g(i-idtTQ#Zz!20ZMfjCnRAqj1u3WpQM7jKF|}qydjO7t7qu#Zn}>WMxidzYDq= zm4h!1`8eqqhd@4VN4W7#mTvTFi#?fjI<_oqtxjO#=&`wVR%5Ar)3BA>gI$Dlvt@6U z&khLATlGIoUTj`0pJG=E{V$`ru&H~xyz|WEEd7+63c0_0b@j`t9}&&))C%W}RxQK0 zFZy9)GLui`n}da_#r)gWs{K&e$$#0J4t@yk7TQn$+tRjZMT_yM%DWZ%sAT<9+gH0A z%3bP>2kV?ODAe}yMR4oc{`jDiBM$qh1B>rr9c_G-Iq>9&-8z^%@@~AJmnRPUIC;e$ zfxKdsmzO8D>X0v5^P8V~O<_J7HcI$ZQQ}rraTbSB+ z@*bEywe0QGO0N@o2CADADr{DodQ|lbOG%^b?bJ&4oeHJ?;mYk@Q1x+URw-#Rr_wDi zPCB2IiQe>VthuC&%yw$ktKP3lUg47?;E9YaAEQVzxBhKub;eR>uMKiL&cgb4;>U+0 zthm;eV-d%edN;b1r17n-)Sr)p#QQRjq@-JpMN$KLuLdMm4e3_m&qp+@8mukHBCbK| z-5R7Mt-;z#{N)ES(l%IIjzwI9)VnoENm_%oW&Bswo5zlNDr>AKRJ(KJK`*u22+u_e zgZAdkz;kfUl$5S>RaY;!e%9*H$yOROJ|;-(_}>|A(tW8>EXvyIjid!N5;(uFS-nmU`lpW#tWW;KaC(6c6 zWtT_~$X68^!179dg#vt8F>rG^FuKHL; zJz-7A({E|&X=^-BYwVSMX7ssUQ~f5()K~s|8J}QiwJmV%(j`cG`D>4q$@_!I)6)pr z9g@3ol~-~#kYwSBQy;5_^nz4Q-k_p}pZsMb=qD9nKXpxL){*?m!&d!`7)mP}v5y?% zIcyyV?Cw$VJewN%S(drkc{VkoCBNeOov*S=w0%X$%|u1$qkrfOo`Vl2pj9<$uhplS zBW$MEvB=Hb=)!e}Q?8Y5PNFq)%t?zL3*{nfe)N z&_lk3=cOq{LEB_LdJc&^=;cmj&(&4-;h#*Fv}vioH_JVfaEB^yqsp(_40tGWqYC<3 zlQc~xGe=WZIK@nM$wAjU>yexBd5BEa-cIwgr1r^HK%DVO&diLl+V-rHQy69Aoxdnq zdKzMFdQq$s5M`7(`;b!gl@j;B6A-(RwNE-Qse?Z*sm2AmzP!0jehGyyRyo#=#`BCtehP$k%TO{AD6a9 zSxQOBQgzEJUVZWGQ+dd%tz)%kFC`&M8Cu?8^vn}+u1~fK5wssVkPJKCvq3>#VHWCveP8 z6!D#Abpqx{^PrCpgl)3))jmSU*Tb&!Dn>XeIzET|Yah7%6%)q*?73sx} z)hYhfj-`_K8uLcm(FHS;7TNh_q+t*H#6_nZICDu9Ig1-Eu_jmxhbQl>Uq?*jd0z59 zI~Q8rJP;G!VTq8n$%__Pm+;SBmC*I_$$`Ez2wC|#RQVc*HOtgy*2X?D49*hu1PlLJ zVFj~fUc_p5Yg>zT&SJJbD>*-$<8dqq*tr))($ISDHra`s)0x10O2$3$NF;HcCnn>n zKUL99=VfK7wRwgj{`C}FSCX+b_ev5w=PEyuCRgviB#mcPY5tk&?B`r%{`PjpN|2XxE>LQrk5=7ar$YuWmsNiI34L4_Az z{!o@YK^6Ph!hpSXUYJxPT`YOP%lg63q$Yh5Y0#sG8%yc~?M^-N9LmT8Uhz@bs>EGg zEk&{tIq?&z7d?Hb%5G}n8dm4WNU8}%NR*zxnON@pv4vTC>sGaCI`)Y$WS{KKY6dB5 zZ(T?g*4~*B24cIng{^#Sh398(rCMvRs>v0HecYB9k5F6O+qKDvxZ=1DKE9NG^Eo|a z1;t^Xq%E$GcT91WrY!+sxQ=9GTn}#z)ynv1RP`AkdH4;A-FjjluPvT9?Bld0_Hf3< zO~7kQ>=A5>bKulrERma!b@)sz19?b0F9%EH#*DwXoj&-ZL;LcumuXru1hH2vcfI69 zRY&yX=>U@FU8i^e^Ynd0afT-oBhWt?8?UqS^f`INi)a{Ku0@=qZFMCgH<<(O?F?~KwrQ}F*ES+P5 z?GP*S{Ok$u_+?w~sMFEQiu3BS`@r!s3db)QGt&pjcF-zrre_?B!#-}?;|k*G5caX# zop|`;p8j0}XARGa-8z!hCbYKVoTu+2ij#6CMj-c$jXQAJJc8qwM2Y9R*WG#goYurq z!mV+%eMHD>O&lZBno3i$9>$YH&a;3xt=U#4DQARXdn-ZPBbZm5wAH!N#}m8t#7ZYG zM;NyE@`^pOc_ohz(@EyvRz&lpt##%XM>3++)_#j!cDcPBw6e#?GLFSzpQImb4jxbz@mwoJ!$-Xl^+NpB|dpnJ6N#itS zQv>3#Pm;au;q|?(va%0|(>mnM!+06xvR}2pm$}w)N7&Z3EVW*vZUMy)*-tIo+d(V4 zXDs7b9QH|i#`f@f##UK96A-&~n0BdNk;d_M&?-(-j;m!Hi^D!n_Hj1`vX50>_MSMd zUOuim0Ec3qj#@5*?)4=x8>G{zIh*88bNBOzYFER*K%_3eV3qDe2>U+ zaqkj2Dk~+c?o3|k72nD6Y)|efB1vEVkiB4Sra8*@Ka%BI*~FWUjl3npY*7a4-;P$_ zw21X)E43h^dOkk+nN|kM2($L;3C?&Y4myV|`V&b%Zknc%jbuM_>e-ntir>h#o1@}* z`kZ_$t6(;sJ{u*SRG6wB_GeTqx2BUPa-*)|%?}=ykoQS>hf97fL;hP0tn|xK=f=p4 znH3<><$5P~YUBR3yc1oncXmMIecWqF*zg6!wFl2iF&j5KqkMBxQ*T&%MwXnheR zmODlPy)}PieP%PQ&He>O#?>BlTiRU3Ni?_vXYsY|^h- z@vN^AOPb`xvX;MaR-QpW;)FA@;^gF$E+|P`{52#|Si|niybP_S*gv!@&m4Vzl)GW; z^`@bfU2ry9dVf-8RpDB#qg^t8{P7Ig^e7n{7Aq%)40H*b|3*+>Q$U-foBTxgAUXWyeTBK;nfwUO4O{MDONa!#jP0So7CDaYE;c%J&X zZ4+8H$T! z!dUKkG1?@_J0Lt-XnT3`nqKABhAN*zYpCjTUo|4Gzh&V^>f&Q4&SYqbB_T_9*p;ag zg>3bs`lc6@sr{tBEq4Z7Sq4U3$yrVtD;;gU@<9tbLMjhsl4$Gm-0J-~=GJy%p5KYJ z{ifylP0RC>f4oh8Z8y`rSdr7dRqh@Ur?15!AN>lE-G}zuL$+M*KV|)ldr%yTo;A0h zh_}P&$HaX}C}vmZ#a_2aNzl@KEWnQHAM5pABImk%FxU&MM4`ysdG}1EB*)S`E^KEZ z@7&w(1^GJj;BZhJtVO;4=a^e>{yB2>2)i!{#pF;GnuCcr$49?lVpo8N{dS3?Qg2)N zl1yZlCOPxU^6me`I2DHM)oXyZErNg@FZizPUBOqh-N>mp=%d~pwt|P(K0dspUNN)` zgDW3)ZSqA_+YUjXW^aMyxr*#jv89WT)`XTvTO5duPrSA`saWznFK@_IML8=@J%=Fq zTBOxh`>jYz>@7_4<6Xf%QLp8A!)IiHe9`#(7LkoGVDBwp^=bhO+m&17>%mqF~ew_+K_U?*> zZD_^f`K-{2Ws3u`{nIsRZhi3}>Ak7`ilqgCh~7%Xa}lAHh%W$!Rw7#*h@JR2r)ic` z;4ID3Iwxt4JX}{`)l*)vJkQHp^^8w&)=c$RJuL`C_EtUlQN+Nihd8^ArNTg5ZylQ& zUdNQ!TgMVvI4aiOFzID4I7U+C?GaiOi0!R=Q^V`t)XZs{kpv=otJ2i6{r3YuDi3)%JEgJ@ z?3GIH>}H816w|qiQI>(L7$w)Q2in;N<`|aow=Ysl_uCh?+&M8-zJW7SC09LTzQJKf zNafkqb-Bx(iW4}?Q*!m~3%`TSry|0=Y?OXiTjEegsvf`7jZe7ejnY{)(v$;hhf+Gr zRw4;yDz%F*uocUt(}{EZ6Rr z7;0&QbrK=@+=7?9tqS@&Gh2736y@2*?@-!Dy2Q&;2K}8KUVBMV&^G-6LEU!J*1#^<)$AW;JdlOk2DoNJTIU~d_aGu$7aU0)JPEP@o7W)c6y7JTW%sB#Rzf@7%uiVnh zU#{~iO`Ns1Mg(VNw`&fp@3z`mvwcO4`jT}zm~o=*D?(`Y=SK`#*Qmi?*X`zoS9jYY zZ;h{EQzI99Q4coIHmDKDS^Mo&0!IK(ojcFm|#~DI5K$Za#x#mJsnck zsJE-lx~{T)rJ|-^PMtEDT7K@j>(r=JHGG}pS8%``i&~NFYj8V<(AsIOMXYk6{Uw-7 zj;+b6LmhFruO0ux$YZf7jkLR|p#xi8XjxBt6Q3XCNZQm?;n78J)3xCSU`K^N`xhI< z+m;o7gPW6g<|?0g;8(5g)`kl!@=w|GD1dnux(WFT`NfZlj`M;%vNh==uFA+n(vqyD z9Ml(gHELdr;hM&ng~(^ z*3#A_|HNxUZ%=C{e+8|r!n-Z}F_Pp!E@Sl5G%t3$JgV0S=<4&L#52H8$DIehw#w19 zLiKsxu0F4B^Mp%Y5J&CA(0?7hyO%#NCwCTh1(l#Lc6{2~ctC^GqxN>*G?A|lF+XF+ zpf2DopB`nWo$Ur9_O z4SIO>#erh6?PI+%Y1(8HhnwhTY%2Nkp`1`gWB%`kpC24FpNUE+8qr10D{v|nf5_W&Ji-dy(>_Snk zBcfWFykHr1jTnI%&0v`hH^BmSc2sjpp8RUFa;zwdx4k_gRa)*VWxxX|5GHu?a-8mlQK{ zS`@H#Pb_msKHuzx#7u_LnU}e-6Z8K|9lZL}($L!;uXCm!`m8H)dqH)EW?Oz$`LoUS z3C^AxT^F?PvmMDysu4M{@uI~iF!XNx3%!ogUEw)G>z}rtS^1K)$N1zXJ^8F<5r~u= zDne(H{-W*LIML+y?5sV&JcJ%MBS-5;(2uyQ_to2aTKW6nGNN0l=@$a_!`O+RIozqh z_Wqtdo>(URh~-@a<%CPD?1*|==l5W~K8eCh{j#_COU+Hywl4WMN6Pa3d^rSpD&M!g zvRa?_83(-`v?{At?$X%GR11Ckq>D{dZ#^wHbal1Mt5lh>yaY*4>+)1q4b^Ic^Vv(4 zkuUV^lOag06Om;4R@!oF?Y-Mt+3ti2->BVdxovc7bv9PMq_$}D1u zRlIFk$tluvNmoU`t|-4#D*Hg~XRbKplZ<(4Z@qcx1Y*vqTT%K*oK|4T-5TOM73plT zI?TV)vO6FQ`YoPc6oDy&W^2gmbZPIqOF7XTlAHU`G^NkBFWntu_DJWof395e^yvJdB3Aw z-+pA?g%nmz<`0Xj0Wtr!wbq>!tKaPlDSxeLO7D%xSEkiHO!;R~xs$2xH|v^ITzO;+ z+GH|tEV(1vN37JMk4QB$s?joa{nf4aaQ$Y_W{ zI2uKspL#vb%GY=)ah{KPH7)DqytAg%=KJ#UShK3aJ<;a$Ko);{-q%^RX1u$(7u{X% z;D<$SRq0RH2f=N;cDsug@H~RTN zpA*@$up;TNu5i-gTms9srPoQ0%JPl>)Oot{$a~c41j>GPKn06$i&|}TMNV9Ov16^S zxp!jad3$_mlrHQUVH!QYNV9@_qSRL2$uX-Ee=NgXCad4dTxsf&jItHpmxZj;*(Q4{ z^+@HGm-<1$J=;-U0eR|`tRvnU!d=o8J*~-8;xdpYN@K{s`eI(e*1reDzj4c-2IV1{9|8NwZ&8w|9v!FvAKJz4?q6oHy*WZ>r-Mbgrm&_I3rc%h+V2nJfRAeU@jF8!e~L{5uw*J~K96U%0Ky zv&qdT(+~D2#nF=62BtrqXg!@xo$cx3#VoKSsil1Qi-+dTlTUiL@MRh6bO$h|{;W3( zuyubsUan)26;uD9A72p4h8p)+l(Ch|oVul;CZ(}Xg<*T|Qaw{6Umo9#sfJHD; zvSj)JQblb)`wS{KhGW$Kc=3g6zv3pwFCe}?9Q7}}vF$6mwY=4cYg_d%qH_tQF39=} zA8`3U)TJL_N%jUgzmvJaxp?+UP&)KcPkiQ(--N`Xk4W~?m>Xyr~}ZjY!(8Py4CANzr0n^`g4X4qkKR?MJ7U|@1P!qgFP3HFS>YV&)- zNP`~nNv!Xa$b(+;lGOK5vW#_l@oKd(6*~6GLT>#+%7Dm+&g`4@t|X0+Eb`v!E;p@n zTWizxEnnPF?T~M$$xM}1EU@h^;{M+%Zo)NHjh!X1?b0cy=7x1IATw`_F2_4P5;~6l z@i2F$WNXgOro0Rs%S<8xt=)#6a(8Fbh5CU(`ZL+IY+8GJnmaGncTl_I4NEV7Nj43W zr-|}wRSm23b)focV?gJ6`4V@*Tt||zY;4ny8^m^MJ7X0;h^abA2aH8o+iFFA5XUyvl8j}0TcdNs z+oWoXgFeY^E6c&VgOzCbsIHk#I&Jwg7ZNM3cZu(gwQ5C8i!_pa=25p>|0~t>^6uCP z)9kyTGHzCy@o;9Qu}@^ab%X!IcUnnC74}U+`<{uy^{aQjbP+qb(u_wE%d$^ozI7(? z)G4D1`zE1%&qU$+@#m(jyVbFiE6sQ$u`K&U=2}k=g?EI$eG(`RK0SSS*0as@N#c^x z1U<7=X}?6CdYQZ3ffZNQnXlCm)|@njzb?Tu0_sn)rq8UXu9u&I?bD!k9DQuc3t}HD z^K58xtvrl6n}zvZG1w4aSKC|t@?)oGyIa4p2Tbx@YkLKnY^n^jwuisKrOw;rPjYRE=H8#c1CYi#IlYmzV3baR5jDG5*DqH^{b|< zP!BPh*&V#$nQl6n1y0y`$i@aOKW(P)31kn-D8|> z13!*w2|Xjv%aW4@)r73h_wJ}%tXG_tw)Touxhwa*x;lAiR<2s!YNaX-DEshF&lf@g z{IdqnCfB(Szf5PPc^g$GYxPWAI`1-TgUYO0S>4HFc$x67+>fp9A7p%Nsqc|7&dD0F zyPq3@AJ3dKvyYo+x2)Na)p_3W!&<5jdCk{b-oolyG32|#d~SnBhV)G9Xi?82$>-aW z0dS($aOkTZ>i{4}FcUU7&gKzEr)w>lS7*0+L`TgJI+&Xt+;Byb0y1Iy9<+5gR98+d4n7{^|~A!K`^%iS2x=JkOb)8FBPCo1P74jJ(Jy*L~i(=;0-X z*iP4sTdqZJq~v@d5F^p`=`C+3)(9ZgxiPZG6sIA!y3ZKap&=L~bA<4%Y6R%hmuZt8 zjQzkyncD(;wmQDqwa8KDSK3F7?vicCj5T?=nnf?%R!f=h&skDnx~Nq#cb>%iZ+4o+ zn*925J4x;RvLU{2t$i%33wX!-j=N{zYAXVM_H<91il42h?U$+2at-Z?R&a0n`8+Ae5udixFQ@wws6Mvl;mowIcDuFMn8pJ08w00O)GQ7c|N^- z)jyekiHnqa9^L>4*HL~x?PdaIZZObOS(O*x7{nuxCgm$?__+rZ+c9)hG5VlW4SWAU zVZwxu74~I$(#^KeYmFZ~95s89oy5+n+#2G&GIof!Evx3X6>@>|{vNw>2&-!Prrn!$ z_Iuf}$Z@RcV@*;gR%W(3TD#Lj3a5QMr^!*|67@8_eeu=Y7SQzJnXEk_XKxMiOx*n> zPnlo8(^F37fxdF|Zf}KDPOaTt?Y#Of-|2OGD^;-CaOGNrsFmf6etF0DQn%mT0>ofa|+ckO0 ze1EG2o^vL9Pj8QFSY_9$UoMmmdje0p+%TJmm z*Y^6XhtJ#TZp)}cwZ}%m1U#kVpWaf4tFsBggbb~o?=SnFa&9*N`?r>*d^Pu2dMuw4^fuD89jIkjf@G)L_>FwH02 zPOqL|bU$V|l9ndtC9rbZhyLBG>A!g>cf8a6 z(d$xI7xH#)xTtfIBpXK+@@?yAZR0Nt@axzm=GQ~7`hY<&j``8dxu27yQR7}tVw3FP zUIM8+RIgkf?Wbfs=ZrcO!~AM$J!|7d2^iFfvx=`|agWKL%O*&o4MpgdpN#C_!DM$7 z6LHW-KV!lfntdxR>DKs}h(uj0MtY9YkUVVW=VGc0n%0W#EmK|#O;pdQ|M9ZBdE9U} zWN0sU4~&6da8zf?drM{=f!huYDVkqY2~N?^rXu6)b&{wH6v9kE9Bb< zRqoivqn{1t8s)~5Gp41j8vlsz#z~bm{X3Y8q5hHXN|)=MGfisDOm?N7YQ=v_HcmUE z4b&Xl1nPEGHGD%8HFnOQtH#2eTt?{jUro#WyyAXS3xd}tvCi`558XAiw>9%up5&{& z$yec%AB1b@?I^jwV|Xh_{tq6hVgKSFtKXFQJR5%l(OR{Gny@DiQkfgmdgr!WEmg>u&%W@SwfZ(3 z-&%;D$4dM&>QIdKPM#~0yS8-m5^!}P@6PIqhK{zi`tz!R2w8n!QFzFymp>>MO2-c7 zn1y0io6UoSNq0y|$g;afE^3`s9x~`$&5O3?bx1Y466YKvKc017rd%_>ylScShQw2XUpB~vEy&yJ-D%PqeKc~B4U6}~3qsbBcvyj8vB zoz^6MU7hdk_eExPSNZdLu$8~u^5dv?j{<|^%JaQsHC7d=n^FY*LN58%nPF2^gvTpB zs3#p63+z02>%FOgZ}-X@BKp-UyD#&!c7#qIQmpWsaSP|1azFCAFIQbFhMj{SAUn3c zh0{qnN~`wt%-YL6qzL<2`C3kyOf8+AV^(a{lD($4Z;<9{Ye#U$C=etus2#^@cOXcn z{Q(=hAM(}NEaV+b`67H|HUmSmLq{@E79 z&Ux9#`atHMD!0~nSyAhZn{%wn`d-w_35a?#PIgeZ;dwTFM$2}C7b>qeJhMQjgf05Y zDDDTli`+=Dg&nE4k)M{-{npU0n(5m`{*Ru0#z>Dj;UNC;Cu3D3K%c($;P@@fj*D;M z3`veM-2Ti@v&kB#MXsMGWR)PF@5}~c- z5`7^fn{T$=8r2`k3>>_12&nRW-L6O-Lw%BJy~bt~PHpPN&G-S+_J$RDvZOnyd4)4< zQ9Dx2ApZWIttUR{oALD%jn$bP%){8p?riz{s=j=a-=plumXlr4`xVNuaYoL1L_9EZ zmew7)tRgR8?HA5A)#Z5ezEVG*WVc(`FR$DhbGj!mrgEpYJ|UKLzTW?GwN}kRn{;mG zt82u_clYPDAKq$tSXHA|dwTfJM(26+JD0m3NH<%UwYQfyW1U^$9EJQb)p>t9S8LVQ z)5uS>^0tbbUsfFQu{tqv$n05(#_l#>=tt*Kl|VwaG~nTxxl!b;2ReBf1xGJiWI`y`H6Q9tag+VidDp3v{mu5th4+wJZnl^4<@{R{g7B3dtn zs^d{^u9jhcdLemzv#+SRxhBtO1}26(Ds~n9_sX`SPv1cA_tz&|Tl{0LY)jg?$+6N5 zM7~vD5p}Y)qP!VVX;>xlHMyP_cUGH2eoF3msc&wY8m#Yc8p*1LCV4K$ z-{Xy=SrR9Xl-seA?TnTAi(Xa@&foY#UanLc;y+U)>vgu1c;!l4L)u-`r%ipKWv`#g z*JkG58LidaIE7f0wT&B`Sh_u!h|?zfqBLfB;L`@C^C9dL54q#vj(0LZ`X6Z=Yfxo( zTbr&;(%$UoDkrO*(!y*GI)04%zvE7Dx8toT<{#6ipLFs`>fg%;-Bl;VwGR};y$=?| z&TkdOtStp`AB_EVL0k>{p#9jQIIyrNZd+6omz`G>)4yF1cfg?a1yO~qF#9_NaW@Qq zxFD{8XJPSo3t|II+)xlV!Xaq>UO{YvsgD%I{V?VG1#u^gdbA*JfPp_Kh_!GKRz6k` zo8kN)7Q{1f#^VL?5KR10LEHwzHx|UTQ222{^uSJ7@I*m83{!tn5Vu0<$%5#B%`oq$ zqtR72$TMY4U|Mt z^uSJ76cxoIFr`ow>tINcISKoqrBoE#VR2niJPcC?6vf>z>P1Cy9TWx@#Ts}PmcE!c zFkw(p+zLk@RTNjkL0CJuC=Nl-ONwGIG!H3?Ct&VNi{deuF|;V|g|ROyimPG3(M53u z9EA3l7sU>kJFF-+!WqZl1G9z~#e*>U6-99a3>{Gv*FxcyMX?(8K>J91VeYGnVgrmF zg)NMFby3^_<404%xYrcL%`k8bZHN7^^0l-b7L27nnD)A&xDO_cqo1JkdTiiHm^z+) z83wRlKLax-&>k53hN8G0#6)aiE6jdlQQQebCXpv>hf|J227@OTMHg&=ImZ(Nj-FB! zm%>h%cS2D-0Hf>46L!P=6OqBFsYP)O9E9eRisC7#pH>vNfOu0;w8BQ1Je^#jbTT=? zCYU*c`eE>!i=qRz!@QYA@eoXU3*!kxW>F{Xg{5z0{9yVi_`!%%i{dIc0L`=M1DJIh za|MRXDT*pQ2VJK#uVC>R#D>vtD~iiuH!PV;elYz^{9x2P#uJXf%Cl$>%$Q#kcfqi; z$p!Ynk_EH@=A6U$z{rK<0vEi!C?1Dtix`)4i2={R%*EskL(eOUT`+G6{S3q2K|jMz zn0J0r+z%t(Nq+DwELh5XgVFC|Uc+8kb^&$6talR=1}|f-!){nqW`BT*%b5dk2wED7 zVl&KaWZuERCi)w;!MtYT!-Psv+z5pha)#}&Xa)NpjBaI&;W=n-BNohC$=rrn7gEB^ z_M%u1^{ePd7}HS{H^Jae+6Vh!c^7jG7F>i6OsX=cVR$$DHI#a22ke2Rz1YBn)yyR* zUCe$3o8go-^b?G^gf_wfXk5!a0n^_@8)5LJ?Dwz@7QUBphjEv&AHor6e;=`6_T`KN zjC?=i4hLc775Kq|573t|=}PufD1DH*1Uq2ViYC@@D!Q=6{+xVdgDGaSu%T3^{|il{#Sy%=s+y7)GqaAD)9{ zpJU&Eskbo(Q2IRWhpjOCc4EQMFVJq-3G?q@Twuf(*%#n>SbisS6=r>jc>$yEVyr=Y znOLwB7T!%i!;G)s4`c6PoIrdP8`uR)?q$D%>0cubjJl8Uf+NuNb>hIH`&l!g{u|6I z82kYHE9{4r-^2zkc#v_21>d4=Q2!9?3=H@-#}s%LmaZobO#2Rf3L_q-Pv9W5f0um& z7HwePfXUxu9AW4q96R7J^n9N&g4RcwE3otj%uSg27;_EA{E+d4!sFP$W;o?Xv>nE7 zWIu!>(Dh^dVbK%R1(Sb5yI|;(vuk;Zdg4O$&&v3!tn2RuTKY7E5zhevgV99gr zBQX9S%ylR{&%OcMVevnidocX~Il!2IF^Az0v>asrf%*St4#U(#^bL&s4}Aa!q4_Xv zftmkh9ALx|<`X;*E&rnrU>0Xb_raK`B(8NoM_*FyRE+2E*!0;%X2lQo<3qbZUun zq>^YqiT;3P)9{6PZz3*CozD2fxRc2jhRmQ3;Axoo=90J*>SxkUnD~~GxC@S+#kjy; zsJ@jFmYqVIV9}}cH_VvLIK!mV7)vP4Aueoz#iwHf)6QTlVaVHv2m4{!Tx?+endAr4 z=P?Ii(pe>OFHD$Eo-p!k`V|H*pkHA0IphZ87c#G4_}l3ds9(f5!klwU;!&8exFoKF zLFds&AeKrpl~7m3EN<9dr3SD(^nB6Ms<(_9E8?R@`N+Gm@6>;BK+YntgJG}U}-o0Fr$aQ zhN-=jFl9A;3ga(ke!|c-j1%mE^DkkagK2A-KQQS%^bw4?6d#!UUUGq%mzBgunDaiy z9Ohll_`;m`qlXb!(Em{Q0I^{&EWeWeht?0Wzd^@U@0Es5Q*d>!Kg z3qHph1XFLLKVahL>1!B$dr4dm;tPy3?0{u=FehNi7pVu9+(`^r@Fn^fPPvQRVC
  • >F?xR)2%B zdVqBW_CVt|@qv~H$pz+oiyUCwL*xL5q2t@+3yasYZo-`Juy4ckhlvm4zsni{LpHD< zz#(Y=9&LstkB|$T@_q7#iI1}Hz>pu%@30Rpc#Pu*H2;wO0hT;Yo1ytf$YJS5)@E4v zW9o%DPcXhP<|pI`N1*3P#s!xAl<|ORn^P z4URzd8Tthpe@TD9{LRz}Q-6gmjNC$7VZ^Vg8wPEq&2RwPe?tzid>g(n|F`TjFlRes z2h)GY+=cNw=mQw^d*&7Ffh9Y!h3S8wPhspX)}XVYa9fkHM6vPTU703w7c~7*wniSHK=vR;m-vz^uADaVLxzP$#a1L$LBibz(Ct z7+5DZ!mJn9i3efgpgM623_hxk`#aq199$>Xz;n>?k~*;)mJg{DTVVc6>%^lleJH+A z|FSx9FHAhTPTT>bUrtUiXc#%cfMcj11`n?j*TK+N)QPL$FjPm>iCu91D~Sn{M-l^u zyo&l^7c3lACmwtV_mbTIt2b>apXG?sS2A*jBNIB@>B zI$q{!SG4Mh5b-Hj`(o- zWcurPg7$ROOhKiSoqs7a`Fma3+E?yx< zh*ye{;#Fdlc(oWUUL(ec*NU;?bz+=&y%;Z!6%)i8#64&0?l_3un@A6{m<(nTe-~IpTD2hIpHpE6x=2#93m#I9n_b=ZJ;k z?P8HQS45)l|5-*Q_MHLZMPi^>EY1^4#5=_K;+WzqF1aI7mGFG60ugiM_el2D=ri76PJtkiz~zj z#FgTM;wteWakcocxJG<*Ncyf8^kBXjpCEyCh;k8v-q^QMSMowDn2XL ziO-4K#OKBB;tS#q@kMc`_>#Cwd|BKrz9Q}sUlsR?uW=Rgb#cG=hIl}HQ#>fXB_0yr z7VE`##KYpdVuSdectm_(JSu*`D)B?{xcHISD1I!S5I+%5il2&2;%DM1@pJLC_=R{z z{8DTdzY<%-uf>=u6#&x${bJ>oB7ulTFjC;le( zi@%HK#6QII;-BJx_?I{+{w)rP|A@olzv77apLnqlQ4|%TVpNLiq5;v1qJhziqe0P8 z(ctJM(U9n+(a`8+(b3V%qhZl8(eUUM(TM1k(a7jk(WvOv(dg(k(U|D9(b(v9(YWaK z(fH`tXhQUcXkzrnXi{`sG&wpxni8E5)kh~rQ=^ljY0;aa>Cws2jOfkL%;+uAtmv)L zDbcCX?C7*;PIP*7M)bC5ZggfeFFGrlADta7h|Y-?MsJT6MdwC~qw}IA(L18^qjyG2 zqjyCYMDLE4MdfID)DR64jZst7933SpQA@NUYK_{WmC;~vVbmV2iaMgss4KcCsz%*W zPt+T&jxLVYM3+QsqxVFYM(>R-i{2Mq9=$)hBKkmdW%R-5s^~+})zOEeYod=t*G38leIt4x`eyWC^sVTj=-biy=sVHF(RZT_(f6W9 zqVGqKMn8xii+&hA9{niV82vbUBKk@6Wc1T$Q}nawsp#j?)6p-YXQE$5o1k8uvuP=-* z99x)Bctc@g;f;k!h2sj73&;OI_TD^B&Z77qU!Ftm8^sToL6KWXHk*)u93cn9kb{Iv z1c%w(+1(+#GsDbmE<{8HK@bo@4h6YI5fu~#@!&qf74DlL_YL6)M+p3?`g*Fn>zUn$ z*?j-_z4Z0@gq^DDes@<_S9e$U(;W;CMg*=R54rUlc38Nt56%wSfqU$B30KyYAiQ1I>G z;NUyKA;F=+cY|DTSdb6egN~pxCtYP7F>8eiob@oD!TG z{5&`<_(gDfa7OUU;LPBx;OyX>;8($~gL8xPg5Lz^2Nwhv1{Vbv2bTnw2EPq13w{^; zKDa#iLvTg#$KX%FpMxudtAf7-e+{k<{ucZ_xF)zZ_(yPE@Xz31!M}t51lI>Q1UCjZ z1vdw`1h)pa1-HZY-@@R|;I82A;GW>#U{P>iaDVVX@L=#z@Nn=*@M!Q@@Obb<@MQ2* z@N}>^cqaI7@NDp0@O@M7>%@N)1<@M`c{@Otn@@MiE<@OH2ycqe!_crSQASQ>l~ zd>DKbd>kwbJ_(iwp9ZiU6|NKpVHieX9DX5OIb0=NHC!!RJzOJPGh8cNJ6tDRH(W1V zKinYvV)&(S!|==D|AiZc8;6^On}(Z(UkQhWn}=TwzZPy0em&eW+$!8U+$P*M+%DWc z{6@G#xMMgx91*sLBg3|ER5&`^DI61y4R;QA3BMWc8txYE9_|s23-=7ihZDky;iPb{ zaPM$(_^ohCxKB7WoEAtJTW{e{8@N%cuII``1A0z@E76f;ThpC!!yIP z!n4D3!e52I4$lqG3x5-yA6^h%7+w@!99|M$8vZuCEc{*g`|$Gc58)NzAHzR|e-5t< zuL}PX{x!Th{9E|<@S5=2@E_rI;XlKFh5ru!6J8(Q5Z)Nx6y6-(65bl#7TzA-5iShx z4DSl>4(|!?4Ht#?h4+UKgb#)fg%5|1gpY=gg^!0%ginS~g-?fz!)L<(hR=r2h0ljC zgfE6Kg)fJ%gs+CLg|CNigl~p#g>Q#T!gs=V!}r4X!=>Q|;fLWz;m6^!@RM+P_-P0s zw`ip(h{7m};^+&}%F!y(s?loE>d_j}n$cR(+R-}Ey3u;k`q2i_7o#sl8%AG_{x8}n z+Bn(-!c&_?Ux|iAn@3-bz7}l}eLdPT+A7*Q+9ujI+Ai8Y`bM-vv|}_p8WFWdBcrxx zR5Uu;DH;=vjdqT9iM|=_8toSC9_Q7x)R{n4CgZZt2NA1#QEjJ_8g6@5QCI{HC$O!UL(N70X?W257u zpTL6tgy^TyiP1^X&!Ur~Q=(I&pGT)fzlctc&WL^)of(}KogJMM{VMu(bZ&HB^qc7X z=z{3N=%VQ2=#uEt=(o{j(eI+)N0&!`h^~nK82u^wb97~NRrHtWuhG@f-=e=q*F@Jw z|A?-O{u%u%`gio7==$h}=*H-#=;r8_=+@}A==SK2Xkm0`bXRnDbWe0|v?#hSx<7g# zdN6t@dN_I{dNg`0dOUg}dNO({dOBJhJrn&mdNz74dOms~dNFz_dO3O}dNq12dOdn0 zdNX<}dOKPYy%W6~y%)V7EsZ{iK8!w!K8}_}pG3=}PovMGmUyK&h{HIFhT)!n(o=#e2t-<8Q@N;(g+&@w9k)JR{yWo*B=I_lx(B4~P$p z4~oAX9~^%tJ|sRg{%)L$4~z40d)yIs#)Y^m?v8unVtjZ!JMNA9;!<3WEAbI=HLk_= zxIdl~&yDBB^Wz2ak@5H9qvG$!N5?;ikBNU6|0w=(d~AGN{FC_j_=NbU@rm(C@z3Iu z<5S{O2;`oyI()hRW zW$}Lho3XBt8Eeb`59X`wVzx@>s{fm*zW%?N>i=e{|C_1)Z>IXcnd<*$s{fm*{y&_l z!uh3rrjMVJ8$Wr*-VG_=4P|oCLRWLV?E@D{#%JsL@{PvyyS$!0Ll*>?Y*v`EjLA zsM>+WdXKIhE5->xx*7Rm)gbDGnyw2-=qcF<@{B25PMVdH+2r(8$Vy2yW#SY|BQxRk z>T;hV)un+>hC6aJWn#5juFe#%H)+z0YH<#jD%5pcM+aE&%wl(sG}OKGwVp{uXiFiA zzb3;yd*;Xf6};P1{G8l}b_7}2zp%=aXC>M&Vw$0AWifP}CYPkesJ>%#s_CwUX?jv2 z-^7fJ?h5H5Xx<*CW19Pv^PT$?+pGDitohW5`|Uk_0({k3ka|(SdqFJMOXQ{%=Gqnw z#V8SXfOG%3-5Xb(fymA0r@Pw@qLLWO4GvOuzx1sGDNad9&X zyaq@Rgpl9(&~d`0pvU)U;PYJ?jvOux#}9@kMiG|os;v5pDJ$fZ{J(e^W!v+u*1B#_Iou?kRY<;*~TNi}eFk`_~W0hY(K-K~cv)7|t zY7TnLOBKLT!e^@Sk20v=wCHp!v>3b#OGJ`!(WZ&f(I%-eG9j9gjuhU|P<48|WRhsM ztywFztrb1m(Gis7tHxJ4j{4k08TL@gNb0d+AVD*-`gyQjh>o&J5<1p;RBOadxYoFv zkjdz46Mb(B>aa%QL|$-`@z`f1nj~$nQzZkdpD-Dr9Ud4$dZx(KEkXdzn4RR+aO6(J z?D0FH(^0(GSINzq+L}8Uzy6*&eZn;OXWD+b>C-0aA`s>bpE*{hoH4?PYlaIEZkD8W$_Dqf`l9;PdT;H2=Pdc zxokk`K+~-o5b}mPAMOC=lHi*=<&HXB1Z>#JrBEU{k&t;ae0)+7o<7z9=@MxK#1|rBn3m z<;tq2hF2xxo$2K+s9w^0D55LlHG?bQn~&<&&>NC2Y(dCw4}7=Syi|X^YmCwsBj6RV zuCH8lx(=n|o8z73Qm+}{&>^A#6skj(pF$zWZDpkSbx%Ad$W6GU{TszFkW~&0*9CZng?4ve|+&N=2)b%S?8ZiG9AjRQ;6w3!v z3>ygRkn0ekXFZkDRiZ3NE8_dAc$CFY!h~{k#{6syV*l`et;4N5aKPg57A1*eBuHgC z`oQSRF!X^-;9R1|=LU68i1tg5X>}aR4=S`m9g0l3(L*q ztcRG!Il47qGV(O7N?~V=od7B)W}}TOMI{?mh|2Mmp%P3*D4VH-*i^GBA-CBEQwdA5 zK_x6Xwi1?vUkQutRYK&L+{BEQpx+_|>xK*LitzRkc72 zwrM5c7TrS8QWb)of+Bc`=sRmw4k6JHd5+u;Ppfn_wSNf&#b(Q=cn!*@B>3_v=Ag<}4w=eFk}MEKvKCcc0;)^pAKQ*-fpOlzryOhxf$*n&wEBYs8aN%xGdKBLZu@VR6;L4x0pQYhSd!g3Kzj{Pj)KDnh z>WGp7Ls+By61Jab!ejD{2A5r0@kBDVe3ZlH zSncv_D-&rB@sO2v!{Vtn1Xu;eiIkDRn39`|$4~U{*&VepY5@gWz!OozjdDxqN+VfI zg^dL5(&3hs)d@vDuz1z|U;ZvZyhFQZLD6oviW4&0iL13dJRfWx0i(sLLH8ybU3S-X znWUq-EUV9ICRjACxcE#plgU)G{7msM3@AdJwUlEQV%ZCQNdX^Mo=^6(1XV88(Uq3^ zwaX+7%Wo07Q$#gA0RLm$5)t+a4c-$D#F;I&q#=~KVOk|4W?!s;+?0`qNYcURjd{a- zo)DQ0Z^RH}XnSqXBt>7L-c#1y0cFc@=*-u%v^%MOF-0R;ROOK`rzo{NIA}dKV8&QO zl1fzAQ@fx#N*6R&<$~xbyk8tHGl%RFJDF2}6Opx63ESXyRUtQ^IVpkSri9aHUP`3dDUsr)#52q;CerMbNU>A)wW@ezy)e()PN>;j z%bnOP%dd%K<-STkSn&dF10e78-h|?moG@td3E46aLig&{i7$%NC@q!^h=q<$J&n^8 zE0}8&lMuN>?<&rNoj_W}vSs)Z%v!u)4i38Vf+QR57ws0sl*Z9Iz?$JGOp_}(v6M~1 zz_{wvsXTRdI9k0*P0*Vq4$pP|orkiXTh0Fl?KoQKA z7Msbyg$9XqkVg48%-YY@SO7nb7o~S)e27FsP8O&+CA?(w-N}~IdyJ#FjS(vNe#ez5CP#I=n~-#!mmqqc3#szSG)CnK)2(U3 z@ha-MEJ^UkGDUaFuBdM571=BQ0-Qi3!4tFsK}sS538`E$lSCs1G~9jaEaLGv__#yO zl{DWrP?578nK8Kw_0ctl%}L@jhK^g^?PYkf+y#a8df9}7jJUmuH{`xDJPXPwK+s`U z?Pf0MqOg6iG0Jj_r8z7e6W~NWo!KyD5|XkDFS4y2VWy>8_oAd}iAsfTwis#o)cV_5 zc`)A;JycS(TFG^`dv*e4g(zaR+?SqPPo9q4!jwd+23oC%++eQCwTEKz3Q|m78wrzZ z{|da(%IUU}<8@fUh*_!*;XsV1cN3a4c94V|6H+x%S3KIc7_@~e6My)$%c#$%|?)MlhRVH%n9w;~XX*^Ut8WY@u{ z6oirL;QLz+nBEbBb*En-Br>jT&AVO*RD9v&T#3g}mA_85o979PMo-r7fT$r$x zg;N?nOrKqN^z(iSs+ttb!tEV1x$g#3qv$u^5ZW7c3EO*M^cw zj)wT1{B&D*Rkl!x6rY!?Or4s|whwj#;Rq+L4Pf&akBQ;mjxvZ)N?nPBw^ER`Boc#B zUPE!e-mW-Nl5LWxj0VCDbLJFF@@k}CvRrAbL02%fKt!-Xxro#tiw9yJCY}qTCIPp~ zP$i}q4oZP>RdOTr1v0fhu!V%Yr<|jhOL@vl1s82Kyw42KoOzj7$Vkx<~HfGZEiXq*Cw+@k> zNTun9h%k=D&1FzpBw70MO!Zy)#yV{v-8gSn!z8zciYEPh08P4*>4hSajmk#E23tgs zV_>~02)1s@ey{9RT+D@Xyz=mon6c_ZLbu~8X|G%&tV?%p#`^oXnnd?;360&yReZYr zl8~&87fqf6--mU>**UUHyqttgXjl~Ou3XO3x^Ei5M4N4Mx?|C`dGJEyA}m}!cp`?@ASuuD{OuHUayipjz$%W~=P{%*WGQ^&bU zcDy;mNky^)PsBTm$woOLvo;O~@X}3OF!7>+Qn!CEGqL$x=u zX#(r34GW$%*jAzXuHx*h;&fA$0M18E$wxt@a=CGATduH)jdu~gy=QiFj1)0yDHOw~mlQGg) z1&`A#9u?x<3v!qgYNk$(EGXUj$H)`|Pk!jD<4loK8c3YAV(ebf#ei&`BT)!~%UFV- zGwm(t%;+iTjBbH$pTbIT?NeBkE=p^iN1|NDI|~$X3X87_bI^+BC{ps3N)B4NgPXu) zj8)LnGyy&?wO)*uV;Z1r9ja2bsK9OCaHpJGM0x&$u?fR)kCo{B#MijoQ7KD+8N+4H zz{t%T#TSS1n=+BKQS-s9v3J64bOOaHnR9N*;-#Eha%H@8OO^oBGP0cL*HSyW6k&`; zGT7OtWZ~Eh%W@1=d#eK_;ZF|@qhT|HO*-e{teOIQFlx8X_~;Cfm}{qjWig><&i<$r zSWRYjk~TA8x)~G~E@AZ6JV@rIfc5YvwGE6t3 zY^K9dc3QXbWCqcSG!5T{s6^wA>g6aMm69pH6iDmzZ@sq$ zArilGit5%5$!sxeBjB`Pp^7(7cHp@CEQ3e;wQ6RBT*GN3Wy;=2sMcS>FT$Y>!GJ^yveKmc3wvxN zG(eWB%iDWrQWuJ4Z=hK$+Yb^aVHHT_lPV0REIN0#M6!nsoQCTb1E-Q_bqYG}Y1P^{ zDOE$;jSrxXRN+SI7%&lRf_CNmdu@9isCf3ZiB?^0z`^R$PL-xh+kMsG>wc?Ul#v^^ ztX-PxzTM7{?wrNuAZZq^-pLk|xHA%-ae#YUFinGOy-q7+eKYa9VtS@(0BKZOIDLcV zf@?%Nszq@_eh$C)Pn4(xdJAyrAWx+m+tBVRfm8BazEbJMu^(Uf@~%h|$*R@7+Rdg* zjfCYpYHJ!HCh}NSy?7BR$vi{cR|xlVCDRa6A9DKHp?a=Mwq$adX>uqY5k)f#CfV<| z7@#3BQ>2c8mdYJ&EMCeS#*%?$9p3Tn4cwNHvJJPH)YMa5!dI)vYsAb>o~Vd;gw9-6 ziz1H6=+t7SR4l<(A|3opO2KxuL?&4{hw7!1XV9*7Z;L1m9Y4L=NG1-OctQj>CB+pB z@QDRkV~}htNtk~RPA)w!F|w*Vn_R2zkcHEoG_7WeFC8GYO)EJ$gh#5Q(pr1Xf~`J8 z!pA;-Xkp}lD;Y~ z4uj@#0EHB_8HO)bNy@{M-mi1CfW@VKu1yLe*QfPaJs2FxK!h`EGjS#5G57STYx5i! zhn==C(ua{?ey7G{*OqZ%A-th$ab{}nwsyi`^3r3b%hE%#*GF)YrYsM>nzJSniC(-^ zMq~1U1V=e?1W)sRj)AdHHlW?(Cynaxi(EbFfJm~?=7ijuSE@QJATw3dec2)1W+VnM zh&ewL(aMdRN~GtQOb)uM<^Bq_Y@M&_2ZJc3J9lc3n^Ve0l4hR6m9Sp!C|fUCpnfsj z2|Ge6oJdFo5=qd#ou9y!I4O5mgh2f?A5tNrR_C5fc`p68T{t7@> zKYa})JMDlV(#}PX9Hgu@tl}L72Dtk($Q%o1?M#mFXReN=#6@VjPiqQ(zfJQ5ZP&qf!6E~RC`C36aI~GNY(7>EA zpR=TuREa@O}OIL+N#nWdy?XwFW7r0if?cHo4pIorw7&DoY~Y|iPjDdx;37;L5G z;LDp23_`-i^IV)^`5bQE<@66Zmiy}+r^Db+ud4{++>gj(nK9c2r53 zsG^1PylIRj;dbv-&ybdlrF1_xxN;31B%wiIh%NWmJIizRrlF_{ewVDE(GTIFO1Mdu zR?D1;B>@YZMlx$|XRMdO4Jr#uEjH^KJYUvVaHpQK0`BGsG=QiWY(~G7`0G*sZFrWydXwM`17q=(O6Q&EAJl4?wPqA{sy1}Ny5)N-mNN@~ZL zH)=S1gC-t9x8h@>V#)VEX=1durpbUF_>9z|ya5!IAZsOxna$e10puE?y!G zhr#>dhRB|RdAvzx!U(aYW#oL#FhYE}itTuHXc~~@ve`>kgG}wwL)K9R57l=x$`n{| zR?;sBE5;Pc$f5ryPxUp%c7z+iJCc40;IXY@2ksie9m;v|T@ZP5Ex;GyO6N;?#qve` z@`$LaSA>L`>!|AJv}iiP;mVURl5a(v6u^MPE_l}$Mp4yJmdN1psk2be7kl*xYV%+y zzma@Dt&g~C!Jw&Q+;dP;@4vWwxP5MKI98RGb8m25W@88{-Y zdvat3V5b;^XGS8|YGFU(H?`5`5LJ7%{erP=%nk*MdNVubAKn z0rn->KC8q2)_`)XQ?hc>63IMT7SIw(>wc_|*TYoZmI~+ZDsLY*!pm}K_J-qkU>FU?d4CTc0@vvW7#ThH^zKL_PtSWeqgrIE8LNE!p zjBtRIyWnD$lj_f*0@@R~=$g)GKW%mdxgkqx!p#pkv|ye!8Rw6qrkmO@lQ(~iYFR}< zjGzXJO_>2fNtJ-ErVB{fT*p)V1}wgVrA<$uM0|qAvyiIT@Jeo77fMkVGm0<|+rGYl zTMtX3A=A^omDI0OXAuH>(A(yVZsL!)9N)1)M}%uaM}#S)RSK?{wMs9XRS^$kc%87b zNVq&c5n#{>m&JBmgVa?D5G%`Jx`Km{VcblivnamURt?A%$`SE!9KNpswR?xIG2M!J zA=g+vsR0H2;>v5ZlF~2*o`)x&im+<5&70Luifn^i#VFG-FCoz&2XG_et+7RX*Bvok!se?;CHxk)GT`yqM7*e^I$jG3 z>CTqKB_cB9M8_XSGJRfUguM_8n+e1bLZe6<2+^Jy@XGg%pHV{<@rr-3zANW}n1{H>8#ADpd(X(O+H z*vRS!KWD{pOi^{XD9_AHJ)y*X){DUBuJ#SB<&x{i~km*~|( zH}uj%73TXzeJ)xk#}>uucUQ4$M_qi85~wu2T&cQ(CazZte9&HlXqf>sN!Pi`LRQ?# zmn*fA_b}lb=zMPx-b0y>#~sXfI?m{pzE)%Hs)4v)fYfCmvkt(XQ|Yf(@Kr=^bo2PG z*-(K-JaWcY*bq(UHw$u8M&yJg%FAKOl<6E#Whg4b4RACSz7Y5N2I2RMke!>i5rCs+ zu;C$&xYA3CM3s$DZy6$eXdtQCl&jtOQgMMi?>;Cg2p#sr=gH|=Ry(aouqjNfj#gT( z!m7VK2hJ;4TkJ`>JqIc>AVUmmKAsS-dYX-I3?dU4hiE?(H1s@;S`7Je0}>oOIUbVK ziZ2cvVDYfTjwaVbL`f1Z{^S#lM(aE!pNkS38&R+TZOH&%8QDn;Zd1X zJT*6Kgr!B&a5R4)49474ZI0*%Z`DOrecYR7d>G0I*@#WQhEScWE)k^%eY}Zh0S=`k*4K$f_(wE_?ARN zre8i741J%1M6MB#-f$>E0k4KgWPssdAd8{t&W0Py^gE*=DVeeU7Jw5`&4dV5ytD# zy@r&=B)cTKwVhR|l?hX0l0#aJ)i#V|H^?6LKQry!(4sNbcTRA!8enByWxGNH@jWfM z8Tg7q30S`BHlQ}CSiZ4Z3=9o0XEf^Vu<49*FfM1q^a^Y^en|xjf?cT@0*}uR7)*9> zNj{$!GJJX1{K~=id48yk%_LnK+wk)w$x@;Wvi#P6YVm97nt@wqbr{}_T#7YUqe>5$ zHnm1N5`k(>>f-cuRUKPaX6Z`8`5U--S1b@XL+dAe&)6u_FR%%E;I4gVe!dmkGfZz4 zX*gVQ4AU!%;V=bJ+Y!W@Ea>mRmm{QtV6h7!1ZcxTzEAlBhCdhX*s;0fh_{mWo`NED zUfTMS7Nm29LSBE6nV{tg#e7m&K%p$_-4&6Aq}Y#aP=;L;4VUxE(nvi?aX@#rZs^%} zgypm%h)y|B&Xhq!MBrln&LUn54V%tgxw5!U0L_Rp#mz~Em&c=V$-`qU`nQ^)n&0}q z75z=0meX`gK6#r+q^D`99KDMM^P_jr;BWj2Mt|T7N)ve@P33_`*pjc6MuSX=<}fjS)>jm|s?2e7A*M`h7Wi}_Jt zwY)M3&&dev+gAq?eYrw6AnKZ#l7g&YIP&VlWi2l2?R?EF^rdKUJeU5Y6)QpXvabRm z$|SOd5o{rD^Q=_(dA|)WzW7htQv9Sz%Ho(bY%suSI~ioaNT0y*SvqT@h!hd^%xX$5 zax_U{Ix6)6K)}i#_NeV;jm+33Cq=e6iDvMPk0c}9juIJ(!sgq1;f^ zRz4s@4={@sMkz^zo8iQ_1M*C@VD{JHdKA`M8IIG8L|djS8snqPBpvMU7e=?`@Y)Rc zXt728gu$!aS&%RLIW+lUsY4XwyPZ~z?}`W`pO>Mc*%>M#%}|kahA<_VtuKPn1GIQ} zP7^_1JP>3N-67dys#IcZh7a-K|5}GzQy*w;oHiPsC}Ia*&r}AN44o$F!Dxvd#~wmF zwzO!EtW1c~ZMV#GggtvKo=PCJJ~3ryp-_UGo5~eY74u7+wnGHd}Y38#P-j~38kkOGSI7(hf7>a#KKS0cuV zHI_>7QZpjRF!|2qyWw0xAKz&iegeQSN!E!RoC7UZ#J!%vE3ii4$S^v0BrKgfyi{mX zJUfX#=s^oA^z4cySqmqMcZy=8;SXOOk_B@V^M`O4)Rm|p8-5eyo2I;w$*O6(Jg7{{ zlS-yb4>D6yT^T`S3hLw8%MhU-nOZQsJOvets^=PRiWCItcF%r5dg0!< zzIpIrjQjyNaP-4+2Csi}NFdhHS5abMAL67jPEut;O~F|>)T~U;*!7V^hS_HCB$E<4n6gH1tx~|7V!sMhyiOd_>>18CaV=F4MMXmPz79W z2(77FSK13Tc+jc08;;!=lcYr10FnO|M8M@$Akn zru2lW6BCl1*oPLP4mPDZ>8o9|+)_}}M4zp+8>0JLX9ewo3&R$0Ke@T^{bix0GP|QT zM$JH>4yH5Pv-*Zos_Kn0()bwXRAwqtiOU@1UnN*5)mp^gT`l6l25HXKTAqBIt(;7) zvx`PSwL!aNVZ<&`*|R2trQl@J%|er{EHsg3(TnE@I}3B*1X2s;sn-(nZ|J4v`C@S; ze#@1CzVnfgl*=a+1FSqf^fl;wM1T|m-v@-9IbFQuV26-bTruc5EE)h8vc*1;6S#Bn zv$ve@gv&_VtNAJ+KqF~85mMy}Tev+#9m+Uh3qu{dtBtQJ6s;jSc^A^fev5h8!{6T>nNrK>m(g0q^6 z?W_M*lOvQjIn!*ly=$GKoaxObQ%y3J(*(TR5-(lelf;d2Z4hBDuqaCGyF9Q3ltq!X4Pr&Kl#7e|JIhyL2ja8@}X z!9>1H%cdvxCJj752Va&_5kY}zN0N!4h$4vR=(A5KZbI^tp znYcAd-WilGF~M}TQNfFyth!flvB}gOwzr5JRWq)pO`+tAg7(i`U$N9L-?cT2lX(G2&*+2!B~&$&fp~{gC`{r` ziJY`G2zEHBETfbtiIXPDafSrL5L-3m`RcHYTjmU;6#D|ZcU-7U0d#%EKLp8)gn8Doq|XG%2dJo?;j2)L3n+{~)t~|t%et6NTLOD4WVscB_eD; ztEaD`!n~a<+Pj%oRyiQY1LZ^Z~$R=`Pc1xekh6^ON6+g+ekyPOu4)LIT-^&?Tew zO2kNO5hBg9UWMC#txPG!GFXd2@hnDC35#rFx`_I>gJ;M#njupxLv)Z#3v>1b2U9)1 zm8r)~%bjZnn!D!nxoa-Tz0hIohuRAzo4hE|$wKE$G>FogY-OQ|Gz$}DYcpwxtD&1{ z=z7R+T4+i(h?GbWk*o?Ld<6OJW~s|-WvPiI%W`7-B1`g{W=Y8=OG+eJ;v7dC6pW-I zTcl}pO~Y$ss3#=9DKsS;Xi6l|NTv!Rzuhc#X{; zB?$&$Il~;A5<#};dJwgUB#T5XWAS|^=Vwww!NoBglq~+1&siZq1p*Of4> zZs?{QKp!LwI8JsM0YJX)(Oa)-vm>HQe*&oERDbGA2R+qvzrFS5t(p3T!i5 z^%N8gj5NF4D6}BP%8H0qLxY;dTSbEWEx|%&%mz(>Toc`!|1csD~cpT z;Zwx0z(5mSn|Qf_N^-)0fPTJhY7X&vOr}4>KRK(;2)z(7tnpGl)G)qd&jl_nH(gWQLRwUfD8j#wvfDvWykSo+7;6WV{Lz?AaPntmdxIh5J=G1xtq1hh?b_Bi98VToXi* zpG;;MCQW7;B4zmI=y4lrnM%8+NqK1o>d5$JN(C%qbr=I_)G}O}78took&IxJSt$}% zZ!^+T*k(u5@O{FPpgn^!(u}<%Iv<>w(f<`!WweOb>mg!^cY#B!NB@M0ObMSS6TjhO zFYub6Hu})6de~3~gVd|k_~tB4A^SU}V8xQhdK>1E!o=7vtnlDzOIT>pf~((2$&sLn zo}__YdbpQKKaHiIkHKfIAXt)o7lPT_qP^G`O`rAoX%PDAvNXP0gIjF*!5X~Q0v`*3 z)u2EP{Fj7FptpczIi-8W@ELIqPG7ldexLnHG8Dfh;VCXa;frgxHC( zNT3Qa&ybzW@{~!%seZlD(@FyqYj(cDZQuw z9g*SwcJ0Py6NlmB84Esb zO^YLDw#u7PtHs*@AQuHAzAR5{L;SS+hu+r*mo6MCPPWYSMj)Dx$<@c;COe1WPh<5K zD$LB(h>_R<`d!g?la@CQJ8?`2$x7)>^3;J107~R=xK}0tjjaZ+q;5pg)K^|9W-2Jh z5#JA(CU!0`L;Jxa(`vg<&S~|M50@t#J1KCb+NEUFWKMQ9SIwM^8S!MhJM%qm$l`KI zhNA9jxxZrPrEINXY25Lb&A}-RFJs0{yCn5;M_ImcBg&7#5eOEV?PAohq9tlorbnie z+8XJIqNLDh#Aqt>PgbAqkm&M#|L#f{D@$e25oAz8bT+3el|IXrouNU-WK!##5n zL}!LY3nm;tD8rsExDt8|O`(hiU17sWGcm+ug&=#gHe#V@j%22sBAa4j4m>l*@Jwvr zB#w#M3Fvx)FKe2K+4)c@&%{{K#wLbImUTA=Uutm8 zD_kjVrVFxgNjMV}CyEQfcQ|_>6e)j`V3ro?fa^YB3!ezVZ4TDlQssqYGygC&IPIns z;S8MKS~7=WCEx(1f;d6aiLyrVzqo>Gp0OY zq%>c;?qTQ_6g-M3XU4d=fa6j9u#W91bj()OVAxK17ztWahV9~uM;T=+CMtk*lI~Q2kQK1NjRbl&a-DD*k|V}~IWiOv?ldiSV8k3QwSgDk zAVxu2%V*l9@c9JZXHr}deIZcEZ}En_P`RMlhzSYL8ah%yf~`vYvKgZ-gp1Q${qjtb z2C3k*YmT72cabHE3$>sN7vZcPjB)L{bBa=7c09DAk{gdm?&_LHHF_9(6s93t#Nfwl08@J-HMAwx4!4NQAp|p{&Dx$x5 zeneDEUC!WqBbdTUN@pcYArpOB;3_n+m$2*xyS@sM&T}wIyZ7c(h4xbfrY1F?ZxtVlDsDN#Ick~q>&&e2u^jM4xH$odRZ?WiPgRbA5ySpObU;S>W#t{RA12QA! zS8i}azR4HQq;LHR5 zz;zrR1JV7-a=mhcP;MMLj@M$5PGiw&@1YFYXKW8GOW;dUN}5da_IR2^wa^X6`r!F= zc#%m}mS!xMm0iWEURV0e5-5wyovAxCFFYzk-gXnp)mdt8gM^&kR5GbLCoj8PMv@@F z*BAD=TZXHAXA#=gbRot<`XAV}fTv!iuGd#&_WD|p4U?Y%utGGb5`PZei? zgwCm~3+#<1C@hJhEOy?K!O=*yku4TuaNq^LaFJUaq9B9=@eDPglg(yWuq6*+M{!t2 ze)?*s6mKSC115zqNz2vle5trVo;(|X521>F_;7>E1|GO}%2cbPwUn!{J}S?FeJr(Y zla!3O6;T@ENS!A2*skJeQrcJ|A%5eKprZ5Qb&MPtY6r(Aw)m1%E+Fg~l03!!pKXN# zIicfEHvva;3vc<dQBqor#6vnc5(deO zP-!myU`ba%4A(9_BS0`2E`v=%nNCeqdMe=OPPt6(YLw@5)=WQF%}LMEG67Xm^4dMb zXL(FV#)ozUm=f3$c0rQ6in)alx$}Uq6N~rw4Oq0~E~-`Ngz2rb9BUd#k}Zvw>ENXJ z;(M8;)I_WaNEW0?+A|=IPB8!w5e_C0?(FP|kO)(n= zZ~{i;Zf!Rq(S)n;^&II?EwYsZEd-?XVo8|NEgAf_@}Mz(knb=-WM$GeYJW(_(NLlh)9Rfx2Iwi9L?(45%zWQUXw`$H^6MdwlPhJinL#Xn zka1C31glccsS>ANEH_b@%TDKzTDys8#gPX~03F_^z{egR8 zc0Pto3S(%r6oLqgaV9xX-PAy`64R$dRe6v^Wz=)>{$k&OOqWAVXA>SA{-C7XEu_?9 znpY>qoKK07pxI!;nS)Kmlw7aMP+3WtO;1ue+fp){L(Gp|iJl z$6?}s-xwkP>;5}j5!%L#Qhyz`TIX?L%Y_?`S+?>@EiJ3G$p7uoS!nO?-eQ*e*|IzQ zagzR_{<}xZI(zO=#G|rXv})D{@W-9-|BDqNg#Yf*GW>caH(HTfR)as5!~bhJr0>x( z?D_!yyH3lh__JkIQ>m?5)?a63pez#fmX@_zHf_1Lf4!;2j%vA9?y3*ldgeC6_L)3w zisD=USp$AyG4TIeS|ah+I`D5S{xTRXd*BBsP|kb%S6b<_&!{{IwqU`67G2#vT3SR= zdo)EcM@=HAk>llq1K30kJXzq#DxsWYa}+%Gp_;;ivA zC(qb#`pldtF>r(pcF8aGD7#6Rkg|m=O$uj>E3mK`2XdxHr zAL_qoAuFKe2h*aPLJ?ARX^dl#y{dIgE74il^1gvonNoV6c*i$8+E zWUf)0U!$4p9I*7ufD%|J@D|$;;~coltWOXpv~fm_9%7uU?t67P;zSk>yahMJINPn1 zdkJx33kTkkYX(QVK4Jyk>rQ!U6Tta`i<4`zjTo$*bJu);SS$Nj&9#%66(l|Bx@Qi2 z_=|wG3c>0dNtBm;Zo%}|%dQ@GFZS0}0cF;NNxAX)-j4oW2pdlwH@+#X(SA>A`BMI# zjR0#kjfJmMPLPjNnx2|~4$`-CUTDe&y^F9`t5c*|^5fS8;B$B(Jvk%xw|DK6JO2-` z*3eimU#=G>VQ?g=RQ9%F{N3M<`PcjC@77dE6AI#SPy%BB2dg`#J_oLI>K$00wG2vc zVF>EOAYF0pdv_z!+6D<08|C>^;B#P8kxpfrMM75YmV9Z~G)ZA#M zKI4L~Jo^nmSy!W|&&ekgyNmUSCAf?L-Xh%-UKyQUnmE3x-o>H+{nxc;5PiLY(Pz#Y z*NlcoF@9v^T_?Q%bwFR=pyN}mpywGP&VMz=!hMLkK{{%)b!A3@jd!1R z&z6AtMGJKnM5EFwo7K8TF{s6JoN?v>ir&Fo`Gjr7N;p3ApgvN@ptpM!n?oF46J z+J?>2jf@}PTyoWuIH%Z1Ax?tB2hdfS)apuxCOCv?{X;gi88d+caNzYo3n;yc?x2{vg|f+4^j#n|#$8&3QTZFy4% z8)`cPZl!F}mN~?4T)O%aMBFR|(Kg_$EzH^PGrf0yfcE^U_W8PlI8$7B(G(gpo?i6(wVp=5yQM*^ z%eBa4*v}_mS$ic{vllnG_7kkxRteU`YPDRQDNgkhu*`ZK#prR`7T4Ug6`*aMpv{2$ z2EosRryB?NLDgzA@m;@WaN8LF`tSYUTZ}9IZ4~a_a2@j`d=G#CW!5HRnU`I6)zcdS z&b9<+GREso=AUELz|7}24ZpMq*C*Q%oc$|!0%ED4$-`viQWwR&xSAT z0En#)V&YoTCgxe|%dHCD?tkfNTosIT(e?5&4LrL?W$fwY;IP}#p4uFAT=O}Nn;nnw zaEA`t%*yve<|PoDtC6AIL=X0;ivSMIp}Mh{^h8Dk^$Le=0x!KUlR%u08@`;50S?l@Kb^br}q8uQyiUkR#?yhN?tHEI}+1kTTDOvHf*t72$CO6&D>&o%bTo)FFfV0 zWw`zNO@#!$1=ge@Lc9WIWyf57@%uO{+m)gXNqccCvvoUrug5;Un}e44PcqnNZnsfP z)bsTBUVUX4AnxuWYM)5}Gq)atH)`{HpGLer96a=r;(4rQ@E9-I+I@nE)r_NfFq>F$ z8twnvqiFrDQ z-|)=Wr~YVxhnZ`C3!$#H`KF zn{&pSxHjJhEHIZ7Uj@N4o}EQ}UJu5)u3TAMW!)Su)5|t}V#K|;dob0*70*&Iuvz;7 zH`iNvhu+t4<}eLV^LXn`@|rzS>`)-x@$iiwBGPn%RA_pakDFCKxW!t=^?yz8(?xWe}UMBiC+)hgxn$ZO+t)a2MJTATj;>#cNl24g2>j zh19$TIbZdUnHxQXDEldtA*c&8PrmuFKC!adU!l-PH9o&ZaP9N2;q9Md`y4=!ny=F+ zW=6i*h|y2rjQl`_gg14nHo~u(6Z=m78my%=XeXC@uSc|l2%4%_lW5$|+s4zUK8!Pu zZzEc*G(vp5ZjMn8ZHp~m_~h%@Vh2+!bq@RUBXR4D)x&chz?r~zEF`!tHTeP{0n9%4 zV8)hlr6a}Ia)?I6ivY?Ub@*1&VB#711lIgDSX*Iw+edq?^UxMh&qEp1X6iw@ykd5} z9a79Cdw*os0voP3?LG7Woh+vK>?-LNnGrcpddda|FF{XQa1k9a13TFEV`{h3y75O? zyDk@tYr^ccW1_zoAG-GvJc-$@5#{GMrZS&nw~1L9%(%DhQH)0QXcYW_!WkGd$$Ly!!?%rh^n{%zTT_TFW{Q4{Kh>-085kRSxa#TpZ@^&V#)>+ZZ_iw-|W4g>6b?xHu5oS#|p*c zDwi3J+o65A{Nb%QUK~Nt3f*8fLsUa<#<<3Jz9V8sRTpz;YRRV<{h5IhzSI_s~j-&pO7LupJ z%vjvn?DblndKXWveNSVR#ck&FDtNpW$TU~>c@1|?;Pj(Dc^uCP9F>l$o6(+ZWUe!Z zzTe1>_YnR21E9;raWi%2&V9|>6V}c7!atARY$5u>AEhGNMs45+ z=?l4d_mq8J5T~Yp%wsxkDl;OZ*MHrx&LY(7u{#8Mf@nK5~D(YmDm71T^yq$i=_@w9cRI#`xDM4ytQLS=*Dt zn$#69MXXabR$X6Q)#Tipi4v`L%E(Vqn?L8U@a8Od2CbKF0%g`Fw^}==_VZ70wRRds z1#|6?zL+##W_>czsc-*#mnZN{$S){blcO3J;a=tIoy#%8eLBTyy2o>or#-*B@SzJ>RkJ!>@yy2t?--8A6bTLg>!s7I1(kEpMuNc ztWCS@^<-A_SB&2NbsUX;rE&Y~9YYxd=4P-DK5^kkcz)v79;R%|Cg;qIoj&-zZ(onv zJvTu#V~+_V*s$5P%lPYa&b@pI`s?#JT&}X2QMvfV*(3UvV*KJafC~5D7e=?`@TqTj zq^22P!;K8j{_*aoab!3@L4v~w<<3H`9gb4XCUB;^402A+^~tkdze#*Wa)E~?-%%xS z+4aa+%`w;h>236G7kYT&HZoJC&*1@>80>o&d{4w+FY?gTm1fQ0F?0RhCw@bW>K7+? zaI|AZwcVxfZ@Cct=_MZ8ifOw|F4}k0U@p-yF3e-$b;CkM|wWi*Tc)xS;{6kKedmc9${^j_~?m&P2dlxVLxYLl} zUU2X%=axJ>?<{LbV zEqaxMIAr@y%v|cnk6j|Z_5VvMrn5-Qu3IJ+x5m$QT{H}8`d1Fs0nDsfrY$cz@tkL{ zEwASAnr=((Ebijpy!Z^B#r>N?9D)n`PXX9VmIE2E^hfx&ghYfX17d6qpux#nmC32 z4;IyRG^Waf94|QC9(~wZccN~uV-Y>$%v?)uC*a9TM?Z)=0smB(FbKmTC2IuH$DegT zo+vtNtw%Fs^WkqE_4sfo!N1Z=pl1f23Nqs}9_X;wmVb(|+kdCy4?)ejS=fRNw_Jj= zq5q^KyJnWT%||mUlkc{#wj6gMu208pTGN~-?BDv=AEPI{A;GQAuh45OGPfraahZBX z@jm=+|3(`HtXdo}97=0uyv9*~7_}JpwQl0khs=_>{g&%C{L&{l%e|S$9ttaFPX8SI z+jrkZuXPKL+O!38^P`6jnf3zCk8b5LSBUj~pkd%({4uV zz1>Fne`LLDZu7T$(0cFS(O0PTZa(_I;zZ{{9(x5@@7C8ocrRM-ojmFavED;3I_4&{ z-n)3r=B<}mHSPP|-`<8_R^P2Kg*x%s8RK%Z&(*lmeDNFG-HoI9JqkxZg9#5*TMts3 zs4yvjDas({P~3^6gRWb9F`h`ecOd+xTXrA$OAZ&xj!Abd3`f8nXQjGaVgGZ9!SS+TGMR|?jxW4 z^A&tQ;6a7!RxYz8GqyD1Yj28?;30(pZzvZlMHAOq!Sk5&cJICsM}miW^c6Z1%vt4^ zZ{R%U5gvO5jRaqg?)eNyf=78&w}~^)#JPD)*UNjqhasuVA~?PuZU%KE)21)%{N-EL2h^uEDxBPF27}w9xT|;8hqyDdG0q+@t2h(7<8xuawmv@UNOFFqbGX$PtC&m+R@=E)?W1uAe9k3+e z7G+6RNY6cSYfIw{d>++<+x$whxbH`qo`9yztPDfd2e| z=$`sB*Pe^dE!_3cn{kAA!Nwo5?-sc`t$u#>Ax{ni%oiEVW_8TP5T0K7@f&dLeTl)t zcLn{=`LcRv?u)F2_uTg+?&-YDpf=x@++6wX(l#R`S9qT_$D_p@k4 zuTtb{>hwIjg$S+LWbA@N`Q7kW-$9gj6iV~EStFTIY|{JJy}B--ybCCu zVkfJa_TkPQly14^dE5(p&micRBaN?4AO{(1;m(VmTl(-tJTLk_!Ks$}RCWts zJXm4vA1ue{>(T_P$&(b^4#fkfJ+%x`K1fiS+=J%UB3In{!)I|V@*&*5CM_UW$8T?v zM#&zF9ekA3#yc)$nrV=Bz@0a};L58%z&-Vk0jJO*njf|h`>S)R!g(Pq4$Lp?|$K!gznA=Z(5PLz( zN>K|w;VwSofWre#-O|s*1dsgJ@1Dk(;7S^&2KRlCE}glRn34Cyi>|vJJx72Tf&B^>{i-Z$5S`oxGM zYSPtA%P{?QX-n}{967!K2t#xa9)t4r{Z4utQC3zcDh%69T^LJVwAZ$8qb09`C|x63 z$K>Ey?q)EUee&JT`Q6LdD_1ob@Ns;u$NB&xbB|$WTL+(V_}w^1Sx*hureh8dN9 zJM+rN(TA>XW7(C;JQi{L55K?iuWw-stznS*`kV4+Ol{_V?UESu5W9i`RZM7^zJ;VdXr zn_7o)WA+iHt6o8*bqx|s4Vt#>kxT@1y$zN;hEJ8Rhe$o}%uO>oW5%_0-+S^&9BR?AH_;H_!fb@v_A@&;GKD29@jR zt2ASI%*^1v(Zj{7SpR3xVAWqMmP^j(T$w!(gZ1c*Pd$fUGH>Kz*`JPP#o}f>m7C6g z7-u{i0~QQGt?fm+A(Rz?nN*MJLuuW%zbtwGdg^A{;IF94Ym0S;`HS^NHsF&&uQz# z_YS!SwKYuT?>o}0ZO_H)hd(;!1B?J}Zles*8E|gKv+LpCzZqvdU)6|? zK4l5&?rR#ubK6-_xV_pxZgu{vxL3OcqSWgZ_ztNlE8~3V;?DEMov&Zl7?pe#?sKUY zYL#-SHqye$2paIc4_>%*gXx`;njF$g{13*YrG_nJujSr<0$@ zuX?w0u)MHU=9+Q4X_L-dyaXeG+Z!}k6Az&_xjosaxv6YhIVkENw#ctvj(Nj7reb4Rc6rrT5s`PhtH=dx)+&v$h>KF7%xyZ(!KTL-W)* zB(+=i(IGEk?ZyziYS&Qoa;|n;7w0{Squy8s&Dlc9Ts!Utq6c4m?P0uuXlEPGfy&x$ z+#OZ-o-*fl9A9^_k-SFBip9+z?>yqxw{iaXO~isZ5Z+4F)I5vvkdJJ1!TmVf-c@1D z#dpI9NY;9AUka?f$?(tcOM%@GV|GVv48FJn2mGL4;nU4xLukmpU}sih56)WaA^cKc z_kr-;j-J^zxs!AcZxAlQlXQCwgx<6baVwn-PdxPwTd zELzc?2Bo4A)Nr+O*=itS+-eSkl?7ea`*LS+w#9a-00bUJ4 zH{?AuKQNJ5k6aB8Z{6-4tl{1aq7yR6j>pVMK00IR+c+bc%;0(9gCRkDc*}WjBI36Q zqS^;sK|0;wfZc@EOkogLgibfEmc`4l`!IOT>y$gmGW_k?law>K#aLOzu8yCnDzd5JKwtn*KRX3 zlDwS(_XbM+G+duudrTx_t@jr_i8HNzZ8YzatE^t1n?KIn_;K+L^h_JeG5O3$%r5mC ztNc~Gqdm(;f_PnXu|aOGx?26mi%^66*;ro3%33e(rh%p1C%uo~=k2esAaq}@*7ehh zWcVSSEGsT|EAHW!-}(T4g>!(7D~=u~V;%v`ZktRihC9CbF?x{$6{>vpM^0s%!eVBx z{de5-8t(lbq_B#8LbLW0g+o%Sqs~5GyqxrHg_QD~d}b_e^o}Qw7o+#V6pJhfn$jY( zAN=ImYrKlHuJ5cAi}^`kq25z&ZZ*aD;@g*B@)G*uLsYHG@N&IBxMa3_CT=%&i&fqm z21ti0BssU2?p&u)Mamd@m*}GoNB3B9`-Ss z+CAge*01cb{4QKuAExSq4x=fXW2~XR-VV>B&hiAqpSWdi9p=Q#B}c#U0G@bhr%26? zUW_j~ultDy(HC`4oaVIQIb^|#kHKYAUlyGvR3oI5{9b1c;`FtuyN&CGc|-I5 z3^RK>{`>>Q-2rob#HOR`+@9;X&tCf9VNk<)K3?qU=a$lt%7JduJ zAdk&h@ z!Lnm9(WA|NarS>P_HmSh_boQDtbMSLNc}bkXI$EQZ zhvKesE`IskDo2Z1yiX%TazA18Ruk~V9txUaajJN=*c z;J9^cg5rHTofU^$ov*j=cyV&_IECYwU3P0=JZx>7%f&5^KhYST(Pga(x4Qi0>i55d zzTtQqWhgu>=uzy&Co8nB zJlwI}q_^PiJR5QSDdI(>Q(PR~VogR5Im|WhJNj|FaqLtNbBHX3iB;Xd$8Zs=`Z>jH z-Y+sXx$d9Ox);CoI87nJ8N+6*p6Sywo;u}W?9;!{2=KAC-rXQj+5HD&huhutw;Rw7 zPbXOJA|a~}=6uJ~7e)7>?>K|t;1_}Xc0*=F=B&We+uipm?%e;n6lMXHfXI0(0cR z&p5dMMciXPHw}FV&a88L+sEJi`==52yoR{V)tB4b{_zC|EyTU;-=yKX&N6$iW-R>A zKYrz5ych2LG}NXoi@S|(mD|7g45D7p0JTXCGi!jKF1!EvVSsuegX$_bYwzVw$-Q*P zwYTHAa1n#&sWp3RG9%FshQE0eB3{fR+A7VA$n}=1OJ}@>z2y>(XvVzsk99KZma*Ga z9=zmfw4h7Va6JWQMrAB$edtzPDO~2`!L=Gq%_^7~ zS}^*m$8hHKJ0EQbd@Xmscvt5?p2qvdfA1rv9TCrLwH$8iu`};Q+{+u`HrZP^A79vU z($nbU|B!;~8Ey93GPC^u?E2!%hAxYIZNuyb>hz9eDHGH-FPnIN`m1Bld{%^8>`lu zQhEzVj;nkm0Bky*#H^$5JYrfg>nz^pVO)9sl_EJ|tIRk|Y9}3S49A!sg zW=EHoH+>7Enb%n;&3g{cN4@p6cW*>n{HKl8Z2w}$v5EUHcnYIc|FV&q?_rDv|L^Dx zA4U!S+s10Tk8wAyT=Mcd;*OI4D69poaJI(2nk~CkFsp+{);ez?-t2Nc#j&s6$&SO! zBk#C%{zK?*Z?JI66?(ibbKhk~kZ-Sl@?wns-ss}sJBOXcI^6b?Z|e3mMu*$qeAE)u z;Y}2?$+|TqR^z@?*z~GR z#div~dT92AdYQ499kP+9t}Aw0ZlhRmFH5eyT&~lt?aX@QJmIa+{^|qtgtt>PxXPs5 z+%1cYC+xj^rnvp^4hN~}+vpfic>6&IK7^idA;sz|ca|I%mASnbtm}St#bU&|)5C%< zOvrLKD;Bp;Flob0Z^PB@T^^P&{XTeXy9q?j@^`yz7jYutZV$0on$rXpH*ec&pU(Sn z-gb|Ng%!iQwg_Nm>*o;fKlso)5b<6f(XQf@b!#4HGrPQgi@3+`ejl;9n?af0clwwkmt*gHz{4sPx{0}D?R{Lmo@}2k?#z48 z!?Kk)6j(nycAvYjUJvo8Pt!z4K!p){64ZXPq`j+@Ab)5XYZnwE>1-p>N!Mz%O;OtAAH6`9C{zU(O#3q%(*gVuV+21 z72`L*|L-jyM?F60<5|}mW*&c-HRG1w`_@CaW_;elvWD->*2u*X4*LGgyAkIFieq1d zogIgXbH06M%RLz9e9^+G+Lyp&M&iz#{Cd~>m*JU{mpr6gU$N8=ODpS|@64Fop4%fQ zj(Gz2++L=b^4*LkV=~+cw#Uvq=y{A`yuza8@?CHPLNhlsal7x&?l9sO+&g`h!4!Dj zgB@9W0k`*c!#BTmFYZFU=A(8%Y{;+bkhJFbQ?IxiTk~}v)tq-tf_y zj1h6Oh(Et}?9Djdy~(0A9VucWZh!bs?oPDUw|vAQi5GD*!EZ(T-hpH6+bNi~+sSOH zjDOofFTbssq0fEy&u;BsxcVcSYiV4Hrx;=<+k;`J`FY25^`0 zxcmY4%vQ ze|VSs@dS3nBI1`&u=!ns%T>L>I&*y)3wrd*Ri7UQ=rN1l+`NlB?f;`6JiiD}+kb(@ z>n{yueYtm+mXCV;eq7hCY~fdneRKhq*?KvoXtV3Z8(gb6NY<89W+ZNJcav4GdJXq> zSEWeeB2xILn^r8V#c(^I!;iW52HXK%%|fg76uX*=gE2dx+x-25rMN%7Iz>Xi)@($8 z@!zZMFiPy(t>I!h+pU>3$i#{sns)wk7{gi9!fMWca{DiZp6zeK_}5w#X9&C)XM??$ zzk3JT;MxLfr1%~X{Z_8Mx7;zCE-^A|kZG;Y`oAl7Db`VF>LuP4a+Bmi;R~Oky{~Iy zHGB4nsnx-^o+x(4*RzqDKaa%Bk3QaP)@^u3ZGDCH|Mhm}@iAWCAEzj)T18u`+ECis zYDoyHYS*gz(nV{jF(#8_$TDUUTeVt>qNP-6sj6C9s&=YMZ3#&PiNwAnV&7tkB_iZ^ z&y$(td7k^3k^8#O{Qj9g=AZX-?mhS1bIv{YTyE%uEfca8C#N>Zq_L~)q8RiB6tER( z+g2)FIG@&%q~C!;Qhj~Irc|{)<7Tn9pbV(H1K!BS7uTdymDRIqlC0(dPs=akcpS}B z6*Wg%?@&c`?!~$fsG_>6i=-1qT&5>Z}oQ4Ej;MD^{z zs(Y6r&KF&jp^;He)>(zUQD8OM2T92UXt|$16HhchKy%8`fW1r4{95VMP(wqD)L;4+ z*9jn5#gI<9Bw0;0i(Q4FX9MNN5%rN>l=H!Pirimv(T1_tG2OG~U?qK0^9Dw;wliW6 zd6~5|Jo%ACXI;NO+HE^!oolOEp;lW+sH=Tfq)n=WEgH{*pVYffhQcMb|OQwsZvr= zBFekG(R*+jt-!i^qI@n3jHk8A)V(yG_4G6YVh5B3eX*)3gR-FY)x5%1-}$#t^r;tN z%ZBa<=A~9RLV4c?9>_poaW2^ZTJA2rlh)*GYOc$o%Gx+&15DF9-yvQ@9WTNNzXTGvI|Mj#9qf zU(L+FSY*H)qEW4wx-^bPH2@H$XAwxaET)`tlfEh788DB4_-V}Mn>41)6k>qpg&Qty zA-?VbarO^2?h-K&5alBjG>dyfYwn;~Yz~ONn8oeEgSL`{Edb9qv$$+Z{o6!rsUo^t zrub$Szp0;eiHNTQqHks~Z$-ojn#ERt=!;q0_kFDLPSG2HCqIkG!&!LyYzBEatyM&r zRuNu@=;l?&vWKse&;O>5COei$vQm>;-66@^=veaOhh;iM!>?eP}9U!{ap@cWw4EU#8N_V(aml4~mh|X|-6TQjq7Lwl-MP)@bA2sc* zZd1)i2XADZ5(#sG#P3#Xxs4?5=#9%Mlo90k-1?bB?u5v0Gs_u0VKV3q)gbo2Y#Qs% z-pD=}Yv;&5`$^)rym6(+8s(K2g_tua3;VX4YzcR(v&0HQqzM)KoFY;e6-j=rB2t_9 zCO3)nj++!bzyO(0Ma#m|4foNm+?6Ns#z1%%LB3T^{Mfy;E58efI>i*{0q=1_?5`(C z!ft@aDWotF&7Obb<7a91{-+|!>j|2@+~&8Hn}ywZl8d1Bj|?XS@J@B40Il*7M?`vErzi-Ka}uIsCup_ups#NrQug|!ngpGmuW zj+h@pCbubxGr<~szvF6U7JEXbwBCTztcDdk<&u;iL81Yg1I`0iSB;CIb^mc8(+Ir* zkIP8;}53YB%kRM74iSaBk$4RWD0qS{k)NNgDmWw0*}00gN-LhVv{#6H`qpyYlQ?W z9(jL6_Nhm{{i%LgG}dNsWFL(6x0V$NG}Z&Waizx^c_m%G9k7d5lEp=~S_-^ZA9*EL z>PDRKdUm}vHc{W74WzrHH5gjW{~nibg+u(QEkPE!2XVzm=sH68Ul#E z7*kv1f7@tGLjg~IOwqe8U&hx?r?-V{ZlX_KzUXNWyF{6+fm(_I`!tF@Zhf#KnS78z zE?S5o(J)%&N%7AqckIG=l8;vTx$cfVq>2Ci9Gbnsfar_ad-*%tb+RW8!1K-QJ#L9ovNlc^F_L9% zd^3ADPljJ0*`j!ok7lpaveL@zMFXNQW^e7B`pViH0(kPXhib9E9=~`C)nX5I5vgR} z{fL70k#SLf6wzwenY5K?!&Ef)elABtyTY{z2bGsuhP!CPl#)LE<6^>cfhg)ka=Rm> znIm|Tk2Ev1Rl5|jE1v?QFEsO(-z;U{8wq&wnu%tw+5D*&Xjk}5Mf8nb>HEtFC7<{? zPx8_1^}R4Vk!EicAo^nVB3}Mk$wYktcm~WKs77zT&91zs`=vr`VWJkMtk^|!bxL&Q zp%c@O;$FKze&%Qw#~cy$uVWK)}Ud;FM$<9Hr7q{6xacy;s4$0+g{@8TKo zsw&9AcHi*B0jj_M+D$R$g-$?fo!2p)ND~T4ynz(fMHDlxi0z|{+{8kXuD!kR`~Z#r zsZ7s2y1_E3kixaY7UiI`xW^I#73=$ri^B$u-l8+aYBU3KmD!iPzdn=eTOH5v7pnj} z>%*uRVo!c3Tl?gL=s2THZ;wx#9i&{`6vTGBebOr(k+-gDbcV>^J%lVLGrC7vd4I+8 zbdEMvN7frq(eXulU;FdxkI>#XO~>MfRM-Zf%Ii;C`k$uC>+e;xaQ1ej)uAjN_NutU zY>Co6>L^S`{i*)i&|^3COPG$y%3T5N1}r+dh&s5~vsZ}v1Ev~qUmy_VAAjmu_l`fK z&cM`%nGE6aM&Gb!!;4qx8)g>u8??(v_#2vms_?8mt89{M5zms73!Hx3y)s(q8S%S|HOT6#O3o_ICC4bE_J@kZ2aHDO;J_|t z&d~TRc9GasRYRgHCQ#{IvP92{Fw13|fZh7y&kMd-D2r zitLxFIP#VlWm)5XSs6<@@t2E4VLhMp6xIn4iMD!mRt`n?%hV)YvQw0UI_{e%7t8Qt zoaJhchwxsMhx~^(D^@&5{=*7A&v0KI(LXv|@(9saKAbMOmo@|Iq0WJ{YqXEAf^-A@ zbHF}wpx0$$uYMR?Qf?G^Z>*cF^e0@SXX_m`VQYX+&EB|jwlOU|mz;k)8 zS^XX4xvW#u4EJ2n4eN6sUW}z1)_;2-gFs(=d_k-^EPcGfUGISlLVaOwAQ)jM53+2Z34{IA5!3g_q~V4HU~ zH|fHo4%pAvj@d@+?GI(kjXCmgU#%CogFM_AHJdy17L^j!2HI~NQfjYaRV3fOjk`3a z(Gl_tc5pxa?|P0re{#q!cLCHDUGnkqR6h%r1R-?mJ;XUd1_%HDjU+0CzFSy zla|D5S(5PylB!vW0Ht$df|ew$k>~}Oj(xKZP`tX!#q!llva9QU97CK$HOB`p$u`{{ zb&_Jp-5QSZFUj7Sk#>->;Cu8OAHF2}+R`_bSAX}anUb%Bpq$W^UkCxZ_% zJAzDhvqP$*8MvG3NNs(N_JIQ$w!Lu^llB27(UC=wefF57J#?mikYmxKL{d3zAX%9& zTkIvt4skT?V?@G|0hWKQyV=A#%(1jaMwEs0bFSk~9<7KY9E-*91FR9YXqhh0=&UsN z#(L#W@lnr2sm`Q`Id0u()#@s-PH`;l<1I$8GFL}s66-X_vPTY8Ed)^(%EJyl zTLEiI) z&JEN280$P@=^ktl=7H5#vtRL(wAwB}p6<~GLq>DZ@OO{WXkO%rnkT_Ur9-Q&i}j@P za_J?WrFkYol!Y=JkL~>HK8@sMj>R$n@?BR!1hJ^W!V45ZTtP%1>;h|BW@gaLW%4|! zcVJN+a@+9M$t2rVEsMFev;&x;Rm)CXD?#__d&!q~(5d`2ju#|lPmrcG*g06aQ*&L< zvP4D?a>41N0_x~i8X6^=0)Hv><>j1^j(O=KqM(EeM~J zN35G1%QnPl4H*;OP3d)bOV84V2*Pq94f$);zMEuAZtGbnL=Y!}EOhC1|HM*Mat9E3 zH&#?nP%XlVEsgH_F=93(YR#7@59y_Odc_RVmAiVL_Q`tT(L}7#>4^#}N6*r_%fc+= zdA%0dUdeOc<5>D9pG8Lz+2x_1|f53 z5BmVHOu=@QK@lBEodU-dFm(JfdeA@V*(cT2o)Re9Di85%F{jKvX_tNpdH* zQ|7HC$J02=;`0V-J=!$syoI8wQh;T=$MwYh##=}uALVEo*IZaKG;1eMeU(nLR$9*j zuDR%}A)CB&RD-)@Ny-48@jKhpAp!SjB+GI%jax20k|5@&HRzafYVnws72xvA4fncc zPk!M6$yScz8Sj_Z`D08Pd0mg|Sw8d2UujZKiG|DaM8o~^Ba1)VNhA4$p5+6-ynM%r z_lfnSp5+5yIXEIdi)O8Yp5-%Nx#XVn8RRQJ<&mgPrwiK?;GL&b`%yX5s_2oZPNo|{ zy#HUQ(*L{?Ao?aASlZ@Q<;HtuNHpGR&biooJL%}tdY%vBfu$wu-XYdAdX{WF04(&) zgqc^!Lw}ZIIZZkTMR-R*9?Ht*Utc8Is_1z>@X%||+jWTc)vACc=b7g{XRK` zR(4Imle7KEKOgk;cX>p6Nkel)%I|C_9=<-XQyyu5EsiE98OkagI2xHiF{g53PrpJym%RCUy>@W`MD$qF7+ds2K^i#z1G*5z2r{Sg{V)liE1kx2J1 zEvTgAg6eTZt?Oe1E2D2YrDCW)$I`kYMzG>9bl6R6x&gva3 z-w3(xI@T(-s-cc$m()fiSHGsGl-sF|IF>df6_pEV{Dy(M+Vs~otmrV+Mk=h0 z0l@nywyk{}c|WbxoJfac*B2B)9V=@+N8ZmHYLeY-V})EHQc{7Kcl7>i$|+cD4J(qB zjOjKU;W0!v2^}kjT&24UZ$g^M9L(y()x{U0`hji|&P^6Z%&%7;9)o!lBG_=0YG;OAwinW6@)3By0wGkatB;C!muiYT&+Vecw3^T~Sw(@`c zAo&g*cv`;OY#k;cUm&>kJ7j%kF5S89=z$m=VTlZ9mo=PDYmh0@5@n5&su>4$h`XL2 zb>EMDK_~tTLRcH@Vd`>!(HTWALXJ2*cE9pUAP%hKp8blkYP3(dv8) zaw8*5mT1QiwMh_OFGzpiubH@=^!II^D(g7`8@uMwm<;M2&;`;=KFbbNx@~ztQoh4; zweF1Yn4)a$$cP-}6~V4NO@HB2oCkchzL^PU=|0uFJdbJ*4A57kIh)_iO{OvJ2B?}~ zP+UgPf2n21CAqX;{twdltxMDrpj#a4=3n1IH!8aGOy(?dTePs8&A?oC82`-CMvU15 zGL5yi$hTY2v;1xH?cUSyb%pc7k|M8v&cM9WiI%~p;^W?RDsHPcE1%yU%^2X6yX%u_vS-Jx@VYxtj5x1-MUb;X0 zk%lF=*3tOYZ~Sg1jo-&=4rTjo8t1|gEnNEF<|G=wUV7H>D65PogKn??^xjzIjo#im zmR#-~S*|vRs~siF)ki}bYI8;zv&SOl_mc;w5VJ4Ov>OpcAz$sM&o*X|ul9)-rYSf& zOdSG?t^_3OQ{NTOCRzJ=;>t!gAnFe2Tj>xnO`e#N@dg^-_ty3~MdRDw6Vr&O1MK$p zo*A*t8Q1KUYwT`_ZmP%po_vZts{x+ALp}ll(l@*?_Y!r#v3Q~y7KfnjH=9DIWKj2; zATM+yq7k&NcFdm;M>=lx#FmUnP;b6L=iWI?z4?N@Fnwn=_tvYz_tET&( zVuZm&a9Yd}QZk^pvh>@Z-lVwF!3a@d7P~2kMbH+D)vms_EIeAs%l`Vuvf0!l%Bdo; zvgrt`MU4_2wdNo7p8y5C| zh}C2tBo%W49a(hg$Ga5AMC-mqpKvll?k+nTZzH*f=vZW6d?`2Dy(^b{kVCuoQ1`cZ z7;bvjOmnbqh_1bMa@l#(wP6a~$$H%&wH6(76cgY5dfgR@iHEC6yjqJ(1#H@g9rN!~ zW^Y6R%ca=TV;Bgs3R&GAxzv==K6TOjO&0cmnl0F7Vb_mM=IE%gaQQm*8EZTsbk}KHH#U2 zb>XBsnF^??Z}f0d4qz2nS$Es#3;->z$%kZMrWyCHGXi4 zJgzBvqVigw%3unw1oTGWhKR1Ivabj?)|^(rw6lhktboiEW{sfpKdG)dXnf!7bn(3M24f-75ouv1G8)g8d`hXA z1vYNef+wz!XE&WE>wOOuT6E1InU}u&-(iyZ2T$Yz6;pwQbqZA|-FxxTy;Pwz!xPyV zZMR3VCz*rD2~jo})h8Gsd*d{}J0$x|?h91GsN#F6z=p`aFJ#v>lKn?dWJ6^~wJtxD zX_Q8HJbxk-+9Z!EWR;p@ zkemB;Wbfn_>>H2Ndkd-k1 z&bL=-CCt;)v}r#du7s+y-^rtu@LQ3;z=)O59Gu1f+c`R`E&G!B!e3$vvId)@!=!fp zK(IECOiaw6wYi|^U*wauInkb-OKWqX_wV?BSesKD?K?(mbCLHiF=B0kOjqN#D_wb- z(SKLd)#0@8nhXGxLzbor<&Of2(<IqMT_IWU}0WyEcs`YU7ZF zEgo*opjlj^XBYUBM&+|m{Y%#5R}-lI<lR1nXiLkB1X>r)>Q7lJhiel+9 zmC^~%Hp*>wO_-ZTr&%jC)G+H1seA|W;(y&VMu{3$@g$S&M5iKr8tCV4vlBc^nm>o6|Hqs9S-yG{I`6iPs@8T{bc*r1FFsG zjAr=+l^rm8Ek3eoUC}3=XRglm5Vj1!-#wD?MKaY7#<;2Kvw2$tdxcCcSB}=s<#LOz_%UWIV(QF;5i(Br zqG>A0xC8L05+F=lpeC$E0pL7fSk$^p&oJgrH#5v?j)<1&AB|2re<>FeM|M4~fTF5% zkX{`qD!kqQa12F-@meCqgw|oM8at~cD3n#&>B_!DXA)J~)@ywBI>o~YUg)gCPo52` z9n4!+q>u&P<&7;XGuXR_ES~7j&lHE*K{{V`R!mX^@FGwE(imq9dQK|ECu98vN=aK4UwX0531iLK8o)67$X}~^7 zW{#1!-M`naUF6rNxW6N6n8_lo!RS@lE~SSj(rwLD6-io$zD|(G8_A6M09II$b$K-q8un^jO9%yf#6m=;nZN z$0<{k=4MAI855SOF{*+cWy9Y6ZBiCx8PeTUR>`E~rF@cm3!hr)2+>X!((;dAq-PVY z!yYZ7FHm)D21k?itWh5G^$%>>l*c@!rx_64qnUg2%(N>smZx1j_hBICx(lxi6mf1( zEOFM4(ayMNR6^o%Vp#(v?V+&nY5=i9)owi!Y3|Otc)qQg46;6djIv+nIGPbw8|B-c z4j-9J#Pe>VQdnL&@a1mwwDWsDo|IFQ_lNVhKR;3sc6>2h|=P#<; zJLEU>0cF-MxoE7Fmnq!rjAA#|^6Tf_SD)1v*2Gr>@Ei9XI+jd+<7JOzSqp>iQYNln zxSj4&UMZleuR4mZI+UB3J2Wthaub;a1Xt~6eg&p(3s$>m!gR3alMmfjx|dzW^nw$6 z87`{Aj33!Gi7FAVVXl)Mo9mCSRnCsEkvm|v|UDiH0!t9 zHrhk<8#=nnIrs6bH(CF#k`>CrbVFtxNxisS)NzvfCg$p9-RLo2`+4eaqTljBH*Ut! zZHrm|PCGz1AZ{1ZqarPlVR|=ARJV~A7S^@V723(~xL8!R&YlQx^~+P6W>Ff7P&TZI zjHkP%*;<<391HIPXt!%{bzLs)c6Z&Z{43P_QKuoaJ*8?XuLR_1Y5Z}gFb#RLR~Aj% zPTuT2EsfkhrJzG)0EKxdC-QNRGP@}!k_&jcG6WS`RAW%gS0VgZ62*M?d9o`TuR6Gr zV51oKlakNoP>lP4XBRlUDx~;GgE%v3#HL*h88godQ=R>i;iG)eg6tReP(G+wN$RHH zbVs)yYtoIVgGD_!s;n$?oqBK-FY0&XhdZj_5Y|56Nq+Rdzt2;h*dt!QLUjQ~g5Mle zVYYo~()l+SzeExE{1KJvV}x}x5Y#+W8N2B0>xyc4(~bPm(0q-yDTVO2AiGexb(oS1 zD&=it+(EZ$AdJw8|5iPjOj_}%H@3??Qye4-KI&`mS%V=bsINikqVieq2u;gx;Tb@> z8Bo5$S<=liMfeJhHYmrZsv!~n8su3lU6`i4TwYfDHS(SXhzGu^wC^IFv^=I|=~B9) znugAFHnxl2L!@$AlCBh6l!QEr4_5^%9>wE&l8-zJOMrblc@*UV&$k{$o9YSiuyi@QvLgkpB{t z5qF3DmuE!3#s~h(`t%<6$qGH|?OS~0zige>E}i_BD&E*W^j|t`IlQ0zm#RhO`^0}a z^NIB~>E?4q_zGin6P@6+Y}F;tk9|!w{%i8n^eTr*c)tfXuc}o)b(~H(p67XXN2HQ& zk|Bb^D#TFfBv_9@%`(`h#k2(e1D3deNGDy>UOxSv%ioP@E$8J$YUtKpTG&(9Ma;Q{| zBGT8#t3RJY`dZJ;p*yby2U$U(CcD{T4wpL30d}+cf)$zM@6=aO^+$%DF1w1(V<6az zrp6t+@6Y%RippmnquLIIXBgEM_M6poE7cah#(jg+5^4?SO6^4DM(0@BspaEoziQ}a zD!R)z=M`pwoXm*_HSSTSq>+|2z^2)@gh?O^`dhCmiPagYv6f^+|2&|(yN}OPx}i1E z(HvIR!&IdtqLLxI-mvGWYh>5`wX87P08mIQu9d(i+&m;Onerh4JW*EwBPt)#$C0DU zDzDWx)zer}irUnPvQU0HC%)M=itn1aS-K-*qwGxp7}e8*!cr?UcA$$*t=^<`1>FDn zCDW$d4{YvYM6({qjho@(MA7j?=hS)T9}-AYT4;ITVz4j`_;3lCH!`W(v!#Y+Ht_B< zI&WOPss4RBZ+sn4fuQ0m5X@sz_g07f7_*g%*(AVs^Ek21guOJ6Z)kZyJR|1O@4&oN zn#a}}ny=@v>y~25JiZC2Ku|;GG5K#tHqB!j71O_o@8)sI!OVR$k8QO)AfE6%0uQQx z!V9-4ns29~HOImUk0z=e>9wobE!yMTYj{97VH)zydQVxgg?zIPYMK`%6&_KL|Cu+Y zZzkn`I`T{)rYI3bQF~84cZs5?PA;OWKG|6BAKWjjTX%UH-7oCSxWk$@YN7a_tYfCS z=ZR8NFZs$elKFq>{jZbEZ+T(MMvkcVHe*S^R;s;y+Y6UXv!ui*!ppV~%A*Lci;nEN ze+LFyRJYKb_WwnHbAayBzvG1}dm{zaiH~o*?K-WZu9&Ms3QG#&oQ@ygy-l{_T}7z2YGfA7e6)>Zs9Qo}v=sMUCb6B+1#G**cAXPvjY#EUk9aN$6E%KuO=Z$QD zP9dp7I-Wd6Qg`>p)-PUhsew<{Ejni@ern@oKgRoj=gE&Kn9Gv>VX4IXkmJec?NO$*Z%P@ZTD)fg z&(+dsIK9@K|DXWd{0x{))P?`6^<8(5cu%!YE&mdTpPqxd>@?%`9hD#;vLDndW>bcc9c6Guqq6&ANVz_O?(DJf$TBi{fo&c0nmR ze1KKz3y{zD#h>ku_^~grabF;>Kgf$I*SYdx@?r*h;+gEx16c1(T?-KL*#+l4hbHG- zqWF1`hMhmN?lS{z*e<+cKsIP}_A%v#b(n@4VI7+9uLRq|q|Oh(DO!svU*^*O6|N!L zBiXQ$zhsP`1Z+~oD?78uCPjGT%Es-W7Pt8FnM#kgNDo{cQe2mSSN6@>)NPdgwtHZ5 z8?`VM?bPv)^*BN&v4gc#${NaKVPUMFB@x!S~;=*Ngo z4UsOR%JWd&(yE0^u2L;gl!nKNCO&UKTb}4pV>_{;^(;xx0A&f&o_OI9S-Bw^mMbI7 z`~p{pC)L&|I(sOillAnp)7*luQqM3RF5yK$XXj*mAO7XYvm7NTydv+2c{H ziB7%+WU)H+(UI&EhVF9OV_I&bn-{~qev3YM5FLNyS^smO##QpHN2tlJT!dE1glS-h ziH&n8eNI2s(#Q=|Vh5&XtT;rj(gwXD^IOBq4_Y!QM|$B>lV^ul$4PVqkiO4a_lBbH zpLzZg-hmRfCCEpe^z+?J@=-qr2bS-=OKacWg2)oqQ|ve>pGw@Oh>PM77qbBQ%Z z%aXnggX)`7CsawH`lhcC%S0XTREi=#lECX*(s)iHRd9|iAUaqNNa;)z@ZfKy+HxrS zIZjPtSx5HdA`3!U;(|SNZDA3b9xiHU&~6@Izq-<=aXe;&WQHgeS+@m0y|;tTXTJ7M zm8_*iSO( z=UYGRyG>EzHy)|-zA&=z6(*P3PL){SVy?8+MO7dfwLjQKC%cm|lM_^UR>7%3a=*J@jfk5C|aEAfy*32mH8Kz6pU_qncjD3 zbfeWb?38J{Nv;5A{I{n@QlT#z{u>~H(!Q#FkYQwr-ns%8y!dZYPzf#ay!G?&*=jg0pww|ar2IBI8Z0F*g z+p{R*{#j4sgcF@TbW-s8W5bi_q+pJYmY>-$>kARsv(+ktD=aVSjIy@MlGAjv_?L%# zf%Z^d<|~lb^7Fb``)P-p3%`P$AsTQ_f-*aQIvSiH@9@`$aOG?T>IE~SPg24gj64sL zT@RC*3N^sE@oxrpBXh)8Np#=qHxFME#vV(fSzzfOdO$5wePAWL4uBPlc)U(L#Ru~t zKbUpo4YfKcCQ~0K3+q3sf!SHV#bt^D7eKP>6v-UMwdWR<8g>pF_V_mHys^+Dn_adw z1+n*b98^(8k1{A7!=+Xquz4N(MBF5sw}|@=>DU+0k{XRrIwAkg(ewsgc#MG$8+7=Y zJnAa)hnmK^L{JxUI`znZI8HfP_i!L9`V}Z=^J=9ZFHp{AvF0lrtZk&^$s|}yznw}v zKpw#o#L^lv;T423m!*RP&lB%YH4m2#i1UE{1U|Jcmb7)Lp2r>Li_RR1;)6QG-=^r` zFFj4IK2p0f%DZJ08-IkntYvCyLAI2V@lrMbX)BBQA%;XopP&6dhM|Q@dZ2 zTIrPMTcPIZ4S=}5fcS2+sr`PM!If$fyA0}N=9ChBoMR_W1(DYE(AC!|>RAP-?qEwb zq~c5ve|(%lX;*Y$XeMxdSU>LC_2(^RZq{@^++bhtqa$y;PO-&tJGM;See~`#65pgMjP3`{lTgvUB z&4oM0ZrZ}G;I_2d9|LQ2zg;%@c8_0_&LY~8q1v~O+m zz?Ie|VEZb*`cyL6hV34h251wAM&^}^yG?5*rjY8ihq33u=^a;jT>^5RZa8f#$r%fY zhRi6C^P>-AFOZx&AXR!kfo-teZF`bz!%j$)pG}lCd3;mXt&}y1Q!#a+dcKhW!z^kK z(W~gyE|fn(ucF64jISSXVatf_HT?5t#~7*$P4Gh3gN3CA{@9mWV^2`7XqRU$?@kCy zjIxxK0^dy|`M&Y0eS_bEtTHz99inr0`4$7s~WYj z`zj`M~yj3fdehP;@k~x8exhS*Tr%w+h zvwWnG>w56g_{?(e)Xz^*CgiA^Wz;D?$Vs-ITmGyc;~hgholz9kSX43U9PmdTRg50j z@pLHhc?0_L`SGFq=v4cJjwP=ps0JhT#{FI79jB>jbfg&VG=~__i2_-jtUoI$ZwjVk zCRm7~bBH93nf>xUlJq2|>NhpvxkPnn@mb|F$qc1MSJ}Hh+GG_T;lFnuodzcFRS5#3MR? zsPZGNbgKla{5a=@Zs3_eu&&=P|MVVtyyv+u;93Ew4l0CY2eJC(ies)(+sRur{IufDXKe8G!6omDvSr|s$w5S1SFw%xqz`Z4Nld#R{=N!*rHTQAUX#q=4us?dxc`IOpa<;tqI7{ z4{&59(Jkq#9Mu*PY8$|!5p%?F*L^mXz~WjDPR;*`OSnkcnrl4Ub+t;q#s!@c{5m~& zKV<^1b6g|l7R3NluJ+tRF~ALuNPe8U!->=wgZa%Xk$8~iH;W^??kK9dt4OiI{I2i# z;~|>go1WO=X1kr06UkUJRH^XxjjSX(ce=%Koz}t8>@iREHF$AN205Y*wfuI{{NCn? z`Moh%rid%o5+@6PW1AmlXipDRY9u% z`Id}#mfa)^`6#C9m$R^>=;SdqVoWaiI;HhYb~iuDVKt`nCeW-Hzdo19UY7C1m6jIG z>#h!^j?=uB^+e?inCL1B1lfUHX*Kom(eX?L!Wu#$vY%@Igj6< zA8=90(Mezj+0P8${net*!7J<)Ag0OW#+1zU9N9R#Cw}Sf%$ep%F zJM588pIMd;HyXu}WqHaYQ@2ryOA6L_laKB9{TQ_(qUwO6D+_g{OPqD#9`Pz69#ufe z*bm@^lt}qEo;=OUkf(3vE-WEf!7H8~eTGiRo>mi$I%5Hzt*!E;+qC;W!}FB$72PC? zYYoUWoIcj?0NuZMmS^g4MvUkSTYlR?BU**0>CKP0bl}wbud-W{Y4uli^GGJ8&y*!H zJe(aM%gPA+iZ12X$J6S64lr5kA6KcVYHddKYNk;0!NV4J6=GWAANb#6^g(7IF>Vt z+^0wfdvY>z2z%UE zpgCs)f4@hz|78t_0(OIJKd^;?AKu8=IO^J0 z{@nfx2ZlR0vQ2kZCXNRAn`m5K}JOgUEQ4Z6Jd5pQlB>nCA!`VY z_RODOyFeQDx)-)DM*HwL$!BP^TY2Hik2bQ9fzvN3-TmIskzEBFhKw}Ib5>uo<_3AY ztvzsMM;VgXH%72V(>c5qI*|$7W^@=SzzsOQA+TSjLeA%}>QaP0tmKL4GzB+1e5}n0%0bCX` zIELGm-e4XtNQ%miYTvH4KYWjB-`*+mH^|OAI-T^p+vqk`)pRY&SLi-KbQDn4{&&Oc zo~KOiyG7yaRZv_P!0F3h-S-`$>bq`5`2tQIMaKZ`;m>70mPIT6f8Yz09ZgzpMD_2q z@H$buyQ!*e)R?!Akeyi`-FYwBnI4|0l3IppYR7+SzfE!7dyuLF3TqXr;>iyD`~XGE z??WP|M#4;VgX#C|kXX9G^nshnjv~0=QJe&FtYw!!f1FM~K2(zo@Vk(nesi#<(o?CY znnfvOPw8B72|>1FeXpCjG?pK!snY8ZWsXN|9CwW}#~-UnoPvnj8FXf~uUd~Bnzdd9 zBm?ydbw)?v3heXx%WFz$F%1S_WB@zG_}U zFG1Zyb>c*j2g@k+=s7<|`~(u^Mig0+@7si5Anos`=1FTmn!Em=mAp!GXHt`V*b8n$ z;43+_+WM<`@~aI*tJNkZ#1qM^BT3E{AjJmcWD;qBnk4^v4Tw!rdQMg9H7zPqG&O+p z6nKkkKZrn|8`woTi3);Ly;_P|FSL7idw)s-?cP>MnO$dp`N*XVnLXUyox1( zuf&q~Ytxcl&5MC6BTPlP*q3g9bdPee1HDq^?)RWOgE8IA59lm+5ajw|1$EgzeJib? zFi4bNK`6H9b>sU?iY>yuFy+R!Ij~M;cIBRE!>AF6%6h^0vNJZaU6&UuP6C zP_EzMiL8T)N{eh(iDiowo8|Pxl%89(sy=Po>>jPEC{I*wF$>EIc827|f2WgQ7_FwV z+eJW;gf$qwiBe`r+gsErV~CE&xlzJ2v=8(jzb1j!%TP$8YmoA<&!Wg>?x>ABC~_I* z=0*)*4{T9+h7se6>TCY}tjAWWuNlq}^~!35)+{XE?F4Df2#&@nsqj3a`upcD4!!Tk zc%N!`tmy?9PEq-gmi8;QU^{8)NIg$KnBvlb%xF#jMCGmA&-65IFpZFHXsMh;lI`;X znvK+7`NmGRYr}{&^W<_S?GRuv4caCDZ~7Qo5h;{o6Jto83lcIq+4lUJ(Ley2@1~yI(I4M?0KBdUB(vS8@NFb{sQDT|IxSU(KhT0#_7Jm zTG&WZ|4ffk$&Zv%bXJ;!9NS3K+3l^__ly_)9&UI!koM@QcE*e^;boh~O9(4BO(J-@IMYzd+xj(nqAo)hsd?StIo5In6(g<5IBwtKc=X8?qJC3MV8DSj-JBPXWhl%9hPUUEv zx(G{$PK;7tZ=Fr2IMWJvuBNZD(JjbgTU*+%QAGVcV~vQmG-=w*lyB_V4JUSCnC%5t zbGXd?6tDuV~=Fb(Z! z;c4eC(2h3OMe}MB#fe~#`C-qCnWT@u0;0|!3iJHIcqT6|aibFB&2#aj=L}SHSRaW! rM(5eTxfswG3QH3JBHRwnnOC1>r1>h6FC;3l{=YbqXn~5uYvBI@R9xbR literal 342666 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 diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_EPILOGUE.H new file mode 100644 index 0000000..d251d0a --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_EPILOGUE.H @@ -0,0 +1,22 @@ +/* + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + */ + +/* + * This file is only used by HP C/C++ on VMS, and is included automatically + * after each header file from this directory + */ + +/* + * The C++ compiler doesn't understand these pragmas, even though it + * understands the corresponding command line qualifier. + */ +#ifndef __cplusplus +/* restore state. Must correspond to the save in __decc_include_prologue.h */ +# pragma names restore +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_PROLOGUE.H new file mode 100644 index 0000000..91ac6b3 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/__DECC_INCLUDE_PROLOGUE.H @@ -0,0 +1,26 @@ +/* + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + */ + +/* + * This file is only used by HP C/C++ on VMS, and is included automatically + * after each header file from this directory + */ + +/* + * The C++ compiler doesn't understand these pragmas, even though it + * understands the corresponding command line qualifier. + */ +#ifndef __cplusplus +/* save state */ +# pragma names save +/* have the compiler shorten symbols larger than 31 chars to 23 chars + * followed by a 8 hex char CRC + */ +# pragma names as_is,shortened +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/aes.h b/thirdparty/OpenSSL-3.5.3/include/openssl/aes.h new file mode 100644 index 0000000..d0f9dfc --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/aes.h @@ -0,0 +1,111 @@ +/* + * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_AES_H +# define OPENSSL_AES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_AES_H +# endif + +# include + +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define AES_BLOCK_SIZE 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +# define AES_MAXNR 14 + + +/* 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; + +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *AES_options(void); +OSSL_DEPRECATEDIN_3_0 +int AES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 +int AES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 +void AES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 +void AES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 +void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key, const int enc); +OSSL_DEPRECATEDIN_3_0 +void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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 */ +OSSL_DEPRECATEDIN_3_0 +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 */ +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +int AES_wrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, const unsigned char *in, + unsigned int inlen); +OSSL_DEPRECATEDIN_3_0 +int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, const unsigned char *in, + unsigned int inlen); +# endif + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/applink.c b/thirdparty/OpenSSL-3.5.3/include/openssl/applink.c new file mode 100644 index 0000000..601d016 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/applink.c @@ -0,0 +1,153 @@ +/* + * Copyright 2004-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 APPLINK_STDIN 1 +#define APPLINK_STDOUT 2 +#define APPLINK_STDERR 3 +#define APPLINK_FPRINTF 4 +#define APPLINK_FGETS 5 +#define APPLINK_FREAD 6 +#define APPLINK_FWRITE 7 +#define APPLINK_FSETMOD 8 +#define APPLINK_FEOF 9 +#define APPLINK_FCLOSE 10 /* should not be used */ + +#define APPLINK_FOPEN 11 /* solely for completeness */ +#define APPLINK_FSEEK 12 +#define APPLINK_FTELL 13 +#define APPLINK_FFLUSH 14 +#define APPLINK_FERROR 15 +#define APPLINK_CLEARERR 16 +#define APPLINK_FILENO 17 /* to be used with below */ + +#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */ +#define APPLINK_READ 19 +#define APPLINK_WRITE 20 +#define APPLINK_LSEEK 21 +#define APPLINK_CLOSE 22 +#define APPLINK_MAX 22 /* always same as last macro */ + +#ifndef APPMACROS_ONLY + +/* + * Normally, do not define APPLINK_NO_INCLUDES. Define it if you are using + * symbol preprocessing and do not want the preprocessing to affect the + * following included header files. You will need to put these + * include lines somewhere in the file that is including applink.c. + */ +# ifndef APPLINK_NO_INCLUDES +# include +# include +# include +# endif + +# ifdef __BORLANDC__ + /* _lseek in is a function-like macro so we can't take its address */ +# undef _lseek +# define _lseek lseek +# endif + +static void *app_stdin(void) +{ + return stdin; +} + +static void *app_stdout(void) +{ + return stdout; +} + +static void *app_stderr(void) +{ + return stderr; +} + +static int app_feof(FILE *fp) +{ + return feof(fp); +} + +static int app_ferror(FILE *fp) +{ + return ferror(fp); +} + +static void app_clearerr(FILE *fp) +{ + clearerr(fp); +} + +static int app_fileno(FILE *fp) +{ + return _fileno(fp); +} + +static int app_fsetmod(FILE *fp, char mod) +{ + return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT); +} + +#ifdef __cplusplus +extern "C" { +#endif + +__declspec(dllexport) +void ** +# if defined(__BORLANDC__) +/* + * __stdcall appears to be the only way to get the name + * decoration right with Borland C. Otherwise it works + * purely incidentally, as we pass no parameters. + */ +__stdcall +# else +__cdecl +# endif +OPENSSL_Applink(void) +{ + static int once = 1; + static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] = + { (void *)APPLINK_MAX }; + + if (once) { + OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin; + OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout; + OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr; + OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf; + OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets; + OPENSSL_ApplinkTable[APPLINK_FREAD] = fread; + OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite; + OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod; + OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof; + OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose; + + OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen; + OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek; + OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell; + OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush; + OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror; + OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; + OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; + + OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; + OPENSSL_ApplinkTable[APPLINK_READ] = _read; + OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; + OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; + OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; + + once = 0; + } + + return OPENSSL_ApplinkTable; +} + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/asn1.h b/thirdparty/OpenSSL-3.5.3/include/openssl/asn1.h new file mode 100644 index 0000000..3551d0d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/asn1.h @@ -0,0 +1,1134 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\asn1.h.in + * + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +# 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 /*compat*/ V_ASN1_PRIMITIVE_TAG + +# 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 + +/* Stacks for types not otherwise defined in this header */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) +#define sk_X509_ALGOR_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_value(sk, idx) ((X509_ALGOR *)OPENSSL_sk_value(ossl_check_const_X509_ALGOR_sk_type(sk), (idx))) +#define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp))) +#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_null()) +#define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n))) +#define sk_X509_ALGOR_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ALGOR_sk_type(sk), (n)) +#define sk_X509_ALGOR_free(sk) OPENSSL_sk_free(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_delete(sk, i) ((X509_ALGOR *)OPENSSL_sk_delete(ossl_check_X509_ALGOR_sk_type(sk), (i))) +#define sk_X509_ALGOR_delete_ptr(sk, ptr) ((X509_ALGOR *)OPENSSL_sk_delete_ptr(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_pop(sk) ((X509_ALGOR *)OPENSSL_sk_pop(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_shift(sk) ((X509_ALGOR *)OPENSSL_sk_shift(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk),ossl_check_X509_ALGOR_freefunc_type(freefunc)) +#define sk_X509_ALGOR_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), (idx)) +#define sk_X509_ALGOR_set(sk, idx, ptr) ((X509_ALGOR *)OPENSSL_sk_set(ossl_check_X509_ALGOR_sk_type(sk), (idx), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), pnum) +#define sk_X509_ALGOR_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_dup(sk) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_dup(ossl_check_const_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_copyfunc_type(copyfunc), ossl_check_X509_ALGOR_freefunc_type(freefunc))) +#define sk_X509_ALGOR_set_cmp_func(sk, cmp) ((sk_X509_ALGOR_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_compfunc_type(cmp))) + + + +# 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 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 +/* 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) + +struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_TABLE) +#define sk_ASN1_STRING_TABLE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_value(sk, idx) ((ASN1_STRING_TABLE *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), (idx))) +#define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) +#define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_TABLE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (n)) +#define sk_ASN1_STRING_TABLE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_delete(sk, i) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (i))) +#define sk_ASN1_STRING_TABLE_delete_ptr(sk, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_pop(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_shift(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk),ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)) +#define sk_ASN1_STRING_TABLE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), (idx)) +#define sk_ASN1_STRING_TABLE_set(sk, idx, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_set(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (idx), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), pnum) +#define sk_ASN1_STRING_TABLE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_dup(sk) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc))) +#define sk_ASN1_STRING_TABLE_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_TABLE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) + + +/* 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 is in asn1t.h */ + +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ + +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) + +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) + +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(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(const type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); +typedef int OSSL_i2d_of_void_ctx(const void *, unsigned char **, void *vctx); + +/*- + * 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. + * + */ + + +/* + * 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_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) + +/* 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 + +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + +/* + * 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) + + +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; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE) +#define sk_ASN1_TYPE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_value(sk, idx) ((ASN1_TYPE *)OPENSSL_sk_value(ossl_check_const_ASN1_TYPE_sk_type(sk), (idx))) +#define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp))) +#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n))) +#define sk_ASN1_TYPE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_TYPE_sk_type(sk), (n)) +#define sk_ASN1_TYPE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_delete(sk, i) ((ASN1_TYPE *)OPENSSL_sk_delete(ossl_check_ASN1_TYPE_sk_type(sk), (i))) +#define sk_ASN1_TYPE_delete_ptr(sk, ptr) ((ASN1_TYPE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_pop(sk) ((ASN1_TYPE *)OPENSSL_sk_pop(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_shift(sk) ((ASN1_TYPE *)OPENSSL_sk_shift(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk),ossl_check_ASN1_TYPE_freefunc_type(freefunc)) +#define sk_ASN1_TYPE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), (idx)) +#define sk_ASN1_TYPE_set(sk, idx, ptr) ((ASN1_TYPE *)OPENSSL_sk_set(ossl_check_ASN1_TYPE_sk_type(sk), (idx), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), pnum) +#define sk_ASN1_TYPE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_dup(sk) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_copyfunc_type(copyfunc), ossl_check_ASN1_TYPE_freefunc_type(freefunc))) +#define sk_ASN1_TYPE_set_cmp_func(sk, cmp) ((sk_ASN1_TYPE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_compfunc_type(cmp))) + + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(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_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(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); + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) +#define sk_ASN1_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_value(sk, idx) ((ASN1_OBJECT *)OPENSSL_sk_value(ossl_check_const_ASN1_OBJECT_sk_type(sk), (idx))) +#define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp))) +#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n))) +#define sk_ASN1_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_OBJECT_sk_type(sk), (n)) +#define sk_ASN1_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_delete(sk, i) ((ASN1_OBJECT *)OPENSSL_sk_delete(ossl_check_ASN1_OBJECT_sk_type(sk), (i))) +#define sk_ASN1_OBJECT_delete_ptr(sk, ptr) ((ASN1_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_pop(sk) ((ASN1_OBJECT *)OPENSSL_sk_pop(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_shift(sk) ((ASN1_OBJECT *)OPENSSL_sk_shift(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk),ossl_check_ASN1_OBJECT_freefunc_type(freefunc)) +#define sk_ASN1_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), (idx)) +#define sk_ASN1_OBJECT_set(sk, idx, ptr) ((ASN1_OBJECT *)OPENSSL_sk_set(ossl_check_ASN1_OBJECT_sk_type(sk), (idx), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), pnum) +#define sk_ASN1_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_dup(sk) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_copyfunc_type(copyfunc), ossl_check_ASN1_OBJECT_freefunc_type(freefunc))) +#define sk_ASN1_OBJECT_set_cmp_func(sk, cmp) ((sk_ASN1_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_compfunc_type(cmp))) + + +DECLARE_ASN1_FUNCTIONS(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); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) +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); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif +int ASN1_STRING_type(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif +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); + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER) +#define sk_ASN1_INTEGER_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_value(sk, idx) ((ASN1_INTEGER *)OPENSSL_sk_value(ossl_check_const_ASN1_INTEGER_sk_type(sk), (idx))) +#define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp))) +#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_null()) +#define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n))) +#define sk_ASN1_INTEGER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_INTEGER_sk_type(sk), (n)) +#define sk_ASN1_INTEGER_free(sk) OPENSSL_sk_free(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_delete(sk, i) ((ASN1_INTEGER *)OPENSSL_sk_delete(ossl_check_ASN1_INTEGER_sk_type(sk), (i))) +#define sk_ASN1_INTEGER_delete_ptr(sk, ptr) ((ASN1_INTEGER *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_pop(sk) ((ASN1_INTEGER *)OPENSSL_sk_pop(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_shift(sk) ((ASN1_INTEGER *)OPENSSL_sk_shift(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk),ossl_check_ASN1_INTEGER_freefunc_type(freefunc)) +#define sk_ASN1_INTEGER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), (idx)) +#define sk_ASN1_INTEGER_set(sk, idx, ptr) ((ASN1_INTEGER *)OPENSSL_sk_set(ossl_check_ASN1_INTEGER_sk_type(sk), (idx), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), pnum) +#define sk_ASN1_INTEGER_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_dup(sk) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_dup(ossl_check_const_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_copyfunc_type(copyfunc), ossl_check_ASN1_INTEGER_freefunc_type(freefunc))) +#define sk_ASN1_INTEGER_set_cmp_func(sk, cmp) ((sk_ASN1_INTEGER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_compfunc_type(cmp))) + + + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) +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) +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) +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); + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING) +#define sk_ASN1_UTF8STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_value(sk, idx) ((ASN1_UTF8STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), (idx))) +#define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) +#define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_UTF8STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_UTF8STRING_sk_type(sk), (n)) +#define sk_ASN1_UTF8STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_delete(sk, i) ((ASN1_UTF8STRING *)OPENSSL_sk_delete(ossl_check_ASN1_UTF8STRING_sk_type(sk), (i))) +#define sk_ASN1_UTF8STRING_delete_ptr(sk, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_pop(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_pop(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_shift(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_shift(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk),ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)) +#define sk_ASN1_UTF8STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), (idx)) +#define sk_ASN1_UTF8STRING_set(sk, idx, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_set(ossl_check_ASN1_UTF8STRING_sk_type(sk), (idx), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), pnum) +#define sk_ASN1_UTF8STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_dup(sk) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_copyfunc_type(copyfunc), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc))) +#define sk_ASN1_UTF8STRING_set_cmp_func(sk, cmp) ((sk_ASN1_UTF8STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) + + +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); + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERALSTRING) +#define sk_ASN1_GENERALSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_value(sk, idx) ((ASN1_GENERALSTRING *)OPENSSL_sk_value(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), (idx))) +#define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) +#define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n))) +#define sk_ASN1_GENERALSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (n)) +#define sk_ASN1_GENERALSTRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_delete(sk, i) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (i))) +#define sk_ASN1_GENERALSTRING_delete_ptr(sk, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_pop(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_pop(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_shift(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_shift(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk),ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)) +#define sk_ASN1_GENERALSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), (idx)) +#define sk_ASN1_GENERALSTRING_set(sk, idx, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_set(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (idx), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), pnum) +#define sk_ASN1_GENERALSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_dup(sk) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_copyfunc_type(copyfunc), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc))) +#define sk_ASN1_GENERALSTRING_set_cmp_func(sk, cmp) ((sk_ASN1_GENERALSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) + + +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_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + +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(const ASN1_TIME *t, + ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); + +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, const 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(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); + +/* 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_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const 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_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); +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 *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); +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); +void *ASN1_item_unpack_ex(const ASN1_STRING *oct, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); + +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); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const 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, const 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); + +/* cannot constify val because of CMS_stream() */ +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); +/* cannot constify val because of CMS_dataFinal() */ +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); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); + +/* Legacy compatibility */ +# 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_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/asn1err.h b/thirdparty/OpenSSL-3.5.3/include/openssl/asn1err.h new file mode 100644 index 0000000..8fd85ed --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/asn1err.h @@ -0,0 +1,142 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ASN1ERR_H +# define OPENSSL_ASN1ERR_H +# pragma once + +# include +# include +# include + + + +/* + * ASN1 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_BAD_TEMPLATE 230 +# 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_GENERALIZEDTIME_IS_TOO_SHORT 232 +# 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_LENGTH_TOO_LONG 231 +# 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_NESTED_TOO_DEEP 201 +# 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_DIGEST 229 +# 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_CIPHER 228 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_UTCTIME_IS_TOO_SHORT 233 +# define ASN1_R_WRONG_INTEGER_TYPE 225 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/asn1t.h b/thirdparty/OpenSSL-3.5.3/include/openssl/asn1t.h new file mode 100644 index 0000000..a725c53 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/asn1t.h @@ -0,0 +1,946 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\asn1t.h.in + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif + +# 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 + +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it 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 + * data and 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 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* 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; \ + } + +/* 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),\ + #tname \ + 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, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ + 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, NULL}; \ + 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), NULL}; \ + 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_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),\ + #tname \ + 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, NULL}; \ + 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 */ + +# 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 } + +/* 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) +# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) +# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* 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[] + +# 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) + +# 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; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ + long size; /* Structure size (usually) */ + const char *sname; /* Structure name */ +}; + +/* + * 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_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const 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 int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(const 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, const 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_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; +} 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. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); +typedef int ASN1_aux_const_cb(int operation, const 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; /* Offset of lock value */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ +} 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 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 + +/* 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 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 + +/* 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(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((const 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(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ + ASN1_ITEM_rptr(stname)); \ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(const 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, const stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +/* 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(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) +# endif + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_VALUE, ASN1_VALUE, ASN1_VALUE) +#define sk_ASN1_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_value(sk, idx) ((ASN1_VALUE *)OPENSSL_sk_value(ossl_check_const_ASN1_VALUE_sk_type(sk), (idx))) +#define sk_ASN1_VALUE_new(cmp) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new(ossl_check_ASN1_VALUE_compfunc_type(cmp))) +#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_VALUE_new_reserve(cmp, n) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_VALUE_compfunc_type(cmp), (n))) +#define sk_ASN1_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_VALUE_sk_type(sk), (n)) +#define sk_ASN1_VALUE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_delete(sk, i) ((ASN1_VALUE *)OPENSSL_sk_delete(ossl_check_ASN1_VALUE_sk_type(sk), (i))) +#define sk_ASN1_VALUE_delete_ptr(sk, ptr) ((ASN1_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_pop(sk) ((ASN1_VALUE *)OPENSSL_sk_pop(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_shift(sk) ((ASN1_VALUE *)OPENSSL_sk_shift(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_VALUE_sk_type(sk),ossl_check_ASN1_VALUE_freefunc_type(freefunc)) +#define sk_ASN1_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), (idx)) +#define sk_ASN1_VALUE_set(sk, idx, ptr) ((ASN1_VALUE *)OPENSSL_sk_set(ossl_check_ASN1_VALUE_sk_type(sk), (idx), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), pnum) +#define sk_ASN1_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_dup(sk) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_copyfunc_type(copyfunc), ossl_check_ASN1_VALUE_freefunc_type(freefunc))) +#define sk_ASN1_VALUE_set_cmp_func(sk, cmp) ((sk_ASN1_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_compfunc_type(cmp))) + + + +/* 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(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); + +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/async.h b/thirdparty/OpenSSL-3.5.3/include/openssl/async.h new file mode 100644 index 0000000..826ffb9 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/async.h @@ -0,0 +1,104 @@ +/* + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ASYNC_H +# define OPENSSL_ASYNC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASYNC_H +# endif + +#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 +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct async_job_st ASYNC_JOB; +typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; +typedef int (*ASYNC_callback_fn)(void *arg); + +#define ASYNC_ERR 0 +#define ASYNC_NO_JOBS 1 +#define ASYNC_PAUSE 2 +#define ASYNC_FINISH 3 + +#define ASYNC_STATUS_UNSUPPORTED 0 +#define ASYNC_STATUS_ERR 1 +#define ASYNC_STATUS_OK 2 +#define ASYNC_STATUS_EAGAIN 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_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn *callback, + void **callback_arg); +int ASYNC_WAIT_CTX_set_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn callback, + void *callback_arg); +int ASYNC_WAIT_CTX_set_status(ASYNC_WAIT_CTX *ctx, int status); +int ASYNC_WAIT_CTX_get_status(ASYNC_WAIT_CTX *ctx); +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); + +typedef void *(*ASYNC_stack_alloc_fn)(size_t *num); +typedef void (*ASYNC_stack_free_fn)(void *addr); + +int ASYNC_set_mem_functions(ASYNC_stack_alloc_fn alloc_fn, + ASYNC_stack_free_fn free_fn); +void ASYNC_get_mem_functions(ASYNC_stack_alloc_fn *alloc_fn, + ASYNC_stack_free_fn *free_fn); + +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); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/asyncerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/asyncerr.h new file mode 100644 index 0000000..c093f7b --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/asyncerr.h @@ -0,0 +1,29 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ASYNCERR_H +# define OPENSSL_ASYNCERR_H +# pragma once + +# include +# include +# include + + + +/* + * ASYNC 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 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/bio.h b/thirdparty/OpenSSL-3.5.3/include/openssl/bio.h new file mode 100644 index 0000000..d652b6c --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/bio.h @@ -0,0 +1,1022 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\bio.h.in + * + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include +# include +# include + +#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_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_DGRAM_PAIR (26|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_DGRAM_MEM (27|BIO_TYPE_SOURCE_SINK) + +/* Custom type starting index returned by BIO_get_new_index() */ +#define BIO_TYPE_START 128 +/* Custom type maximum index that can be returned by BIO_get_new_index() */ +#define BIO_TYPE_MASK 0xFF + +/* + * 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_PEEK 29/* BIO_f_buffer special */ +# 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 timed 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 + +/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# 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 + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 + +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP 82 +# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE 83 +# define BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE 84 +# define BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS 85 +# define BIO_CTRL_DGRAM_GET_CAPS 86 +# define BIO_CTRL_DGRAM_SET_CAPS 87 +# define BIO_CTRL_DGRAM_GET_NO_TRUNC 88 +# define BIO_CTRL_DGRAM_SET_NO_TRUNC 89 + +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90 + */ + +# define BIO_CTRL_GET_RPOLL_DESCRIPTOR 91 +# define BIO_CTRL_GET_WPOLL_DESCRIPTOR 92 +# define BIO_CTRL_DGRAM_DETECT_PEER_ADDR 93 +# define BIO_CTRL_DGRAM_SET0_LOCAL_ADDR 94 + +# define BIO_DGRAM_CAP_NONE 0U +# define BIO_DGRAM_CAP_HANDLES_SRC_ADDR (1U << 0) +# define BIO_DGRAM_CAP_HANDLES_DST_ADDR (1U << 1) +# define BIO_DGRAM_CAP_PROVIDES_SRC_ADDR (1U << 2) +# define BIO_DGRAM_CAP_PROVIDES_DST_ADDR (1U << 3) + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# 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 OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# 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 shouldn't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 +# define BIO_FLAGS_IN_EOF 0x800 + +/* the BIO FLAGS values 0x1000 to 0x8000 are reserved for internal KTLS flags */ + +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 +# define BIO_CB_RECVMMSG 0x07 +# define BIO_CB_SENDMMSG 0x08 + +/* + * 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) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); + +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 int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ + +SKM_DEFINE_STACK_OF_INTERNAL(BIO, BIO, BIO) +#define sk_BIO_num(sk) OPENSSL_sk_num(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_value(sk, idx) ((BIO *)OPENSSL_sk_value(ossl_check_const_BIO_sk_type(sk), (idx))) +#define sk_BIO_new(cmp) ((STACK_OF(BIO) *)OPENSSL_sk_new(ossl_check_BIO_compfunc_type(cmp))) +#define sk_BIO_new_null() ((STACK_OF(BIO) *)OPENSSL_sk_new_null()) +#define sk_BIO_new_reserve(cmp, n) ((STACK_OF(BIO) *)OPENSSL_sk_new_reserve(ossl_check_BIO_compfunc_type(cmp), (n))) +#define sk_BIO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_BIO_sk_type(sk), (n)) +#define sk_BIO_free(sk) OPENSSL_sk_free(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_zero(sk) OPENSSL_sk_zero(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_delete(sk, i) ((BIO *)OPENSSL_sk_delete(ossl_check_BIO_sk_type(sk), (i))) +#define sk_BIO_delete_ptr(sk, ptr) ((BIO *)OPENSSL_sk_delete_ptr(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr))) +#define sk_BIO_push(sk, ptr) OPENSSL_sk_push(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_pop(sk) ((BIO *)OPENSSL_sk_pop(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_shift(sk) ((BIO *)OPENSSL_sk_shift(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_BIO_sk_type(sk),ossl_check_BIO_freefunc_type(freefunc)) +#define sk_BIO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), (idx)) +#define sk_BIO_set(sk, idx, ptr) ((BIO *)OPENSSL_sk_set(ossl_check_BIO_sk_type(sk), (idx), ossl_check_BIO_type(ptr))) +#define sk_BIO_find(sk, ptr) OPENSSL_sk_find(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), pnum) +#define sk_BIO_sort(sk) OPENSSL_sk_sort(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_dup(sk) ((STACK_OF(BIO) *)OPENSSL_sk_dup(ossl_check_const_BIO_sk_type(sk))) +#define sk_BIO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(BIO) *)OPENSSL_sk_deep_copy(ossl_check_const_BIO_sk_type(sk), ossl_check_BIO_copyfunc_type(copyfunc), ossl_check_BIO_freefunc_type(freefunc))) +#define sk_BIO_set_cmp_func(sk, cmp) ((sk_BIO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_BIO_sk_type(sk), ossl_check_BIO_compfunc_type(cmp))) + + + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); +# 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 + +/* BIO_sendmmsg/BIO_recvmmsg-related definitions */ +typedef struct bio_msg_st { + void *data; + size_t data_len; + BIO_ADDR *peer, *local; + uint64_t flags; +} BIO_MSG; + +typedef struct bio_mmsg_cb_args_st { + BIO_MSG *msg; + size_t stride, num_msg; + uint64_t flags; + size_t *msgs_processed; +} BIO_MMSG_CB_ARGS; + +#define BIO_POLL_DESCRIPTOR_TYPE_NONE 0 +#define BIO_POLL_DESCRIPTOR_TYPE_SOCK_FD 1 +#define BIO_POLL_DESCRIPTOR_TYPE_SSL 2 +#define BIO_POLL_DESCRIPTOR_CUSTOM_START 8192 + +typedef struct bio_poll_descriptor_st { + uint32_t type; + union { + int fd; + void *custom; + uintptr_t custom_ui; + SSL *ssl; + } value; +} BIO_POLL_DESCRIPTOR; + +/* + * #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_C_SET_TFO 156 /* like BIO_C_SET_NBIO */ + +# define BIO_C_SET_SOCK_TYPE 157 +# define BIO_C_GET_SOCK_TYPE 158 +# define BIO_C_GET_DGRAM_BIO 159 + +# 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) +# define BIO_set_tfo(b,n) BIO_ctrl(b,BIO_C_SET_TFO,(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_get_conn_mode(b) BIO_ctrl(b,BIO_C_GET_CONNECT,4,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) +# define BIO_set_sock_type(b,t) BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL) +# define BIO_get_sock_type(b) BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL) +# define BIO_get0_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p)) + +/* 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) +# define BIO_set_tfo_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,5,(n)?(void *)"a":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) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_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) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) + +/* 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_detect_peer_addr(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_DETECT_PEER_ADDR, 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_dgram_get_local_addr_cap(b) \ + (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP, 0, NULL) +# define BIO_dgram_get_local_addr_enable(b, penable) \ + (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE, 0, (char *)(penable)) +# define BIO_dgram_set_local_addr_enable(b, enable) \ + (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE, (enable), NULL) +# define BIO_dgram_get_effective_caps(b) \ + (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS, 0, NULL) +# define BIO_dgram_get_caps(b) \ + (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_CAPS, 0, NULL) +# define BIO_dgram_set_caps(b, caps) \ + (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_CAPS, (long)(caps), NULL) +# define BIO_dgram_get_no_trunc(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_NO_TRUNC, 0, NULL) +# define BIO_dgram_set_no_trunc(b, enable) \ + (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_NO_TRUNC, (enable), NULL) +# define BIO_dgram_get_mtu(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU, 0, NULL) +# define BIO_dgram_set_mtu(b, mtu) \ + (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_MTU, (mtu), NULL) +# define BIO_dgram_set0_local_addr(b, addr) \ + (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET0_LOCAL_ADDR, 0, (addr)) + +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 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(const 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); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); +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 dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +__owur int BIO_recvmmsg(BIO *b, BIO_MSG *msg, + size_t stride, size_t num_msg, uint64_t flags, + size_t *msgs_processed); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +__owur int BIO_sendmmsg(BIO *b, BIO_MSG *msg, + size_t stride, size_t num_msg, uint64_t flags, + size_t *msgs_processed); +__owur int BIO_get_rpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); +__owur int BIO_get_wpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); +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, BIO_info_cb *fp); +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); + +const BIO_METHOD *BIO_s_mem(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_dgram_mem(void); +# endif +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_readbuffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_dgram_pair(void); +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, + BIO_dgram_sctp_notification_handler_fn handle_notifications, + 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); +int BIO_err_is_non_fatal(unsigned int errcode); +int BIO_socket_wait(int fd, int for_read, time_t max_time); +# endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); + +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 void *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); +# ifndef OPENSSL_NO_STDIO +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, const void *data, + int datalen); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_copy(BIO_ADDR *dst, const BIO_ADDR *src); +BIO_ADDR *BIO_ADDR_dup(const BIO_ADDR *ap); +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_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + 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); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif + +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 +# define BIO_SOCK_TFO 0x20 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(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); +# ifndef OPENSSL_NO_DGRAM +int BIO_new_bio_dgram_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +# endif + +/* + * 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); + */ + +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif +# endif +int BIO_printf(BIO *bio, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); +int BIO_meth_set_sendmmsg(BIO_METHOD *biom, + int (*f) (BIO *, BIO_MSG *, size_t, size_t, + uint64_t, size_t *)); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); +int BIO_meth_set_recvmmsg(BIO_METHOD *biom, + int (*f) (BIO *, BIO_MSG *, size_t, size_t, + uint64_t, size_t *)); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*ossl_gets) (BIO *, char *, int)); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + BIO_info_cb *)); +# ifndef OPENSSL_NO_DEPRECATED_3_5 +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, + int); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, + size_t, size_t *); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, + size_t, size_t, + uint64_t, size_t *); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, + size_t, size_t *); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, + size_t, size_t, + uint64_t, size_t *); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); +OSSL_DEPRECATEDIN_3_5 long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, + long, void *); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); +OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); +OSSL_DEPRECATEDIN_3_5 long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) (BIO *, int, + BIO_info_cb *); +# endif +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/bioerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/bioerr.h new file mode 100644 index 0000000..e4fdb64 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/bioerr.h @@ -0,0 +1,72 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BIOERR_H +# define OPENSSL_BIOERR_H +# pragma once + +# include +# include +# include + + + +/* + * BIO 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_CONNECT_TIMEOUT 147 +# 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_LENGTH_TOO_LONG 102 +# define BIO_R_LISTEN_V6_ONLY 136 +# define BIO_R_LOCAL_ADDR_NOT_AVAILABLE 111 +# 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_NON_FATAL 112 +# 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 /* unused */ +# define BIO_R_TFO_DISABLED 106 +# define BIO_R_TFO_NO_KERNEL_SUPPORT 108 +# define BIO_R_TRANSFER_ERROR 104 +# define BIO_R_TRANSFER_TIMEOUT 105 +# 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_UNABLE_TO_TFO 109 +# 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 +# define BIO_R_PORT_MISMATCH 150 +# define BIO_R_PEER_ADDR_NOT_AVAILABLE 151 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/blowfish.h b/thirdparty/OpenSSL-3.5.3/include/openssl/blowfish.h new file mode 100644 index 0000000..667d642 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/blowfish.h @@ -0,0 +1,78 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BLOWFISH_H +# define OPENSSL_BLOWFISH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BLOWFISH_H +# endif + +# include + +# ifndef OPENSSL_NO_BF +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define BF_BLOCK 8 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# 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 + +typedef struct bf_key_st { + BF_LONG P[BF_ROUNDS + 2]; + BF_LONG S[4 * 256]; +} BF_KEY; + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void BF_set_key(BF_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void BF_encrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_decrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_ecb_encrypt(const unsigned char *in, + unsigned char *out, const BF_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + const BF_KEY *schedule, + unsigned char *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cfb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_ofb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 const char *BF_options(void); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/bn.h b/thirdparty/OpenSSL-3.5.3/include/openssl/bn.h new file mode 100644 index 0000000..ea706dc --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/bn.h @@ -0,0 +1,590 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BN_H +# define OPENSSL_BN_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BN_H +# endif + +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# 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 + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +/* 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); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ + +/* + * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations + * that will be done for checking that a random number is probably prime. The + * error rate for accepting a composite number as prime depends on the size of + * the prime |b|. The error rates used are for calculating an RSA key with 2 primes, + * and so the level is what you would expect for a key of double the size of the + * prime. + * + * This table is generated using the algorithm of FIPS PUB 186-4 + * Digital Signature Standard (DSS), section F.1, page 117. + * (https://dx.doi.org/10.6028/NIST.FIPS.186-4) + * + * The following magma script was used to generate the output: + * securitybits:=125; + * k:=1024; + * for t:=1 to 65 do + * for M:=3 to Floor(2*Sqrt(k-1)-1) do + * S:=0; + * // Sum over m + * for m:=3 to M do + * s:=0; + * // Sum over j + * for j:=2 to m do + * s+:=(RealField(32)!2)^-(j+(k-1)/j); + * end for; + * S+:=2^(m-(m-1)*t)*s; + * end for; + * A:=2^(k-2-M*t); + * B:=8*(Pi(RealField(32))^2-6)/3*2^(k-2)*S; + * pkt:=2.00743*Log(2)*k*2^-k*(A+B); + * seclevel:=Floor(-Log(2,pkt)); + * if seclevel ge securitybits then + * printf "k: %5o, security: %o bits (t: %o, M: %o)\n",k,seclevel,t,M; + * break; + * end if; + * end for; + * if seclevel ge securitybits then break; end if; + * end for; + * + * It can be run online at: + * http://magma.maths.usyd.edu.au/calc + * + * And will output: + * k: 1024, security: 129 bits (t: 6, M: 23) + * + * k is the number of bits of the prime, securitybits is the level we want to + * reach. + * + * prime length | RSA key size | # MR tests | security level + * -------------+--------------|------------+--------------- + * (b) >= 6394 | >= 12788 | 3 | 256 bit + * (b) >= 3747 | >= 7494 | 3 | 192 bit + * (b) >= 1345 | >= 2690 | 4 | 128 bit + * (b) >= 1080 | >= 2160 | 5 | 128 bit + * (b) >= 852 | >= 1704 | 5 | 112 bit + * (b) >= 476 | >= 952 | 5 | 80 bit + * (b) >= 400 | >= 800 | 6 | 80 bit + * (b) >= 347 | >= 694 | 7 | 80 bit + * (b) >= 308 | >= 616 | 8 | 80 bit + * (b) >= 55 | >= 110 | 27 | 64 bit + * (b) >= 6 | >= 12 | 34 | 64 bit + */ + +# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ + (b) >= 1345 ? 4 : \ + (b) >= 476 ? 5 : \ + (b) >= 400 ? 6 : \ + (b) >= 347 ? 7 : \ + (b) >= 308 ? 8 : \ + (b) >= 55 ? 27 : \ + /* b >= 6 */ 34) +# endif + +# 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_LEVEL > 908 +# 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_ex(OSSL_LIB_CTX *ctx); +BN_CTX *BN_CTX_new(void); +BN_CTX *BN_CTX_secure_new_ex(OSSL_LIB_CTX *ctx); +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_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); +int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); +int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range_ex(BIGNUM *r, const BIGNUM *range, unsigned int strength, + BN_CTX *ctx); +int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range_ex(BIGNUM *r, const BIGNUM *range, + unsigned int strength, BN_CTX *ctx); +int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +OSSL_DEPRECATEDIN_3_0 +int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +# endif +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); +BIGNUM *BN_signed_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); +int BN_signed_bn2bin(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); +BIGNUM *BN_signed_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +int BN_signed_bn2lebin(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret); +BIGNUM *BN_signed_native2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen); +int BN_signed_bn2native(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 b 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_mod_exp_mont_consttime_x2(BIGNUM *rr1, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *m1, BN_MONT_CTX *in_mont1, + BIGNUM *rr2, const BIGNUM *a2, const BIGNUM *p2, + const BIGNUM *m2, BN_MONT_CTX *in_mont2, + 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 */ +int BN_are_coprime(BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +BIGNUM *BN_mod_inverse(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); +BIGNUM *BN_mod_sqrt(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); + +void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); + +/* Deprecated versions */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_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); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg); +OSSL_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); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, + int do_trial_division, BN_GENCB *cb); +# endif +/* Newer versions */ +int BN_generate_prime_ex2(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb, + BN_CTX *ctx); +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); + +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +# endif + +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); +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +void BN_set_params(int mul, int high, int low, int mont); +OSSL_DEPRECATEDIN_0_9_8 +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +# endif + +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); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/bnerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/bnerr.h new file mode 100644 index 0000000..7c3f6ef --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/bnerr.h @@ -0,0 +1,47 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BNERR_H +# define OPENSSL_BNERR_H +# pragma once + +# include +# include +# include + + + +/* + * BN 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_PRIME_CANDIDATE 121 +# define BN_R_NO_SOLUTION 116 +# define BN_R_NO_SUITABLE_DIGEST 120 +# 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 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/buffer.h b/thirdparty/OpenSSL-3.5.3/include/openssl/buffer.h new file mode 100644 index 0000000..5773b98 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/buffer.h @@ -0,0 +1,62 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BUFFER_H +# define OPENSSL_BUFFER_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BUFFER_H +# endif + +# include +# ifndef OPENSSL_CRYPTO_H +# include +# endif +# include + + +#ifdef __cplusplus +extern "C" { +#endif + +# include +# include + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# 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) +# endif + +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); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/buffererr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/buffererr.h new file mode 100644 index 0000000..d18b1f8 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/buffererr.h @@ -0,0 +1,25 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BUFFERERR_H +# define OPENSSL_BUFFERERR_H +# pragma once + +# include +# include +# include + + + +/* + * BUF reason codes. + */ + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/byteorder.h b/thirdparty/OpenSSL-3.5.3/include/openssl/byteorder.h new file mode 100644 index 0000000..3c8f34b --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/byteorder.h @@ -0,0 +1,339 @@ +/* + * Copyright 2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_BYTEORDER_H +# define OPENSSL_BYTEORDER_H +# pragma once + +# include +# include + +/* + * "Modern" compilers do a decent job of optimising these functions to just a + * couple of instruction ([swap +] store, or load [+ swap]) when either no + * swapping is required, or a suitable swap instruction is available. + */ + +# if defined(_MSC_VER) && _MSC_VER>=1300 +# include +# pragma intrinsic(_byteswap_ushort) +# pragma intrinsic(_byteswap_ulong) +# pragma intrinsic(_byteswap_uint64) +# define OSSL_HTOBE16(x) _byteswap_ushort(x) +# define OSSL_HTOBE32(x) _byteswap_ulong(x) +# define OSSL_HTOBE64(x) _byteswap_uint64(x) +# define OSSL_BE16TOH(x) _byteswap_ushort(x) +# define OSSL_BE32TOH(x) _byteswap_ulong(x) +# define OSSL_BE64TOH(x) _byteswap_uint64(x) +# define OSSL_HTOLE16(x) (x) +# define OSSL_HTOLE32(x) (x) +# define OSSL_HTOLE64(x) (x) +# define OSSL_LE16TOH(x) (x) +# define OSSL_LE32TOH(x) (x) +# define OSSL_LE64TOH(x) (x) + +# elif defined(__GLIBC__) && defined(__GLIBC_PREREQ) +# if (__GLIBC_PREREQ(2, 19)) && defined(_DEFAULT_SOURCE) +# include +# define OSSL_HTOBE16(x) htobe16(x) +# define OSSL_HTOBE32(x) htobe32(x) +# define OSSL_HTOBE64(x) htobe64(x) +# define OSSL_BE16TOH(x) be16toh(x) +# define OSSL_BE32TOH(x) be32toh(x) +# define OSSL_BE64TOH(x) be64toh(x) +# define OSSL_HTOLE16(x) htole16(x) +# define OSSL_HTOLE32(x) htole32(x) +# define OSSL_HTOLE64(x) htole64(x) +# define OSSL_LE16TOH(x) le16toh(x) +# define OSSL_LE32TOH(x) le32toh(x) +# define OSSL_LE64TOH(x) le64toh(x) +# endif + +# elif defined(__FreeBSD__) || defined(__NetBSD__) || defined (__OpenBSD__) +# if defined(__OpenBSD__) +# include +# else +# include +# endif +# define OSSL_HTOBE16(x) htobe16(x) +# define OSSL_HTOBE32(x) htobe32(x) +# define OSSL_HTOBE64(x) htobe64(x) +# define OSSL_BE16TOH(x) be16toh(x) +# define OSSL_BE32TOH(x) be32toh(x) +# define OSSL_BE64TOH(x) be64toh(x) +# define OSSL_HTOLE16(x) htole16(x) +# define OSSL_HTOLE32(x) htole32(x) +# define OSSL_HTOLE64(x) htole64(x) +# define OSSL_LE16TOH(x) le16toh(x) +# define OSSL_LE32TOH(x) le32toh(x) +# define OSSL_LE64TOH(x) le64toh(x) + +# elif defined(__APPLE__) +# include +# define OSSL_HTOBE16(x) OSSwapHostToBigInt16(x) +# define OSSL_HTOBE32(x) OSSwapHostToBigInt32(x) +# define OSSL_HTOBE64(x) OSSwapHostToBigInt64(x) +# define OSSL_BE16TOH(x) OSSwapBigToHostInt16(x) +# define OSSL_BE32TOH(x) OSSwapBigToHostInt32(x) +# define OSSL_BE64TOH(x) OSSwapBigToHostInt64(x) +# define OSSL_HTOLE16(x) OSSwapHostToLittleInt16(x) +# define OSSL_HTOLE32(x) OSSwapHostToLittleInt32(x) +# define OSSL_HTOLE64(x) OSSwapHostToLittleInt64(x) +# define OSSL_LE16TOH(x) OSSwapLittleToHostInt16(x) +# define OSSL_LE32TOH(x) OSSwapLittleToHostInt32(x) +# define OSSL_LE64TOH(x) OSSwapLittleToHostInt64(x) + +# endif + +static ossl_inline ossl_unused unsigned char * +OPENSSL_store_u16_le(unsigned char *out, uint16_t val) +{ +# ifdef OSSL_HTOLE16 + uint16_t t = OSSL_HTOLE16(val); + + memcpy(out, (unsigned char *)&t, 2); + return out + 2; +# else + *out++ = (val & 0xff); + *out++ = (val >> 8) & 0xff; + return out; +# endif +} + +static ossl_inline ossl_unused unsigned char * +OPENSSL_store_u16_be(unsigned char *out, uint16_t val) +{ +# ifdef OSSL_HTOBE16 + uint16_t t = OSSL_HTOBE16(val); + + memcpy(out, (unsigned char *)&t, 2); + return out + 2; +# else + *out++ = (val >> 8) & 0xff; + *out++ = (val & 0xff); + return out; +# endif +} + +static ossl_inline ossl_unused unsigned char * +OPENSSL_store_u32_le(unsigned char *out, uint32_t val) +{ +# ifdef OSSL_HTOLE32 + uint32_t t = OSSL_HTOLE32(val); + + memcpy(out, (unsigned char *)&t, 4); + return out + 4; +# else + *out++ = (val & 0xff); + *out++ = (val >> 8) & 0xff; + *out++ = (val >> 16) & 0xff; + *out++ = (val >> 24) & 0xff; + return out; +# endif +} + +static ossl_inline ossl_unused unsigned char * +OPENSSL_store_u32_be(unsigned char *out, uint32_t val) +{ +# ifdef OSSL_HTOBE32 + uint32_t t = OSSL_HTOBE32(val); + + memcpy(out, (unsigned char *)&t, 4); + return out + 4; +# else + *out++ = (val >> 24) & 0xff; + *out++ = (val >> 16) & 0xff; + *out++ = (val >> 8) & 0xff; + *out++ = (val & 0xff); + return out; +# endif +} + +static ossl_inline ossl_unused unsigned char * +OPENSSL_store_u64_le(unsigned char *out, uint64_t val) +{ +# ifdef OSSL_HTOLE64 + uint64_t t = OSSL_HTOLE64(val); + + memcpy(out, (unsigned char *)&t, 8); + return out + 8; +# else + *out++ = (val & 0xff); + *out++ = (val >> 8) & 0xff; + *out++ = (val >> 16) & 0xff; + *out++ = (val >> 24) & 0xff; + *out++ = (val >> 32) & 0xff; + *out++ = (val >> 40) & 0xff; + *out++ = (val >> 48) & 0xff; + *out++ = (val >> 56) & 0xff; + return out; +# endif +} + +static ossl_inline ossl_unused unsigned char * +OPENSSL_store_u64_be(unsigned char *out, uint64_t val) +{ +# ifdef OSSL_HTOLE64 + uint64_t t = OSSL_HTOBE64(val); + + memcpy(out, (unsigned char *)&t, 8); + return out + 8; +# else + *out++ = (val >> 56) & 0xff; + *out++ = (val >> 48) & 0xff; + *out++ = (val >> 40) & 0xff; + *out++ = (val >> 32) & 0xff; + *out++ = (val >> 24) & 0xff; + *out++ = (val >> 16) & 0xff; + *out++ = (val >> 8) & 0xff; + *out++ = (val & 0xff); + return out; +# endif +} + +static ossl_inline ossl_unused const unsigned char * +OPENSSL_load_u16_le(uint16_t *val, const unsigned char *in) +{ +# ifdef OSSL_LE16TOH + uint16_t t; + + memcpy((unsigned char *)&t, in, 2); + *val = OSSL_LE16TOH(t); + return in + 2; +# else + uint16_t b0 = *in++; + uint16_t b1 = *in++; + + *val = b0 | (b1 << 8); + return in; +#endif +} + +static ossl_inline ossl_unused const unsigned char * +OPENSSL_load_u16_be(uint16_t *val, const unsigned char *in) +{ +# ifdef OSSL_LE16TOH + uint16_t t; + + memcpy((unsigned char *)&t, in, 2); + *val = OSSL_BE16TOH(t); + return in + 2; +# else + uint16_t b1 = *in++; + uint16_t b0 = *in++; + + *val = b0 | (b1 << 8); + return in; +#endif +} + +static ossl_inline ossl_unused const unsigned char * +OPENSSL_load_u32_le(uint32_t *val, const unsigned char *in) +{ +# ifdef OSSL_LE32TOH + uint32_t t; + + memcpy((unsigned char *)&t, in, 4); + *val = OSSL_LE32TOH(t); + return in + 4; +# else + uint32_t b0 = *in++; + uint32_t b1 = *in++; + uint32_t b2 = *in++; + uint32_t b3 = *in++; + + *val = b0 | (b1 << 8) | (b2 << 16) | (b3 << 24); + return in; +#endif +} + +static ossl_inline ossl_unused const unsigned char * +OPENSSL_load_u32_be(uint32_t *val, const unsigned char *in) +{ +# ifdef OSSL_LE32TOH + uint32_t t; + + memcpy((unsigned char *)&t, in, 4); + *val = OSSL_BE32TOH(t); + return in + 4; +# else + uint32_t b3 = *in++; + uint32_t b2 = *in++; + uint32_t b1 = *in++; + uint32_t b0 = *in++; + + *val = b0 | (b1 << 8) | (b2 << 16) | (b3 << 24); + return in; +#endif +} + +static ossl_inline ossl_unused const unsigned char * +OPENSSL_load_u64_le(uint64_t *val, const unsigned char *in) +{ +# ifdef OSSL_LE64TOH + uint64_t t; + + memcpy((unsigned char *)&t, in, 8); + *val = OSSL_LE64TOH(t); + return in + 8; +# else + uint64_t b0 = *in++; + uint64_t b1 = *in++; + uint64_t b2 = *in++; + uint64_t b3 = *in++; + uint64_t b4 = *in++; + uint64_t b5 = *in++; + uint64_t b6 = *in++; + uint64_t b7 = *in++; + + *val = b0 | (b1 << 8) | (b2 << 16) | (b3 << 24) + | (b4 << 32) | (b5 << 40) | (b6 << 48) | (b7 << 56); + return in; +#endif +} + +static ossl_inline ossl_unused const unsigned char * +OPENSSL_load_u64_be(uint64_t *val, const unsigned char *in) +{ +# ifdef OSSL_LE64TOH + uint64_t t; + + memcpy((unsigned char *)&t, in, 8); + *val = OSSL_BE64TOH(t); + return in + 8; +# else + uint64_t b7 = *in++; + uint64_t b6 = *in++; + uint64_t b5 = *in++; + uint64_t b4 = *in++; + uint64_t b3 = *in++; + uint64_t b2 = *in++; + uint64_t b1 = *in++; + uint64_t b0 = *in++; + + *val = b0 | (b1 << 8) | (b2 << 16) | (b3 << 24) + | (b4 << 32) | (b5 << 40) | (b6 << 48) | (b7 << 56); + return in; +#endif +} + +# undef OSSL_HTOBE16 +# undef OSSL_HTOBE32 +# undef OSSL_HTOBE64 +# undef OSSL_BE16TOH +# undef OSSL_BE32TOH +# undef OSSL_BE64TOH +# undef OSSL_HTOLE16 +# undef OSSL_HTOLE32 +# undef OSSL_HTOLE64 +# undef OSSL_LE16TOH +# undef OSSL_LE32TOH +# undef OSSL_LE64TOH + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/camellia.h b/thirdparty/OpenSSL-3.5.3/include/openssl/camellia.h new file mode 100644 index 0000000..88c2279 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/camellia.h @@ -0,0 +1,117 @@ +/* + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CAMELLIA_H +# define OPENSSL_CAMELLIA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAMELLIA_H +# endif + +# include + +# ifndef OPENSSL_NO_CAMELLIA +# include +#ifdef __cplusplus +extern "C" { +#endif + +# define CAMELLIA_BLOCK_SIZE 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# 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_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; + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int Camellia_set_key(const unsigned char *userKey, + const int bits, + CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_decrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_ecb_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + const int enc); +OSSL_DEPRECATEDIN_3_0 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); +OSSL_DEPRECATEDIN_3_0 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); +OSSL_DEPRECATEDIN_3_0 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); +OSSL_DEPRECATEDIN_3_0 void Camellia_ofb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num); +OSSL_DEPRECATEDIN_3_0 +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); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cast.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cast.h new file mode 100644 index 0000000..0bf217b --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cast.h @@ -0,0 +1,71 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CAST_H +# define OPENSSL_CAST_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAST_H +# endif + +# include + +# ifndef OPENSSL_NO_CAST +# ifdef __cplusplus +extern "C" { +# endif + +# define CAST_BLOCK 8 +# define CAST_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + +typedef struct cast_key_st { + CAST_LONG data[32]; + int short_key; /* Use reduced rounds for short key */ +} CAST_KEY; + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 +void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAST_KEY *key, int enc); +OSSL_DEPRECATEDIN_3_0 +void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 +void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 +void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 +void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 +void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cmac.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cmac.h new file mode 100644 index 0000000..f508618 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cmac.h @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CMAC_H +# define OPENSSL_CMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMAC_H +# endif + +# ifndef OPENSSL_NO_CMAC + +# ifdef __cplusplus +extern "C" { +# endif + +# include + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Opaque */ +typedef struct CMAC_CTX_st CMAC_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CMAC_CTX *CMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_cleanup(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_free(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); +OSSL_DEPRECATEDIN_3_0 int CMAC_Init(CMAC_CTX *ctx, + const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int CMAC_Update(CMAC_CTX *ctx, + const void *data, size_t dlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_Final(CMAC_CTX *ctx, + unsigned char *out, size_t *poutlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_resume(CMAC_CTX *ctx); +# endif + +# ifdef __cplusplus +} +# endif + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cmp.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cmp.h new file mode 100644 index 0000000..ef81419 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cmp.h @@ -0,0 +1,727 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\cmp.h.in + * + * Copyright 2007-2024 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO_2 2 +# define OSSL_CMP_PVNO_3 3 +# define OSSL_CMP_PVNO OSSL_CMP_PVNO_2 /* v2 is the default */ + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; + +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS) +#define sk_OSSL_CMP_CERTSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_value(sk, idx) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTSTATUS_new_null() ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_delete(sk, i) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_pop(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_shift(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), pnum) +#define sk_OSSL_CMP_CERTSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) + +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_ITAV, OSSL_CMP_ITAV, OSSL_CMP_ITAV) +#define sk_OSSL_CMP_ITAV_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_value(sk, idx) ((OSSL_CMP_ITAV *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), (idx))) +#define sk_OSSL_CMP_ITAV_new(cmp) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) +#define sk_OSSL_CMP_ITAV_new_null() ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_ITAV_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_ITAV_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (n)) +#define sk_OSSL_CMP_ITAV_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_delete(sk, i) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (i))) +#define sk_OSSL_CMP_ITAV_delete_ptr(sk, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_pop(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_shift(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk),ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)) +#define sk_OSSL_CMP_ITAV_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), (idx)) +#define sk_OSSL_CMP_ITAV_set(sk, idx, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_set(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (idx), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), pnum) +#define sk_OSSL_CMP_ITAV_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_dup(sk) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc))) +#define sk_OSSL_CMP_ITAV_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_ITAV_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) + + +typedef struct ossl_cmp_crlstatus_st OSSL_CMP_CRLSTATUS; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CRLSTATUS, OSSL_CMP_CRLSTATUS, OSSL_CMP_CRLSTATUS) +#define sk_OSSL_CMP_CRLSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CRLSTATUS_value(sk, idx) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CRLSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp))) +#define sk_OSSL_CMP_CRLSTATUS_new_null() ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CRLSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CRLSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), (n)) +#define sk_OSSL_CMP_CRLSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CRLSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CRLSTATUS_delete(sk, i) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), (i))) +#define sk_OSSL_CMP_CRLSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr))) +#define sk_OSSL_CMP_CRLSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr)) +#define sk_OSSL_CMP_CRLSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr)) +#define sk_OSSL_CMP_CRLSTATUS_pop(sk) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CRLSTATUS_shift(sk) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CRLSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CRLSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CRLSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr), (idx)) +#define sk_OSSL_CMP_CRLSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CRLSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr))) +#define sk_OSSL_CMP_CRLSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr)) +#define sk_OSSL_CMP_CRLSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr)) +#define sk_OSSL_CMP_CRLSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_type(ptr), pnum) +#define sk_OSSL_CMP_CRLSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CRLSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CRLSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CRLSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CRLSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CRLSTATUS_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CRLSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CRLSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CRLSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CRLSTATUS_compfunc_type(cmp))) + + +typedef OSSL_CRMF_ATTRIBUTETYPEANDVALUE OSSL_CMP_ATAV; +# define OSSL_CMP_ATAV_free OSSL_CRMF_ATTRIBUTETYPEANDVALUE_free +typedef STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) OSSL_CMP_ATAVS; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_ATAVS) +# define stack_st_OSSL_CMP_ATAV stack_st_OSSL_CRMF_ATTRIBUTETYPEANDVALUE +# define sk_OSSL_CMP_ATAV_num sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_num +# define sk_OSSL_CMP_ATAV_value sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_value +# define sk_OSSL_CMP_ATAV_push sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_push +# define sk_OSSL_CMP_ATAV_pop_free sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_pop_free + +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_PKISI, OSSL_CMP_PKISI, OSSL_CMP_PKISI) +#define sk_OSSL_CMP_PKISI_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_value(sk, idx) ((OSSL_CMP_PKISI *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), (idx))) +#define sk_OSSL_CMP_PKISI_new(cmp) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) +#define sk_OSSL_CMP_PKISI_new_null() ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_PKISI_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_PKISI_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (n)) +#define sk_OSSL_CMP_PKISI_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_delete(sk, i) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (i))) +#define sk_OSSL_CMP_PKISI_delete_ptr(sk, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_pop(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_shift(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk),ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)) +#define sk_OSSL_CMP_PKISI_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), (idx)) +#define sk_OSSL_CMP_PKISI_set(sk, idx, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_set(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (idx), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), pnum) +#define sk_OSSL_CMP_PKISI_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_dup(sk) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc))) +#define sk_OSSL_CMP_PKISI_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_PKISI_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) + +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE) +#define sk_OSSL_CMP_CERTREPMESSAGE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_value(sk, idx) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new(cmp) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_null() ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTREPMESSAGE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTREPMESSAGE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete(sk, i) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_shift(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk),ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTREPMESSAGE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTREPMESSAGE_set(sk, idx, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTREPMESSAGE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_dup(sk) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTREPMESSAGE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTREPMESSAGE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) + +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE) +#define sk_OSSL_CMP_CERTRESPONSE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_value(sk, idx) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTRESPONSE_new(cmp) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTRESPONSE_new_null() ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTRESPONSE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTRESPONSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTRESPONSE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_delete(sk, i) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTRESPONSE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_pop(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_shift(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk),ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTRESPONSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTRESPONSE_set(sk, idx, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTRESPONSE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_dup(sk) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTRESPONSE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTRESPONSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) + +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); + +OSSL_CMP_ITAV *OSSL_CMP_ITAV_new0_certProfile(STACK_OF(ASN1_UTF8STRING) + *certProfile); +int OSSL_CMP_ITAV_get0_certProfile(const OSSL_CMP_ITAV *itav, + STACK_OF(ASN1_UTF8STRING) **out); +OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_caCerts(const STACK_OF(X509) *caCerts); +int OSSL_CMP_ITAV_get0_caCerts(const OSSL_CMP_ITAV *itav, STACK_OF(X509) **out); + +OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaCert(const X509 *rootCaCert); +int OSSL_CMP_ITAV_get0_rootCaCert(const OSSL_CMP_ITAV *itav, X509 **out); +OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaKeyUpdate(const X509 *newWithNew, + const X509 *newWithOld, + const X509 *oldWithNew); +int OSSL_CMP_ITAV_get0_rootCaKeyUpdate(const OSSL_CMP_ITAV *itav, + X509 **newWithNew, + X509 **newWithOld, + X509 **oldWithNew); + +OSSL_CMP_CRLSTATUS *OSSL_CMP_CRLSTATUS_create(const X509_CRL *crl, + const X509 *cert, int only_DN); +OSSL_CMP_CRLSTATUS *OSSL_CMP_CRLSTATUS_new1(const DIST_POINT_NAME *dpn, + const GENERAL_NAMES *issuer, + const ASN1_TIME *thisUpdate); +int OSSL_CMP_CRLSTATUS_get0(const OSSL_CMP_CRLSTATUS *crlstatus, + DIST_POINT_NAME **dpn, GENERAL_NAMES **issuer, + ASN1_TIME **thisUpdate); +void OSSL_CMP_CRLSTATUS_free(OSSL_CMP_CRLSTATUS *crlstatus); +OSSL_CMP_ITAV +*OSSL_CMP_ITAV_new0_crlStatusList(STACK_OF(OSSL_CMP_CRLSTATUS) *crlStatusList); +int OSSL_CMP_ITAV_get0_crlStatusList(const OSSL_CMP_ITAV *itav, + STACK_OF(OSSL_CMP_CRLSTATUS) **out); +OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_crls(const X509_CRL *crls); +int OSSL_CMP_ITAV_get0_crls(const OSSL_CMP_ITAV *it, STACK_OF(X509_CRL) **out); +OSSL_CMP_ITAV +*OSSL_CMP_ITAV_new0_certReqTemplate(OSSL_CRMF_CERTTEMPLATE *certTemplate, + OSSL_CMP_ATAVS *keySpec); +int OSSL_CMP_ITAV_get1_certReqTemplate(const OSSL_CMP_ITAV *itav, + OSSL_CRMF_CERTTEMPLATE **certTemplate, + OSSL_CMP_ATAVS **keySpec); + +OSSL_CMP_ATAV *OSSL_CMP_ATAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ATAV_set0(OSSL_CMP_ATAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ATAV_get0_type(const OSSL_CMP_ATAV *itav); +ASN1_TYPE *OSSL_CMP_ATAV_get0_value(const OSSL_CMP_ATAV *itav); +OSSL_CMP_ATAV *OSSL_CMP_ATAV_new_algId(const X509_ALGOR *alg); +X509_ALGOR *OSSL_CMP_ATAV_get0_algId(const OSSL_CMP_ATAV *atav); +OSSL_CMP_ATAV *OSSL_CMP_ATAV_new_rsaKeyLen(int len); +int OSSL_CMP_ATAV_get_rsaKeyLen(const OSSL_CMP_ATAV *atav); +int OSSL_CMP_ATAV_push1(OSSL_CMP_ATAVS **sk_p, const OSSL_CMP_ATAV *atav); + +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +OSSL_LIB_CTX *OSSL_CMP_CTX_get0_libctx(const OSSL_CMP_CTX *ctx); +const char *OSSL_CMP_CTX_get0_propq(const OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +# define OSSL_CMP_OPT_USE_TLS 13 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +# define OSSL_CMP_OPT_NO_CACHE_EXTRACERTS 37 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +# ifndef OPENSSL_NO_HTTP +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +# endif +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +# define OSSL_CMP_CTX_set0_trusted OSSL_CMP_CTX_set0_trustedStore +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_CTX_get0_trusted OSSL_CMP_CTX_get0_trustedStore +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) + *OSSL_CMP_CTX_get0_geninfo_ITAVs(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_serialNumber(OSSL_CMP_CTX *ctx, const ASN1_INTEGER *sn); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_validatedSrvCert(const OSSL_CMP_CTX *ctx); +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); +STACK_OF(OSSL_CMP_ITAV) + *OSSL_CMP_HDR_get0_geninfo_ITAVs(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +X509_PUBKEY *OSSL_CMP_MSG_get0_certreq_publickey(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +# ifndef OPENSSL_NO_HTTP +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +# endif + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +typedef int (*OSSL_CMP_SRV_delayed_delivery_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +typedef int (*OSSL_CMP_SRV_clean_transaction_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_SRV_CTX_init_trans(OSSL_CMP_SRV_CTX *srv_ctx, + OSSL_CMP_SRV_delayed_delivery_cb_t delay, + OSSL_CMP_SRV_clean_transaction_cb_t clean); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_GENM 21 +# define OSSL_CMP_ERROR 23 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +/* from cmp_genm.c */ +int OSSL_CMP_get1_caCerts(OSSL_CMP_CTX *ctx, STACK_OF(X509) **out); +int OSSL_CMP_get1_rootCaKeyUpdate(OSSL_CMP_CTX *ctx, + const X509 *oldWithOld, X509 **newWithNew, + X509 **newWithOld, X509 **oldWithNew); +int OSSL_CMP_get1_crlUpdate(OSSL_CMP_CTX *ctx, const X509 *crlcert, + const X509_CRL *last_crl, + X509_CRL **crl); +int OSSL_CMP_get1_certReqTemplate(OSSL_CMP_CTX *ctx, + OSSL_CRMF_CERTTEMPLATE **certTemplate, + OSSL_CMP_ATAVS **keySpec); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cmp_util.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cmp_util.h new file mode 100644 index 0000000..9a16892 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cmp_util.h @@ -0,0 +1,56 @@ +/* + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CMP_UTIL_H +# define OPENSSL_CMP_UTIL_H +# pragma once + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int OSSL_CMP_log_open(void); +void OSSL_CMP_log_close(void); +# define OSSL_CMP_LOG_PREFIX "CMP " + +/* + * generalized logging/error callback mirroring the severity levels of syslog.h + */ +typedef int OSSL_CMP_severity; +# define OSSL_CMP_LOG_EMERG 0 +# define OSSL_CMP_LOG_ALERT 1 +# define OSSL_CMP_LOG_CRIT 2 +# define OSSL_CMP_LOG_ERR 3 +# define OSSL_CMP_LOG_WARNING 4 +# define OSSL_CMP_LOG_NOTICE 5 +# define OSSL_CMP_LOG_INFO 6 +# define OSSL_CMP_LOG_DEBUG 7 +# define OSSL_CMP_LOG_TRACE 8 +# define OSSL_CMP_LOG_MAX OSSL_CMP_LOG_TRACE +typedef int (*OSSL_CMP_log_cb_t)(const char *func, const char *file, int line, + OSSL_CMP_severity level, const char *msg); + +int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg); +/* use of the logging callback for outputting error queue */ +void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_UTIL_H) */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cmperr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cmperr.h new file mode 100644 index 0000000..62137aa --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cmperr.h @@ -0,0 +1,134 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CMPERR_H +# define OPENSSL_CMPERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CMP + + +/* + * CMP reason codes. + */ +# define CMP_R_ALGORITHM_NOT_SUPPORTED 139 +# define CMP_R_BAD_CHECKAFTER_IN_POLLREP 167 +# define CMP_R_BAD_REQUEST_ID 108 +# define CMP_R_CERTHASH_UNMATCHED 156 +# define CMP_R_CERTID_NOT_FOUND 109 +# define CMP_R_CERTIFICATE_NOT_ACCEPTED 169 +# define CMP_R_CERTIFICATE_NOT_FOUND 112 +# define CMP_R_CERTREQMSG_NOT_FOUND 157 +# define CMP_R_CERTRESPONSE_NOT_FOUND 113 +# define CMP_R_CERT_AND_KEY_DO_NOT_MATCH 114 +# define CMP_R_CHECKAFTER_OUT_OF_RANGE 181 +# define CMP_R_ENCOUNTERED_KEYUPDATEWARNING 176 +# define CMP_R_ENCOUNTERED_WAITING 162 +# define CMP_R_ERROR_CALCULATING_PROTECTION 115 +# define CMP_R_ERROR_CREATING_CERTCONF 116 +# define CMP_R_ERROR_CREATING_CERTREP 117 +# define CMP_R_ERROR_CREATING_CERTREQ 163 +# define CMP_R_ERROR_CREATING_ERROR 118 +# define CMP_R_ERROR_CREATING_GENM 119 +# define CMP_R_ERROR_CREATING_GENP 120 +# define CMP_R_ERROR_CREATING_PKICONF 122 +# define CMP_R_ERROR_CREATING_POLLREP 123 +# define CMP_R_ERROR_CREATING_POLLREQ 124 +# define CMP_R_ERROR_CREATING_RP 125 +# define CMP_R_ERROR_CREATING_RR 126 +# define CMP_R_ERROR_PARSING_PKISTATUS 107 +# define CMP_R_ERROR_PROCESSING_MESSAGE 158 +# define CMP_R_ERROR_PROTECTING_MESSAGE 127 +# define CMP_R_ERROR_SETTING_CERTHASH 128 +# define CMP_R_ERROR_UNEXPECTED_CERTCONF 160 +# define CMP_R_ERROR_VALIDATING_PROTECTION 140 +# define CMP_R_ERROR_VALIDATING_SIGNATURE 171 +# define CMP_R_EXPECTED_POLLREQ 104 +# define CMP_R_FAILED_BUILDING_OWN_CHAIN 164 +# define CMP_R_FAILED_EXTRACTING_CENTRAL_GEN_KEY 203 +# define CMP_R_FAILED_EXTRACTING_PUBKEY 141 +# define CMP_R_FAILURE_OBTAINING_RANDOM 110 +# define CMP_R_FAIL_INFO_OUT_OF_RANGE 129 +# define CMP_R_GENERATE_CERTREQTEMPLATE 197 +# define CMP_R_GENERATE_CRLSTATUS 198 +# define CMP_R_GETTING_GENP 192 +# define CMP_R_GET_ITAV 199 +# define CMP_R_INVALID_ARGS 100 +# define CMP_R_INVALID_GENP 193 +# define CMP_R_INVALID_KEYSPEC 202 +# define CMP_R_INVALID_OPTION 174 +# define CMP_R_INVALID_ROOTCAKEYUPDATE 195 +# define CMP_R_MISSING_CENTRAL_GEN_KEY 204 +# define CMP_R_MISSING_CERTID 165 +# define CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION 130 +# define CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE 142 +# define CMP_R_MISSING_P10CSR 121 +# define CMP_R_MISSING_PBM_SECRET 166 +# define CMP_R_MISSING_PRIVATE_KEY 131 +# define CMP_R_MISSING_PRIVATE_KEY_FOR_POPO 190 +# define CMP_R_MISSING_PROTECTION 143 +# define CMP_R_MISSING_PUBLIC_KEY 183 +# define CMP_R_MISSING_REFERENCE_CERT 168 +# define CMP_R_MISSING_SECRET 178 +# define CMP_R_MISSING_SENDER_IDENTIFICATION 111 +# define CMP_R_MISSING_TRUST_ANCHOR 179 +# define CMP_R_MISSING_TRUST_STORE 144 +# define CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED 161 +# define CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED 170 +# define CMP_R_MULTIPLE_SAN_SOURCES 102 +# define CMP_R_NO_STDIO 194 +# define CMP_R_NO_SUITABLE_SENDER_CERT 145 +# define CMP_R_NULL_ARGUMENT 103 +# define CMP_R_PKIBODY_ERROR 146 +# define CMP_R_PKISTATUSINFO_NOT_FOUND 132 +# define CMP_R_POLLING_FAILED 172 +# define CMP_R_POTENTIALLY_INVALID_CERTIFICATE 147 +# define CMP_R_RECEIVED_ERROR 180 +# define CMP_R_RECIPNONCE_UNMATCHED 148 +# define CMP_R_REQUEST_NOT_ACCEPTED 149 +# define CMP_R_REQUEST_REJECTED_BY_SERVER 182 +# define CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED 150 +# define CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG 151 +# define CMP_R_TOTAL_TIMEOUT 184 +# define CMP_R_TRANSACTIONID_UNMATCHED 152 +# define CMP_R_TRANSFER_ERROR 159 +# define CMP_R_UNCLEAN_CTX 191 +# define CMP_R_UNEXPECTED_CENTRAL_GEN_KEY 205 +# define CMP_R_UNEXPECTED_CERTPROFILE 196 +# define CMP_R_UNEXPECTED_CRLSTATUSLIST 201 +# define CMP_R_UNEXPECTED_PKIBODY 133 +# define CMP_R_UNEXPECTED_PKISTATUS 185 +# define CMP_R_UNEXPECTED_POLLREQ 105 +# define CMP_R_UNEXPECTED_PVNO 153 +# define CMP_R_UNEXPECTED_SENDER 106 +# define CMP_R_UNKNOWN_ALGORITHM_ID 134 +# define CMP_R_UNKNOWN_CERT_TYPE 135 +# define CMP_R_UNKNOWN_CRL_ISSUER 200 +# define CMP_R_UNKNOWN_PKISTATUS 186 +# define CMP_R_UNSUPPORTED_ALGORITHM 136 +# define CMP_R_UNSUPPORTED_KEY_TYPE 137 +# define CMP_R_UNSUPPORTED_PKIBODY 101 +# define CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC 154 +# define CMP_R_VALUE_TOO_LARGE 175 +# define CMP_R_VALUE_TOO_SMALL 177 +# define CMP_R_WRONG_ALGORITHM_OID 138 +# define CMP_R_WRONG_CERTID 189 +# define CMP_R_WRONG_CERTID_IN_RP 187 +# define CMP_R_WRONG_PBM_VALUE 155 +# define CMP_R_WRONG_RP_COMPONENT_COUNT 188 +# define CMP_R_WRONG_SERIAL_IN_RP 173 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cms.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cms.h new file mode 100644 index 0000000..7206cdb --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cms.h @@ -0,0 +1,511 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\cms.h.in + * + * Copyright 2008-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct CMS_EnvelopedData_st CMS_EnvelopedData; +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_SignedData_st CMS_SignedData; +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; + +SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) +#define sk_CMS_SignerInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_value(sk, idx) ((CMS_SignerInfo *)OPENSSL_sk_value(ossl_check_const_CMS_SignerInfo_sk_type(sk), (idx))) +#define sk_CMS_SignerInfo_new(cmp) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new(ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +#define sk_CMS_SignerInfo_new_null() ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_SignerInfo_new_reserve(cmp, n) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_SignerInfo_compfunc_type(cmp), (n))) +#define sk_CMS_SignerInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_SignerInfo_sk_type(sk), (n)) +#define sk_CMS_SignerInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_delete(sk, i) ((CMS_SignerInfo *)OPENSSL_sk_delete(ossl_check_CMS_SignerInfo_sk_type(sk), (i))) +#define sk_CMS_SignerInfo_delete_ptr(sk, ptr) ((CMS_SignerInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_pop(sk) ((CMS_SignerInfo *)OPENSSL_sk_pop(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_shift(sk) ((CMS_SignerInfo *)OPENSSL_sk_shift(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_SignerInfo_sk_type(sk),ossl_check_CMS_SignerInfo_freefunc_type(freefunc)) +#define sk_CMS_SignerInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), (idx)) +#define sk_CMS_SignerInfo_set(sk, idx, ptr) ((CMS_SignerInfo *)OPENSSL_sk_set(ossl_check_CMS_SignerInfo_sk_type(sk), (idx), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), pnum) +#define sk_CMS_SignerInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_dup(sk) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_copyfunc_type(copyfunc), ossl_check_CMS_SignerInfo_freefunc_type(freefunc))) +#define sk_CMS_SignerInfo_set_cmp_func(sk, cmp) ((sk_CMS_SignerInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey) +#define sk_CMS_RecipientEncryptedKey_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_value(sk, idx) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), (idx))) +#define sk_CMS_RecipientEncryptedKey_new(cmp) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +#define sk_CMS_RecipientEncryptedKey_new_null() ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientEncryptedKey_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientEncryptedKey_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (n)) +#define sk_CMS_RecipientEncryptedKey_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_delete(sk, i) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (i))) +#define sk_CMS_RecipientEncryptedKey_delete_ptr(sk, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_pop(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_pop(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_shift(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_shift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk),ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)) +#define sk_CMS_RecipientEncryptedKey_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), (idx)) +#define sk_CMS_RecipientEncryptedKey_set(sk, idx, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_set(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (idx), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), pnum) +#define sk_CMS_RecipientEncryptedKey_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_dup(sk) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_copyfunc_type(copyfunc), ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc))) +#define sk_CMS_RecipientEncryptedKey_set_cmp_func(sk, cmp) ((sk_CMS_RecipientEncryptedKey_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_RecipientInfo) +#define sk_CMS_RecipientInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_value(sk, idx) ((CMS_RecipientInfo *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientInfo_sk_type(sk), (idx))) +#define sk_CMS_RecipientInfo_new(cmp) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new(ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +#define sk_CMS_RecipientInfo_new_null() ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientInfo_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientInfo_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientInfo_sk_type(sk), (n)) +#define sk_CMS_RecipientInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_delete(sk, i) ((CMS_RecipientInfo *)OPENSSL_sk_delete(ossl_check_CMS_RecipientInfo_sk_type(sk), (i))) +#define sk_CMS_RecipientInfo_delete_ptr(sk, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_pop(sk) ((CMS_RecipientInfo *)OPENSSL_sk_pop(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_shift(sk) ((CMS_RecipientInfo *)OPENSSL_sk_shift(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientInfo_sk_type(sk),ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)) +#define sk_CMS_RecipientInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), (idx)) +#define sk_CMS_RecipientInfo_set(sk, idx, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_set(ossl_check_CMS_RecipientInfo_sk_type(sk), (idx), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), pnum) +#define sk_CMS_RecipientInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_dup(sk) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_copyfunc_type(copyfunc), ossl_check_CMS_RecipientInfo_freefunc_type(freefunc))) +#define sk_CMS_RecipientInfo_set_cmp_func(sk, cmp) ((sk_CMS_RecipientInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, CMS_RevocationInfoChoice) +#define sk_CMS_RevocationInfoChoice_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_value(sk, idx) ((CMS_RevocationInfoChoice *)OPENSSL_sk_value(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), (idx))) +#define sk_CMS_RevocationInfoChoice_new(cmp) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) +#define sk_CMS_RevocationInfoChoice_new_null() ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_null()) +#define sk_CMS_RevocationInfoChoice_new_reserve(cmp, n) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp), (n))) +#define sk_CMS_RevocationInfoChoice_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (n)) +#define sk_CMS_RevocationInfoChoice_free(sk) OPENSSL_sk_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_delete(sk, i) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (i))) +#define sk_CMS_RevocationInfoChoice_delete_ptr(sk, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_pop(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_pop(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_shift(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_shift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk),ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)) +#define sk_CMS_RevocationInfoChoice_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), (idx)) +#define sk_CMS_RevocationInfoChoice_set(sk, idx, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_set(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (idx), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), pnum) +#define sk_CMS_RevocationInfoChoice_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_dup(sk) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_dup(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_copyfunc_type(copyfunc), ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc))) +#define sk_CMS_RevocationInfoChoice_set_cmp_func(sk, cmp) ((sk_CMS_RevocationInfoChoice_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) + + +DECLARE_ASN1_ITEM(CMS_EnvelopedData) +DECLARE_ASN1_ALLOC_FUNCTIONS(CMS_SignedData) +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +DECLARE_ASN1_DUP_FUNCTION(CMS_EnvelopedData) + +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +# 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 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 +# define CMS_NO_SIGNING_TIME 0x400000 + +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 OPENSSL_PEM_H +DECLARE_PEM_rw(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); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); +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); +int CMS_final_digest(CMS_ContentInfo *cms, + const unsigned char *md, unsigned int mdlen, 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_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *libctx, + const char *propq); + +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); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *libctx, const char *propq); + +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); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *libctx, + const char *propq); + +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); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *libctx, + const char *propq); + +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); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *libctx, const char *propq); + +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_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); +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_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *libctx, + const char *propq); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *libctx, + const char *propq); +BIO *CMS_EnvelopedData_decrypt(CMS_EnvelopedData *env, BIO *detached_data, + EVP_PKEY *pkey, X509 *cert, + ASN1_OCTET_STRING *secret, unsigned int flags, + OSSL_LIB_CTX *libctx, const char *propq); + +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, 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(const 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); +BIO *CMS_SignedData_verify(CMS_SignedData *sd, BIO *detached_data, + STACK_OF(X509) *scerts, X509_STORE *store, + STACK_OF(X509) *extra, STACK_OF(X509_CRL) *crls, + unsigned int flags, + OSSL_LIB_CTX *libctx, const char *propq); + +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(const 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); + +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); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *libctx); + +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); +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); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); +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); + +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cmserr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cmserr.h new file mode 100644 index 0000000..5cfe07d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cmserr.h @@ -0,0 +1,126 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CMSERR_H +# define OPENSSL_CMSERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CMS + + +/* + * CMS reason codes. + */ +# define CMS_R_ADD_SIGNER_ERROR 99 +# define CMS_R_ATTRIBUTE_ERROR 161 +# 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_AEAD_SET_TAG_ERROR 184 +# define CMS_R_CIPHER_GET_TAG 185 +# 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_DECODE_ERROR 187 +# 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_ERROR_UNSUPPORTED_STATIC_KEY_AGREEMENT 196 +# define CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR 183 +# 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_INVALID_LABEL 190 +# define CMS_R_INVALID_OAEP_PARAMETERS 191 +# define CMS_R_KDF_PARAMETER_ERROR 186 +# 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_OPERATION_UNSUPPORTED 182 +# define CMS_R_PEER_KEY_ERROR 188 +# 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_SHARED_INFO_ERROR 189 +# 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_ALGORITHM 149 +# define CMS_R_UNKNOWN_ID 150 +# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 +# define CMS_R_UNSUPPORTED_CONTENT_ENCRYPTION_ALGORITHM 194 +# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_ENCRYPTION_TYPE 192 +# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 +# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_LABEL_SOURCE 193 +# define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 +# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 +# define CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM 195 +# 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 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/comp.h b/thirdparty/OpenSSL-3.5.3/include/openssl/comp.h new file mode 100644 index 0000000..90e3951 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/comp.h @@ -0,0 +1,98 @@ +/* + * Copyright 2015-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_COMP_H +# define OPENSSL_COMP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_COMP_H +# endif + +# include + +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + + +# ifndef OPENSSL_NO_COMP + +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); +COMP_METHOD *COMP_zlib_oneshot(void); +COMP_METHOD *COMP_brotli(void); +COMP_METHOD *COMP_brotli_oneshot(void); +COMP_METHOD *COMP_zstd(void); +COMP_METHOD *COMP_zstd_oneshot(void); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define COMP_zlib_cleanup() while(0) continue +# endif + +# ifdef OPENSSL_BIO_H +const BIO_METHOD *BIO_f_zlib(void); +const BIO_METHOD *BIO_f_brotli(void); +const BIO_METHOD *BIO_f_zstd(void); +# endif + +# endif + +typedef struct ssl_comp_st SSL_COMP; + +SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP) +#define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx))) +#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp))) +#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null()) +#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n))) +#define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n)) +#define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i))) +#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc)) +#define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx)) +#define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum) +#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc))) +#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp))) + + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/comperr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/comperr.h new file mode 100644 index 0000000..1948d37 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/comperr.h @@ -0,0 +1,38 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_COMPERR_H +# define OPENSSL_COMPERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_COMP + + +/* + * COMP reason codes. + */ +# define COMP_R_BROTLI_DECODE_ERROR 102 +# define COMP_R_BROTLI_ENCODE_ERROR 103 +# define COMP_R_BROTLI_NOT_SUPPORTED 104 +# define COMP_R_ZLIB_DEFLATE_ERROR 99 +# define COMP_R_ZLIB_INFLATE_ERROR 100 +# define COMP_R_ZLIB_NOT_SUPPORTED 101 +# define COMP_R_ZSTD_COMPRESS_ERROR 105 +# define COMP_R_ZSTD_DECODE_ERROR 106 +# define COMP_R_ZSTD_DECOMPRESS_ERROR 107 +# define COMP_R_ZSTD_NOT_SUPPORTED 108 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/conf.h b/thirdparty/OpenSSL-3.5.3/include/openssl/conf.h new file mode 100644 index 0000000..4e06dec --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/conf.h @@ -0,0 +1,214 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\conf.h.in + * + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif + +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +SKM_DEFINE_STACK_OF_INTERNAL(CONF_VALUE, CONF_VALUE, CONF_VALUE) +#define sk_CONF_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_value(sk, idx) ((CONF_VALUE *)OPENSSL_sk_value(ossl_check_const_CONF_VALUE_sk_type(sk), (idx))) +#define sk_CONF_VALUE_new(cmp) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new(ossl_check_CONF_VALUE_compfunc_type(cmp))) +#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_null()) +#define sk_CONF_VALUE_new_reserve(cmp, n) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_CONF_VALUE_compfunc_type(cmp), (n))) +#define sk_CONF_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CONF_VALUE_sk_type(sk), (n)) +#define sk_CONF_VALUE_free(sk) OPENSSL_sk_free(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_delete(sk, i) ((CONF_VALUE *)OPENSSL_sk_delete(ossl_check_CONF_VALUE_sk_type(sk), (i))) +#define sk_CONF_VALUE_delete_ptr(sk, ptr) ((CONF_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_pop(sk) ((CONF_VALUE *)OPENSSL_sk_pop(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_shift(sk) ((CONF_VALUE *)OPENSSL_sk_shift(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CONF_VALUE_sk_type(sk),ossl_check_CONF_VALUE_freefunc_type(freefunc)) +#define sk_CONF_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), (idx)) +#define sk_CONF_VALUE_set(sk, idx, ptr) ((CONF_VALUE *)OPENSSL_sk_set(ossl_check_CONF_VALUE_sk_type(sk), (idx), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), pnum) +#define sk_CONF_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_dup(sk) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_dup(ossl_check_const_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_copyfunc_type(copyfunc), ossl_check_CONF_VALUE_freefunc_type(freefunc))) +#define sk_CONF_VALUE_set_cmp_func(sk, cmp) ((sk_CONF_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_compfunc_type(cmp))) +DEFINE_LHASH_OF_INTERNAL(CONF_VALUE); +#define lh_CONF_VALUE_new(hfn, cmp) ((LHASH_OF(CONF_VALUE) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_CONF_VALUE_lh_hashfunc_type(hfn), ossl_check_CONF_VALUE_lh_compfunc_type(cmp)), lh_CONF_VALUE_hash_thunk, lh_CONF_VALUE_comp_thunk, lh_CONF_VALUE_doall_thunk, lh_CONF_VALUE_doall_arg_thunk)) +#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_flush(lh) OPENSSL_LH_flush(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_insert(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_insert(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_delete(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_delete(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_retrieve(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_retrieve(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_error(lh) OPENSSL_LH_error(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_num_items(lh) OPENSSL_LH_num_items(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl) +#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn)) + + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif + +/* Module definitions */ +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +STACK_OF(CONF_MODULE); +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); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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 + */ + +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); +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_ex(OSSL_LIB_CTX *libctx, const char *filename, + 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); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/conf_api.h b/thirdparty/OpenSSL-3.5.3/include/openssl/conf_api.h new file mode 100644 index 0000000..ed67d57 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/conf_api.h @@ -0,0 +1,46 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CONF_API_H +# define OPENSSL_CONF_API_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_API_H +# endif + +# 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/thirdparty/OpenSSL-3.5.3/include/openssl/conferr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/conferr.h new file mode 100644 index 0000000..a8798e7 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/conferr.h @@ -0,0 +1,52 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CONFERR_H +# define OPENSSL_CONFERR_H +# pragma once + +# include +# include +# include + + + +/* + * CONF reason codes. + */ +# define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_INVALID_PRAGMA 122 +# define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION 123 +# 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_NUMBER_TOO_LARGE 121 +# define CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION 124 +# define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_RECURSIVE_SECTION_REFERENCE 126 +# define CONF_R_RELATIVE_PATH 125 +# define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 +# define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 +# define CONF_R_SSL_SECTION_EMPTY 119 +# define CONF_R_SSL_SECTION_NOT_FOUND 120 +# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 +# define CONF_R_UNKNOWN_MODULE_NAME 113 +# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 +# define CONF_R_VARIABLE_HAS_NO_VALUE 104 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/configuration.h b/thirdparty/OpenSSL-3.5.3/include/openssl/configuration.h new file mode 100644 index 0000000..8e16a09 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/configuration.h @@ -0,0 +1,185 @@ +/* + * WARNING: do not edit! + * Generated by configdata.pm from Configurations\common0.tmpl, Configurations\windows-makefile.tmpl + * via makefile.in + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# 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_SYS_WIN64A +# define OPENSSL_SYS_WIN64A 1 +# endif +# define OPENSSL_CONFIGURED_API 30500 +# ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +# endif +# ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +# endif +# ifndef OPENSSL_NO_ACVP_TESTS +# define OPENSSL_NO_ACVP_TESTS +# endif +# ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +# endif +# ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +# endif +# ifndef OPENSSL_NO_BROTLI +# define OPENSSL_NO_BROTLI +# endif +# ifndef OPENSSL_NO_BROTLI_DYNAMIC +# define OPENSSL_NO_BROTLI_DYNAMIC +# 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_DEMOS +# define OPENSSL_NO_DEMOS +# endif +# ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +# 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_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +# endif +# ifndef OPENSSL_NO_FIPS_JITTER +# define OPENSSL_NO_FIPS_JITTER +# endif +# ifndef OPENSSL_NO_FIPS_POST +# define OPENSSL_NO_FIPS_POST +# endif +# ifndef OPENSSL_NO_FIPS_SECURITYCHECKS +# define OPENSSL_NO_FIPS_SECURITYCHECKS +# 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_H3DEMO +# define OPENSSL_NO_H3DEMO +# endif +# ifndef OPENSSL_NO_HQINTEROP +# define OPENSSL_NO_HQINTEROP +# endif +# ifndef OPENSSL_NO_JITTER +# define OPENSSL_NO_JITTER +# endif +# ifndef OPENSSL_NO_KTLS +# define OPENSSL_NO_KTLS +# endif +# ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +# endif +# ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +# endif +# ifndef OPENSSL_NO_PIE +# define OPENSSL_NO_PIE +# endif +# ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +# endif +# ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +# endif +# ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +# endif +# ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +# endif +# ifndef OPENSSL_NO_SSLKEYLOG +# define OPENSSL_NO_SSLKEYLOG +# endif +# ifndef OPENSSL_NO_TFO +# define OPENSSL_NO_TFO +# endif +# ifndef OPENSSL_NO_TRACE +# define OPENSSL_NO_TRACE +# 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_ZLIB +# define OPENSSL_NO_ZLIB +# endif +# ifndef OPENSSL_NO_ZLIB_DYNAMIC +# define OPENSSL_NO_ZLIB_DYNAMIC +# endif +# ifndef OPENSSL_NO_ZSTD +# define OPENSSL_NO_ZSTD +# endif +# ifndef OPENSSL_NO_ZSTD_DYNAMIC +# define OPENSSL_NO_ZSTD_DYNAMIC +# endif +# ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +# endif + + +/* Generate 80386 code? */ +# undef I386_ONLY + +/* + * 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 */ +# undef SIXTY_FOUR_BIT_LONG +# define SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +# endif + +# define RC4_INT unsigned int + +# if defined(OPENSSL_NO_COMP) || (defined(OPENSSL_NO_BROTLI) && defined(OPENSSL_NO_ZSTD) && defined(OPENSSL_NO_ZLIB)) +# define OPENSSL_NO_COMP_ALG +# else +# undef OPENSSL_NO_COMP_ALG +# endif + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/conftypes.h b/thirdparty/OpenSSL-3.5.3/include/openssl/conftypes.h new file mode 100644 index 0000000..17cefaa --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/conftypes.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CONFTYPES_H +# define OPENSSL_CONFTYPES_H +# pragma once + +#ifndef OPENSSL_CONF_H +# include +#endif + +/* + * The contents of this file are deprecated and will be made opaque + */ +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); +}; + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; + int flag_dollarid; + int flag_abspath; + char *includedir; + OSSL_LIB_CTX *libctx; +}; + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/core.h b/thirdparty/OpenSSL-3.5.3/include/openssl/core.h new file mode 100644 index 0000000..18c1991 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/core.h @@ -0,0 +1,236 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CORE_H +# define OPENSSL_CORE_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Base types + * ---------- + * + * These are the types that the OpenSSL core and providers have in common + * to communicate data between them. + */ + +/* Opaque handles to be used with core upcall functions from providers */ +typedef struct ossl_core_handle_st OSSL_CORE_HANDLE; +typedef struct openssl_core_ctx_st OPENSSL_CORE_CTX; +typedef struct ossl_core_bio_st OSSL_CORE_BIO; + +/* + * Dispatch table element. function_id numbers and the functions are defined + * in core_dispatch.h, see macros with 'OSSL_CORE_MAKE_FUNC' in their names. + * + * An array of these is always terminated by function_id == 0 + */ +struct ossl_dispatch_st { + int function_id; + void (*function)(void); +}; + +# define OSSL_DISPATCH_END \ + { 0, NULL } + +/* + * Other items, essentially an int<->pointer map element. + * + * We make this type distinct from OSSL_DISPATCH to ensure that dispatch + * tables remain tables with function pointers only. + * + * This is used whenever we need to pass things like a table of error reason + * codes <-> reason string maps, ... + * + * Usage determines which field works as key if any, rather than field order. + * + * An array of these is always terminated by id == 0 && ptr == NULL + */ +struct ossl_item_st { + unsigned int id; + void *ptr; +}; + +/* + * Type to tie together algorithm names, property definition string and + * the algorithm implementation in the form of a dispatch table. + * + * An array of these is always terminated by algorithm_names == NULL + */ +struct ossl_algorithm_st { + const char *algorithm_names; /* key */ + const char *property_definition; /* key */ + const OSSL_DISPATCH *implementation; + const char *algorithm_description; +}; + +/* + * Type to pass object data in a uniform way, without exposing the object + * structure. + * + * An array of these is always terminated by key == NULL + */ +struct ossl_param_st { + const char *key; /* the name of the parameter */ + unsigned int data_type; /* declare what kind of content is in buffer */ + void *data; /* value being passed in or out */ + size_t data_size; /* data size */ + size_t return_size; /* returned content size */ +}; + +/* Currently supported OSSL_PARAM data types */ +/* + * OSSL_PARAM_INTEGER and OSSL_PARAM_UNSIGNED_INTEGER + * are arbitrary length and therefore require an arbitrarily sized buffer, + * since they may be used to pass numbers larger than what is natively + * available. + * + * The number must be buffered in native form, i.e. MSB first on B_ENDIAN + * systems and LSB first on L_ENDIAN systems. This means that arbitrary + * native integers can be stored in the buffer, just make sure that the + * buffer size is correct and the buffer itself is properly aligned (for + * example by having the buffer field point at a C integer). + */ +# define OSSL_PARAM_INTEGER 1 +# define OSSL_PARAM_UNSIGNED_INTEGER 2 +/*- + * OSSL_PARAM_REAL + * is a C binary floating point values in native form and alignment. + */ +# define OSSL_PARAM_REAL 3 +/*- + * OSSL_PARAM_UTF8_STRING + * is a printable string. It is expected to be printed as it is. + */ +# define OSSL_PARAM_UTF8_STRING 4 +/*- + * OSSL_PARAM_OCTET_STRING + * is a string of bytes with no further specification. It is expected to be + * printed as a hexdump. + */ +# define OSSL_PARAM_OCTET_STRING 5 +/*- + * OSSL_PARAM_UTF8_PTR + * is a pointer to a printable string. It is expected to be printed as it is. + * + * The difference between this and OSSL_PARAM_UTF8_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_UTF8_STRING type. + */ +# define OSSL_PARAM_UTF8_PTR 6 +/*- + * OSSL_PARAM_OCTET_PTR + * is a pointer to a string of bytes with no further specification. It is + * expected to be printed as a hexdump. + * + * The difference between this and OSSL_PARAM_OCTET_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_OCTET_STRING type. + */ +# define OSSL_PARAM_OCTET_PTR 7 + +/* + * Typedef for the thread stop handling callback. Used both internally and by + * providers. + * + * Providers may register for notifications about threads stopping by + * registering a callback to hear about such events. Providers register the + * callback using the OSSL_FUNC_CORE_THREAD_START function in the |in| dispatch + * table passed to OSSL_provider_init(). The arg passed back to a provider will + * be the provider side context object. + */ +typedef void (*OSSL_thread_stop_handler_fn)(void *arg); + + +/*- + * Provider entry point + * -------------------- + * + * This function is expected to be present in any dynamically loadable + * provider module. By definition, if this function doesn't exist in a + * module, that module is not an OpenSSL provider module. + */ +/*- + * |handle| pointer to opaque type OSSL_CORE_HANDLE. This can be used + * together with some functions passed via |in| to query data. + * |in| is the array of functions that the Core passes to the provider. + * |out| will be the array of base functions that the provider passes + * back to the Core. + * |provctx| a provider side context object, optionally created if the + * provider needs it. This value is passed to other provider + * functions, notably other context constructors. + */ +typedef int (OSSL_provider_init_fn)(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in, + const OSSL_DISPATCH **out, + void **provctx); +# ifdef __VMS +# pragma names save +# pragma names uppercase,truncated +# endif +OPENSSL_EXPORT OSSL_provider_init_fn OSSL_provider_init; +# ifdef __VMS +# pragma names restore +# endif + +/* + * Generic callback function signature. + * + * The expectation is that any provider function that wants to offer + * a callback / hook can do so by taking an argument with this type, + * as well as a pointer to caller-specific data. When calling the + * callback, the provider function can populate an OSSL_PARAM array + * with data of its choice and pass that in the callback call, along + * with the caller data argument. + * + * libcrypto may use the OSSL_PARAM array to create arguments for an + * application callback it knows about. + */ +typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg); +typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[], + OSSL_PARAM out_params[], void *arg); +/* + * Passphrase callback function signature + * + * This is similar to the generic callback function above, but adds a + * result parameter. + */ +typedef int (OSSL_PASSPHRASE_CALLBACK)(char *pass, size_t pass_size, + size_t *pass_len, + const OSSL_PARAM params[], void *arg); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/core_dispatch.h b/thirdparty/OpenSSL-3.5.3/include/openssl/core_dispatch.h new file mode 100644 index 0000000..13de04e --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/core_dispatch.h @@ -0,0 +1,1145 @@ +/* + * Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CORE_NUMBERS_H +# define OPENSSL_CORE_NUMBERS_H +# pragma once + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Generic function pointer for provider method arrays, or other contexts where + * functions of various signatures must occupy a common slot in an array of + * structures. + */ +typedef void (*OSSL_FUNC)(void); + +/*- + * Identities + * ---------- + * + * All series start with 1, to allow 0 to be an array terminator. + * For any FUNC identity, we also provide a function signature typedef + * and a static inline function to extract a function pointer from a + * OSSL_DISPATCH element in a type safe manner. + * + * Names: + * for any function base name 'foo' (uppercase form 'FOO'), we will have + * the following: + * - a macro for the identity with the name OSSL_FUNC_'FOO' or derivatives + * thereof (to be specified further down) + * - a function signature typedef with the name OSSL_FUNC_'foo'_fn + * - a function pointer extractor function with the name OSSL_FUNC_'foo' + */ + +/* + * Helper macro to create the function signature typedef and the extractor + * |type| is the return-type of the function, |name| is the name of the + * function to fetch, and |args| is a parenthesized list of parameters + * for the function (that is, it is |name|'s function signature). + * Note: This is considered a "reserved" internal macro. Applications should + * not use this or assume its existence. + */ +#define OSSL_CORE_MAKE_FUNC(type,name,args) \ + typedef type (OSSL_FUNC_##name##_fn)args; \ + static ossl_unused ossl_inline \ + OSSL_FUNC_##name##_fn *OSSL_FUNC_##name(const OSSL_DISPATCH *opf) \ + { \ + return (OSSL_FUNC_##name##_fn *)opf->function; \ + } + +/* + * Core function identities, for the two OSSL_DISPATCH tables being passed + * in the OSSL_provider_init call. + * + * 0 serves as a marker for the end of the OSSL_DISPATCH array, and must + * therefore NEVER be used as a function identity. + */ +/* Functions provided by the Core to the provider, reserved numbers 1-1023 */ +# define OSSL_FUNC_CORE_GETTABLE_PARAMS 1 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + core_gettable_params,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_GET_PARAMS 2 +OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_CORE_HANDLE *prov, + OSSL_PARAM params[])) +# define OSSL_FUNC_CORE_THREAD_START 3 +OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_CORE_HANDLE *prov, + OSSL_thread_stop_handler_fn handfn, + void *arg)) +# define OSSL_FUNC_CORE_GET_LIBCTX 4 +OSSL_CORE_MAKE_FUNC(OPENSSL_CORE_CTX *,core_get_libctx, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_NEW_ERROR 5 +OSSL_CORE_MAKE_FUNC(void,core_new_error,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_SET_ERROR_DEBUG 6 +OSSL_CORE_MAKE_FUNC(void,core_set_error_debug, + (const OSSL_CORE_HANDLE *prov, + const char *file, int line, const char *func)) +# define OSSL_FUNC_CORE_VSET_ERROR 7 +OSSL_CORE_MAKE_FUNC(void,core_vset_error, + (const OSSL_CORE_HANDLE *prov, + uint32_t reason, const char *fmt, va_list args)) +# define OSSL_FUNC_CORE_SET_ERROR_MARK 8 +OSSL_CORE_MAKE_FUNC(int, core_set_error_mark, (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK 9 +OSSL_CORE_MAKE_FUNC(int, core_clear_last_error_mark, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_POP_ERROR_TO_MARK 10 +OSSL_CORE_MAKE_FUNC(int, core_pop_error_to_mark, (const OSSL_CORE_HANDLE *prov)) + + +/* Functions to access the OBJ database */ + +#define OSSL_FUNC_CORE_OBJ_ADD_SIGID 11 +#define OSSL_FUNC_CORE_OBJ_CREATE 12 + +OSSL_CORE_MAKE_FUNC(int, core_obj_add_sigid, + (const OSSL_CORE_HANDLE *prov, const char *sign_name, + const char *digest_name, const char *pkey_name)) +OSSL_CORE_MAKE_FUNC(int, core_obj_create, + (const OSSL_CORE_HANDLE *prov, const char *oid, + const char *sn, const char *ln)) + +/* Memory allocation, freeing, clearing. */ +#define OSSL_FUNC_CRYPTO_MALLOC 20 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_ZALLOC 21 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_FREE 22 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_FREE 23 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_clear_free, (void *ptr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_REALLOC 24 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_realloc, (void *addr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_REALLOC 25 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_clear_realloc, (void *addr, size_t old_num, size_t num, + const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_MALLOC 26 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ZALLOC 27 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_FREE 28 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_CLEAR_FREE 29 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_clear_free, (void *ptr, size_t num, const char *file, + int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ALLOCATED 30 +OSSL_CORE_MAKE_FUNC(int, + CRYPTO_secure_allocated, (const void *ptr)) +#define OSSL_FUNC_OPENSSL_CLEANSE 31 +OSSL_CORE_MAKE_FUNC(void, + OPENSSL_cleanse, (void *ptr, size_t len)) + +/* Bio functions provided by the core */ +#define OSSL_FUNC_BIO_NEW_FILE 40 +#define OSSL_FUNC_BIO_NEW_MEMBUF 41 +#define OSSL_FUNC_BIO_READ_EX 42 +#define OSSL_FUNC_BIO_WRITE_EX 43 +#define OSSL_FUNC_BIO_UP_REF 44 +#define OSSL_FUNC_BIO_FREE 45 +#define OSSL_FUNC_BIO_VPRINTF 46 +#define OSSL_FUNC_BIO_VSNPRINTF 47 +#define OSSL_FUNC_BIO_PUTS 48 +#define OSSL_FUNC_BIO_GETS 49 +#define OSSL_FUNC_BIO_CTRL 50 + + +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_file, (const char *filename, + const char *mode)) +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_membuf, (const void *buf, int len)) +OSSL_CORE_MAKE_FUNC(int, BIO_read_ex, (OSSL_CORE_BIO *bio, void *data, + size_t data_len, size_t *bytes_read)) +OSSL_CORE_MAKE_FUNC(int, BIO_write_ex, (OSSL_CORE_BIO *bio, const void *data, + size_t data_len, size_t *written)) +OSSL_CORE_MAKE_FUNC(int, BIO_gets, (OSSL_CORE_BIO *bio, char *buf, int size)) +OSSL_CORE_MAKE_FUNC(int, BIO_puts, (OSSL_CORE_BIO *bio, const char *str)) +OSSL_CORE_MAKE_FUNC(int, BIO_up_ref, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_free, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_vprintf, (OSSL_CORE_BIO *bio, const char *format, + va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_vsnprintf, + (char *buf, size_t n, const char *fmt, va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_ctrl, (OSSL_CORE_BIO *bio, + int cmd, long num, void *ptr)) + +/* New seeding functions prototypes with the 101-104 series */ +#define OSSL_FUNC_CLEANUP_USER_ENTROPY 96 +#define OSSL_FUNC_CLEANUP_USER_NONCE 97 +#define OSSL_FUNC_GET_USER_ENTROPY 98 +#define OSSL_FUNC_GET_USER_NONCE 99 + +#define OSSL_FUNC_INDICATOR_CB 95 +OSSL_CORE_MAKE_FUNC(void, indicator_cb, (OPENSSL_CORE_CTX *ctx, + OSSL_INDICATOR_CALLBACK **cb)) +#define OSSL_FUNC_SELF_TEST_CB 100 +OSSL_CORE_MAKE_FUNC(void, self_test_cb, (OPENSSL_CORE_CTX *ctx, OSSL_CALLBACK **cb, + void **cbarg)) + +/* Functions to get seed material from the operating system */ +#define OSSL_FUNC_GET_ENTROPY 101 +#define OSSL_FUNC_CLEANUP_ENTROPY 102 +#define OSSL_FUNC_GET_NONCE 103 +#define OSSL_FUNC_CLEANUP_NONCE 104 +OSSL_CORE_MAKE_FUNC(size_t, get_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len)) +OSSL_CORE_MAKE_FUNC(size_t, get_user_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_user_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) +OSSL_CORE_MAKE_FUNC(size_t, get_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, + size_t max_len, const void *salt, + size_t salt_len)) +OSSL_CORE_MAKE_FUNC(size_t, get_user_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, + size_t max_len, const void *salt, + size_t salt_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_user_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) + +/* Functions to access the core's providers */ +#define OSSL_FUNC_PROVIDER_REGISTER_CHILD_CB 105 +#define OSSL_FUNC_PROVIDER_DEREGISTER_CHILD_CB 106 +#define OSSL_FUNC_PROVIDER_NAME 107 +#define OSSL_FUNC_PROVIDER_GET0_PROVIDER_CTX 108 +#define OSSL_FUNC_PROVIDER_GET0_DISPATCH 109 +#define OSSL_FUNC_PROVIDER_UP_REF 110 +#define OSSL_FUNC_PROVIDER_FREE 111 + +OSSL_CORE_MAKE_FUNC(int, provider_register_child_cb, + (const OSSL_CORE_HANDLE *handle, + int (*create_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*remove_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*global_props_cb)(const char *props, void *cbdata), + void *cbdata)) +OSSL_CORE_MAKE_FUNC(void, provider_deregister_child_cb, + (const OSSL_CORE_HANDLE *handle)) +OSSL_CORE_MAKE_FUNC(const char *, provider_name, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(void *, provider_get0_provider_ctx, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(const OSSL_DISPATCH *, provider_get0_dispatch, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(int, provider_up_ref, + (const OSSL_CORE_HANDLE *prov, int activate)) +OSSL_CORE_MAKE_FUNC(int, provider_free, + (const OSSL_CORE_HANDLE *prov, int deactivate)) + +/* Additional error functions provided by the core */ +# define OSSL_FUNC_CORE_COUNT_TO_MARK 120 +OSSL_CORE_MAKE_FUNC(int, core_count_to_mark, (const OSSL_CORE_HANDLE *prov)) + +/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */ +# define OSSL_FUNC_PROVIDER_TEARDOWN 1024 +OSSL_CORE_MAKE_FUNC(void, provider_teardown, (void *provctx)) +# define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS 1025 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + provider_gettable_params,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_PARAMS 1026 +OSSL_CORE_MAKE_FUNC(int, provider_get_params, (void *provctx, + OSSL_PARAM params[])) +# define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027 +OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation, + (void *provctx, int operation_id, int *no_store)) +# define OSSL_FUNC_PROVIDER_UNQUERY_OPERATION 1028 +OSSL_CORE_MAKE_FUNC(void, provider_unquery_operation, + (void *provctx, int operation_id, const OSSL_ALGORITHM *)) +# define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1029 +OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,provider_get_reason_strings, + (void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_CAPABILITIES 1030 +OSSL_CORE_MAKE_FUNC(int, provider_get_capabilities, (void *provctx, + const char *capability, OSSL_CALLBACK *cb, void *arg)) +# define OSSL_FUNC_PROVIDER_SELF_TEST 1031 +OSSL_CORE_MAKE_FUNC(int, provider_self_test, (void *provctx)) +# define OSSL_FUNC_PROVIDER_RANDOM_BYTES 1032 +OSSL_CORE_MAKE_FUNC(int, provider_random_bytes, (void *provctx, int which, + void *buf, size_t n, + unsigned int strength)) + +/* Libssl related functions */ +#define OSSL_FUNC_SSL_QUIC_TLS_CRYPTO_SEND 2001 +OSSL_CORE_MAKE_FUNC(int, SSL_QUIC_TLS_crypto_send, + (SSL *s, const unsigned char *buf, size_t buf_len, + size_t *consumed, void *arg)) +#define OSSL_FUNC_SSL_QUIC_TLS_CRYPTO_RECV_RCD 2002 +OSSL_CORE_MAKE_FUNC(int, SSL_QUIC_TLS_crypto_recv_rcd, + (SSL *s, const unsigned char **buf, size_t *bytes_read, + void *arg)) +#define OSSL_FUNC_SSL_QUIC_TLS_CRYPTO_RELEASE_RCD 2003 +OSSL_CORE_MAKE_FUNC(int, SSL_QUIC_TLS_crypto_release_rcd, + (SSL *s, size_t bytes_read, void *arg)) +#define OSSL_FUNC_SSL_QUIC_TLS_YIELD_SECRET 2004 +OSSL_CORE_MAKE_FUNC(int, SSL_QUIC_TLS_yield_secret, + (SSL *s, uint32_t prot_level, int direction, + const unsigned char *secret, size_t secret_len, void *arg)) +#define OSSL_FUNC_SSL_QUIC_TLS_GOT_TRANSPORT_PARAMS 2005 +OSSL_CORE_MAKE_FUNC(int, SSL_QUIC_TLS_got_transport_params, + (SSL *s, const unsigned char *params, size_t params_len, + void *arg)) +#define OSSL_FUNC_SSL_QUIC_TLS_ALERT 2006 +OSSL_CORE_MAKE_FUNC(int, SSL_QUIC_TLS_alert, + (SSL *s, unsigned char alert_code, void *arg)) + +/* Operations */ + +# define OSSL_OP_DIGEST 1 +# define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */ +# define OSSL_OP_MAC 3 +# define OSSL_OP_KDF 4 +# define OSSL_OP_RAND 5 +# define OSSL_OP_KEYMGMT 10 +# define OSSL_OP_KEYEXCH 11 +# define OSSL_OP_SIGNATURE 12 +# define OSSL_OP_ASYM_CIPHER 13 +# define OSSL_OP_KEM 14 +# define OSSL_OP_SKEYMGMT 15 +/* New section for non-EVP operations */ +# define OSSL_OP_ENCODER 20 +# define OSSL_OP_DECODER 21 +# define OSSL_OP_STORE 22 +/* Highest known operation number */ +# define OSSL_OP__HIGHEST 22 + +/* Digests */ + +# define OSSL_FUNC_DIGEST_NEWCTX 1 +# define OSSL_FUNC_DIGEST_INIT 2 +# define OSSL_FUNC_DIGEST_UPDATE 3 +# define OSSL_FUNC_DIGEST_FINAL 4 +# define OSSL_FUNC_DIGEST_DIGEST 5 +# define OSSL_FUNC_DIGEST_FREECTX 6 +# define OSSL_FUNC_DIGEST_DUPCTX 7 +# define OSSL_FUNC_DIGEST_GET_PARAMS 8 +# define OSSL_FUNC_DIGEST_SET_CTX_PARAMS 9 +# define OSSL_FUNC_DIGEST_GET_CTX_PARAMS 10 +# define OSSL_FUNC_DIGEST_GETTABLE_PARAMS 11 +# define OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_DIGEST_GETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_DIGEST_SQUEEZE 14 +# define OSSL_FUNC_DIGEST_COPYCTX 15 + +OSSL_CORE_MAKE_FUNC(void *, digest_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, digest_init, (void *dctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_update, + (void *dctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, digest_final, + (void *dctx, + unsigned char *out, size_t *outl, size_t outsz)) +OSSL_CORE_MAKE_FUNC(int, digest_squeeze, + (void *dctx, + unsigned char *out, size_t *outl, size_t outsz)) +OSSL_CORE_MAKE_FUNC(int, digest_digest, + (void *provctx, const unsigned char *in, size_t inl, + unsigned char *out, size_t *outl, size_t outsz)) + +OSSL_CORE_MAKE_FUNC(void, digest_freectx, (void *dctx)) +OSSL_CORE_MAKE_FUNC(void *, digest_dupctx, (void *dctx)) +OSSL_CORE_MAKE_FUNC(void, digest_copyctx, (void *outctx, void *inctx)) + +OSSL_CORE_MAKE_FUNC(int, digest_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_settable_ctx_params, + (void *dctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_ctx_params, + (void *dctx, void *provctx)) + +/* Symmetric Ciphers */ + +# define OSSL_FUNC_CIPHER_NEWCTX 1 +# define OSSL_FUNC_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_CIPHER_DECRYPT_INIT 3 +# define OSSL_FUNC_CIPHER_UPDATE 4 +# define OSSL_FUNC_CIPHER_FINAL 5 +# define OSSL_FUNC_CIPHER_CIPHER 6 +# define OSSL_FUNC_CIPHER_FREECTX 7 +# define OSSL_FUNC_CIPHER_DUPCTX 8 +# define OSSL_FUNC_CIPHER_GET_PARAMS 9 +# define OSSL_FUNC_CIPHER_GET_CTX_PARAMS 10 +# define OSSL_FUNC_CIPHER_SET_CTX_PARAMS 11 +# define OSSL_FUNC_CIPHER_GETTABLE_PARAMS 12 +# define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS 14 +# define OSSL_FUNC_CIPHER_PIPELINE_ENCRYPT_INIT 15 +# define OSSL_FUNC_CIPHER_PIPELINE_DECRYPT_INIT 16 +# define OSSL_FUNC_CIPHER_PIPELINE_UPDATE 17 +# define OSSL_FUNC_CIPHER_PIPELINE_FINAL 18 +# define OSSL_FUNC_CIPHER_ENCRYPT_SKEY_INIT 19 +# define OSSL_FUNC_CIPHER_DECRYPT_SKEY_INIT 20 + +OSSL_CORE_MAKE_FUNC(void *, cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_encrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_decrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_update, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, cipher_final, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(int, cipher_cipher, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, cipher_pipeline_encrypt_init, + (void *cctx, + const unsigned char *key, size_t keylen, + size_t numpipes, const unsigned char **iv, size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_pipeline_decrypt_init, + (void *cctx, + const unsigned char *key, size_t keylen, + size_t numpipes, const unsigned char **iv, size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_pipeline_update, + (void *cctx, size_t numpipes, + unsigned char **out, size_t *outl, const size_t *outsize, + const unsigned char **in, const size_t *inl)) +OSSL_CORE_MAKE_FUNC(int, cipher_pipeline_final, + (void *cctx, size_t numpipes, + unsigned char **out, size_t *outl, const size_t *outsize)) +OSSL_CORE_MAKE_FUNC(void, cipher_freectx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(void *, cipher_dupctx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_get_ctx_params, (void *cctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_set_ctx_params, (void *cctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_settable_ctx_params, + (void *cctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_ctx_params, + (void *cctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_encrypt_skey_init, (void *cctx, + void *skeydata, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_decrypt_skey_init, (void *cctx, + void *skeydata, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) + +/* MACs */ + +# define OSSL_FUNC_MAC_NEWCTX 1 +# define OSSL_FUNC_MAC_DUPCTX 2 +# define OSSL_FUNC_MAC_FREECTX 3 +# define OSSL_FUNC_MAC_INIT 4 +# define OSSL_FUNC_MAC_UPDATE 5 +# define OSSL_FUNC_MAC_FINAL 6 +# define OSSL_FUNC_MAC_GET_PARAMS 7 +# define OSSL_FUNC_MAC_GET_CTX_PARAMS 8 +# define OSSL_FUNC_MAC_SET_CTX_PARAMS 9 +# define OSSL_FUNC_MAC_GETTABLE_PARAMS 10 +# define OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS 11 +# define OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_MAC_INIT_SKEY 13 + +OSSL_CORE_MAKE_FUNC(void *, mac_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, mac_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, mac_freectx, (void *mctx)) +OSSL_CORE_MAKE_FUNC(int, mac_init, (void *mctx, const unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_update, + (void *mctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, mac_final, + (void *mctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_settable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, mac_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_get_ctx_params, + (void *mctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_set_ctx_params, + (void *mctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_init_skey, (void *mctx, void *key, const OSSL_PARAM params[])) + +/* KDFs and PRFs */ + +# define OSSL_FUNC_KDF_NEWCTX 1 +# define OSSL_FUNC_KDF_DUPCTX 2 +# define OSSL_FUNC_KDF_FREECTX 3 +# define OSSL_FUNC_KDF_RESET 4 +# define OSSL_FUNC_KDF_DERIVE 5 +# define OSSL_FUNC_KDF_GETTABLE_PARAMS 6 +# define OSSL_FUNC_KDF_GETTABLE_CTX_PARAMS 7 +# define OSSL_FUNC_KDF_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KDF_GET_PARAMS 9 +# define OSSL_FUNC_KDF_GET_CTX_PARAMS 10 +# define OSSL_FUNC_KDF_SET_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kdf_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, kdf_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, kdf_freectx, (void *kctx)) +OSSL_CORE_MAKE_FUNC(void, kdf_reset, (void *kctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_derive, (void *kctx, unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_settable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_get_ctx_params, + (void *kctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_set_ctx_params, + (void *kctx, const OSSL_PARAM params[])) + +/* RAND */ + +# define OSSL_FUNC_RAND_NEWCTX 1 +# define OSSL_FUNC_RAND_FREECTX 2 +# define OSSL_FUNC_RAND_INSTANTIATE 3 +# define OSSL_FUNC_RAND_UNINSTANTIATE 4 +# define OSSL_FUNC_RAND_GENERATE 5 +# define OSSL_FUNC_RAND_RESEED 6 +# define OSSL_FUNC_RAND_NONCE 7 +# define OSSL_FUNC_RAND_ENABLE_LOCKING 8 +# define OSSL_FUNC_RAND_LOCK 9 +# define OSSL_FUNC_RAND_UNLOCK 10 +# define OSSL_FUNC_RAND_GETTABLE_PARAMS 11 +# define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_RAND_GET_PARAMS 14 +# define OSSL_FUNC_RAND_GET_CTX_PARAMS 15 +# define OSSL_FUNC_RAND_SET_CTX_PARAMS 16 +# define OSSL_FUNC_RAND_VERIFY_ZEROIZATION 17 +# define OSSL_FUNC_RAND_GET_SEED 18 +# define OSSL_FUNC_RAND_CLEAR_SEED 19 + +OSSL_CORE_MAKE_FUNC(void *,rand_newctx, + (void *provctx, void *parent, + const OSSL_DISPATCH *parent_calls)) +OSSL_CORE_MAKE_FUNC(void,rand_freectx, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_instantiate, + (void *vdrbg, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_uninstantiate, (void *vdrbg)) +OSSL_CORE_MAKE_FUNC(int,rand_generate, + (void *vctx, unsigned char *out, size_t outlen, + unsigned int strength, int prediction_resistance, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(int,rand_reseed, + (void *vctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(size_t,rand_nonce, + (void *vctx, unsigned char *out, unsigned int strength, + size_t min_noncelen, size_t max_noncelen)) +OSSL_CORE_MAKE_FUNC(int,rand_enable_locking, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_lock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(void,rand_unlock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_settable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int,rand_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void,rand_set_callbacks, + (void *vctx, OSSL_INOUT_CALLBACK *get_entropy, + OSSL_CALLBACK *cleanup_entropy, + OSSL_INOUT_CALLBACK *get_nonce, + OSSL_CALLBACK *cleanup_nonce, void *arg)) +OSSL_CORE_MAKE_FUNC(int,rand_verify_zeroization, + (void *vctx)) +OSSL_CORE_MAKE_FUNC(size_t,rand_get_seed, + (void *vctx, unsigned char **buffer, + int entropy, size_t min_len, size_t max_len, + int prediction_resistance, + const unsigned char *adin, size_t adin_len)) +OSSL_CORE_MAKE_FUNC(void,rand_clear_seed, + (void *vctx, unsigned char *buffer, size_t b_len)) + +/*- + * Key management + * + * The Key Management takes care of provider side key objects, and includes + * all current functionality to create them, destroy them, set parameters + * and key material, etc, essentially everything that manipulates the keys + * themselves and their parameters. + * + * The key objects are commonly referred to as |keydata|, and it MUST be able + * to contain parameters if the key has any, the public key and the private + * key. All parts are optional, but their presence determines what can be + * done with the key object in terms of encryption, signature, and so on. + * The assumption from libcrypto is that the key object contains any of the + * following data combinations: + * + * - parameters only + * - public key only + * - public key + private key + * - parameters + public key + * - parameters + public key + private key + * + * What "parameters", "public key" and "private key" means in detail is left + * to the implementation. In the case of DH and DSA, they would typically + * include domain parameters, while for certain variants of RSA, they would + * typically include PSS or OAEP parameters. + * + * Key objects are created with OSSL_FUNC_keymgmt_new() and destroyed with + * OSSL_FUNC_keymgmt_free(). Key objects can have data filled in with + * OSSL_FUNC_keymgmt_import(). + * + * Three functions are made available to check what selection of data is + * present in a key object: OSSL_FUNC_keymgmt_has_parameters(), + * OSSL_FUNC_keymgmt_has_public_key(), and OSSL_FUNC_keymgmt_has_private_key(), + */ + +/* Key data subset selection - individual bits */ +# define OSSL_KEYMGMT_SELECT_PRIVATE_KEY 0x01 +# define OSSL_KEYMGMT_SELECT_PUBLIC_KEY 0x02 +# define OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS 0x04 +# define OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS 0x80 + +/* Key data subset selection - combinations */ +# define OSSL_KEYMGMT_SELECT_ALL_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS \ + | OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS) +# define OSSL_KEYMGMT_SELECT_KEYPAIR \ + ( OSSL_KEYMGMT_SELECT_PRIVATE_KEY | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define OSSL_KEYMGMT_SELECT_ALL \ + ( OSSL_KEYMGMT_SELECT_KEYPAIR | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) + +# define OSSL_KEYMGMT_VALIDATE_FULL_CHECK 0 +# define OSSL_KEYMGMT_VALIDATE_QUICK_CHECK 1 + +/* Basic key object creation */ +# define OSSL_FUNC_KEYMGMT_NEW 1 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_new, (void *provctx)) + +/* Generation, a more complex constructor */ +# define OSSL_FUNC_KEYMGMT_GEN_INIT 2 +# define OSSL_FUNC_KEYMGMT_GEN_SET_TEMPLATE 3 +# define OSSL_FUNC_KEYMGMT_GEN_SET_PARAMS 4 +# define OSSL_FUNC_KEYMGMT_GEN_SETTABLE_PARAMS 5 +# define OSSL_FUNC_KEYMGMT_GEN 6 +# define OSSL_FUNC_KEYMGMT_GEN_CLEANUP 7 +# define OSSL_FUNC_KEYMGMT_GEN_GET_PARAMS 15 +# define OSSL_FUNC_KEYMGMT_GEN_GETTABLE_PARAMS 16 + +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen_init, + (void *provctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_template, + (void *genctx, void *templ)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_params, + (void *genctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + keymgmt_gen_settable_params, + (void *genctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_get_params, + (void *genctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_gen_gettable_params, + (void *genctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen, + (void *genctx, OSSL_CALLBACK *cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(void, keymgmt_gen_cleanup, (void *genctx)) + +/* Key loading by object reference */ +# define OSSL_FUNC_KEYMGMT_LOAD 8 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_load, + (const void *reference, size_t reference_sz)) + +/* Basic key object destruction */ +# define OSSL_FUNC_KEYMGMT_FREE 10 +OSSL_CORE_MAKE_FUNC(void, keymgmt_free, (void *keydata)) + +/* Key object information, with discovery */ +#define OSSL_FUNC_KEYMGMT_GET_PARAMS 11 +#define OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS 12 +OSSL_CORE_MAKE_FUNC(int, keymgmt_get_params, + (void *keydata, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_gettable_params, + (void *provctx)) + +#define OSSL_FUNC_KEYMGMT_SET_PARAMS 13 +#define OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS 14 +OSSL_CORE_MAKE_FUNC(int, keymgmt_set_params, + (void *keydata, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_settable_params, + (void *provctx)) + +/* Key checks - discovery of supported operations */ +# define OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME 20 +OSSL_CORE_MAKE_FUNC(const char *, keymgmt_query_operation_name, + (int operation_id)) + +/* Key checks - key data content checks */ +# define OSSL_FUNC_KEYMGMT_HAS 21 +OSSL_CORE_MAKE_FUNC(int, keymgmt_has, (const void *keydata, int selection)) + +/* Key checks - validation */ +# define OSSL_FUNC_KEYMGMT_VALIDATE 22 +OSSL_CORE_MAKE_FUNC(int, keymgmt_validate, (const void *keydata, int selection, + int checktype)) + +/* Key checks - matching */ +# define OSSL_FUNC_KEYMGMT_MATCH 23 +OSSL_CORE_MAKE_FUNC(int, keymgmt_match, + (const void *keydata1, const void *keydata2, + int selection)) + +/* Import and export functions, with discovery */ +# define OSSL_FUNC_KEYMGMT_IMPORT 40 +# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES 41 +# define OSSL_FUNC_KEYMGMT_EXPORT 42 +# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES 43 +OSSL_CORE_MAKE_FUNC(int, keymgmt_import, + (void *keydata, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types, + (int selection)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_export, + (void *keydata, int selection, + OSSL_CALLBACK *param_cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, + (int selection)) + +/* Dup function, constructor */ +# define OSSL_FUNC_KEYMGMT_DUP 44 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_dup, + (const void *keydata_from, int selection)) + +/* Extended import and export functions */ +# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES_EX 45 +# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES_EX 46 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types_ex, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types_ex, + (void *provctx, int selection)) + +/* Key Exchange */ + +# define OSSL_FUNC_KEYEXCH_NEWCTX 1 +# define OSSL_FUNC_KEYEXCH_INIT 2 +# define OSSL_FUNC_KEYEXCH_DERIVE 3 +# define OSSL_FUNC_KEYEXCH_SET_PEER 4 +# define OSSL_FUNC_KEYEXCH_FREECTX 5 +# define OSSL_FUNC_KEYEXCH_DUPCTX 6 +# define OSSL_FUNC_KEYEXCH_SET_CTX_PARAMS 7 +# define OSSL_FUNC_KEYEXCH_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KEYEXCH_GET_CTX_PARAMS 9 +# define OSSL_FUNC_KEYEXCH_GETTABLE_CTX_PARAMS 10 + +OSSL_CORE_MAKE_FUNC(void *, keyexch_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keyexch_derive, (void *ctx, unsigned char *secret, + size_t *secretlen, size_t outlen)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_peer, (void *ctx, void *provkey)) +OSSL_CORE_MAKE_FUNC(void, keyexch_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, keyexch_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_ctx_params, (void *ctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_get_ctx_params, (void *ctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_gettable_ctx_params, + (void *ctx, void *provctx)) + +/* Signature */ + +# define OSSL_FUNC_SIGNATURE_NEWCTX 1 +# define OSSL_FUNC_SIGNATURE_SIGN_INIT 2 +# define OSSL_FUNC_SIGNATURE_SIGN 3 +# define OSSL_FUNC_SIGNATURE_VERIFY_INIT 4 +# define OSSL_FUNC_SIGNATURE_VERIFY 5 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT 6 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER 7 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT 8 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE 9 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL 10 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN 11 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT 12 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE 13 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL 14 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY 15 +# define OSSL_FUNC_SIGNATURE_FREECTX 16 +# define OSSL_FUNC_SIGNATURE_DUPCTX 17 +# define OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS 18 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS 19 +# define OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS 20 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS 21 +# define OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS 22 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS 23 +# define OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS 24 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS 25 +# define OSSL_FUNC_SIGNATURE_QUERY_KEY_TYPES 26 +# define OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_INIT 27 +# define OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_UPDATE 28 +# define OSSL_FUNC_SIGNATURE_SIGN_MESSAGE_FINAL 29 +# define OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_INIT 30 +# define OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_UPDATE 31 +# define OSSL_FUNC_SIGNATURE_VERIFY_MESSAGE_FINAL 32 + +OSSL_CORE_MAKE_FUNC(void *, signature_newctx, (void *provctx, + const char *propq)) +OSSL_CORE_MAKE_FUNC(int, signature_sign_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_sign, (void *ctx, unsigned char *sig, + size_t *siglen, size_t sigsize, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_sign_message_init, + (void *ctx, void *provkey, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_sign_message_update, + (void *ctx, const unsigned char *in, size_t inlen)) +OSSL_CORE_MAKE_FUNC(int, signature_sign_message_final, + (void *ctx, unsigned char *sig, + size_t *siglen, size_t sigsize)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify, (void *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_message_init, + (void *ctx, void *provkey, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify_message_update, + (void *ctx, const unsigned char *in, size_t inlen)) +/* + * signature_verify_final requires that the signature to be verified against + * is specified via an OSSL_PARAM. + */ +OSSL_CORE_MAKE_FUNC(int, signature_verify_message_final, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover_init, + (void *ctx, void *provkey, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover, + (void *ctx, unsigned char *rout, size_t *routlen, + size_t routsize, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_final, + (void *ctx, unsigned char *sig, size_t *siglen, + size_t sigsize)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign, + (void *ctx, unsigned char *sigret, size_t *siglen, + size_t sigsize, const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_final, + (void *ctx, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify, + (void *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(void, signature_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, signature_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_md_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_md_params, + (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_md_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_md_params, + (void *ctx)) +OSSL_CORE_MAKE_FUNC(const char **, signature_query_key_types, (void)) + +/*- + * Symmetric key management + * + * The Key Management takes care of provider side of symmetric key objects, and + * includes essentially everything that manipulates the keys themselves and + * their parameters. + * + * The key objects are commonly referred to as |keydata|, and it MUST be able + * to contain parameters if the key has any, and the secret key. + * + * Key objects are created with OSSL_FUNC_skeymgmt_import() (there is no + * dedicated memory allocation function), exported with + * OSSL_FUNC_skeymgmt_export() and destroyed with OSSL_FUNC_keymgmt_free(). + * + */ + +/* Key data subset selection - individual bits */ +# define OSSL_SKEYMGMT_SELECT_PARAMETERS 0x01 +# define OSSL_SKEYMGMT_SELECT_SECRET_KEY 0x02 + +/* Key data subset selection - combinations */ +# define OSSL_SKEYMGMT_SELECT_ALL \ + (OSSL_SKEYMGMT_SELECT_PARAMETERS | OSSL_SKEYMGMT_SELECT_SECRET_KEY) + +# define OSSL_FUNC_SKEYMGMT_FREE 1 +# define OSSL_FUNC_SKEYMGMT_IMPORT 2 +# define OSSL_FUNC_SKEYMGMT_EXPORT 3 +# define OSSL_FUNC_SKEYMGMT_GENERATE 4 +# define OSSL_FUNC_SKEYMGMT_GET_KEY_ID 5 +# define OSSL_FUNC_SKEYMGMT_IMP_SETTABLE_PARAMS 6 +# define OSSL_FUNC_SKEYMGMT_GEN_SETTABLE_PARAMS 7 + +OSSL_CORE_MAKE_FUNC(void, skeymgmt_free, (void *keydata)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + skeymgmt_imp_settable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, skeymgmt_import, (void *provctx, int selection, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, skeymgmt_export, + (void *keydata, int selection, + OSSL_CALLBACK *param_cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + skeymgmt_gen_settable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, skeymgmt_generate, (void *provctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const char *, skeymgmt_get_key_id, (void *keydata)) + +/* Asymmetric Ciphers */ + +# define OSSL_FUNC_ASYM_CIPHER_NEWCTX 1 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT 3 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT_INIT 4 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT 5 +# define OSSL_FUNC_ASYM_CIPHER_FREECTX 6 +# define OSSL_FUNC_ASYM_CIPHER_DUPCTX 7 +# define OSSL_FUNC_ASYM_CIPHER_GET_CTX_PARAMS 8 +# define OSSL_FUNC_ASYM_CIPHER_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_ASYM_CIPHER_SET_CTX_PARAMS 10 +# define OSSL_FUNC_ASYM_CIPHER_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, asym_cipher_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Asymmetric Key encapsulation */ +# define OSSL_FUNC_KEM_NEWCTX 1 +# define OSSL_FUNC_KEM_ENCAPSULATE_INIT 2 +# define OSSL_FUNC_KEM_ENCAPSULATE 3 +# define OSSL_FUNC_KEM_DECAPSULATE_INIT 4 +# define OSSL_FUNC_KEM_DECAPSULATE 5 +# define OSSL_FUNC_KEM_FREECTX 6 +# define OSSL_FUNC_KEM_DUPCTX 7 +# define OSSL_FUNC_KEM_GET_CTX_PARAMS 8 +# define OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_KEM_SET_CTX_PARAMS 10 +# define OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS 11 +# define OSSL_FUNC_KEM_AUTH_ENCAPSULATE_INIT 12 +# define OSSL_FUNC_KEM_AUTH_DECAPSULATE_INIT 13 + +OSSL_CORE_MAKE_FUNC(void *, kem_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_auth_encapsulate_init, (void *ctx, void *provkey, + void *authprivkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + unsigned char *secret, + size_t *secretlen)) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_auth_decapsulate_init, (void *ctx, void *provkey, + void *authpubkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, kem_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, kem_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, kem_get_ctx_params, (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Encoders and decoders */ +# define OSSL_FUNC_ENCODER_NEWCTX 1 +# define OSSL_FUNC_ENCODER_FREECTX 2 +# define OSSL_FUNC_ENCODER_GET_PARAMS 3 +# define OSSL_FUNC_ENCODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_ENCODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_ENCODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_ENCODER_DOES_SELECTION 10 +# define OSSL_FUNC_ENCODER_ENCODE 11 +# define OSSL_FUNC_ENCODER_IMPORT_OBJECT 20 +# define OSSL_FUNC_ENCODER_FREE_OBJECT 21 +OSSL_CORE_MAKE_FUNC(void *, encoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, encoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, encoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, encoder_encode, + (void *ctx, OSSL_CORE_BIO *out, + const void *obj_raw, const OSSL_PARAM obj_abstract[], + int selection, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg)) + +OSSL_CORE_MAKE_FUNC(void *, encoder_import_object, + (void *ctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void, encoder_free_object, (void *obj)) + +# define OSSL_FUNC_DECODER_NEWCTX 1 +# define OSSL_FUNC_DECODER_FREECTX 2 +# define OSSL_FUNC_DECODER_GET_PARAMS 3 +# define OSSL_FUNC_DECODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_DECODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_DECODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_DECODER_DOES_SELECTION 10 +# define OSSL_FUNC_DECODER_DECODE 11 +# define OSSL_FUNC_DECODER_EXPORT_OBJECT 20 +OSSL_CORE_MAKE_FUNC(void *, decoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, decoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, decoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, decoder_decode, + (void *ctx, OSSL_CORE_BIO *in, int selection, + OSSL_CALLBACK *data_cb, void *data_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, decoder_export_object, + (void *ctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +/*- + * Store + * + * Objects are scanned by using the 'open', 'load', 'eof' and 'close' + * functions, which implement an OSSL_STORE loader. + * + * store_load() works in a way that's very similar to the decoders, in + * that they pass an abstract object through a callback, either as a DER + * octet string or as an object reference, which libcrypto will have to + * deal with. + */ + +#define OSSL_FUNC_STORE_OPEN 1 +#define OSSL_FUNC_STORE_ATTACH 2 +#define OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS 3 +#define OSSL_FUNC_STORE_SET_CTX_PARAMS 4 +#define OSSL_FUNC_STORE_LOAD 5 +#define OSSL_FUNC_STORE_EOF 6 +#define OSSL_FUNC_STORE_CLOSE 7 +#define OSSL_FUNC_STORE_EXPORT_OBJECT 8 +#define OSSL_FUNC_STORE_DELETE 9 +#define OSSL_FUNC_STORE_OPEN_EX 10 +OSSL_CORE_MAKE_FUNC(void *, store_open, (void *provctx, const char *uri)) +OSSL_CORE_MAKE_FUNC(void *, store_attach, (void *provctx, OSSL_CORE_BIO *in)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, store_settable_ctx_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, store_set_ctx_params, + (void *loaderctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, store_load, + (void *loaderctx, + OSSL_CALLBACK *object_cb, void *object_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, store_eof, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_close, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_export_object, + (void *loaderctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) +OSSL_CORE_MAKE_FUNC(int, store_delete, + (void *provctx, const char *uri, const OSSL_PARAM params[], + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(void *, store_open_ex, + (void *provctx, const char *uri, const OSSL_PARAM params[], + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/core_names.h b/thirdparty/OpenSSL-3.5.3/include/openssl/core_names.h new file mode 100644 index 0000000..ad617ef --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/core_names.h @@ -0,0 +1,575 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\core_names.h.in + * + * Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CORE_NAMES_H +# define OPENSSL_CORE_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* OSSL_CIPHER_PARAM_CTS_MODE Values */ +# define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +# define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +# define OSSL_CIPHER_CTS_MODE_CS3 "CS3" + +/* Known CIPHER names (not a complete list) */ +# define OSSL_CIPHER_NAME_AES_128_GCM_SIV "AES-128-GCM-SIV" +# define OSSL_CIPHER_NAME_AES_192_GCM_SIV "AES-192-GCM-SIV" +# define OSSL_CIPHER_NAME_AES_256_GCM_SIV "AES-256-GCM-SIV" + +/* Known DIGEST names (not a complete list) */ +# define OSSL_DIGEST_NAME_MD5 "MD5" +# define OSSL_DIGEST_NAME_MD5_SHA1 "MD5-SHA1" +# define OSSL_DIGEST_NAME_SHA1 "SHA1" +# define OSSL_DIGEST_NAME_SHA2_224 "SHA2-224" +# define OSSL_DIGEST_NAME_SHA2_256 "SHA2-256" +# define OSSL_DIGEST_NAME_SHA2_256_192 "SHA2-256/192" +# define OSSL_DIGEST_NAME_SHA2_384 "SHA2-384" +# define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" +# define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" +# define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" +# define OSSL_DIGEST_NAME_MD2 "MD2" +# define OSSL_DIGEST_NAME_MD4 "MD4" +# define OSSL_DIGEST_NAME_MDC2 "MDC2" +# define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" +# define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" +# define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" +# define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" +# define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" +# define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" +# define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" +# define OSSL_DIGEST_NAME_SM3 "SM3" + +/* Known MAC names */ +# define OSSL_MAC_NAME_BLAKE2BMAC "BLAKE2BMAC" +# define OSSL_MAC_NAME_BLAKE2SMAC "BLAKE2SMAC" +# define OSSL_MAC_NAME_CMAC "CMAC" +# define OSSL_MAC_NAME_GMAC "GMAC" +# define OSSL_MAC_NAME_HMAC "HMAC" +# define OSSL_MAC_NAME_KMAC128 "KMAC128" +# define OSSL_MAC_NAME_KMAC256 "KMAC256" +# define OSSL_MAC_NAME_POLY1305 "POLY1305" +# define OSSL_MAC_NAME_SIPHASH "SIPHASH" + +/* Known KDF names */ +# define OSSL_KDF_NAME_HKDF "HKDF" +# define OSSL_KDF_NAME_TLS1_3_KDF "TLS13-KDF" +# define OSSL_KDF_NAME_PBKDF1 "PBKDF1" +# define OSSL_KDF_NAME_PBKDF2 "PBKDF2" +# define OSSL_KDF_NAME_SCRYPT "SCRYPT" +# define OSSL_KDF_NAME_SSHKDF "SSHKDF" +# define OSSL_KDF_NAME_SSKDF "SSKDF" +# define OSSL_KDF_NAME_TLS1_PRF "TLS1-PRF" +# define OSSL_KDF_NAME_X942KDF_ASN1 "X942KDF-ASN1" +# define OSSL_KDF_NAME_X942KDF_CONCAT "X942KDF-CONCAT" +# define OSSL_KDF_NAME_X963KDF "X963KDF" +# define OSSL_KDF_NAME_KBKDF "KBKDF" +# define OSSL_KDF_NAME_KRB5KDF "KRB5KDF" +# define OSSL_KDF_NAME_HMACDRBGKDF "HMAC-DRBG-KDF" + +/* RSA padding modes */ +# define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +# define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +# define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +# define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +# define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" + +/* RSA pss padding salt length */ +# define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" +# define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" +# define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" +# define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" + +/* OSSL_PKEY_PARAM_EC_ENCODING values */ +# define OSSL_PKEY_EC_ENCODING_EXPLICIT "explicit" +# define OSSL_PKEY_EC_ENCODING_GROUP "named_curve" + +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" + +# define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" +# define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" +# define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" + +/* PROV_SKEY well known key types */ +# define OSSL_SKEY_TYPE_GENERIC "GENERIC-SECRET" +# define OSSL_SKEY_TYPE_AES "AES" + +/* OSSL_KEM_PARAM_OPERATION values */ +#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" +#define OSSL_KEM_PARAM_OPERATION_DHKEM "DHKEM" + +/* Provider configuration variables */ +#define OSSL_PKEY_RETAIN_SEED "pkey_retain_seed" + +/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ +# define OSSL_ALG_PARAM_ALGORITHM_ID "algorithm-id" +# define OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS "algorithm-id-params" +# define OSSL_ALG_PARAM_CIPHER "cipher" +# define OSSL_ALG_PARAM_DIGEST "digest" +# define OSSL_ALG_PARAM_ENGINE "engine" +# define OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR "fips-indicator" +# define OSSL_ALG_PARAM_MAC "mac" +# define OSSL_ALG_PARAM_PROPERTIES "properties" +# define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +# define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE +# define OSSL_ASYM_CIPHER_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_ASYM_CIPHER_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK +# define OSSL_ASYM_CIPHER_PARAM_FIPS_RSA_PKCS15_PAD_DISABLED OSSL_PROV_PARAM_RSA_PKCS15_PAD_DISABLED +# define OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION "implicit-rejection" +# define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +# define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS OSSL_PKEY_PARAM_MGF1_PROPERTIES +# define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST +# define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" +# define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" +# define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +# define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +# define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" +# define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" +# define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" +# define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" +# define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" +# define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" +# define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" +# define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" +# define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" +# define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" +# define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" +# define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" +# define OSSL_CAPABILITY_TLS_SIGALG_CODE_POINT "tls-sigalg-code-point" +# define OSSL_CAPABILITY_TLS_SIGALG_HASH_NAME "tls-sigalg-hash-name" +# define OSSL_CAPABILITY_TLS_SIGALG_HASH_OID "tls-sigalg-hash-oid" +# define OSSL_CAPABILITY_TLS_SIGALG_IANA_NAME "tls-sigalg-iana-name" +# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE "tls-sigalg-keytype" +# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE_OID "tls-sigalg-keytype-oid" +# define OSSL_CAPABILITY_TLS_SIGALG_MAX_DTLS "tls-max-dtls" +# define OSSL_CAPABILITY_TLS_SIGALG_MAX_TLS "tls-max-tls" +# define OSSL_CAPABILITY_TLS_SIGALG_MIN_DTLS "tls-min-dtls" +# define OSSL_CAPABILITY_TLS_SIGALG_MIN_TLS "tls-min-tls" +# define OSSL_CAPABILITY_TLS_SIGALG_NAME "tls-sigalg-name" +# define OSSL_CAPABILITY_TLS_SIGALG_OID "tls-sigalg-oid" +# define OSSL_CAPABILITY_TLS_SIGALG_SECURITY_BITS "tls-sigalg-sec-bits" +# define OSSL_CAPABILITY_TLS_SIGALG_SIG_NAME "tls-sigalg-sig-name" +# define OSSL_CAPABILITY_TLS_SIGALG_SIG_OID "tls-sigalg-sig-oid" +# define OSSL_CIPHER_PARAM_AEAD "aead" +# define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN +# define OSSL_CIPHER_PARAM_AEAD_IV_GENERATED "iv-generated" +# define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" +# define OSSL_CIPHER_PARAM_AEAD_TAG "tag" +# define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" +# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" +# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" +# define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" +# define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" +# define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" +# define OSSL_CIPHER_PARAM_ALGORITHM_ID OSSL_ALG_PARAM_ALGORITHM_ID +# define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS +# define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS_OLD "alg_id_param" +# define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" +# define OSSL_CIPHER_PARAM_CTS "cts" +# define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" +# define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" +# define OSSL_CIPHER_PARAM_DECRYPT_ONLY "decrypt-only" +# define OSSL_CIPHER_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK "encrypt-check" +# define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" +# define OSSL_CIPHER_PARAM_IV "iv" +# define OSSL_CIPHER_PARAM_IVLEN "ivlen" +# define OSSL_CIPHER_PARAM_KEYLEN "keylen" +# define OSSL_CIPHER_PARAM_MODE "mode" +# define OSSL_CIPHER_PARAM_NUM "num" +# define OSSL_CIPHER_PARAM_PADDING "padding" +# define OSSL_CIPHER_PARAM_PIPELINE_AEAD_TAG "pipeline-tag" +# define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" +# define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" +# define OSSL_CIPHER_PARAM_ROUNDS "rounds" +# define OSSL_CIPHER_PARAM_SPEED "speed" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD "tls1multi_aad" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN "tls1multi_aadpacklen" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC "tls1multi_enc" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN "tls1multi_encin" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN "tls1multi_enclen" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE "tls1multi_interleave" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE "tls1multi_maxbufsz" +# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT "tls1multi_maxsndfrag" +# define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" +# define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" +# define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" +# define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" +# define OSSL_CIPHER_PARAM_USE_BITS "use-bits" +# define OSSL_CIPHER_PARAM_XTS_STANDARD "xts_standard" +# define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +# define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" +# define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" +# define OSSL_DIGEST_PARAM_MICALG "micalg" +# define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" +# define OSSL_DIGEST_PARAM_SIZE "size" +# define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" +# define OSSL_DIGEST_PARAM_XOF "xof" +# define OSSL_DIGEST_PARAM_XOFLEN "xoflen" +# define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +# define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +# define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" +# define OSSL_DRBG_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_DRBG_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK +# define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC +# define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" +# define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" +# define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" +# define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" +# define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" +# define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" +# define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" +# define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" +# define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" +# define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +# define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" +# define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" +# define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" +# define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" +# define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" +# define OSSL_DRBG_PARAM_SIZE "size" +# define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" +# define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +# define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" +# define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +# define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" +# define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" +# define OSSL_EXCHANGE_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_EXCHANGE_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK +# define OSSL_EXCHANGE_PARAM_FIPS_ECDH_COFACTOR_CHECK OSSL_PROV_PARAM_ECDH_COFACTOR_CHECK +# define OSSL_EXCHANGE_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK +# define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" +# define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" +# define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" +# define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" +# define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" +# define OSSL_EXCHANGE_PARAM_PAD "pad" +# define OSSL_GEN_PARAM_ITERATION "iteration" +# define OSSL_GEN_PARAM_POTENTIAL "potential" +# define OSSL_KDF_PARAM_ARGON2_AD "ad" +# define OSSL_KDF_PARAM_ARGON2_LANES "lanes" +# define OSSL_KDF_PARAM_ARGON2_MEMCOST "memcost" +# define OSSL_KDF_PARAM_ARGON2_VERSION "version" +# define OSSL_KDF_PARAM_CEK_ALG "cekalg" +# define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +# define OSSL_KDF_PARAM_CONSTANT "constant" +# define OSSL_KDF_PARAM_DATA "data" +# define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +# define OSSL_KDF_PARAM_EARLY_CLEAN "early_clean" +# define OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_KDF_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK +# define OSSL_KDF_PARAM_FIPS_EMS_CHECK "ems_check" +# define OSSL_KDF_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK +# define OSSL_KDF_PARAM_HMACDRBG_ENTROPY "entropy" +# define OSSL_KDF_PARAM_HMACDRBG_NONCE "nonce" +# define OSSL_KDF_PARAM_INFO "info" +# define OSSL_KDF_PARAM_ITER "iter" +# define OSSL_KDF_PARAM_KBKDF_R "r" +# define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" +# define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" +# define OSSL_KDF_PARAM_KEY "key" +# define OSSL_KDF_PARAM_LABEL "label" +# define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC +# define OSSL_KDF_PARAM_MAC_SIZE "maclen" +# define OSSL_KDF_PARAM_MODE "mode" +# define OSSL_KDF_PARAM_PASSWORD "pass" +# define OSSL_KDF_PARAM_PKCS12_ID "id" +# define OSSL_KDF_PARAM_PKCS5 "pkcs5" +# define OSSL_KDF_PARAM_PREFIX "prefix" +# define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +# define OSSL_KDF_PARAM_SALT "salt" +# define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" +# define OSSL_KDF_PARAM_SCRYPT_N "n" +# define OSSL_KDF_PARAM_SCRYPT_P "p" +# define OSSL_KDF_PARAM_SCRYPT_R "r" +# define OSSL_KDF_PARAM_SECRET "secret" +# define OSSL_KDF_PARAM_SEED "seed" +# define OSSL_KDF_PARAM_SIZE "size" +# define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" +# define OSSL_KDF_PARAM_SSHKDF_TYPE "type" +# define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" +# define OSSL_KDF_PARAM_THREADS "threads" +# define OSSL_KDF_PARAM_UKM "ukm" +# define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" +# define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" +# define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" +# define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" +# define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" +# define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" +# define OSSL_KEM_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_KEM_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK +# define OSSL_KEM_PARAM_IKME "ikme" +# define OSSL_KEM_PARAM_OPERATION "operation" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING "block_padding" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_HS_PADDING "hs_padding" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA "max_early_data" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN "max_frag_len" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MODE "mode" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS "options" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD "read_ahead" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC "stream_mac" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_TLSTREE "tlstree" +# define OSSL_LIBSSL_RECORD_LAYER_PARAM_USE_ETM "use_etm" +# define OSSL_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN "read_buffer_len" +# define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" +# define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +# define OSSL_MAC_PARAM_CUSTOM "custom" +# define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" +# define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +# define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" +# define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" +# define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" +# define OSSL_MAC_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_MAC_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK +# define OSSL_MAC_PARAM_FIPS_NO_SHORT_MAC OSSL_PROV_PARAM_NO_SHORT_MAC +# define OSSL_MAC_PARAM_IV "iv" +# define OSSL_MAC_PARAM_KEY "key" +# define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +# define OSSL_MAC_PARAM_SALT "salt" +# define OSSL_MAC_PARAM_SIZE "size" +# define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" +# define OSSL_MAC_PARAM_XOF "xof" +# define OSSL_OBJECT_PARAM_DATA "data" +# define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" +# define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" +# define OSSL_OBJECT_PARAM_DESC "desc" +# define OSSL_OBJECT_PARAM_INPUT_TYPE "input-type" +# define OSSL_OBJECT_PARAM_REFERENCE "reference" +# define OSSL_OBJECT_PARAM_TYPE "type" +# define OSSL_PASSPHRASE_PARAM_INFO "info" +# define OSSL_PKEY_PARAM_ALGORITHM_ID OSSL_ALG_PARAM_ALGORITHM_ID +# define OSSL_PKEY_PARAM_ALGORITHM_ID_PARAMS OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS +# define OSSL_PKEY_PARAM_BITS "bits" +# define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +# define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" +# define OSSL_PKEY_PARAM_DHKEM_IKM "dhkem-ikm" +# define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" +# define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" +# define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +# define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" +# define OSSL_PKEY_PARAM_DIST_ID "distid" +# define OSSL_PKEY_PARAM_EC_A "a" +# define OSSL_PKEY_PARAM_EC_B "b" +# define OSSL_PKEY_PARAM_EC_CHAR2_M "m" +# define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" +# define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" +# define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" +# define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" +# define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" +# define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" +# define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" +# define OSSL_PKEY_PARAM_EC_ENCODING "encoding" +# define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" +# define OSSL_PKEY_PARAM_EC_GENERATOR "generator" +# define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" +# define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" +# define OSSL_PKEY_PARAM_EC_ORDER "order" +# define OSSL_PKEY_PARAM_EC_P "p" +# define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" +# define OSSL_PKEY_PARAM_EC_PUB_X "qx" +# define OSSL_PKEY_PARAM_EC_PUB_Y "qy" +# define OSSL_PKEY_PARAM_EC_SEED "seed" +# define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" +# define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE +# define OSSL_PKEY_PARAM_FFC_COFACTOR "j" +# define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST +# define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES +# define OSSL_PKEY_PARAM_FFC_G "g" +# define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" +# define OSSL_PKEY_PARAM_FFC_H "hindex" +# define OSSL_PKEY_PARAM_FFC_P "p" +# define OSSL_PKEY_PARAM_FFC_PBITS "pbits" +# define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" +# define OSSL_PKEY_PARAM_FFC_Q "q" +# define OSSL_PKEY_PARAM_FFC_QBITS "qbits" +# define OSSL_PKEY_PARAM_FFC_SEED "seed" +# define OSSL_PKEY_PARAM_FFC_TYPE "type" +# define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" +# define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" +# define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" +# define OSSL_PKEY_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK "digest-check" +# define OSSL_PKEY_PARAM_FIPS_KEY_CHECK "key-check" +# define OSSL_PKEY_PARAM_FIPS_SIGN_CHECK "sign-check" +# define OSSL_PKEY_PARAM_GROUP_NAME "group" +# define OSSL_PKEY_PARAM_IMPLICIT_REJECTION "implicit-rejection" +# define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" +# define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" +# define OSSL_PKEY_PARAM_MAX_SIZE "max-size" +# define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" +# define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" +# define OSSL_PKEY_PARAM_ML_DSA_INPUT_FORMATS "ml-dsa.input_formats" +# define OSSL_PKEY_PARAM_ML_DSA_OUTPUT_FORMATS "ml-dsa.output_formats" +# define OSSL_PKEY_PARAM_ML_DSA_PREFER_SEED "ml-dsa.prefer_seed" +# define OSSL_PKEY_PARAM_ML_DSA_RETAIN_SEED "ml-dsa.retain_seed" +# define OSSL_PKEY_PARAM_ML_DSA_SEED "seed" +# define OSSL_PKEY_PARAM_ML_KEM_IMPORT_PCT_TYPE "ml-kem.import_pct_type" +# define OSSL_PKEY_PARAM_ML_KEM_INPUT_FORMATS "ml-kem.input_formats" +# define OSSL_PKEY_PARAM_ML_KEM_OUTPUT_FORMATS "ml-kem.output_formats" +# define OSSL_PKEY_PARAM_ML_KEM_PREFER_SEED "ml-kem.prefer_seed" +# define OSSL_PKEY_PARAM_ML_KEM_RETAIN_SEED "ml-kem.retain_seed" +# define OSSL_PKEY_PARAM_ML_KEM_SEED "seed" +# define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" +# define OSSL_PKEY_PARAM_PRIV_KEY "priv" +# define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +# define OSSL_PKEY_PARAM_PUB_KEY "pub" +# define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 "rsa-coefficient1" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 "rsa-coefficient2" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 "rsa-coefficient3" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 "rsa-coefficient4" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 "rsa-coefficient5" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 "rsa-coefficient6" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 "rsa-coefficient7" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 "rsa-coefficient8" +# define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 "rsa-coefficient9" +# define OSSL_PKEY_PARAM_RSA_D "d" +# define OSSL_PKEY_PARAM_RSA_DERIVE_FROM_PQ "rsa-derive-from-pq" +# define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST +# define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES +# define OSSL_PKEY_PARAM_RSA_E "e" +# define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" +# define OSSL_PKEY_PARAM_RSA_EXPONENT1 "rsa-exponent1" +# define OSSL_PKEY_PARAM_RSA_EXPONENT10 "rsa-exponent10" +# define OSSL_PKEY_PARAM_RSA_EXPONENT2 "rsa-exponent2" +# define OSSL_PKEY_PARAM_RSA_EXPONENT3 "rsa-exponent3" +# define OSSL_PKEY_PARAM_RSA_EXPONENT4 "rsa-exponent4" +# define OSSL_PKEY_PARAM_RSA_EXPONENT5 "rsa-exponent5" +# define OSSL_PKEY_PARAM_RSA_EXPONENT6 "rsa-exponent6" +# define OSSL_PKEY_PARAM_RSA_EXPONENT7 "rsa-exponent7" +# define OSSL_PKEY_PARAM_RSA_EXPONENT8 "rsa-exponent8" +# define OSSL_PKEY_PARAM_RSA_EXPONENT9 "rsa-exponent9" +# define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" +# define OSSL_PKEY_PARAM_RSA_FACTOR1 "rsa-factor1" +# define OSSL_PKEY_PARAM_RSA_FACTOR10 "rsa-factor10" +# define OSSL_PKEY_PARAM_RSA_FACTOR2 "rsa-factor2" +# define OSSL_PKEY_PARAM_RSA_FACTOR3 "rsa-factor3" +# define OSSL_PKEY_PARAM_RSA_FACTOR4 "rsa-factor4" +# define OSSL_PKEY_PARAM_RSA_FACTOR5 "rsa-factor5" +# define OSSL_PKEY_PARAM_RSA_FACTOR6 "rsa-factor6" +# define OSSL_PKEY_PARAM_RSA_FACTOR7 "rsa-factor7" +# define OSSL_PKEY_PARAM_RSA_FACTOR8 "rsa-factor8" +# define OSSL_PKEY_PARAM_RSA_FACTOR9 "rsa-factor9" +# define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC +# define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +# define OSSL_PKEY_PARAM_RSA_N "n" +# define OSSL_PKEY_PARAM_RSA_PRIMES "primes" +# define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" +# define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" +# define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" +# define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" +# define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" +# define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" +# define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" +# define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" +# define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" +# define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" +# define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" +# define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" +# define OSSL_PKEY_PARAM_SLH_DSA_SEED "seed" +# define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH OSSL_PKEY_PARAM_USE_COFACTOR_FLAG +# define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" +# define OSSL_PROV_PARAM_BUILDINFO "buildinfo" +# define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" +# define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" +# define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" +# define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" +# define OSSL_PROV_PARAM_DSA_SIGN_DISABLED "dsa-sign-disabled" +# define OSSL_PROV_PARAM_ECDH_COFACTOR_CHECK "ecdh-cofactor-check" +# define OSSL_PROV_PARAM_HKDF_DIGEST_CHECK "hkdf-digest-check" +# define OSSL_PROV_PARAM_HKDF_KEY_CHECK "hkdf-key-check" +# define OSSL_PROV_PARAM_HMAC_KEY_CHECK "hmac-key-check" +# define OSSL_PROV_PARAM_KBKDF_KEY_CHECK "kbkdf-key-check" +# define OSSL_PROV_PARAM_KMAC_KEY_CHECK "kmac-key-check" +# define OSSL_PROV_PARAM_NAME "name" +# define OSSL_PROV_PARAM_NO_SHORT_MAC "no-short-mac" +# define OSSL_PROV_PARAM_PBKDF2_LOWER_BOUND_CHECK "pbkdf2-lower-bound-check" +# define OSSL_PROV_PARAM_RSA_PKCS15_PAD_DISABLED "rsa-pkcs15-pad-disabled" +# define OSSL_PROV_PARAM_RSA_PSS_SALTLEN_CHECK "rsa-pss-saltlen-check" +# define OSSL_PROV_PARAM_RSA_SIGN_X931_PAD_DISABLED "rsa-sign-x931-pad-disabled" +# define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" +# define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" +# define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" +# define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" +# define OSSL_PROV_PARAM_SIGNATURE_DIGEST_CHECK "signature-digest-check" +# define OSSL_PROV_PARAM_SSHKDF_DIGEST_CHECK "sshkdf-digest-check" +# define OSSL_PROV_PARAM_SSHKDF_KEY_CHECK "sshkdf-key-check" +# define OSSL_PROV_PARAM_SSKDF_DIGEST_CHECK "sskdf-digest-check" +# define OSSL_PROV_PARAM_SSKDF_KEY_CHECK "sskdf-key-check" +# define OSSL_PROV_PARAM_STATUS "status" +# define OSSL_PROV_PARAM_TDES_ENCRYPT_DISABLED "tdes-encrypt-disabled" +# define OSSL_PROV_PARAM_TLS13_KDF_DIGEST_CHECK "tls13-kdf-digest-check" +# define OSSL_PROV_PARAM_TLS13_KDF_KEY_CHECK "tls13-kdf-key-check" +# define OSSL_PROV_PARAM_TLS1_PRF_DIGEST_CHECK "tls1-prf-digest-check" +# define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" +# define OSSL_PROV_PARAM_TLS1_PRF_KEY_CHECK "tls1-prf-key-check" +# define OSSL_PROV_PARAM_VERSION "version" +# define OSSL_PROV_PARAM_X942KDF_KEY_CHECK "x942kdf-key-check" +# define OSSL_PROV_PARAM_X963KDF_DIGEST_CHECK "x963kdf-digest-check" +# define OSSL_PROV_PARAM_X963KDF_KEY_CHECK "x963kdf-key-check" +# define OSSL_RAND_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_RAND_PARAM_GENERATE "generate" +# define OSSL_RAND_PARAM_MAX_REQUEST "max_request" +# define OSSL_RAND_PARAM_STATE "state" +# define OSSL_RAND_PARAM_STRENGTH "strength" +# define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" +# define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" +# define OSSL_SIGNATURE_PARAM_ADD_RANDOM "additional-random" +# define OSSL_SIGNATURE_PARAM_ALGORITHM_ID OSSL_PKEY_PARAM_ALGORITHM_ID +# define OSSL_SIGNATURE_PARAM_ALGORITHM_ID_PARAMS OSSL_PKEY_PARAM_ALGORITHM_ID_PARAMS +# define OSSL_SIGNATURE_PARAM_CONTEXT_STRING "context-string" +# define OSSL_SIGNATURE_PARAM_DETERMINISTIC "deterministic" +# define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +# define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE +# define OSSL_SIGNATURE_PARAM_FIPS_APPROVED_INDICATOR OSSL_ALG_PARAM_FIPS_APPROVED_INDICATOR +# define OSSL_SIGNATURE_PARAM_FIPS_DIGEST_CHECK OSSL_PKEY_PARAM_FIPS_DIGEST_CHECK +# define OSSL_SIGNATURE_PARAM_FIPS_KEY_CHECK OSSL_PKEY_PARAM_FIPS_KEY_CHECK +# define OSSL_SIGNATURE_PARAM_FIPS_RSA_PSS_SALTLEN_CHECK "rsa-pss-saltlen-check" +# define OSSL_SIGNATURE_PARAM_FIPS_SIGN_CHECK OSSL_PKEY_PARAM_FIPS_SIGN_CHECK +# define OSSL_SIGNATURE_PARAM_FIPS_SIGN_X931_PAD_CHECK "sign-x931-pad-check" +# define OSSL_SIGNATURE_PARAM_FIPS_VERIFY_MESSAGE "verify-message" +# define OSSL_SIGNATURE_PARAM_INSTANCE "instance" +# define OSSL_SIGNATURE_PARAM_KAT "kat" +# define OSSL_SIGNATURE_PARAM_MESSAGE_ENCODING "message-encoding" +# define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +# define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES OSSL_PKEY_PARAM_MGF1_PROPERTIES +# define OSSL_SIGNATURE_PARAM_MU "mu" +# define OSSL_SIGNATURE_PARAM_NONCE_TYPE "nonce-type" +# define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +# define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +# define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" +# define OSSL_SIGNATURE_PARAM_SIGNATURE "signature" +# define OSSL_SIGNATURE_PARAM_TEST_ENTROPY "test-entropy" +# define OSSL_SKEY_PARAM_KEY_LENGTH "key-length" +# define OSSL_SKEY_PARAM_RAW_BYTES "raw-bytes" +# define OSSL_STORE_PARAM_ALIAS "alias" +# define OSSL_STORE_PARAM_DIGEST "digest" +# define OSSL_STORE_PARAM_EXPECT "expect" +# define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" +# define OSSL_STORE_PARAM_INPUT_TYPE "input-type" +# define OSSL_STORE_PARAM_ISSUER "name" +# define OSSL_STORE_PARAM_PROPERTIES "properties" +# define OSSL_STORE_PARAM_SERIAL "serial" +# define OSSL_STORE_PARAM_SUBJECT "subject" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/core_object.h b/thirdparty/OpenSSL-3.5.3/include/openssl/core_object.h new file mode 100644 index 0000000..62ccf39 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/core_object.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CORE_OBJECT_H +# define OPENSSL_CORE_OBJECT_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Known object types + * + * These numbers are used as values for the OSSL_PARAM parameter + * OSSL_OBJECT_PARAM_TYPE. + * + * For most of these types, there's a corresponding libcrypto object type. + * The corresponding type is indicated with a comment after the number. + */ +# define OSSL_OBJECT_UNKNOWN 0 +# define OSSL_OBJECT_NAME 1 /* char * */ +# define OSSL_OBJECT_PKEY 2 /* EVP_PKEY * */ +# define OSSL_OBJECT_CERT 3 /* X509 * */ +# define OSSL_OBJECT_CRL 4 /* X509_CRL * */ + +/* + * The rest of the associated OSSL_PARAM elements is described in core_names.h + */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/crmf.h b/thirdparty/OpenSSL-3.5.3/include/openssl/crmf.h new file mode 100644 index 0000000..602468d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/crmf.h @@ -0,0 +1,278 @@ +/*- + * WARNING: do not edit! + * Generated by makefile from include\openssl\crmf.h.in + * + * Copyright 2007-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (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 + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + + + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) + +typedef struct ossl_crmf_encryptedkey_st OSSL_CRMF_ENCRYPTEDKEY; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDKEY) + +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_MSG, OSSL_CRMF_MSG, OSSL_CRMF_MSG) +#define sk_OSSL_CRMF_MSG_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_value(sk, idx) ((OSSL_CRMF_MSG *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_MSG_new(cmp) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) +#define sk_OSSL_CRMF_MSG_new_null() ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_MSG_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_MSG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (n)) +#define sk_OSSL_CRMF_MSG_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_delete(sk, i) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (i))) +#define sk_OSSL_CRMF_MSG_delete_ptr(sk, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_pop(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_shift(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk),ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_MSG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), (idx)) +#define sk_OSSL_CRMF_MSG_set(sk, idx, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (idx), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), pnum) +#define sk_OSSL_CRMF_MSG_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_dup(sk) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_MSG_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_MSG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) + +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +void OSSL_CRMF_ATTRIBUTETYPEANDVALUE_free(OSSL_CRMF_ATTRIBUTETYPEANDVALUE *v); +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, OSSL_CRMF_ATTRIBUTETYPEANDVALUE, OSSL_CRMF_ATTRIBUTETYPEANDVALUE) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_value(sk, idx) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new(cmp) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new_null() ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (n)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_delete(sk, i) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (i))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_delete_ptr(sk, ptr) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_pop(sk) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_shift(sk) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk),ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr), (idx)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_set(sk, idx, ptr) ((OSSL_CRMF_ATTRIBUTETYPEANDVALUE *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), (idx), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_type(ptr), pnum) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk)) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_dup(sk) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_sk_type(sk), ossl_check_OSSL_CRMF_ATTRIBUTETYPEANDVALUE_compfunc_type(cmp))) + + +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_CERTID, OSSL_CRMF_CERTID, OSSL_CRMF_CERTID) +#define sk_OSSL_CRMF_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_value(sk, idx) ((OSSL_CRMF_CERTID *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_CERTID_new(cmp) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) +#define sk_OSSL_CRMF_CERTID_new_null() ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_CERTID_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (n)) +#define sk_OSSL_CRMF_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_delete(sk, i) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (i))) +#define sk_OSSL_CRMF_CERTID_delete_ptr(sk, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_pop(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_shift(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk),ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), (idx)) +#define sk_OSSL_CRMF_CERTID_set(sk, idx, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (idx), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), pnum) +#define sk_OSSL_CRMF_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_dup(sk) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_CERTID_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) + + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +X509_PUBKEY +*OSSL_CRMF_CERTTEMPLATE_get0_publicKey(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 *OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); +X509 *OSSL_CRMF_ENCRYPTEDKEY_get1_encCert(const OSSL_CRMF_ENCRYPTEDKEY *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey, unsigned int flags); +unsigned char +*OSSL_CRMF_ENCRYPTEDVALUE_decrypt(const OSSL_CRMF_ENCRYPTEDVALUE *enc, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey, int *outlen); +EVP_PKEY *OSSL_CRMF_ENCRYPTEDKEY_get1_pkey(const OSSL_CRMF_ENCRYPTEDKEY *encryptedKey, + X509_STORE *ts, STACK_OF(X509) *extra, EVP_PKEY *pkey, + X509 *cert, ASN1_OCTET_STRING *secret, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSG_centralkeygen_requested(const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr); +# ifndef OPENSSL_NO_CMS +OSSL_CRMF_ENCRYPTEDKEY *OSSL_CRMF_ENCRYPTEDKEY_init_envdata(CMS_EnvelopedData *envdata); +# endif + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/crmferr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/crmferr.h new file mode 100644 index 0000000..a9b04e0 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/crmferr.h @@ -0,0 +1,57 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CRMFERR_H +# define OPENSSL_CRMFERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CRMF + + +/* + * CRMF reason codes. + */ +# define CRMF_R_BAD_PBM_ITERATIONCOUNT 100 +# define CRMF_R_CMS_NOT_SUPPORTED 122 +# define CRMF_R_CRMFERROR 102 +# define CRMF_R_ERROR 103 +# define CRMF_R_ERROR_DECODING_CERTIFICATE 104 +# define CRMF_R_ERROR_DECODING_ENCRYPTEDKEY 123 +# define CRMF_R_ERROR_DECRYPTING_CERTIFICATE 105 +# define CRMF_R_ERROR_DECRYPTING_ENCRYPTEDKEY 124 +# define CRMF_R_ERROR_DECRYPTING_ENCRYPTEDVALUE 125 +# define CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY 106 +# define CRMF_R_ERROR_SETTING_PURPOSE 126 +# define CRMF_R_ERROR_VERIFYING_ENCRYPTEDKEY 127 +# define CRMF_R_FAILURE_OBTAINING_RANDOM 107 +# define CRMF_R_ITERATIONCOUNT_BELOW_100 108 +# define CRMF_R_MALFORMED_IV 101 +# define CRMF_R_NULL_ARGUMENT 109 +# define CRMF_R_POPOSKINPUT_NOT_SUPPORTED 113 +# define CRMF_R_POPO_INCONSISTENT_CENTRAL_KEYGEN 128 +# define CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY 117 +# define CRMF_R_POPO_MISSING 121 +# define CRMF_R_POPO_MISSING_PUBLIC_KEY 118 +# define CRMF_R_POPO_MISSING_SUBJECT 119 +# define CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED 120 +# define CRMF_R_SETTING_MAC_ALGOR_FAILURE 110 +# define CRMF_R_SETTING_OWF_ALGOR_FAILURE 111 +# define CRMF_R_UNSUPPORTED_ALGORITHM 112 +# define CRMF_R_UNSUPPORTED_CIPHER 114 +# define CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO 115 +# define CRMF_R_UNSUPPORTED_POPO_METHOD 116 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/crypto.h b/thirdparty/OpenSSL-3.5.3/include/openssl/crypto.h new file mode 100644 index 0000000..2df3504 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/crypto.h @@ -0,0 +1,583 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\crypto.h.in + * + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif + +# include +# include + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# 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 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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_NO_DEPRECATED_1_1_0 */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur 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); +int CRYPTO_atomic_add64(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_and(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load_int(int *val, int *ret, CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_store(uint64_t *dst, uint64_t val, CRYPTO_RWLOCK *lock); + +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_aligned_alloc(num, alignment, freeptr) \ + CRYPTO_aligned_alloc(num, alignment, freeptr, \ + 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_clear_free(addr, num) \ + CRYPTO_secure_clear_free(addr, num, 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); +int OPENSSL_strtoul(const char *str, char **endptr, int base, unsigned long *num); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); +int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + +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 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 +# define OPENSSL_WINCTX 10 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 +# define OPENSSL_INFO_WINDOWS_CONTEXT 1009 + +int OPENSSL_issetugid(void); + +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) +#define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk)) +#define sk_void_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_void_sk_type(sk), (idx))) +#define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp))) +#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_new_null()) +#define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n))) +#define sk_void_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_void_sk_type(sk), (n)) +#define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk)) +#define sk_void_zero(sk) OPENSSL_sk_zero(ossl_check_void_sk_type(sk)) +#define sk_void_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_void_sk_type(sk), (i))) +#define sk_void_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))) +#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk))) +#define sk_void_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_void_sk_type(sk))) +#define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk),ossl_check_void_freefunc_type(freefunc)) +#define sk_void_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), (idx)) +#define sk_void_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_void_sk_type(sk), (idx), ossl_check_void_type(ptr))) +#define sk_void_find(sk, ptr) OPENSSL_sk_find(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), pnum) +#define sk_void_sort(sk) OPENSSL_sk_sort(ossl_check_void_sk_type(sk)) +#define sk_void_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_void_sk_type(sk)) +#define sk_void_dup(sk) ((STACK_OF(void) *)OPENSSL_sk_dup(ossl_check_const_void_sk_type(sk))) +#define sk_void_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(void) *)OPENSSL_sk_deep_copy(ossl_check_const_void_sk_type(sk), ossl_check_void_copyfunc_type(copyfunc), ossl_check_void_freefunc_type(freefunc))) +#define sk_void_set_cmp_func(sk, cmp) ((sk_void_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_void_sk_type(sk), ossl_check_void_compfunc_type(cmp))) + + + +/* + * 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_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + +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 **from_d, 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); + +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + +/* + * 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); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * 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 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) + +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ + +# 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_NO_DEPRECATED_1_1_0 */ + +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); + +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_aligned_alloc(size_t num, size_t align, + void **freeptr, 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, size_t minsize); +int CRYPTO_secure_malloc_done(void); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +void CRYPTO_secure_clear_free(void *ptr, size_t num, + 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 +/* + * 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 */ + +/* max allowed length for value of OPENSSL_MALLOC_FAILURES env var. */ +# define CRYPTO_MEM_CHECK_MAX_FS 256 + +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); +# endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); + +void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif +# endif + +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 void * in_a, const void * 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 +/* FREE: 0x00010000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L +/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ +/* 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); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_appname); +# 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 +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif +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); + +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); +int OSSL_LIB_CTX_get_conf_diagnostics(OSSL_LIB_CTX *ctx); +void OSSL_LIB_CTX_set_conf_diagnostics(OSSL_LIB_CTX *ctx, int value); + +void OSSL_sleep(uint64_t millis); + + +void *OSSL_LIB_CTX_get_data(OSSL_LIB_CTX *ctx, int index); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr.h new file mode 100644 index 0000000..7fa79cf --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr.h @@ -0,0 +1,56 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CRYPTOERR_H +# define OPENSSL_CRYPTOERR_H +# pragma once + +# include +# include +# include + + + +/* + * CRYPTO reason codes. + */ +# define CRYPTO_R_BAD_ALGORITHM_NAME 117 +# define CRYPTO_R_CONFLICTING_NAMES 118 +# define CRYPTO_R_HEX_STRING_TOO_SHORT 121 +# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_INSUFFICIENT_DATA_SPACE 106 +# define CRYPTO_R_INSUFFICIENT_PARAM_SIZE 107 +# define CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE 108 +# define CRYPTO_R_INTEGER_OVERFLOW 127 +# define CRYPTO_R_INVALID_NEGATIVE_VALUE 122 +# define CRYPTO_R_INVALID_NULL_ARGUMENT 109 +# define CRYPTO_R_INVALID_OSSL_PARAM_TYPE 110 +# define CRYPTO_R_NO_PARAMS_TO_MERGE 131 +# define CRYPTO_R_NO_SPACE_FOR_TERMINATING_NULL 128 +# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 +# define CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY 123 +# define CRYPTO_R_PARAM_NOT_INTEGER_TYPE 124 +# define CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE 129 +# define CRYPTO_R_PARAM_UNSIGNED_INTEGER_NEGATIVE_VALUE_UNSUPPORTED 125 +# define CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT 130 +# define CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION 126 +# define CRYPTO_R_PROVIDER_ALREADY_EXISTS 104 +# define CRYPTO_R_PROVIDER_SECTION_ERROR 105 +# define CRYPTO_R_RANDOM_SECTION_ERROR 119 +# define CRYPTO_R_SECURE_MALLOC_FAILURE 111 +# define CRYPTO_R_STRING_TOO_LONG 112 +# define CRYPTO_R_TOO_MANY_BYTES 113 +# define CRYPTO_R_TOO_MANY_NAMES 132 +# define CRYPTO_R_TOO_MANY_RECORDS 114 +# define CRYPTO_R_TOO_SMALL_BUFFER 116 +# define CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION 120 +# define CRYPTO_R_ZERO_LENGTH_NUMBER 115 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr_legacy.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr_legacy.h new file mode 100644 index 0000000..ccab33a --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cryptoerr_legacy.h @@ -0,0 +1,1466 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public {lib}err.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_CRYPTOERR_LEGACY_H +# define OPENSSL_CRYPTOERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASN1_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASYNC_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BIO_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BN_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BUF_strings(void); +# ifndef OPENSSL_NO_CMS +OSSL_DEPRECATEDIN_3_0 int ERR_load_CMS_strings(void); +# endif +# ifndef OPENSSL_NO_COMP +OSSL_DEPRECATEDIN_3_0 int ERR_load_COMP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_CONF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_CRYPTO_strings(void); +# ifndef OPENSSL_NO_CT +OSSL_DEPRECATEDIN_3_0 int ERR_load_CT_strings(void); +# endif +# ifndef OPENSSL_NO_DH +OSSL_DEPRECATEDIN_3_0 int ERR_load_DH_strings(void); +# endif +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 int ERR_load_DSA_strings(void); +# endif +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int ERR_load_EC_strings(void); +# endif +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int ERR_load_ENGINE_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_ERR_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_EVP_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_KDF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OBJ_strings(void); +# ifndef OPENSSL_NO_OCSP +OSSL_DEPRECATEDIN_3_0 int ERR_load_OCSP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_PEM_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS12_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS7_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RAND_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RSA_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OSSL_STORE_strings(void); +# ifndef OPENSSL_NO_TS +OSSL_DEPRECATEDIN_3_0 int ERR_load_TS_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_UI_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509V3_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 0 +# define ASN1_F_A2I_ASN1_INTEGER 0 +# define ASN1_F_A2I_ASN1_STRING 0 +# define ASN1_F_APPEND_EXP 0 +# define ASN1_F_ASN1_BIO_INIT 0 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 0 +# define ASN1_F_ASN1_CB 0 +# define ASN1_F_ASN1_CHECK_TLEN 0 +# define ASN1_F_ASN1_COLLECT 0 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 0 +# define ASN1_F_ASN1_D2I_FP 0 +# define ASN1_F_ASN1_D2I_READ_BIO 0 +# define ASN1_F_ASN1_DIGEST 0 +# define ASN1_F_ASN1_DO_ADB 0 +# define ASN1_F_ASN1_DO_LOCK 0 +# define ASN1_F_ASN1_DUP 0 +# define ASN1_F_ASN1_ENC_SAVE 0 +# define ASN1_F_ASN1_EX_C2I 0 +# define ASN1_F_ASN1_FIND_END 0 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 0 +# define ASN1_F_ASN1_GENERATE_V3 0 +# define ASN1_F_ASN1_GET_INT64 0 +# define ASN1_F_ASN1_GET_OBJECT 0 +# define ASN1_F_ASN1_GET_UINT64 0 +# define ASN1_F_ASN1_I2D_BIO 0 +# define ASN1_F_ASN1_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_D2I_FP 0 +# define ASN1_F_ASN1_ITEM_DUP 0 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 0 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 0 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 0 +# define ASN1_F_ASN1_ITEM_I2D_BIO 0 +# define ASN1_F_ASN1_ITEM_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_PACK 0 +# define ASN1_F_ASN1_ITEM_SIGN 0 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 0 +# define ASN1_F_ASN1_ITEM_UNPACK 0 +# define ASN1_F_ASN1_ITEM_VERIFY 0 +# define ASN1_F_ASN1_MBSTRING_NCOPY 0 +# define ASN1_F_ASN1_OBJECT_NEW 0 +# define ASN1_F_ASN1_OUTPUT_DATA 0 +# define ASN1_F_ASN1_PCTX_NEW 0 +# define ASN1_F_ASN1_PRIMITIVE_NEW 0 +# define ASN1_F_ASN1_SCTX_NEW 0 +# define ASN1_F_ASN1_SIGN 0 +# define ASN1_F_ASN1_STR2TYPE 0 +# define ASN1_F_ASN1_STRING_GET_INT64 0 +# define ASN1_F_ASN1_STRING_GET_UINT64 0 +# define ASN1_F_ASN1_STRING_SET 0 +# define ASN1_F_ASN1_STRING_TABLE_ADD 0 +# define ASN1_F_ASN1_STRING_TO_BN 0 +# define ASN1_F_ASN1_STRING_TYPE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 0 +# define ASN1_F_ASN1_TEMPLATE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 0 +# define ASN1_F_ASN1_TIME_ADJ 0 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 0 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 0 +# define ASN1_F_ASN1_UTCTIME_ADJ 0 +# define ASN1_F_ASN1_VERIFY 0 +# define ASN1_F_B64_READ_ASN1 0 +# define ASN1_F_B64_WRITE_ASN1 0 +# define ASN1_F_BIO_NEW_NDEF 0 +# define ASN1_F_BITSTR_CB 0 +# define ASN1_F_BN_TO_ASN1_STRING 0 +# define ASN1_F_C2I_ASN1_BIT_STRING 0 +# define ASN1_F_C2I_ASN1_INTEGER 0 +# define ASN1_F_C2I_ASN1_OBJECT 0 +# define ASN1_F_C2I_IBUF 0 +# define ASN1_F_C2I_UINT64_INT 0 +# define ASN1_F_COLLECT_DATA 0 +# define ASN1_F_D2I_ASN1_OBJECT 0 +# define ASN1_F_D2I_ASN1_UINTEGER 0 +# define ASN1_F_D2I_AUTOPRIVATEKEY 0 +# define ASN1_F_D2I_PRIVATEKEY 0 +# define ASN1_F_D2I_PUBLICKEY 0 +# define ASN1_F_DO_BUF 0 +# define ASN1_F_DO_CREATE 0 +# define ASN1_F_DO_DUMP 0 +# define ASN1_F_DO_TCREATE 0 +# define ASN1_F_I2A_ASN1_OBJECT 0 +# define ASN1_F_I2D_ASN1_BIO_STREAM 0 +# define ASN1_F_I2D_ASN1_OBJECT 0 +# define ASN1_F_I2D_DSA_PUBKEY 0 +# define ASN1_F_I2D_EC_PUBKEY 0 +# define ASN1_F_I2D_PRIVATEKEY 0 +# define ASN1_F_I2D_PUBLICKEY 0 +# define ASN1_F_I2D_RSA_PUBKEY 0 +# define ASN1_F_LONG_C2I 0 +# define ASN1_F_NDEF_PREFIX 0 +# define ASN1_F_NDEF_SUFFIX 0 +# define ASN1_F_OID_MODULE_INIT 0 +# define ASN1_F_PARSE_TAGGING 0 +# define ASN1_F_PKCS5_PBE2_SET_IV 0 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 0 +# define ASN1_F_PKCS5_PBE_SET 0 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 0 +# define ASN1_F_PKCS5_PBKDF2_SET 0 +# define ASN1_F_PKCS5_SCRYPT_SET 0 +# define ASN1_F_SMIME_READ_ASN1 0 +# define ASN1_F_SMIME_TEXT 0 +# define ASN1_F_STABLE_GET 0 +# define ASN1_F_STBL_MODULE_INIT 0 +# define ASN1_F_UINT32_C2I 0 +# define ASN1_F_UINT32_NEW 0 +# define ASN1_F_UINT64_C2I 0 +# define ASN1_F_UINT64_NEW 0 +# define ASN1_F_X509_CRL_ADD0_REVOKED 0 +# define ASN1_F_X509_INFO_NEW 0 +# define ASN1_F_X509_NAME_ENCODE 0 +# define ASN1_F_X509_NAME_EX_D2I 0 +# define ASN1_F_X509_NAME_EX_NEW 0 +# define ASN1_F_X509_PKEY_NEW 0 + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 0 +# define ASYNC_F_ASYNC_INIT_THREAD 0 +# define ASYNC_F_ASYNC_JOB_NEW 0 +# define ASYNC_F_ASYNC_PAUSE_JOB 0 +# define ASYNC_F_ASYNC_START_FUNC 0 +# define ASYNC_F_ASYNC_START_JOB 0 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 0 + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 0 +# define BIO_F_ADDRINFO_WRAP 0 +# define BIO_F_ADDR_STRINGS 0 +# define BIO_F_BIO_ACCEPT 0 +# define BIO_F_BIO_ACCEPT_EX 0 +# define BIO_F_BIO_ACCEPT_NEW 0 +# define BIO_F_BIO_ADDR_NEW 0 +# define BIO_F_BIO_BIND 0 +# define BIO_F_BIO_CALLBACK_CTRL 0 +# define BIO_F_BIO_CONNECT 0 +# define BIO_F_BIO_CONNECT_NEW 0 +# define BIO_F_BIO_CTRL 0 +# define BIO_F_BIO_GETS 0 +# define BIO_F_BIO_GET_HOST_IP 0 +# define BIO_F_BIO_GET_NEW_INDEX 0 +# define BIO_F_BIO_GET_PORT 0 +# define BIO_F_BIO_LISTEN 0 +# define BIO_F_BIO_LOOKUP 0 +# define BIO_F_BIO_LOOKUP_EX 0 +# define BIO_F_BIO_MAKE_PAIR 0 +# define BIO_F_BIO_METH_NEW 0 +# define BIO_F_BIO_NEW 0 +# define BIO_F_BIO_NEW_DGRAM_SCTP 0 +# define BIO_F_BIO_NEW_FILE 0 +# define BIO_F_BIO_NEW_MEM_BUF 0 +# define BIO_F_BIO_NREAD 0 +# define BIO_F_BIO_NREAD0 0 +# define BIO_F_BIO_NWRITE 0 +# define BIO_F_BIO_NWRITE0 0 +# define BIO_F_BIO_PARSE_HOSTSERV 0 +# define BIO_F_BIO_PUTS 0 +# define BIO_F_BIO_READ 0 +# define BIO_F_BIO_READ_EX 0 +# define BIO_F_BIO_READ_INTERN 0 +# define BIO_F_BIO_SOCKET 0 +# define BIO_F_BIO_SOCKET_NBIO 0 +# define BIO_F_BIO_SOCK_INFO 0 +# define BIO_F_BIO_SOCK_INIT 0 +# define BIO_F_BIO_WRITE 0 +# define BIO_F_BIO_WRITE_EX 0 +# define BIO_F_BIO_WRITE_INTERN 0 +# define BIO_F_BUFFER_CTRL 0 +# define BIO_F_CONN_CTRL 0 +# define BIO_F_CONN_STATE 0 +# define BIO_F_DGRAM_SCTP_NEW 0 +# define BIO_F_DGRAM_SCTP_READ 0 +# define BIO_F_DGRAM_SCTP_WRITE 0 +# define BIO_F_DOAPR_OUTCH 0 +# define BIO_F_FILE_CTRL 0 +# define BIO_F_FILE_READ 0 +# define BIO_F_LINEBUFFER_CTRL 0 +# define BIO_F_LINEBUFFER_NEW 0 +# define BIO_F_MEM_WRITE 0 +# define BIO_F_NBIOF_NEW 0 +# define BIO_F_SLG_WRITE 0 +# define BIO_F_SSL_NEW 0 + +/* + * BN function codes. + */ +# define BN_F_BNRAND 0 +# define BN_F_BNRAND_RANGE 0 +# define BN_F_BN_BLINDING_CONVERT_EX 0 +# define BN_F_BN_BLINDING_CREATE_PARAM 0 +# define BN_F_BN_BLINDING_INVERT_EX 0 +# define BN_F_BN_BLINDING_NEW 0 +# define BN_F_BN_BLINDING_UPDATE 0 +# define BN_F_BN_BN2DEC 0 +# define BN_F_BN_BN2HEX 0 +# define BN_F_BN_COMPUTE_WNAF 0 +# define BN_F_BN_CTX_GET 0 +# define BN_F_BN_CTX_NEW 0 +# define BN_F_BN_CTX_START 0 +# define BN_F_BN_DIV 0 +# define BN_F_BN_DIV_RECP 0 +# define BN_F_BN_EXP 0 +# define BN_F_BN_EXPAND_INTERNAL 0 +# define BN_F_BN_GENCB_NEW 0 +# define BN_F_BN_GENERATE_DSA_NONCE 0 +# define BN_F_BN_GENERATE_PRIME_EX 0 +# define BN_F_BN_GF2M_MOD 0 +# define BN_F_BN_GF2M_MOD_EXP 0 +# define BN_F_BN_GF2M_MOD_MUL 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 0 +# define BN_F_BN_GF2M_MOD_SQR 0 +# define BN_F_BN_GF2M_MOD_SQRT 0 +# define BN_F_BN_LSHIFT 0 +# define BN_F_BN_MOD_EXP2_MONT 0 +# define BN_F_BN_MOD_EXP_MONT 0 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 0 +# define BN_F_BN_MOD_EXP_MONT_WORD 0 +# define BN_F_BN_MOD_EXP_RECP 0 +# define BN_F_BN_MOD_EXP_SIMPLE 0 +# define BN_F_BN_MOD_INVERSE 0 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 0 +# define BN_F_BN_MOD_LSHIFT_QUICK 0 +# define BN_F_BN_MOD_SQRT 0 +# define BN_F_BN_MONT_CTX_NEW 0 +# define BN_F_BN_MPI2BN 0 +# define BN_F_BN_NEW 0 +# define BN_F_BN_POOL_GET 0 +# define BN_F_BN_RAND 0 +# define BN_F_BN_RAND_RANGE 0 +# define BN_F_BN_RECP_CTX_NEW 0 +# define BN_F_BN_RSHIFT 0 +# define BN_F_BN_SET_WORDS 0 +# define BN_F_BN_STACK_PUSH 0 +# define BN_F_BN_USUB 0 + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 0 +# define BUF_F_BUF_MEM_GROW_CLEAN 0 +# define BUF_F_BUF_MEM_NEW 0 + +# ifndef OPENSSL_NO_CMS +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 0 +# define CMS_F_CMS_ADD0_CERT 0 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 0 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 0 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 0 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 0 +# define CMS_F_CMS_ADD1_SIGNER 0 +# define CMS_F_CMS_ADD1_SIGNINGTIME 0 +# define CMS_F_CMS_COMPRESS 0 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 0 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 0 +# define CMS_F_CMS_COPY_CONTENT 0 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 0 +# define CMS_F_CMS_DATA 0 +# define CMS_F_CMS_DATAFINAL 0 +# define CMS_F_CMS_DATAINIT 0 +# define CMS_F_CMS_DECRYPT 0 +# define CMS_F_CMS_DECRYPT_SET1_KEY 0 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 0 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 0 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 0 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 0 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 0 +# define CMS_F_CMS_DIGEST_VERIFY 0 +# define CMS_F_CMS_ENCODE_RECEIPT 0 +# define CMS_F_CMS_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 0 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 0 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 0 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 0 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 0 +# define CMS_F_CMS_ENV_ASN1_CTRL 0 +# define CMS_F_CMS_FINAL 0 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 0 +# define CMS_F_CMS_GET0_CONTENT 0 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 0 +# define CMS_F_CMS_GET0_ENVELOPED 0 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 0 +# define CMS_F_CMS_GET0_SIGNED 0 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 0 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 0 +# define CMS_F_CMS_RECEIPT_VERIFY 0 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 0 +# define CMS_F_CMS_SD_ASN1_CTRL 0 +# define CMS_F_CMS_SET1_IAS 0 +# define CMS_F_CMS_SET1_KEYID 0 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 0 +# define CMS_F_CMS_SET_DETACHED 0 +# define CMS_F_CMS_SIGN 0 +# define CMS_F_CMS_SIGNED_DATA_INIT 0 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 0 +# define CMS_F_CMS_SIGN_RECEIPT 0 +# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 0 +# define CMS_F_CMS_STREAM 0 +# define CMS_F_CMS_UNCOMPRESS 0 +# define CMS_F_CMS_VERIFY 0 +# define CMS_F_KEK_UNWRAP_KEY 0 +# endif + +# ifndef OPENSSL_NO_COMP +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 0 +# define COMP_F_BIO_ZLIB_NEW 0 +# define COMP_F_BIO_ZLIB_READ 0 +# define COMP_F_BIO_ZLIB_WRITE 0 +# define COMP_F_COMP_CTX_NEW 0 +# endif + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 0 +# define CONF_F_CONF_LOAD 0 +# define CONF_F_CONF_LOAD_FP 0 +# define CONF_F_CONF_PARSE_LIST 0 +# define CONF_F_DEF_LOAD 0 +# define CONF_F_DEF_LOAD_BIO 0 +# define CONF_F_GET_NEXT_FILE 0 +# define CONF_F_MODULE_ADD 0 +# define CONF_F_MODULE_INIT 0 +# define CONF_F_MODULE_LOAD_DSO 0 +# define CONF_F_MODULE_RUN 0 +# define CONF_F_NCONF_DUMP_BIO 0 +# define CONF_F_NCONF_DUMP_FP 0 +# define CONF_F_NCONF_GET_NUMBER_E 0 +# define CONF_F_NCONF_GET_SECTION 0 +# define CONF_F_NCONF_GET_STRING 0 +# define CONF_F_NCONF_LOAD 0 +# define CONF_F_NCONF_LOAD_BIO 0 +# define CONF_F_NCONF_LOAD_FP 0 +# define CONF_F_NCONF_NEW 0 +# define CONF_F_PROCESS_INCLUDE 0 +# define CONF_F_SSL_MODULE_INIT 0 +# define CONF_F_STR_COPY 0 + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 0 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 0 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 0 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 0 +# define CRYPTO_F_CRYPTO_MEMDUP 0 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 0 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 0 +# define CRYPTO_F_CRYPTO_OCB128_INIT 0 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 0 +# define CRYPTO_F_GET_AND_LOCK 0 +# define CRYPTO_F_OPENSSL_ATEXIT 0 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 0 +# define CRYPTO_F_OPENSSL_FOPEN 0 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 0 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 0 +# define CRYPTO_F_OPENSSL_LH_NEW 0 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 0 +# define CRYPTO_F_OPENSSL_SK_DUP 0 +# define CRYPTO_F_PKEY_HMAC_INIT 0 +# define CRYPTO_F_PKEY_POLY1305_INIT 0 +# define CRYPTO_F_PKEY_SIPHASH_INIT 0 +# define CRYPTO_F_SK_RESERVE 0 + +# ifndef OPENSSL_NO_CT +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 0 +# define CT_F_CTLOG_NEW_FROM_BASE64 0 +# define CT_F_CTLOG_NEW_FROM_CONF 0 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 0 +# define CT_F_CTLOG_STORE_LOAD_FILE 0 +# define CT_F_CTLOG_STORE_LOAD_LOG 0 +# define CT_F_CTLOG_STORE_NEW 0 +# define CT_F_CT_BASE64_DECODE 0 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 0 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 0 +# define CT_F_I2O_SCT 0 +# define CT_F_I2O_SCT_LIST 0 +# define CT_F_I2O_SCT_SIGNATURE 0 +# define CT_F_O2I_SCT 0 +# define CT_F_O2I_SCT_LIST 0 +# define CT_F_O2I_SCT_SIGNATURE 0 +# define CT_F_SCT_CTX_NEW 0 +# define CT_F_SCT_CTX_VERIFY 0 +# define CT_F_SCT_NEW 0 +# define CT_F_SCT_NEW_FROM_BASE64 0 +# define CT_F_SCT_SET0_LOG_ID 0 +# define CT_F_SCT_SET1_EXTENSIONS 0 +# define CT_F_SCT_SET1_LOG_ID 0 +# define CT_F_SCT_SET1_SIGNATURE 0 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 0 +# define CT_F_SCT_SET_SIGNATURE_NID 0 +# define CT_F_SCT_SET_VERSION 0 +# endif + +# ifndef OPENSSL_NO_DH +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 0 +# define DH_F_DHPARAMS_PRINT_FP 0 +# define DH_F_DH_BUILTIN_GENPARAMS 0 +# define DH_F_DH_CHECK_EX 0 +# define DH_F_DH_CHECK_PARAMS_EX 0 +# define DH_F_DH_CHECK_PUB_KEY_EX 0 +# define DH_F_DH_CMS_DECRYPT 0 +# define DH_F_DH_CMS_SET_PEERKEY 0 +# define DH_F_DH_CMS_SET_SHARED_INFO 0 +# define DH_F_DH_METH_DUP 0 +# define DH_F_DH_METH_NEW 0 +# define DH_F_DH_METH_SET1_NAME 0 +# define DH_F_DH_NEW_BY_NID 0 +# define DH_F_DH_NEW_METHOD 0 +# define DH_F_DH_PARAM_DECODE 0 +# define DH_F_DH_PKEY_PUBLIC_CHECK 0 +# define DH_F_DH_PRIV_DECODE 0 +# define DH_F_DH_PRIV_ENCODE 0 +# define DH_F_DH_PUB_DECODE 0 +# define DH_F_DH_PUB_ENCODE 0 +# define DH_F_DO_DH_PRINT 0 +# define DH_F_GENERATE_KEY 0 +# define DH_F_PKEY_DH_CTRL_STR 0 +# define DH_F_PKEY_DH_DERIVE 0 +# define DH_F_PKEY_DH_INIT 0 +# define DH_F_PKEY_DH_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_DSA +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 0 +# define DSA_F_DSAPARAMS_PRINT_FP 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 0 +# define DSA_F_DSA_DO_SIGN 0 +# define DSA_F_DSA_DO_VERIFY 0 +# define DSA_F_DSA_METH_DUP 0 +# define DSA_F_DSA_METH_NEW 0 +# define DSA_F_DSA_METH_SET1_NAME 0 +# define DSA_F_DSA_NEW_METHOD 0 +# define DSA_F_DSA_PARAM_DECODE 0 +# define DSA_F_DSA_PRINT_FP 0 +# define DSA_F_DSA_PRIV_DECODE 0 +# define DSA_F_DSA_PRIV_ENCODE 0 +# define DSA_F_DSA_PUB_DECODE 0 +# define DSA_F_DSA_PUB_ENCODE 0 +# define DSA_F_DSA_SIGN 0 +# define DSA_F_DSA_SIGN_SETUP 0 +# define DSA_F_DSA_SIG_NEW 0 +# define DSA_F_OLD_DSA_PRIV_DECODE 0 +# define DSA_F_PKEY_DSA_CTRL 0 +# define DSA_F_PKEY_DSA_CTRL_STR 0 +# define DSA_F_PKEY_DSA_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_EC +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 0 +# define EC_F_D2I_ECPARAMETERS 0 +# define EC_F_D2I_ECPKPARAMETERS 0 +# define EC_F_D2I_ECPRIVATEKEY 0 +# define EC_F_DO_EC_KEY_PRINT 0 +# define EC_F_ECDH_CMS_DECRYPT 0 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 0 +# define EC_F_ECDH_COMPUTE_KEY 0 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 0 +# define EC_F_ECDSA_DO_SIGN_EX 0 +# define EC_F_ECDSA_DO_VERIFY 0 +# define EC_F_ECDSA_SIGN_EX 0 +# define EC_F_ECDSA_SIGN_SETUP 0 +# define EC_F_ECDSA_SIG_NEW 0 +# define EC_F_ECDSA_VERIFY 0 +# define EC_F_ECD_ITEM_VERIFY 0 +# define EC_F_ECKEY_PARAM2TYPE 0 +# define EC_F_ECKEY_PARAM_DECODE 0 +# define EC_F_ECKEY_PRIV_DECODE 0 +# define EC_F_ECKEY_PRIV_ENCODE 0 +# define EC_F_ECKEY_PUB_DECODE 0 +# define EC_F_ECKEY_PUB_ENCODE 0 +# define EC_F_ECKEY_TYPE2PARAM 0 +# define EC_F_ECPARAMETERS_PRINT 0 +# define EC_F_ECPARAMETERS_PRINT_FP 0 +# define EC_F_ECPKPARAMETERS_PRINT 0 +# define EC_F_ECPKPARAMETERS_PRINT_FP 0 +# define EC_F_ECP_NISTZ256_GET_AFFINE 0 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 0 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 0 +# define EC_F_ECP_NISTZ256_POINTS_MUL 0 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 0 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 0 +# define EC_F_ECX_KEY_OP 0 +# define EC_F_ECX_PRIV_ENCODE 0 +# define EC_F_ECX_PUB_ENCODE 0 +# define EC_F_EC_ASN1_GROUP2CURVE 0 +# define EC_F_EC_ASN1_GROUP2FIELDID 0 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 0 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 0 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 0 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 0 +# define EC_F_EC_GFP_MONT_FIELD_INV 0 +# define EC_F_EC_GFP_MONT_FIELD_MUL 0 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 0 +# define EC_F_EC_GFP_MONT_FIELD_SQR 0 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NIST_FIELD_MUL 0 +# define EC_F_EC_GFP_NIST_FIELD_SQR 0 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GROUP_CHECK 0 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GROUP_COPY 0 +# define EC_F_EC_GROUP_GET_CURVE 0 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_GET_CURVE_GFP 0 +# define EC_F_EC_GROUP_GET_DEGREE 0 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 0 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 0 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 0 +# define EC_F_EC_GROUP_NEW 0 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 0 +# define EC_F_EC_GROUP_NEW_FROM_DATA 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_SET_CURVE 0 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_SET_CURVE_GFP 0 +# define EC_F_EC_GROUP_SET_GENERATOR 0 +# define EC_F_EC_GROUP_SET_SEED 0 +# define EC_F_EC_KEY_CHECK_KEY 0 +# define EC_F_EC_KEY_COPY 0 +# define EC_F_EC_KEY_GENERATE_KEY 0 +# define EC_F_EC_KEY_NEW 0 +# define EC_F_EC_KEY_NEW_METHOD 0 +# define EC_F_EC_KEY_OCT2PRIV 0 +# define EC_F_EC_KEY_PRINT 0 +# define EC_F_EC_KEY_PRINT_FP 0 +# define EC_F_EC_KEY_PRIV2BUF 0 +# define EC_F_EC_KEY_PRIV2OCT 0 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 0 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 0 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 0 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 0 +# define EC_F_EC_PKEY_CHECK 0 +# define EC_F_EC_PKEY_PARAM_CHECK 0 +# define EC_F_EC_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_POINTS_MUL 0 +# define EC_F_EC_POINT_ADD 0 +# define EC_F_EC_POINT_BN2POINT 0 +# define EC_F_EC_POINT_CMP 0 +# define EC_F_EC_POINT_COPY 0 +# define EC_F_EC_POINT_DBL 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_INVERT 0 +# define EC_F_EC_POINT_IS_AT_INFINITY 0 +# define EC_F_EC_POINT_IS_ON_CURVE 0 +# define EC_F_EC_POINT_MAKE_AFFINE 0 +# define EC_F_EC_POINT_NEW 0 +# define EC_F_EC_POINT_OCT2POINT 0 +# define EC_F_EC_POINT_POINT2BUF 0 +# define EC_F_EC_POINT_POINT2OCT 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_TO_INFINITY 0 +# define EC_F_EC_PRE_COMP_NEW 0 +# define EC_F_EC_SCALAR_MUL_LADDER 0 +# define EC_F_EC_WNAF_MUL 0 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 0 +# define EC_F_I2D_ECPARAMETERS 0 +# define EC_F_I2D_ECPKPARAMETERS 0 +# define EC_F_I2D_ECPRIVATEKEY 0 +# define EC_F_I2O_ECPUBLICKEY 0 +# define EC_F_NISTP224_PRE_COMP_NEW 0 +# define EC_F_NISTP256_PRE_COMP_NEW 0 +# define EC_F_NISTP521_PRE_COMP_NEW 0 +# define EC_F_O2I_ECPUBLICKEY 0 +# define EC_F_OLD_EC_PRIV_DECODE 0 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 0 +# define EC_F_OSSL_ECDSA_SIGN_SIG 0 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 0 +# define EC_F_PKEY_ECD_CTRL 0 +# define EC_F_PKEY_ECD_DIGESTSIGN 0 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 0 +# define EC_F_PKEY_ECD_DIGESTSIGN448 0 +# define EC_F_PKEY_ECX_DERIVE 0 +# define EC_F_PKEY_EC_CTRL 0 +# define EC_F_PKEY_EC_CTRL_STR 0 +# define EC_F_PKEY_EC_DERIVE 0 +# define EC_F_PKEY_EC_INIT 0 +# define EC_F_PKEY_EC_KDF_DERIVE 0 +# define EC_F_PKEY_EC_KEYGEN 0 +# define EC_F_PKEY_EC_PARAMGEN 0 +# define EC_F_PKEY_EC_SIGN 0 +# define EC_F_VALIDATE_ECX_DERIVE 0 +# endif + +# ifndef OPENSSL_NO_ENGINE +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 0 +# define ENGINE_F_DYNAMIC_CTRL 0 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 0 +# define ENGINE_F_DYNAMIC_LOAD 0 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 0 +# define ENGINE_F_ENGINE_ADD 0 +# define ENGINE_F_ENGINE_BY_ID 0 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 0 +# define ENGINE_F_ENGINE_CTRL 0 +# define ENGINE_F_ENGINE_CTRL_CMD 0 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 0 +# define ENGINE_F_ENGINE_FINISH 0 +# define ENGINE_F_ENGINE_GET_CIPHER 0 +# define ENGINE_F_ENGINE_GET_DIGEST 0 +# define ENGINE_F_ENGINE_GET_FIRST 0 +# define ENGINE_F_ENGINE_GET_LAST 0 +# define ENGINE_F_ENGINE_GET_NEXT 0 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 0 +# define ENGINE_F_ENGINE_GET_PKEY_METH 0 +# define ENGINE_F_ENGINE_GET_PREV 0 +# define ENGINE_F_ENGINE_INIT 0 +# define ENGINE_F_ENGINE_LIST_ADD 0 +# define ENGINE_F_ENGINE_LIST_REMOVE 0 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 0 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 0 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 0 +# define ENGINE_F_ENGINE_NEW 0 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 0 +# define ENGINE_F_ENGINE_REMOVE 0 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 0 +# define ENGINE_F_ENGINE_SET_ID 0 +# define ENGINE_F_ENGINE_SET_NAME 0 +# define ENGINE_F_ENGINE_TABLE_REGISTER 0 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 0 +# define ENGINE_F_ENGINE_UP_REF 0 +# define ENGINE_F_INT_CLEANUP_ITEM 0 +# define ENGINE_F_INT_CTRL_HELPER 0 +# define ENGINE_F_INT_ENGINE_CONFIGURE 0 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 0 +# define ENGINE_F_OSSL_HMAC_INIT 0 +# endif + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 0 +# define EVP_F_AESNI_XTS_INIT_KEY 0 +# define EVP_F_AES_GCM_CTRL 0 +# define EVP_F_AES_INIT_KEY 0 +# define EVP_F_AES_OCB_CIPHER 0 +# define EVP_F_AES_T4_INIT_KEY 0 +# define EVP_F_AES_T4_XTS_INIT_KEY 0 +# define EVP_F_AES_WRAP_CIPHER 0 +# define EVP_F_AES_XTS_INIT_KEY 0 +# define EVP_F_ALG_MODULE_INIT 0 +# define EVP_F_ARIA_CCM_INIT_KEY 0 +# define EVP_F_ARIA_GCM_CTRL 0 +# define EVP_F_ARIA_GCM_INIT_KEY 0 +# define EVP_F_ARIA_INIT_KEY 0 +# define EVP_F_B64_NEW 0 +# define EVP_F_CAMELLIA_INIT_KEY 0 +# define EVP_F_CHACHA20_POLY1305_CTRL 0 +# define EVP_F_CMLL_T4_INIT_KEY 0 +# define EVP_F_DES_EDE3_WRAP_CIPHER 0 +# define EVP_F_DO_SIGVER_INIT 0 +# define EVP_F_ENC_NEW 0 +# define EVP_F_EVP_CIPHERINIT_EX 0 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 0 +# define EVP_F_EVP_CIPHER_CTX_COPY 0 +# define EVP_F_EVP_CIPHER_CTX_CTRL 0 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 0 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 0 +# define EVP_F_EVP_DECRYPTFINAL_EX 0 +# define EVP_F_EVP_DECRYPTUPDATE 0 +# define EVP_F_EVP_DIGESTFINALXOF 0 +# define EVP_F_EVP_DIGESTINIT_EX 0 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 0 +# define EVP_F_EVP_ENCRYPTFINAL_EX 0 +# define EVP_F_EVP_ENCRYPTUPDATE 0 +# define EVP_F_EVP_MD_CTX_COPY_EX 0 +# define EVP_F_EVP_MD_SIZE 0 +# define EVP_F_EVP_OPENINIT 0 +# define EVP_F_EVP_PBE_ALG_ADD 0 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 0 +# define EVP_F_EVP_PBE_CIPHERINIT 0 +# define EVP_F_EVP_PBE_SCRYPT 0 +# define EVP_F_EVP_PKCS82PKEY 0 +# define EVP_F_EVP_PKEY2PKCS8 0 +# define EVP_F_EVP_PKEY_ASN1_ADD0 0 +# define EVP_F_EVP_PKEY_CHECK 0 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 0 +# define EVP_F_EVP_PKEY_CTX_CTRL 0 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 0 +# define EVP_F_EVP_PKEY_CTX_DUP 0 +# define EVP_F_EVP_PKEY_CTX_MD 0 +# define EVP_F_EVP_PKEY_DECRYPT 0 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 0 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 0 +# define EVP_F_EVP_PKEY_DERIVE 0 +# define EVP_F_EVP_PKEY_DERIVE_INIT 0 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 0 +# define EVP_F_EVP_PKEY_ENCRYPT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 0 +# define EVP_F_EVP_PKEY_GET0_DH 0 +# define EVP_F_EVP_PKEY_GET0_DSA 0 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 0 +# define EVP_F_EVP_PKEY_GET0_HMAC 0 +# define EVP_F_EVP_PKEY_GET0_POLY1305 0 +# define EVP_F_EVP_PKEY_GET0_RSA 0 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 0 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_KEYGEN 0 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 0 +# define EVP_F_EVP_PKEY_METH_ADD0 0 +# define EVP_F_EVP_PKEY_METH_NEW 0 +# define EVP_F_EVP_PKEY_NEW 0 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_PARAMGEN 0 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 0 +# define EVP_F_EVP_PKEY_PARAM_CHECK 0 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 0 +# define EVP_F_EVP_PKEY_SET1_ENGINE 0 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 0 +# define EVP_F_EVP_PKEY_SIGN 0 +# define EVP_F_EVP_PKEY_SIGN_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY 0 +# define EVP_F_EVP_PKEY_VERIFY_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 0 +# define EVP_F_EVP_SIGNFINAL 0 +# define EVP_F_EVP_VERIFYFINAL 0 +# define EVP_F_INT_CTX_NEW 0 +# define EVP_F_OK_NEW 0 +# define EVP_F_PKCS5_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 0 +# define EVP_F_PKEY_SET_TYPE 0 +# define EVP_F_RC2_MAGIC_TO_METH 0 +# define EVP_F_RC5_CTRL 0 +# define EVP_F_R_32_12_16_INIT_KEY 0 +# define EVP_F_S390X_AES_GCM_CTRL 0 +# define EVP_F_UPDATE 0 + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 0 +# define KDF_F_PKEY_HKDF_DERIVE 0 +# define KDF_F_PKEY_HKDF_INIT 0 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 0 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 0 +# define KDF_F_PKEY_SCRYPT_DERIVE 0 +# define KDF_F_PKEY_SCRYPT_INIT 0 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 0 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 0 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 0 +# define KDF_F_PKEY_TLS1_PRF_INIT 0 +# define KDF_F_TLS1_PRF_ALG 0 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 0 +# define KDF_R_MISSING_ITERATION_COUNT 0 +# define KDF_R_MISSING_KEY 0 +# define KDF_R_MISSING_MESSAGE_DIGEST 0 +# define KDF_R_MISSING_PARAMETER 0 +# define KDF_R_MISSING_PASS 0 +# define KDF_R_MISSING_SALT 0 +# define KDF_R_MISSING_SECRET 0 +# define KDF_R_MISSING_SEED 0 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 0 +# define KDF_R_VALUE_ERROR 0 +# define KDF_R_VALUE_MISSING 0 + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 0 +# define OBJ_F_OBJ_ADD_SIGID 0 +# define OBJ_F_OBJ_CREATE 0 +# define OBJ_F_OBJ_DUP 0 +# define OBJ_F_OBJ_NAME_NEW_INDEX 0 +# define OBJ_F_OBJ_NID2LN 0 +# define OBJ_F_OBJ_NID2OBJ 0 +# define OBJ_F_OBJ_NID2SN 0 +# define OBJ_F_OBJ_TXT2OBJ 0 + +# ifndef OPENSSL_NO_OCSP +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 0 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 0 +# define OCSP_F_OCSP_BASIC_SIGN 0 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 0 +# define OCSP_F_OCSP_BASIC_VERIFY 0 +# define OCSP_F_OCSP_CERT_ID_NEW 0 +# define OCSP_F_OCSP_CHECK_DELEGATED 0 +# define OCSP_F_OCSP_CHECK_IDS 0 +# define OCSP_F_OCSP_CHECK_ISSUER 0 +# define OCSP_F_OCSP_CHECK_VALIDITY 0 +# define OCSP_F_OCSP_MATCH_ISSUERID 0 +# define OCSP_F_OCSP_PARSE_URL 0 +# define OCSP_F_OCSP_REQUEST_SIGN 0 +# define OCSP_F_OCSP_REQUEST_VERIFY 0 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 0 +# define OCSP_F_PARSE_HTTP_LINE1 0 +# endif + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 0 +# define PEM_F_B2I_PVK_BIO 0 +# define PEM_F_B2I_RSA 0 +# define PEM_F_CHECK_BITLEN_DSA 0 +# define PEM_F_CHECK_BITLEN_RSA 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 0 +# define PEM_F_DO_B2I 0 +# define PEM_F_DO_B2I_BIO 0 +# define PEM_F_DO_BLOB_HEADER 0 +# define PEM_F_DO_I2B 0 +# define PEM_F_DO_PK8PKEY 0 +# define PEM_F_DO_PK8PKEY_FP 0 +# define PEM_F_DO_PVK_BODY 0 +# define PEM_F_DO_PVK_HEADER 0 +# define PEM_F_GET_HEADER_AND_DATA 0 +# define PEM_F_GET_NAME 0 +# define PEM_F_I2B_PVK 0 +# define PEM_F_I2B_PVK_BIO 0 +# define PEM_F_LOAD_IV 0 +# define PEM_F_PEM_ASN1_READ 0 +# define PEM_F_PEM_ASN1_READ_BIO 0 +# define PEM_F_PEM_ASN1_WRITE 0 +# define PEM_F_PEM_ASN1_WRITE_BIO 0 +# define PEM_F_PEM_DEF_CALLBACK 0 +# define PEM_F_PEM_DO_HEADER 0 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 0 +# define PEM_F_PEM_READ 0 +# define PEM_F_PEM_READ_BIO 0 +# define PEM_F_PEM_READ_BIO_DHPARAMS 0 +# define PEM_F_PEM_READ_BIO_EX 0 +# define PEM_F_PEM_READ_BIO_PARAMETERS 0 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 0 +# define PEM_F_PEM_READ_DHPARAMS 0 +# define PEM_F_PEM_READ_PRIVATEKEY 0 +# define PEM_F_PEM_SIGNFINAL 0 +# define PEM_F_PEM_WRITE 0 +# define PEM_F_PEM_WRITE_BIO 0 +# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 0 +# define PEM_F_PEM_WRITE_PRIVATEKEY 0 +# define PEM_F_PEM_X509_INFO_READ 0 +# define PEM_F_PEM_X509_INFO_READ_BIO 0 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 0 + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 0 +# define PKCS12_F_OPENSSL_UNI2ASC 0 +# define PKCS12_F_OPENSSL_UNI2UTF8 0 +# define PKCS12_F_OPENSSL_UTF82UNI 0 +# define PKCS12_F_PKCS12_CREATE 0 +# define PKCS12_F_PKCS12_GEN_MAC 0 +# define PKCS12_F_PKCS12_INIT 0 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 0 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 0 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 0 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 0 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 0 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 0 +# define PKCS12_F_PKCS12_NEWPASS 0 +# define PKCS12_F_PKCS12_PACK_P7DATA 0 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 0 +# define PKCS12_F_PKCS12_PARSE 0 +# define PKCS12_F_PKCS12_PBE_CRYPT 0 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS12_SETUP_MAC 0 +# define PKCS12_F_PKCS12_SET_MAC 0 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 0 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 0 +# define PKCS12_F_PKCS12_VERIFY_MAC 0 +# define PKCS12_F_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS8_SET0_PBE 0 + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 0 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 0 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 0 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 0 +# define PKCS7_F_PKCS7_ADD_CRL 0 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 0 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 0 +# define PKCS7_F_PKCS7_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 0 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 0 +# define PKCS7_F_PKCS7_CTRL 0 +# define PKCS7_F_PKCS7_DATADECODE 0 +# define PKCS7_F_PKCS7_DATAFINAL 0 +# define PKCS7_F_PKCS7_DATAINIT 0 +# define PKCS7_F_PKCS7_DATAVERIFY 0 +# define PKCS7_F_PKCS7_DECRYPT 0 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 0 +# define PKCS7_F_PKCS7_ENCODE_RINFO 0 +# define PKCS7_F_PKCS7_ENCRYPT 0 +# define PKCS7_F_PKCS7_FINAL 0 +# define PKCS7_F_PKCS7_FIND_DIGEST 0 +# define PKCS7_F_PKCS7_GET0_SIGNERS 0 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 0 +# define PKCS7_F_PKCS7_SET_CIPHER 0 +# define PKCS7_F_PKCS7_SET_CONTENT 0 +# define PKCS7_F_PKCS7_SET_DIGEST 0 +# define PKCS7_F_PKCS7_SET_TYPE 0 +# define PKCS7_F_PKCS7_SIGN 0 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 0 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 0 +# define PKCS7_F_PKCS7_VERIFY 0 + +/* + * RAND function codes. + */ +# define RAND_F_DATA_COLLECT_METHOD 0 +# define RAND_F_DRBG_BYTES 0 +# define RAND_F_DRBG_GET_ENTROPY 0 +# define RAND_F_DRBG_SETUP 0 +# define RAND_F_GET_ENTROPY 0 +# define RAND_F_RAND_BYTES 0 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 0 +# define RAND_F_RAND_DRBG_GENERATE 0 +# define RAND_F_RAND_DRBG_GET_ENTROPY 0 +# define RAND_F_RAND_DRBG_GET_NONCE 0 +# define RAND_F_RAND_DRBG_INSTANTIATE 0 +# define RAND_F_RAND_DRBG_NEW 0 +# define RAND_F_RAND_DRBG_RESEED 0 +# define RAND_F_RAND_DRBG_RESTART 0 +# define RAND_F_RAND_DRBG_SET 0 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 0 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 0 +# define RAND_F_RAND_LOAD_FILE 0 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 0 +# define RAND_F_RAND_POOL_ADD 0 +# define RAND_F_RAND_POOL_ADD_BEGIN 0 +# define RAND_F_RAND_POOL_ADD_END 0 +# define RAND_F_RAND_POOL_ATTACH 0 +# define RAND_F_RAND_POOL_BYTES_NEEDED 0 +# define RAND_F_RAND_POOL_GROW 0 +# define RAND_F_RAND_POOL_NEW 0 +# define RAND_F_RAND_PSEUDO_BYTES 0 +# define RAND_F_RAND_WRITE_FILE 0 + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 0 +# define RSA_F_ENCODE_PKCS1 0 +# define RSA_F_INT_RSA_VERIFY 0 +# define RSA_F_OLD_RSA_PRIV_DECODE 0 +# define RSA_F_PKEY_PSS_INIT 0 +# define RSA_F_PKEY_RSA_CTRL 0 +# define RSA_F_PKEY_RSA_CTRL_STR 0 +# define RSA_F_PKEY_RSA_SIGN 0 +# define RSA_F_PKEY_RSA_VERIFY 0 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 0 +# define RSA_F_RSA_ALGOR_TO_MD 0 +# define RSA_F_RSA_BUILTIN_KEYGEN 0 +# define RSA_F_RSA_CHECK_KEY 0 +# define RSA_F_RSA_CHECK_KEY_EX 0 +# define RSA_F_RSA_CMS_DECRYPT 0 +# define RSA_F_RSA_CMS_VERIFY 0 +# define RSA_F_RSA_ITEM_VERIFY 0 +# define RSA_F_RSA_METH_DUP 0 +# define RSA_F_RSA_METH_NEW 0 +# define RSA_F_RSA_METH_SET1_NAME 0 +# define RSA_F_RSA_MGF1_TO_MD 0 +# define RSA_F_RSA_MULTIP_INFO_NEW 0 +# define RSA_F_RSA_NEW_METHOD 0 +# define RSA_F_RSA_NULL 0 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_PADDING_ADD_NONE 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_ADD_SSLV23 0 +# define RSA_F_RSA_PADDING_ADD_X931 0 +# define RSA_F_RSA_PADDING_CHECK_NONE 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 0 +# define RSA_F_RSA_PADDING_CHECK_X931 0 +# define RSA_F_RSA_PARAM_DECODE 0 +# define RSA_F_RSA_PRINT 0 +# define RSA_F_RSA_PRINT_FP 0 +# define RSA_F_RSA_PRIV_DECODE 0 +# define RSA_F_RSA_PRIV_ENCODE 0 +# define RSA_F_RSA_PSS_GET_PARAM 0 +# define RSA_F_RSA_PSS_TO_CTX 0 +# define RSA_F_RSA_PUB_DECODE 0 +# define RSA_F_RSA_SETUP_BLINDING 0 +# define RSA_F_RSA_SIGN 0 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY 0 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 0 +# define RSA_F_SETUP_TBUF 0 + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 0 +# define OSSL_STORE_F_FILE_FIND 0 +# define OSSL_STORE_F_FILE_GET_PASS 0 +# define OSSL_STORE_F_FILE_LOAD 0 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 0 +# define OSSL_STORE_F_FILE_NAME_TO_URI 0 +# define OSSL_STORE_F_FILE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 0 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 0 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 0 +# define OSSL_STORE_F_OSSL_STORE_FIND 0 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 0 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 0 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 0 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 0 + +# ifndef OPENSSL_NO_TS +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 0 +# define TS_F_DEF_TIME_CB 0 +# define TS_F_ESS_ADD_SIGNING_CERT 0 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 0 +# define TS_F_ESS_CERT_ID_NEW_INIT 0 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 0 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 0 +# define TS_F_PKCS7_TO_TS_TST_INFO 0 +# define TS_F_TS_ACCURACY_SET_MICROS 0 +# define TS_F_TS_ACCURACY_SET_MILLIS 0 +# define TS_F_TS_ACCURACY_SET_SECONDS 0 +# define TS_F_TS_CHECK_IMPRINTS 0 +# define TS_F_TS_CHECK_NONCES 0 +# define TS_F_TS_CHECK_POLICY 0 +# define TS_F_TS_CHECK_SIGNING_CERTS 0 +# define TS_F_TS_CHECK_STATUS_INFO 0 +# define TS_F_TS_COMPUTE_IMPRINT 0 +# define TS_F_TS_CONF_INVALID 0 +# define TS_F_TS_CONF_LOAD_CERT 0 +# define TS_F_TS_CONF_LOAD_CERTS 0 +# define TS_F_TS_CONF_LOAD_KEY 0 +# define TS_F_TS_CONF_LOOKUP_FAIL 0 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 0 +# define TS_F_TS_GET_STATUS_TEXT 0 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 0 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 0 +# define TS_F_TS_REQ_SET_NONCE 0 +# define TS_F_TS_REQ_SET_POLICY_ID 0 +# define TS_F_TS_RESP_CREATE_RESPONSE 0 +# define TS_F_TS_RESP_CREATE_TST_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_MD 0 +# define TS_F_TS_RESP_CTX_ADD_POLICY 0 +# define TS_F_TS_RESP_CTX_NEW 0 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 0 +# define TS_F_TS_RESP_CTX_SET_CERTS 0 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 0 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 0 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_GET_POLICY 0 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 0 +# define TS_F_TS_RESP_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_SET_TST_INFO 0 +# define TS_F_TS_RESP_SIGN 0 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 0 +# define TS_F_TS_TST_INFO_SET_ACCURACY 0 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 0 +# define TS_F_TS_TST_INFO_SET_NONCE 0 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 0 +# define TS_F_TS_TST_INFO_SET_SERIAL 0 +# define TS_F_TS_TST_INFO_SET_TIME 0 +# define TS_F_TS_TST_INFO_SET_TSA 0 +# define TS_F_TS_VERIFY 0 +# define TS_F_TS_VERIFY_CERT 0 +# define TS_F_TS_VERIFY_CTX_NEW 0 +# endif + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 0 +# define UI_F_ECHO_CONSOLE 0 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 0 +# define UI_F_GENERAL_ALLOCATE_PROMPT 0 +# define UI_F_NOECHO_CONSOLE 0 +# define UI_F_OPEN_CONSOLE 0 +# define UI_F_UI_CONSTRUCT_PROMPT 0 +# define UI_F_UI_CREATE_METHOD 0 +# define UI_F_UI_CTRL 0 +# define UI_F_UI_DUP_ERROR_STRING 0 +# define UI_F_UI_DUP_INFO_STRING 0 +# define UI_F_UI_DUP_INPUT_BOOLEAN 0 +# define UI_F_UI_DUP_INPUT_STRING 0 +# define UI_F_UI_DUP_USER_DATA 0 +# define UI_F_UI_DUP_VERIFY_STRING 0 +# define UI_F_UI_GET0_RESULT 0 +# define UI_F_UI_GET_RESULT_LENGTH 0 +# define UI_F_UI_NEW_METHOD 0 +# define UI_F_UI_PROCESS 0 +# define UI_F_UI_SET_RESULT 0 +# define UI_F_UI_SET_RESULT_EX 0 + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 0 +# define X509_F_BUILD_CHAIN 0 +# define X509_F_BY_FILE_CTRL 0 +# define X509_F_CHECK_NAME_CONSTRAINTS 0 +# define X509_F_CHECK_POLICY 0 +# define X509_F_DANE_I2D 0 +# define X509_F_DIR_CTRL 0 +# define X509_F_GET_CERT_BY_SUBJECT 0 +# define X509_F_I2D_X509_AUX 0 +# define X509_F_LOOKUP_CERTS_SK 0 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 0 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 0 +# define X509_F_NEW_DIR 0 +# define X509_F_X509AT_ADD1_ATTR 0 +# define X509_F_X509V3_ADD_EXT 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 0 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 0 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 0 +# define X509_F_X509_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_CRL_DIFF 0 +# define X509_F_X509_CRL_METHOD_NEW 0 +# define X509_F_X509_CRL_PRINT_FP 0 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 0 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 0 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 0 +# define X509_F_X509_LOAD_CERT_CRL_FILE 0 +# define X509_F_X509_LOAD_CERT_FILE 0 +# define X509_F_X509_LOAD_CRL_FILE 0 +# define X509_F_X509_LOOKUP_METH_NEW 0 +# define X509_F_X509_LOOKUP_NEW 0 +# define X509_F_X509_NAME_ADD_ENTRY 0 +# define X509_F_X509_NAME_CANON 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 0 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 0 +# define X509_F_X509_NAME_ONELINE 0 +# define X509_F_X509_NAME_PRINT 0 +# define X509_F_X509_OBJECT_NEW 0 +# define X509_F_X509_PRINT_EX_FP 0 +# define X509_F_X509_PUBKEY_DECODE 0 +# define X509_F_X509_PUBKEY_GET 0 +# define X509_F_X509_PUBKEY_GET0 0 +# define X509_F_X509_PUBKEY_SET 0 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_REQ_PRINT_EX 0 +# define X509_F_X509_REQ_PRINT_FP 0 +# define X509_F_X509_REQ_TO_X509 0 +# define X509_F_X509_STORE_ADD_CERT 0 +# define X509_F_X509_STORE_ADD_CRL 0 +# define X509_F_X509_STORE_ADD_LOOKUP 0 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 0 +# define X509_F_X509_STORE_CTX_INIT 0 +# define X509_F_X509_STORE_CTX_NEW 0 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 0 +# define X509_F_X509_STORE_NEW 0 +# define X509_F_X509_TO_X509_REQ 0 +# define X509_F_X509_TRUST_ADD 0 +# define X509_F_X509_TRUST_SET 0 +# define X509_F_X509_VERIFY_CERT 0 +# define X509_F_X509_VERIFY_PARAM_NEW 0 + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 0 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 0 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 0 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 0 +# define X509V3_F_BIGNUM_TO_STRING 0 +# define X509V3_F_COPY_EMAIL 0 +# define X509V3_F_COPY_ISSUER 0 +# define X509V3_F_DO_DIRNAME 0 +# define X509V3_F_DO_EXT_I2D 0 +# define X509V3_F_DO_EXT_NCONF 0 +# define X509V3_F_GNAMES_FROM_SECTNAME 0 +# define X509V3_F_I2S_ASN1_ENUMERATED 0 +# define X509V3_F_I2S_ASN1_IA5STRING 0 +# define X509V3_F_I2S_ASN1_INTEGER 0 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_LEVEL_ADD_NODE 0 +# define X509V3_F_NOTICE_SECTION 0 +# define X509V3_F_NREF_NOS 0 +# define X509V3_F_POLICY_CACHE_CREATE 0 +# define X509V3_F_POLICY_CACHE_NEW 0 +# define X509V3_F_POLICY_DATA_NEW 0 +# define X509V3_F_POLICY_SECTION 0 +# define X509V3_F_PROCESS_PCI_VALUE 0 +# define X509V3_F_R2I_CERTPOL 0 +# define X509V3_F_R2I_PCI 0 +# define X509V3_F_S2I_ASN1_IA5STRING 0 +# define X509V3_F_S2I_ASN1_INTEGER 0 +# define X509V3_F_S2I_ASN1_OCTET_STRING 0 +# define X509V3_F_S2I_SKEY_ID 0 +# define X509V3_F_SET_DIST_POINT_NAME 0 +# define X509V3_F_SXNET_ADD_ID_ASC 0 +# define X509V3_F_SXNET_ADD_ID_INTEGER 0 +# define X509V3_F_SXNET_ADD_ID_ULONG 0 +# define X509V3_F_SXNET_GET_ID_ASC 0 +# define X509V3_F_SXNET_GET_ID_ULONG 0 +# define X509V3_F_TREE_INIT 0 +# define X509V3_F_V2I_ASIDENTIFIERS 0 +# define X509V3_F_V2I_ASN1_BIT_STRING 0 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_V2I_AUTHORITY_KEYID 0 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 0 +# define X509V3_F_V2I_CRLD 0 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 0 +# define X509V3_F_V2I_GENERAL_NAMES 0 +# define X509V3_F_V2I_GENERAL_NAME_EX 0 +# define X509V3_F_V2I_IDP 0 +# define X509V3_F_V2I_IPADDRBLOCKS 0 +# define X509V3_F_V2I_ISSUER_ALT 0 +# define X509V3_F_V2I_NAME_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_MAPPINGS 0 +# define X509V3_F_V2I_SUBJECT_ALT 0 +# define X509V3_F_V2I_TLS_FEATURE 0 +# define X509V3_F_V3_GENERIC_EXTENSION 0 +# define X509V3_F_X509V3_ADD1_I2D 0 +# define X509V3_F_X509V3_ADD_VALUE 0 +# define X509V3_F_X509V3_EXT_ADD 0 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 0 +# define X509V3_F_X509V3_EXT_I2D 0 +# define X509V3_F_X509V3_EXT_NCONF 0 +# define X509V3_F_X509V3_GET_SECTION 0 +# define X509V3_F_X509V3_GET_STRING 0 +# define X509V3_F_X509V3_GET_VALUE_BOOL 0 +# define X509V3_F_X509V3_PARSE_LIST 0 +# define X509V3_F_X509_PURPOSE_ADD 0 +# define X509V3_F_X509_PURPOSE_SET 0 + +/* + * Compatibility defines. + */ +# define EVP_R_OPERATON_NOT_INITIALIZED EVP_R_OPERATION_NOT_INITIALIZED + +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ct.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ct.h new file mode 100644 index 0000000..22c1514 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ct.h @@ -0,0 +1,573 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\ct.h.in + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif + +# include + +# ifndef OPENSSL_NO_CT +# include +# 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 + +SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) +#define sk_SCT_num(sk) OPENSSL_sk_num(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_value(sk, idx) ((SCT *)OPENSSL_sk_value(ossl_check_const_SCT_sk_type(sk), (idx))) +#define sk_SCT_new(cmp) ((STACK_OF(SCT) *)OPENSSL_sk_new(ossl_check_SCT_compfunc_type(cmp))) +#define sk_SCT_new_null() ((STACK_OF(SCT) *)OPENSSL_sk_new_null()) +#define sk_SCT_new_reserve(cmp, n) ((STACK_OF(SCT) *)OPENSSL_sk_new_reserve(ossl_check_SCT_compfunc_type(cmp), (n))) +#define sk_SCT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SCT_sk_type(sk), (n)) +#define sk_SCT_free(sk) OPENSSL_sk_free(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_zero(sk) OPENSSL_sk_zero(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_delete(sk, i) ((SCT *)OPENSSL_sk_delete(ossl_check_SCT_sk_type(sk), (i))) +#define sk_SCT_delete_ptr(sk, ptr) ((SCT *)OPENSSL_sk_delete_ptr(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr))) +#define sk_SCT_push(sk, ptr) OPENSSL_sk_push(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_pop(sk) ((SCT *)OPENSSL_sk_pop(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_shift(sk) ((SCT *)OPENSSL_sk_shift(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SCT_sk_type(sk),ossl_check_SCT_freefunc_type(freefunc)) +#define sk_SCT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), (idx)) +#define sk_SCT_set(sk, idx, ptr) ((SCT *)OPENSSL_sk_set(ossl_check_SCT_sk_type(sk), (idx), ossl_check_SCT_type(ptr))) +#define sk_SCT_find(sk, ptr) OPENSSL_sk_find(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), pnum) +#define sk_SCT_sort(sk) OPENSSL_sk_sort(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_dup(sk) ((STACK_OF(SCT) *)OPENSSL_sk_dup(ossl_check_const_SCT_sk_type(sk))) +#define sk_SCT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SCT) *)OPENSSL_sk_deep_copy(ossl_check_const_SCT_sk_type(sk), ossl_check_SCT_copyfunc_type(copyfunc), ossl_check_SCT_freefunc_type(freefunc))) +#define sk_SCT_set_cmp_func(sk, cmp) ((sk_SCT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SCT_sk_type(sk), ossl_check_SCT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CTLOG, CTLOG, CTLOG) +#define sk_CTLOG_num(sk) OPENSSL_sk_num(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_value(sk, idx) ((CTLOG *)OPENSSL_sk_value(ossl_check_const_CTLOG_sk_type(sk), (idx))) +#define sk_CTLOG_new(cmp) ((STACK_OF(CTLOG) *)OPENSSL_sk_new(ossl_check_CTLOG_compfunc_type(cmp))) +#define sk_CTLOG_new_null() ((STACK_OF(CTLOG) *)OPENSSL_sk_new_null()) +#define sk_CTLOG_new_reserve(cmp, n) ((STACK_OF(CTLOG) *)OPENSSL_sk_new_reserve(ossl_check_CTLOG_compfunc_type(cmp), (n))) +#define sk_CTLOG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CTLOG_sk_type(sk), (n)) +#define sk_CTLOG_free(sk) OPENSSL_sk_free(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_zero(sk) OPENSSL_sk_zero(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_delete(sk, i) ((CTLOG *)OPENSSL_sk_delete(ossl_check_CTLOG_sk_type(sk), (i))) +#define sk_CTLOG_delete_ptr(sk, ptr) ((CTLOG *)OPENSSL_sk_delete_ptr(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_push(sk, ptr) OPENSSL_sk_push(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_pop(sk) ((CTLOG *)OPENSSL_sk_pop(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_shift(sk) ((CTLOG *)OPENSSL_sk_shift(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CTLOG_sk_type(sk),ossl_check_CTLOG_freefunc_type(freefunc)) +#define sk_CTLOG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), (idx)) +#define sk_CTLOG_set(sk, idx, ptr) ((CTLOG *)OPENSSL_sk_set(ossl_check_CTLOG_sk_type(sk), (idx), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_find(sk, ptr) OPENSSL_sk_find(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), pnum) +#define sk_CTLOG_sort(sk) OPENSSL_sk_sort(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_dup(sk) ((STACK_OF(CTLOG) *)OPENSSL_sk_dup(ossl_check_const_CTLOG_sk_type(sk))) +#define sk_CTLOG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CTLOG) *)OPENSSL_sk_deep_copy(ossl_check_const_CTLOG_sk_type(sk), ossl_check_CTLOG_copyfunc_type(copyfunc), ossl_check_CTLOG_freefunc_type(freefunc))) +#define sk_CTLOG_set_cmp_func(sk, cmp) ((sk_CTLOG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_compfunc_type(cmp))) + + + +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; + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. + * 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_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ +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); + +/* + * Gets the time, in milliseconds since the Unix epoch, that will be used as the + * current time when checking whether an SCT was issued in the future. + * Such SCTs will fail validation, as required by RFC6962. + */ +uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. + * If an SCT's timestamp is after this time, it will be interpreted as having + * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs + * whose timestamp is in the future", so an SCT will not validate in this case. + */ +void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); + +/***************** + * 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 serialization * + *********************************/ + +/* + * 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| and + * associates it with the give library context |libctx| and property query + * string |propq|. + * 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_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. 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_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ +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 and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. + * 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|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/cterr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/cterr.h new file mode 100644 index 0000000..935d32d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/cterr.h @@ -0,0 +1,45 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_CTERR_H +# define OPENSSL_CTERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CT + + +/* + * CT 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_FUTURE_TIMESTAMP 116 +# 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 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/decoder.h b/thirdparty/OpenSSL-3.5.3/include/openssl/decoder.h new file mode 100644 index 0000000..d4ee2cf --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/decoder.h @@ -0,0 +1,133 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DECODER_H +# define OPENSSL_DECODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_DECODER *OSSL_DECODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_DECODER_up_ref(OSSL_DECODER *encoder); +void OSSL_DECODER_free(OSSL_DECODER *encoder); + +const OSSL_PROVIDER *OSSL_DECODER_get0_provider(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_properties(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_name(const OSSL_DECODER *decoder); +const char *OSSL_DECODER_get0_description(const OSSL_DECODER *decoder); +int OSSL_DECODER_is_a(const OSSL_DECODER *encoder, const char *name); + +void OSSL_DECODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_DECODER *encoder, void *arg), + void *arg); +int OSSL_DECODER_names_do_all(const OSSL_DECODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_DECODER_gettable_params(OSSL_DECODER *decoder); +int OSSL_DECODER_get_params(OSSL_DECODER *decoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_DECODER_settable_ctx_params(OSSL_DECODER *encoder); +OSSL_DECODER_CTX *OSSL_DECODER_CTX_new(void); +int OSSL_DECODER_CTX_set_params(OSSL_DECODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_DECODER_CTX_free(OSSL_DECODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_DECODER_CTX_set_pem_password_cb(OSSL_DECODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_cb(OSSL_DECODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_ui(OSSL_DECODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); + +/* + * Utilities to read the object to decode, with the result sent to cb. + * These will discover all provided methods + */ + +int OSSL_DECODER_CTX_set_selection(OSSL_DECODER_CTX *ctx, int selection); +int OSSL_DECODER_CTX_set_input_type(OSSL_DECODER_CTX *ctx, + const char *input_type); +int OSSL_DECODER_CTX_set_input_structure(OSSL_DECODER_CTX *ctx, + const char *input_structure); +int OSSL_DECODER_CTX_add_decoder(OSSL_DECODER_CTX *ctx, OSSL_DECODER *decoder); +int OSSL_DECODER_CTX_add_extra(OSSL_DECODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_DECODER_CTX_get_num_decoders(OSSL_DECODER_CTX *ctx); + +typedef struct ossl_decoder_instance_st OSSL_DECODER_INSTANCE; +OSSL_DECODER * +OSSL_DECODER_INSTANCE_get_decoder(OSSL_DECODER_INSTANCE *decoder_inst); +void * +OSSL_DECODER_INSTANCE_get_decoder_ctx(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_type(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_structure(OSSL_DECODER_INSTANCE *decoder_inst, + int *was_set); + +typedef int OSSL_DECODER_CONSTRUCT(OSSL_DECODER_INSTANCE *decoder_inst, + const OSSL_PARAM *params, + void *construct_data); +typedef void OSSL_DECODER_CLEANUP(void *construct_data); + +int OSSL_DECODER_CTX_set_construct(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CONSTRUCT *construct); +int OSSL_DECODER_CTX_set_construct_data(OSSL_DECODER_CTX *ctx, + void *construct_data); +int OSSL_DECODER_CTX_set_cleanup(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CLEANUP *cleanup); +OSSL_DECODER_CONSTRUCT *OSSL_DECODER_CTX_get_construct(OSSL_DECODER_CTX *ctx); +void *OSSL_DECODER_CTX_get_construct_data(OSSL_DECODER_CTX *ctx); +OSSL_DECODER_CLEANUP *OSSL_DECODER_CTX_get_cleanup(OSSL_DECODER_CTX *ctx); + +int OSSL_DECODER_export(OSSL_DECODER_INSTANCE *decoder_inst, + void *reference, size_t reference_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +int OSSL_DECODER_from_bio(OSSL_DECODER_CTX *ctx, BIO *in); +#ifndef OPENSSL_NO_STDIO +int OSSL_DECODER_from_fp(OSSL_DECODER_CTX *ctx, FILE *in); +#endif +int OSSL_DECODER_from_data(OSSL_DECODER_CTX *ctx, const unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_DECODER_CTX with an associated type. This will perform + * an implicit OSSL_DECODER_fetch(), suitable for the object of that type. + */ +OSSL_DECODER_CTX * +OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey, + const char *input_type, + const char *input_struct, + const char *keytype, int selection, + OSSL_LIB_CTX *libctx, const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/decodererr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/decodererr.h new file mode 100644 index 0000000..4212a38 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/decodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DECODERERR_H +# define OPENSSL_DECODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_DECODER reason codes. + */ +# define OSSL_DECODER_R_COULD_NOT_DECODE_OBJECT 101 +# define OSSL_DECODER_R_DECODER_NOT_FOUND 102 +# define OSSL_DECODER_R_MISSING_GET_PARAMS 100 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/des.h b/thirdparty/OpenSSL-3.5.3/include/openssl/des.h new file mode 100644 index 0000000..09798a6 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/des.h @@ -0,0 +1,211 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DES_H +# define OPENSSL_DES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DES_H +# endif + +# include + +# ifndef OPENSSL_NO_DES +# ifdef __cplusplus +extern "C" { +# endif +# include + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +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)) + +# define DES_fixup_key_parity DES_set_odd_parity +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *DES_options(void); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, + long length, DES_key_schedule *schedule, + const_DES_cblock *ivec); +# endif +/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 +void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 +void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks, int enc); +# endif + +/* + * 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); +# endif + +/* + * 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 :-). + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); +OSSL_DEPRECATEDIN_3_0 +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +char *DES_fcrypt(const char *buf, const char *salt, char *ret); +OSSL_DEPRECATEDIN_3_0 +char *DES_crypt(const char *buf, const char *salt); +OSSL_DEPRECATEDIN_3_0 +void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, DES_cblock *ivec); +OSSL_DEPRECATEDIN_3_0 +void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 +DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], + long length, int out_count, DES_cblock *seed); +OSSL_DEPRECATEDIN_3_0 int DES_random_key(DES_cblock *ret); +OSSL_DEPRECATEDIN_3_0 void DES_set_odd_parity(DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_check_key_parity(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_is_weak_key(const_DES_cblock *key); +# endif +/* + * DES_set_key (= set_key = DES_key_sched = key_sched) calls + * DES_set_key_checked + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 +int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 +int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 +void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 +void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +OSSL_DEPRECATEDIN_3_0 +void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 +void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/dh.h b/thirdparty/OpenSSL-3.5.3/include/openssl/dh.h new file mode 100644 index 0000000..9702492 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/dh.h @@ -0,0 +1,339 @@ +/* + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DH_H +# define OPENSSL_DH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DH_H +# endif + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +#include + +/* + * DH parameter generation types used by EVP_PKEY_CTX_set_dh_paramgen_type() + * Note that additions/changes to this set of values requires corresponding + * adjustments to range checks in dh_gen() + */ +# define DH_PARAMGEN_TYPE_GENERATOR 0 /* Use a safe prime generator */ +# define DH_PARAMGEN_TYPE_FIPS_186_2 1 /* Use FIPS186-2 standard */ +# define DH_PARAMGEN_TYPE_FIPS_186_4 2 /* Use FIPS186-4 standard */ +# define DH_PARAMGEN_TYPE_GROUP 3 /* Use a named safe prime group */ + +int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int typ); +int EVP_PKEY_CTX_set_dh_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dh_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int pbits); +int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int qlen); +int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); + +int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid); +int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid); +int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); +int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +#endif + +# 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) +# define EVP_PKEY_CTRL_DH_NID (EVP_PKEY_ALG_CTRL + 15) +# define EVP_PKEY_CTRL_DH_PAD (EVP_PKEY_ALG_CTRL + 16) + +/* KDF types */ +# define EVP_PKEY_DH_KDF_NONE 1 +# define EVP_PKEY_DH_KDF_X9_42 2 + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# ifndef OPENSSL_NO_DH +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS +# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# define DH_FLAG_TYPE_MASK 0xF000 +# define DH_FLAG_TYPE_DH 0x0000 +# define DH_FLAG_TYPE_DHX 0x1000 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * 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 +# endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DH_GENERATOR_2 2 +# define DH_GENERATOR_3 3 +# define DH_GENERATOR_5 5 + +/* DH_check error codes, some of them shared with DH_check_pub_key */ +/* + * NB: These values must align with the equivalently named macros in + * internal/ffc.h. + */ +# 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 /* +DH_check_pub_key */ +# define DH_CHECK_INVALID_J_VALUE 0x40 +# define DH_MODULUS_TOO_SMALL 0x80 +# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ + +/* 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(DH, i2d_DHparams, bp, x) + +# define d2i_DHxparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHxparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHxparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) +# define d2i_DHxparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) +# define i2d_DHxparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHxparams, bp, x) + +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) + +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_OpenSSL(void); + +OSSL_DEPRECATEDIN_3_0 void DH_set_default_method(const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DH_set_method(DH *dh, const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 DH *DH_new_method(ENGINE *engine); + +OSSL_DEPRECATEDIN_3_0 DH *DH_new(void); +OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_up_ref(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_bits(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_size(const DH *dh); +OSSL_DEPRECATEDIN_3_0 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) + +OSSL_DEPRECATEDIN_3_0 int DH_set_ex_data(DH *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DH_get_ex_data(const DH *d, int idx); + +OSSL_DEPRECATEDIN_3_0 int DH_generate_parameters_ex(DH *dh, int prime_len, + int generator, + BN_GENCB *cb); + +OSSL_DEPRECATEDIN_3_0 int DH_check_params_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +OSSL_DEPRECATEDIN_3_0 int DH_check_params(const DH *dh, int *ret); +OSSL_DEPRECATEDIN_3_0 int DH_check(const DH *dh, int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, + int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_generate_key(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key(unsigned char *key, + const BIGNUM *pub_key, DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key_padded(unsigned char *key, + const BIGNUM *pub_key, DH *dh); + +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHxparams) + +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DHparams_print_fp(FILE *fp, const DH *x); +# endif +OSSL_DEPRECATEDIN_3_0 int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +OSSL_DEPRECATEDIN_3_0 DH *DH_get_1024_160(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_224(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_256(void); + +/* Named parameters, currently RFC7919 and RFC3526 */ +OSSL_DEPRECATEDIN_3_0 DH *DH_new_by_nid(int nid); +OSSL_DEPRECATEDIN_3_0 int DH_get_nid(const DH *dh); + +/* RFC2631 KDF */ +OSSL_DEPRECATEDIN_3_0 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); + +OSSL_DEPRECATEDIN_3_0 void DH_get0_pqg(const DH *dh, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DH_get0_key(const DH *dh, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_p(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_q(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_g(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_priv_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_pub_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 void DH_clear_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 int DH_test_flags(const DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_set_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DH_get0_engine(DH *d); +OSSL_DEPRECATEDIN_3_0 long DH_get_length(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_set_length(DH *dh, long length); + +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_meth_free(DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 const char *DH_meth_get0_name(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +OSSL_DEPRECATEDIN_3_0 int DH_meth_get_flags(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_flags(DH_METHOD *dhm, int flags); +OSSL_DEPRECATEDIN_3_0 void *DH_meth_get0_app_data(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_key(DH_METHOD *dhm, + int (*generate_key) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh)); +OSSL_DEPRECATEDIN_3_0 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 *); +OSSL_DEPRECATEDIN_3_0 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 *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, + BN_GENCB *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) + (DH *, int, int, + BN_GENCB *)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg); +# endif + +# endif +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/dherr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/dherr.h new file mode 100644 index 0000000..2997d7d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/dherr.h @@ -0,0 +1,59 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DHERR_H +# define OPENSSL_DHERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_DH + + +/* + * DH reason codes. + */ +# define DH_R_BAD_FFC_PARAMETERS 127 +# define DH_R_BAD_GENERATOR 101 +# define DH_R_BN_DECODE_ERROR 109 +# define DH_R_BN_ERROR 106 +# define DH_R_CHECK_INVALID_J_VALUE 115 +# define DH_R_CHECK_INVALID_Q_VALUE 116 +# define DH_R_CHECK_PUBKEY_INVALID 122 +# define DH_R_CHECK_PUBKEY_TOO_LARGE 123 +# define DH_R_CHECK_PUBKEY_TOO_SMALL 124 +# define DH_R_CHECK_P_NOT_PRIME 117 +# define DH_R_CHECK_P_NOT_SAFE_PRIME 118 +# define DH_R_CHECK_Q_NOT_PRIME 119 +# define DH_R_DECODE_ERROR 104 +# define DH_R_INVALID_PARAMETER_NAME 110 +# define DH_R_INVALID_PARAMETER_NID 114 +# define DH_R_INVALID_PUBKEY 102 +# define DH_R_INVALID_SECRET 128 +# define DH_R_INVALID_SIZE 129 +# define DH_R_KDF_PARAMETER_ERROR 112 +# define DH_R_KEYS_NOT_SET 108 +# define DH_R_MISSING_PUBKEY 125 +# define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_MODULUS_TOO_SMALL 126 +# define DH_R_NOT_SUITABLE_GENERATOR 120 +# 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_Q_TOO_LARGE 130 +# define DH_R_SHARED_INFO_ERROR 113 +# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/dsa.h b/thirdparty/OpenSSL-3.5.3/include/openssl/dsa.h new file mode 100644 index 0000000..109878e --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/dsa.h @@ -0,0 +1,280 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DSA_H +# define OPENSSL_DSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DSA_H +# endif + +# include +# include + +# include + +# ifndef OPENSSL_NO_DSA +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits); +int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits); +int EVP_PKEY_CTX_set_dsa_paramgen_md_props(EVP_PKEY_CTX *ctx, + const char *md_name, + const char *md_properties); +int EVP_PKEY_CTX_set_dsa_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dsa_paramgen_type(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_set_dsa_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +# 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) + +# ifndef OPENSSL_NO_DSA +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +typedef struct DSA_SIG_st DSA_SIG; +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA_SIG, DSA_SIG) +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); + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSA_FLAG_CACHE_MONT_P 0x01 + +/* + * 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; */ + +# 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(DSA, i2d_DSAparams, bp, x) + +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DSA, DSAparams) +OSSL_DEPRECATEDIN_3_0 DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, + DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_OpenSSL(void); + +OSSL_DEPRECATEDIN_3_0 void DSA_set_default_method(const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DSA_set_method(DSA *dsa, const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_method(DSA *d); + +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new(void); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 void DSA_free(DSA *r); +/* "up" the DSA object's reference count */ +OSSL_DEPRECATEDIN_3_0 int DSA_up_ref(DSA *r); +OSSL_DEPRECATEDIN_3_0 int DSA_size(const DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_security_bits(const DSA *d); + /* next 4 return -1 on error */ +OSSL_DEPRECATEDIN_3_0 int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int DSA_sign(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 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) +OSSL_DEPRECATEDIN_3_0 int DSA_set_ex_data(DSA *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DSA_get_ex_data(const DSA *d, int idx); + +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPrivateKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAparams) +# endif + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +/* Deprecated version */ +OSSL_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); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* New version */ +OSSL_DEPRECATEDIN_3_0 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); + +OSSL_DEPRECATEDIN_3_0 int DSA_generate_key(DSA *a); + +OSSL_DEPRECATEDIN_3_0 int DSAparams_print(BIO *bp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DSAparams_print_fp(FILE *fp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif + +# define DSS_prime_checks 64 +/* + * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only + * have one value here we set the number of checks to 64 which is the 128 bit + * security level that is the highest level and valid for creating a 3072 bit + * DSA key. + */ +# 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!) + */ +OSSL_DEPRECATEDIN_3_0 DH *DSA_dup_DH(const DSA *r); +# endif + +OSSL_DEPRECATEDIN_3_0 void DSA_get0_pqg(const DSA *d, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_key(DSA *d, BIGNUM *pub_key, + BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_p(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_q(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_g(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_pub_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_priv_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 void DSA_clear_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 int DSA_test_flags(const DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_set_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DSA_get0_engine(DSA *d); + +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_meth_free(DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set1_name(DSA_METHOD *dsam, + const char *name); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_get_flags(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +OSSL_DEPRECATEDIN_3_0 void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set0_app_data(DSA_METHOD *dsam, + void *app_data); +OSSL_DEPRECATEDIN_3_0 DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign(DSA_METHOD *dsam, + DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) + (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign_setup(DSA_METHOD *dsam, + int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA_SIG *, DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_verify(DSA_METHOD *dsam, + int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); +OSSL_DEPRECATEDIN_3_0 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 *); +OSSL_DEPRECATEDIN_3_0 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 *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +OSSL_DEPRECATEDIN_3_0 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 *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_init(DSA_METHOD *dsam, + int (*init)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_finish(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_finish(DSA_METHOD *dsam, + int (*finish)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) + (DSA *, int, const unsigned char *, int, int *, unsigned long *, + BN_GENCB *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_paramgen(DSA_METHOD *dsam, + int (*paramgen) (DSA *, int, const unsigned char *, int, int *, + unsigned long *, BN_GENCB *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_keygen(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_keygen(DSA_METHOD *dsam, + int (*keygen) (DSA *)); + +# endif +# endif +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/dsaerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/dsaerr.h new file mode 100644 index 0000000..26ada57 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/dsaerr.h @@ -0,0 +1,44 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DSAERR_H +# define OPENSSL_DSAERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_DSA + + +/* + * DSA reason codes. + */ +# define DSA_R_BAD_FFC_PARAMETERS 114 +# 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_MISSING_PRIVATE_KEY 111 +# define DSA_R_MODULUS_TOO_LARGE 103 +# define DSA_R_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_P_NOT_PRIME 115 +# define DSA_R_Q_NOT_PRIME 113 +# define DSA_R_SEED_LEN_SMALL 110 +# define DSA_R_TOO_MANY_RETRIES 116 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/dtls1.h b/thirdparty/OpenSSL-3.5.3/include/openssl/dtls1.h new file mode 100644 index 0000000..5dc6b54 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/dtls1.h @@ -0,0 +1,57 @@ +/* + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_DTLS1_H +# define OPENSSL_DTLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DTLS1_H +# endif + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* DTLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# endif +# define DTLS1_VERSION_MAJOR 0xFE + +/* Special value for method supporting multiple versions */ +# define DTLS_ANY_VERSION 0x1FFFF + +/* lengths of messages */ + +# define DTLS1_COOKIE_LENGTH 255 + +# 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 + +# define DTLS1_AL_HEADER_LENGTH 2 + +# define DTLS1_TMO_ALERT_COUNT 12 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/e_os2.h b/thirdparty/OpenSSL-3.5.3/include/openssl/e_os2.h new file mode 100644 index 0000000..b8c6107 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/e_os2.h @@ -0,0 +1,310 @@ +/* + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_E_OS2_H +# define OPENSSL_E_OS2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_E_OS2_H +# endif + +# 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) +# 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 implementer 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) +# if !defined(OPENSSL_SYS_VMS) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS +# endif +# 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 + +/* ---------------------------- HP NonStop -------------------------------- */ +# ifdef __TANDEM +# ifdef _STRING +# include +# endif +# define OPENSSL_USE_BUILD_DATE +# if defined(OPENSSL_THREADS) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# elif defined(OPENSSL_THREADS) && defined(_PUT_MODEL_) +# include +# endif +# endif + +/** + * That's it for OS-specific stuff + *****************************************************************************/ + +/*- + * OPENSSL_EXTERN is normally used to declare a symbol with possible extra + * attributes to handle its presence in a shared library. + * OPENSSL_EXPORT is used to define a symbol with extra possible attributes + * to make it visible in a shared library. + * Care needs to be taken when a header file is used both to declare and + * define symbols. 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 and OPENSSL_EXTERN + * have some generally sensible values. + */ + +# if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_EXTERN extern __declspec(dllimport) +# else +# define OPENSSL_EXPORT extern +# define OPENSSL_EXTERN extern +# 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(ossl_ssize_t) +# define ossl_ssize_t INTN +# define OSSL_SSIZE_MAX MAX_INTN +# endif + +# ifndef ossl_ssize_t +# include +# 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 +# else +# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) +# endif +# endif + +# if defined(UNUSEDRESULT_DEBUG) +# define __owur __attribute__((__warn_unused_result__)) +# else +# define __owur +# endif + +/* Standard integer types */ +# define OPENSSL_NO_INTTYPES_H +# define OPENSSL_NO_STDINT_H +# 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; +typedef UINTN uintptr_t; +# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + defined(__osf__) || defined(__sgi) || defined(__hpux) || \ + defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) +# include +# undef OPENSSL_NO_INTTYPES_H +/* Because the specs say that inttypes.h includes stdint.h if present */ +# undef OPENSSL_NO_STDINT_H +# elif defined(_MSC_VER) && _MSC_VER<1600 +/* + * 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; +# elif defined(OPENSSL_SYS_TANDEM) +# include +# include +# else +# include +# undef OPENSSL_NO_STDINT_H +# endif +# 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 +/* Fall back to the largest we know we require and can handle */ +typedef int64_t ossl_intmax_t; +typedef uint64_t ossl_uintmax_t; +# 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 && \ + !defined(__cplusplus) +# define ossl_noreturn _Noreturn +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define ossl_noreturn __attribute__((noreturn)) +# else +# define ossl_noreturn +# endif + +/* ossl_unused: portable unused attribute for use in public headers */ +# if defined(__GNUC__) +# define ossl_unused __attribute__((unused)) +# else +# define ossl_unused +# endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/e_ostime.h b/thirdparty/OpenSSL-3.5.3/include/openssl/e_ostime.h new file mode 100644 index 0000000..0e17487 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/e_ostime.h @@ -0,0 +1,38 @@ +/* + * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_E_OSTIME_H +# define OPENSSL_E_OSTIME_H +# pragma once + +# include +# include +# include + +/* + * This header guarantees that 'struct timeval' will be available. It includes + * the minimum headers needed to facilitate this. This may still be a + * substantial set of headers on some platforms (e.g. on Win32). + */ + +# if defined(OPENSSL_SYS_WINDOWS) +# if !defined(_WINSOCKAPI_) + /* + * winsock2.h defines _WINSOCK2API_ and both winsock2.h and winsock.h define + * _WINSOCKAPI_. Both of these provide struct timeval. Don't include + * winsock2.h if either header has been included to avoid breakage with + * applications that prefer to use over . + */ +# include +# endif +# else +# include +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ebcdic.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ebcdic.h new file mode 100644 index 0000000..e0ae1aa --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ebcdic.h @@ -0,0 +1,39 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_EBCDIC_H +# define OPENSSL_EBCDIC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EBCDIC_H +# endif + +# 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/thirdparty/OpenSSL-3.5.3/include/openssl/ec.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ec.h new file mode 100644 index 0000000..e1cbe98 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ec.h @@ -0,0 +1,1588 @@ +/* + * Copyright 2002-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (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 OPENSSL_EC_H +# define OPENSSL_EC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EC_H +# endif + +# include +# include + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Values for EVP_PKEY_CTX_set_ec_param_enc() */ +# define OPENSSL_EC_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc); +int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode); +int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); + +int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); + +int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, + int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +# endif + +# 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_63 2 +/* + * The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakenly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 + +/** 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; + +const char *OSSL_EC_curve_nid2name(int nid); + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# ifndef OPENSSL_NO_EC +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct ec_method_st EC_METHOD; +# endif +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) */ +/********************************************************************/ + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Returns the basic GFp ec methods which provides the basis for the + * optimized methods. + * \return EC_METHOD object + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_simple_method(void); + +/** Returns GFp methods using montgomery multiplication. + * \return EC_METHOD object + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_mont_method(void); + +/** Returns GFp methods using optimized methods for NIST recommended curves + * \return EC_METHOD object + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp224_method(void); + +/** Returns 64-bit optimized methods for nistp256 + * \return EC_METHOD object + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp256_method(void); + +/** Returns 64-bit optimized methods for nistp521 + * \return EC_METHOD object + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp521_method(void); +# endif /* OPENSSL_NO_EC_NISTP_64_GCC_128 */ + +# ifndef OPENSSL_NO_EC2M +/********************************************************************/ +/* EC_METHOD for curves over GF(2^m) */ +/********************************************************************/ + +/** Returns the basic GF2m ec method + * \return EC_METHOD object + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +OSSL_DEPRECATEDIN_3_0 void EC_GROUP_clear_free(EC_GROUP *group); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 int EC_METHOD_get_field_type(const EC_METHOD *meth); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/** Frees a EC_GROUP object + * \param group EC_GROUP object to be freed. + */ +void EC_GROUP_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 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); + +/** Sets the generator and its 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); + +/** Gets the field of an EC_GROUP + * \param group EC_GROUP object + * \return the group field + */ +const BIGNUM *EC_GROUP_get0_field(const EC_GROUP *group); + +/** Returns the field type of the EC_GROUP. + * \param group EC_GROUP object + * \return NID of the underlying field type OID. + */ +int EC_GROUP_get_field_type(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 parameters of an ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \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(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); + +/** Gets the parameters of the ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \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(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GFp(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); + +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \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 + */ +OSSL_DEPRECATEDIN_3_0 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 an ec curve. Synonym for EC_GROUP_set_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); + +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); +# endif /* OPENSSL_NO_EC2M */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/** 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 parameters. + * The parameters may be explicit or a named curve, + * \param params A list of parameters describing the group. + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \return newly created EC_GROUP object with specified parameters or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx, const char *propq); + +/** + * Creates an OSSL_PARAM array with the parameters describing the given + * EC_GROUP. + * The resulting parameters may contain an explicit or a named curve depending + * on the EC_GROUP. + * \param group pointer to the EC_GROUP object + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \param bnctx BN_CTX object (optional) + * \return newly created OSSL_PARAM array with the parameters + * describing the given EC_GROUP or NULL if an error occurred + */ +OSSL_PARAM *EC_GROUP_to_params(const EC_GROUP *group, OSSL_LIB_CTX *libctx, + const char *propq, BN_CTX *bnctx); + +/** + * Creates a EC_GROUP object with a curve specified by a NID + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \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_ex(OSSL_LIB_CTX *libctx, const char *propq, + int nid); + +/** + * Creates a EC_GROUP object with a curve specified by a NID. Same as + * EC_GROUP_new_by_curve_name_ex but the libctx and propq are always + * NULL. + * \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 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 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); +int EC_GROUP_check_named_curve(const EC_GROUP *group, int nist_only, + BN_CTX *ctx); + +/********************************************************************/ +/* 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); + +/** 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); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_POINT_method_of(const 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_Jprojective_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/** Sets the affine coordinates of an EC_POINT + * \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(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, + BN_CTX *ctx); + +/** Gets the affine coordinates of an EC_POINT. + * \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(const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Sets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates + * \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 + */ +OSSL_DEPRECATEDIN_3_0 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 an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates + * \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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/** Sets the x9.62 compressed coordinates of a EC_POINT + * \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(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, + BN_CTX *ctx); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of + * EC_POINT_set_compressed_coordinates + * \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 + */ +OSSL_DEPRECATEDIN_3_0 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 an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates + * \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 + */ +OSSL_DEPRECATEDIN_3_0 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 an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates + * \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 + */ +OSSL_DEPRECATEDIN_3_0 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. A synonym of + * EC_POINT_set_compressed_coordinates + * \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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/** 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 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: */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, + const EC_POINT *, + point_conversion_form_t form, + BIGNUM *, BN_CTX *); +OSSL_DEPRECATEDIN_3_0 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, + const BIGNUM *, + EC_POINT *, BN_CTX *); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +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); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_POINT_make_affine(const EC_GROUP *group, + EC_POINT *point, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/** 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); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/********************************************************************/ +/* 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 + +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(EC_GROUP, i2d_ECPKParameters, bp, x) +# define d2i_ECPKParameters_fp(fp,x) \ + (EC_GROUP *)ASN1_d2i_fp(NULL, (d2i_of_void *)d2i_ECPKParameters, (fp), \ + (void **)(x)) +# define i2d_ECPKParameters_fp(fp,x) \ + ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, + int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, + int off); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/********************************************************************/ +/* 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_SM2_RANGE 0x0004 +# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_CHECK_NAMED_GROUP 0x2000 +# define EC_FLAG_CHECK_NAMED_GROUP_NIST 0x4000 +# define EC_FLAG_CHECK_NAMED_GROUP_MASK \ + (EC_FLAG_CHECK_NAMED_GROUP | EC_FLAG_CHECK_NAMED_GROUP_NIST) + +/* Deprecated flags - it was using 0x01..0x02 */ +# define EC_FLAG_NON_FIPS_ALLOW 0x0000 +# define EC_FLAG_FIPS_CHECKED 0x0000 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** + * Creates a new EC_KEY object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_ex(OSSL_LIB_CTX *ctx, const char *propq); + +/** + * Creates a new EC_KEY object. Same as calling EC_KEY_new_ex with a + * NULL library context + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new(void); + +OSSL_DEPRECATEDIN_3_0 int EC_KEY_get_flags(const EC_KEY *key); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_flags(EC_KEY *key, int flags); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_clear_flags(EC_KEY *key, int flags); + +OSSL_DEPRECATEDIN_3_0 int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); + +/** + * Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. + * \param propq Any property query string + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name_ex(OSSL_LIB_CTX *ctx, + const char *propq, + int nid); + +/** + * Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. Same as calling EC_KEY_new_by_curve_name_ex with a NULL + * library context and property query string. + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name(int nid); + +/** Frees a EC_KEY object. + * \param key EC_KEY object to be freed. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 int EC_KEY_up_ref(EC_KEY *key); + +/** Returns the ENGINE object of a EC_KEY object + * \param eckey EC_KEY object + * \return the ENGINE object (possibly NULL). + */ +OSSL_DEPRECATEDIN_3_0 ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); + +/** Returns the EC_GROUP object of a EC_KEY object + * \param key EC_KEY object + * \return the EC_GROUP object (possibly NULL). + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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). + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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) + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); + +OSSL_DEPRECATEDIN_3_0 unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_conv_form(EC_KEY *eckey, + point_conversion_form_t cform); +# endif /*OPENSSL_NO_DEPRECATED_3_0 */ + +# 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) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +/* wrapper functions for the underlying EC_GROUP object */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); + +/** Indicates if an EC_KEY can be used for signing. + * \param eckey the EC_KEY object + * \return 1 if can sign and 0 otherwise. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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 ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +OSSL_DEPRECATEDIN_3_0 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 + */ + +OSSL_DEPRECATEDIN_3_0 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 + */ + +OSSL_DEPRECATEDIN_3_0 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 + */ + +OSSL_DEPRECATEDIN_3_0 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 eckey key to encode + * \param pbuf returns pointer to allocated buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey(const 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. + */ +OSSL_DEPRECATEDIN_3_0 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. + */ +OSSL_DEPRECATEDIN_3_0 int i2d_ECParameters(const EC_KEY *key, + unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC public key */ +/* (octet string, not DER -- hence 'o2i' and 'i2o') */ +/********************************************************************/ + +/** Decodes an 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. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *o2i_ECPublicKey(EC_KEY **key, + const unsigned char **in, long len); + +/** Encodes an 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +# endif /* OPENSSL_NO_STDIO */ + +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); + +/** The old name for ecdh_KDF_X9_63 + * The ECDH KDF specification has been mistakenly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +OSSL_DEPRECATEDIN_3_0 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); + +OSSL_DEPRECATEDIN_3_0 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)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +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); + +/** i2d_ECDSA_SIG encodes content of ECDSA_SIG (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 a negative value + * on error + */ +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ECDSA_SIG, ECDSA_SIG) + +/** d2i_ECDSA_SIG decodes an ECDSA signature (note: this function modifies *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) + */ + +/** Accessor for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + * \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); + +/** Accessor for r field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); + +/** Accessor for s field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); + +/** Setter for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + * \param r pointer to BIGNUM for r + * \param s pointer to BIGNUM for s + */ +int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 int ECDSA_size(const EC_KEY *eckey); + +/********************************************************************/ +/* EC_KEY_METHOD constructors, destructors, writers and accessors */ +/********************************************************************/ + +OSSL_DEPRECATEDIN_3_0 EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 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)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); + +OSSL_DEPRECATEDIN_3_0 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)); + +OSSL_DEPRECATEDIN_3_0 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)); + +OSSL_DEPRECATEDIN_3_0 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)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_init + (const 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)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_keygen + (const EC_KEY_METHOD *meth, int (**pkeygen)(EC_KEY *key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_compute_key + (const EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_sign + (const 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)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_verify + (const 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)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +# define EVP_EC_gen(curve) \ + EVP_PKEY_Q_keygen(NULL, NULL, "EC", (char *)(strstr(curve, ""))) + /* strstr is used to enable type checking for the variadic string arg */ +# 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 + +# endif +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ecdh.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ecdh.h new file mode 100644 index 0000000..56bd4cc --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ecdh.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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/thirdparty/OpenSSL-3.5.3/include/openssl/ecdsa.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ecdsa.h new file mode 100644 index 0000000..56bd4cc --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ecdsa.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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/thirdparty/OpenSSL-3.5.3/include/openssl/ecerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ecerr.h new file mode 100644 index 0000000..f15f91f --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ecerr.h @@ -0,0 +1,104 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ECERR_H +# define OPENSSL_ECERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_EC + + +/* + * EC 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_CANNOT_INVERT 165 +# define EC_R_COORDINATES_OUT_OF_RANGE 146 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA 170 +# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 +# 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_EXPLICIT_PARAMS_NOT_SUPPORTED 127 +# define EC_R_FAILED_MAKING_PUBLIC_KEY 166 +# 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_A 168 +# define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_B 169 +# define EC_R_INVALID_COFACTOR 171 +# 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_GENERATOR 173 +# define EC_R_INVALID_GROUP_ORDER 122 +# define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_LENGTH 117 +# define EC_R_INVALID_NAMED_GROUP_CONVERSION 174 +# define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_P 172 +# 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_SEED 175 +# define EC_R_INVALID_TRINOMIAL_BASIS 137 +# define EC_R_KDF_PARAMETER_ERROR 148 +# define EC_R_KEYS_NOT_SET 140 +# define EC_R_LADDER_POST_FAILURE 136 +# define EC_R_LADDER_PRE_FAILURE 153 +# define EC_R_LADDER_STEP_FAILURE 162 +# define EC_R_MISSING_OID 167 +# 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_POINT_ARITHMETIC_FAILURE 155 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 +# 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_TOO_MANY_RETRIES 176 +# define EC_R_UNDEFINED_GENERATOR 113 +# define EC_R_UNDEFINED_ORDER 128 +# define EC_R_UNKNOWN_COFACTOR 164 +# 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 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/encoder.h b/thirdparty/OpenSSL-3.5.3/include/openssl/encoder.h new file mode 100644 index 0000000..c37a6f1 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/encoder.h @@ -0,0 +1,124 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ENCODER_H +# define OPENSSL_ENCODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_ENCODER *OSSL_ENCODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_ENCODER_up_ref(OSSL_ENCODER *encoder); +void OSSL_ENCODER_free(OSSL_ENCODER *encoder); + +const OSSL_PROVIDER *OSSL_ENCODER_get0_provider(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_properties(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_name(const OSSL_ENCODER *kdf); +const char *OSSL_ENCODER_get0_description(const OSSL_ENCODER *kdf); +int OSSL_ENCODER_is_a(const OSSL_ENCODER *encoder, const char *name); + +void OSSL_ENCODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_ENCODER *encoder, void *arg), + void *arg); +int OSSL_ENCODER_names_do_all(const OSSL_ENCODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_ENCODER_gettable_params(OSSL_ENCODER *encoder); +int OSSL_ENCODER_get_params(OSSL_ENCODER *encoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_ENCODER_settable_ctx_params(OSSL_ENCODER *encoder); +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new(void); +int OSSL_ENCODER_CTX_set_params(OSSL_ENCODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_ENCODER_CTX_free(OSSL_ENCODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_ENCODER_CTX_set_passphrase(OSSL_ENCODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_ENCODER_CTX_set_pem_password_cb(OSSL_ENCODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_cb(OSSL_ENCODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_ui(OSSL_ENCODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_ENCODER_CTX_set_cipher(OSSL_ENCODER_CTX *ctx, + const char *cipher_name, + const char *propquery); +int OSSL_ENCODER_CTX_set_selection(OSSL_ENCODER_CTX *ctx, int selection); +int OSSL_ENCODER_CTX_set_output_type(OSSL_ENCODER_CTX *ctx, + const char *output_type); +int OSSL_ENCODER_CTX_set_output_structure(OSSL_ENCODER_CTX *ctx, + const char *output_structure); + +/* Utilities to add encoders */ +int OSSL_ENCODER_CTX_add_encoder(OSSL_ENCODER_CTX *ctx, OSSL_ENCODER *encoder); +int OSSL_ENCODER_CTX_add_extra(OSSL_ENCODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_ENCODER_CTX_get_num_encoders(OSSL_ENCODER_CTX *ctx); + +typedef struct ossl_encoder_instance_st OSSL_ENCODER_INSTANCE; +OSSL_ENCODER * +OSSL_ENCODER_INSTANCE_get_encoder(OSSL_ENCODER_INSTANCE *encoder_inst); +void * +OSSL_ENCODER_INSTANCE_get_encoder_ctx(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_type(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_structure(OSSL_ENCODER_INSTANCE *encoder_inst); + +typedef const void *OSSL_ENCODER_CONSTRUCT(OSSL_ENCODER_INSTANCE *encoder_inst, + void *construct_data); +typedef void OSSL_ENCODER_CLEANUP(void *construct_data); + +int OSSL_ENCODER_CTX_set_construct(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CONSTRUCT *construct); +int OSSL_ENCODER_CTX_set_construct_data(OSSL_ENCODER_CTX *ctx, + void *construct_data); +int OSSL_ENCODER_CTX_set_cleanup(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CLEANUP *cleanup); + +/* Utilities to output the object to encode */ +int OSSL_ENCODER_to_bio(OSSL_ENCODER_CTX *ctx, BIO *out); +#ifndef OPENSSL_NO_STDIO +int OSSL_ENCODER_to_fp(OSSL_ENCODER_CTX *ctx, FILE *fp); +#endif +int OSSL_ENCODER_to_data(OSSL_ENCODER_CTX *ctx, unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_ENCODER_CTX with an associated type. This will perform + * an implicit OSSL_ENCODER_fetch(), suitable for the object of that type. + * This is more useful than calling OSSL_ENCODER_CTX_new(). + */ +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey, + int selection, + const char *output_type, + const char *output_struct, + const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/encodererr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/encodererr.h new file mode 100644 index 0000000..5e318b1 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/encodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ENCODERERR_H +# define OPENSSL_ENCODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_ENCODER reason codes. + */ +# define OSSL_ENCODER_R_ENCODER_NOT_FOUND 101 +# define OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY 100 +# define OSSL_ENCODER_R_MISSING_GET_PARAMS 102 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/engine.h b/thirdparty/OpenSSL-3.5.3/include/openssl/engine.h new file mode 100644 index 0000000..5b4b504 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/engine.h @@ -0,0 +1,833 @@ +/* + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ENGINE_H +# define OPENSSL_ENGINE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENGINE_H +# endif + +# include + +# ifndef OPENSSL_NO_ENGINE +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# include +# include +# include +# include +# include +# endif +# include +# 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 is 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. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_first(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_last(void); +# endif +/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_next(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_prev(ENGINE *e); +# endif +/* Add another "ENGINE" type into the array. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_add(ENGINE *e); +# endif +/* Remove an existing "ENGINE" type from the array. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_remove(ENGINE *e); +# endif +/* Retrieve an engine from the list by its unique "id" value. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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_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 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ENGINE_load_builtin_engines(void); +# endif + +/* + * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation + * "registry" handling. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned int ENGINE_get_table_flags(void); +OSSL_DEPRECATEDIN_3_0 void ENGINE_set_table_flags(unsigned int flags); +# endif + +/*- 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_EC(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DH(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RAND(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_ciphers(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_digests(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_meths(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_asn1_meths(void); +# endif + +/* + * 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_complete(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_all_complete(void); +# endif + +/* + * Send parameterised 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, + void (*f) (void)); +# endif + +/* + * 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(). + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# endif + +/* + * 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), + int cmd_optional); +# endif + +/* + * 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, + int cmd_optional); +# endif + +/* + * 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! + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_new(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_up_ref(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_id(ENGINE *e, const char *id); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_name(ENGINE *e, const char *name); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_destroy_function(ENGINE *e,ENGINE_GEN_INT_FUNC_PTR destroy_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, + ENGINE_SSL_CLIENT_CERT_PTR loadssl_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_flags(ENGINE *e, int flags); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_cmd_defns(ENGINE *e, + const ENGINE_CMD_DEFN *defns); +# endif +/* 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) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * 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! + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_id(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_name(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 +const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 +const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, + const char *str, + int len); +OSSL_DEPRECATEDIN_3_0 +const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, + const char *str, int len); +OSSL_DEPRECATEDIN_3_0 +const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_get_flags(const ENGINE *e); +# endif + +/* + * 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 an 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_init(ENGINE *e); +# endif +/* + * Free a functional reference to an engine type. This does not require a + * corresponding call to ENGINE_free as it also releases a structural + * reference. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_finish(ENGINE *e); +# endif + +/* + * 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +OSSL_DEPRECATEDIN_3_0 +EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +OSSL_DEPRECATEDIN_3_0 +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); +# endif + +/* + * 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RSA(void); +# endif +/* Same for the other "methods" */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DSA(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_EC(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DH(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RAND(void); +# endif +/* + * These functions can be used to get a functional reference to perform + * ciphering or digesting corresponding to "nid". + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_cipher_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_digest_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_meth_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# endif + +/* + * 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'. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_string(ENGINE *e, + const char *def_list); +# endif +/* Same for the other "methods" */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# endif + +/* + * 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default(ENGINE *e, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 void ENGINE_add_conf_module(void); +# endif + +/* 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); \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL); \ + 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(__DragonFly__) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ENGINE_setup_bsd_cryptodev(void); +# endif +# endif + + +# ifdef __cplusplus +} +# endif +# endif /* OPENSSL_NO_ENGINE */ +#endif /* OPENSSL_ENGINE_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/engineerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/engineerr.h new file mode 100644 index 0000000..d439b68 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/engineerr.h @@ -0,0 +1,63 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ENGINEERR_H +# define OPENSSL_ENGINEERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_ENGINE + + +/* + * ENGINE 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 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/err.h b/thirdparty/OpenSSL-3.5.3/include/openssl/err.h new file mode 100644 index 0000000..daca18e --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/err.h @@ -0,0 +1,512 @@ +/* + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif +# endif + +# include +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 + +# define ERR_NUM_ERRORS 16 +struct err_state_st { + int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; + int top, bottom; +}; +# endif + +/* 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_OSSL_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_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 + +# define ERR_LIB_USER 128 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif + +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ + +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) + +/* + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. + */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +DEFINE_LHASH_OF_INTERNAL(ERR_STRING_DATA); +#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp)), lh_ERR_STRING_DATA_hash_thunk, lh_ERR_STRING_DATA_comp_thunk, lh_ERR_STRING_DATA_doall_thunk, lh_ERR_STRING_DATA_doall_arg_thunk)) +#define lh_ERR_STRING_DATA_free(lh) OPENSSL_LH_free(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_flush(lh) OPENSSL_LH_flush(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_delete(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_delete(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_error(lh) OPENSSL_LH_error(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_num_items(lh) OPENSSL_LH_num_items(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh), dl) +#define lh_ERR_STRING_DATA_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_doallfunc_type(dfn)) + + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif + +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +#endif +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif +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_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif + +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); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif +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); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); +int ERR_count_to_mark(void); +int ERR_pop(void); + +ERR_STATE *OSSL_ERR_STATE_new(void); +void OSSL_ERR_STATE_save(ERR_STATE *es); +void OSSL_ERR_STATE_save_to_mark(ERR_STATE *es); +void OSSL_ERR_STATE_restore(const ERR_STATE *es); +void OSSL_ERR_STATE_free(ERR_STATE *es); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ess.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ess.h new file mode 100644 index 0000000..dad596a --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ess.h @@ -0,0 +1,128 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\ess.h.in + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID, ESS_CERT_ID, ESS_CERT_ID) +#define sk_ESS_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_value(sk, idx) ((ESS_CERT_ID *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_new(cmp) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_new_null() ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_delete(sk, i) ((ESS_CERT_ID *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_delete_ptr(sk, ptr) ((ESS_CERT_ID *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_pop(sk) ((ESS_CERT_ID *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_shift(sk) ((ESS_CERT_ID *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_sk_type(sk),ossl_check_ESS_CERT_ID_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), (idx)) +#define sk_ESS_CERT_ID_set(sk, idx, ptr) ((ESS_CERT_ID *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), pnum) +#define sk_ESS_CERT_ID_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_dup(sk) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_compfunc_type(cmp))) + + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID_V2, ESS_CERT_ID_V2, ESS_CERT_ID_V2) +#define sk_ESS_CERT_ID_V2_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_value(sk, idx) ((ESS_CERT_ID_V2 *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_V2_new(cmp) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_V2_new_null() ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_V2_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_V2_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_V2_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_delete(sk, i) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_V2_delete_ptr(sk, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_pop(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_shift(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk),ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_V2_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), (idx)) +#define sk_ESS_CERT_ID_V2_set(sk, idx, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), pnum) +#define sk_ESS_CERT_ID_V2_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_dup(sk) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_V2_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_V2_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) + + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/esserr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/esserr.h new file mode 100644 index 0000000..165ce7c --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/esserr.h @@ -0,0 +1,32 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ESSERR_H +# define OPENSSL_ESSERR_H +# pragma once + +# include +# include +# include + +/* + * ESS reason codes. + */ +# define ESS_R_EMPTY_ESS_CERT_ID_LIST 107 +# define ESS_R_ESS_CERT_DIGEST_ERROR 103 +# define ESS_R_ESS_CERT_ID_NOT_FOUND 104 +# define ESS_R_ESS_CERT_ID_WRONG_ORDER 105 +# define ESS_R_ESS_DIGEST_ALG_UNKNOWN 106 +# define ESS_R_ESS_SIGNING_CERTIFICATE_ERROR 102 +# define ESS_R_ESS_SIGNING_CERT_ADD_ERROR 100 +# define ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR 101 +# define ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE 108 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/evp.h b/thirdparty/OpenSSL-3.5.3/include/openssl/evp.h new file mode 100644 index 0000000..e5da1e6 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/evp.h @@ -0,0 +1,2310 @@ +/* + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_EVP_H +# define OPENSSL_EVP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENVELOPE_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# include +# include +# include +# 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 EVP_MAX_AEAD_TAG_LENGTH 16 + +/* Maximum pipes in cipher pipelining */ +# define EVP_MAX_PIPES 32 + +# define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +# define PKCS5_DEFAULT_ITER 2048 + +# include + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# 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 +# endif + +# define EVP_PKEY_NONE NID_undef +# define EVP_PKEY_RSA NID_rsaEncryption +# define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_RSA_PSS NID_rsassaPss +# 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_SM2 NID_sm2 +# define EVP_PKEY_HMAC NID_hmac +# define EVP_PKEY_CMAC NID_cmac +# define EVP_PKEY_SCRYPT NID_id_scrypt +# define EVP_PKEY_TLS1_PRF NID_tls1_prf +# define EVP_PKEY_HKDF NID_hkdf +# define EVP_PKEY_POLY1305 NID_poly1305 +# define EVP_PKEY_SIPHASH NID_siphash +# define EVP_PKEY_X25519 NID_X25519 +# define EVP_PKEY_ED25519 NID_ED25519 +# define EVP_PKEY_X448 NID_X448 +# define EVP_PKEY_ED448 NID_ED448 +# define EVP_PKEY_ML_DSA_44 NID_ML_DSA_44 +# define EVP_PKEY_ML_DSA_65 NID_ML_DSA_65 +# define EVP_PKEY_ML_DSA_87 NID_ML_DSA_87 +# define EVP_PKEY_SLH_DSA_SHA2_128S NID_SLH_DSA_SHA2_128s +# define EVP_PKEY_SLH_DSA_SHA2_128F NID_SLH_DSA_SHA2_128f +# define EVP_PKEY_SLH_DSA_SHA2_192S NID_SLH_DSA_SHA2_192s +# define EVP_PKEY_SLH_DSA_SHA2_192F NID_SLH_DSA_SHA2_192f +# define EVP_PKEY_SLH_DSA_SHA2_256S NID_SLH_DSA_SHA2_256s +# define EVP_PKEY_SLH_DSA_SHA2_256F NID_SLH_DSA_SHA2_256f +# define EVP_PKEY_SLH_DSA_SHAKE_128S NID_SLH_DSA_SHAKE_128s +# define EVP_PKEY_SLH_DSA_SHAKE_128F NID_SLH_DSA_SHAKE_128f +# define EVP_PKEY_SLH_DSA_SHAKE_192S NID_SLH_DSA_SHAKE_192s +# define EVP_PKEY_SLH_DSA_SHAKE_192F NID_SLH_DSA_SHAKE_192f +# define EVP_PKEY_SLH_DSA_SHAKE_256S NID_SLH_DSA_SHAKE_256s +# define EVP_PKEY_SLH_DSA_SHAKE_256F NID_SLH_DSA_SHAKE_256f + +/* Special indicator that the object is uniquely provider side */ +# define EVP_PKEY_KEYMGMT -1 + +/* Easy to use macros for EVP_PKEY related selections */ +# define EVP_PKEY_KEY_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) +# define EVP_PKEY_PRIVATE_KEY \ + ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) +# define EVP_PKEY_PUBLIC_KEY \ + ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define EVP_PKEY_KEYPAIR \ + ( EVP_PKEY_PUBLIC_KEY | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) + +#ifdef __cplusplus +extern "C" { +#endif + +int EVP_set_default_properties(OSSL_LIB_CTX *libctx, const char *propq); +char *EVP_get1_default_properties(OSSL_LIB_CTX *libctx); +int EVP_default_properties_is_fips_enabled(OSSL_LIB_CTX *libctx); +int EVP_default_properties_enable_fips(OSSL_LIB_CTX *libctx, int enable); + +# 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 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_meth_free(EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, + const void *data, + size_t count)); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, + unsigned char *md)); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, + const EVP_MD_CTX *from)); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 +int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_result_size(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 +int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, + const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 +int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 +int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, + const EVP_MD_CTX *from); +OSSL_DEPRECATEDIN_3_0 +int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2); +# endif +/* digest can only handle a single block */ +# define EVP_MD_FLAG_ONESHOT 0x0001 + +/* digest is extensible-output function, XOF */ +# define EVP_MD_FLAG_XOF 0x0002 + +/* 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 +# define EVP_MD_CTRL_XOF_LEN 0x3 +# define EVP_MD_CTRL_TLSTREE 0x4 + +/* 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. + */ + +/* This flag has no effect from openssl-3.0 onwards */ +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 + +/* + * 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 +/* NOTE: 0x0400 and 0x0800 are reserved for internal usage */ + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +OSSL_DEPRECATEDIN_3_0 +EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +OSSL_DEPRECATEDIN_3_0 +void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, + int (*cleanup) (EVP_CIPHER_CTX *)); +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, + int (*set_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, + int (*get_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, + int (*ctrl) (EVP_CIPHER_CTX *, int type, + int arg, void *ptr)); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 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); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, int type, + int arg, void *ptr); +# endif + +/* 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_SIV_MODE 0x10004 +# define EVP_CIPH_GCM_SIV_MODE 0x10005 +# 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 +/* Don't use standard iv length function */ +# define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 +/* Legacy and no longer relevant: Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0 +/* Free: 0x1000 */ +/* Buffer length in bits not bytes: CFB1 mode only */ +# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 +/* Deprecated FIPS flag: was 0x4000 */ +# define EVP_CIPH_FLAG_FIPS 0 +/* Deprecated FIPS flag: was 0x8000 */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0 + +/* + * Cipher handles any and all padding logic as well as finalisation. + */ +# define EVP_CIPH_FLAG_CTS 0x4000 +# 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 +/* For provider implementations that handle ASN1 get/set param themselves */ +# define EVP_CIPH_FLAG_CUSTOM_ASN1 0x1000000 +/* For ciphers generating unprotected CMS attributes */ +# define EVP_CIPH_FLAG_CIPHER_WITH_MAC 0x2000000 +/* For supplementary wrap cipher support */ +# define EVP_CIPH_FLAG_GET_WRAP_CIPHER 0x4000000 +# define EVP_CIPH_FLAG_INVERSE_CIPHER 0x8000000 + +/* + * 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 +/* Get the IV length used by the cipher */ +# define EVP_CTRL_GET_IVLEN 0x25 +/* 0x26 is unused */ +/* Tell the cipher it's doing a speed test (SIV disallows multiple ops) */ +# define EVP_CTRL_SET_SPEED 0x27 +/* Get the unprotectedAttrs from cipher ctx */ +# define EVP_CTRL_PROCESS_UNPROTECTED 0x28 +/* Get the supplementary wrap cipher */ +#define EVP_CTRL_GET_WRAP_CIPHER 0x29 +/* TLSTREE key diversification */ +#define EVP_CTRL_TLSTREE 0x2A + +/* 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 +/* Total length of CCM IV length for TLS */ +# define EVP_CCM_TLS_IV_LEN 12 +/* Length of tag for TLS */ +# define EVP_CCM_TLS_TAG_LEN 16 +/* Length of CCM8 tag for TLS */ +# define EVP_CCM8_TLS_TAG_LEN 8 + +/* Length of tag for TLS */ +# define EVP_CHACHAPOLY_TLS_TAG_LEN 16 + +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); + +typedef int (EVP_PBE_KEYGEN_EX) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de, OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ + (rsa)) +# endif + +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ + (dsa)) +# endif + +# if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0) +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,(dh)) +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) \ + EVP_PKEY_assign((pkey), EVP_PKEY_EC, (eckey)) +# endif +# endif +# ifndef OPENSSL_NO_SIPHASH +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_SIPHASH,(shkey)) +# endif + +# ifndef OPENSSL_NO_POLY1305 +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_POLY1305,(polykey)) +# 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_get_type(const EVP_MD *md); +# define EVP_MD_type EVP_MD_get_type +# define EVP_MD_nid EVP_MD_get_type +const char *EVP_MD_get0_name(const EVP_MD *md); +# define EVP_MD_name EVP_MD_get0_name +const char *EVP_MD_get0_description(const EVP_MD *md); +int EVP_MD_is_a(const EVP_MD *md, const char *name); +int EVP_MD_names_do_all(const EVP_MD *md, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md); +int EVP_MD_get_pkey_type(const EVP_MD *md); +# define EVP_MD_pkey_type EVP_MD_get_pkey_type +int EVP_MD_get_size(const EVP_MD *md); +# define EVP_MD_size EVP_MD_get_size +int EVP_MD_get_block_size(const EVP_MD *md); +# define EVP_MD_block_size EVP_MD_get_block_size +unsigned long EVP_MD_get_flags(const EVP_MD *md); +# define EVP_MD_flags EVP_MD_get_flags +int EVP_MD_xof(const EVP_MD *md); + +const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx); +EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, + const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 +void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, + int (*update) (EVP_MD_CTX *ctx, + const void *data, size_t count)); +# endif +int EVP_MD_CTX_get_size_ex(const EVP_MD_CTX *ctx); + +# define EVP_MD_CTX_get0_name(e) EVP_MD_get0_name(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_get_size(e) EVP_MD_CTX_get_size_ex(e) +# define EVP_MD_CTX_size EVP_MD_CTX_get_size_ex +# define EVP_MD_CTX_get_block_size(e) EVP_MD_get_block_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size +# define EVP_MD_CTX_get_type(e) EVP_MD_get_type(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_type EVP_MD_CTX_get_type +EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx +void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); +void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data + +int EVP_CIPHER_get_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_nid EVP_CIPHER_get_nid +const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name EVP_CIPHER_get0_name +const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher); +int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name); +int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_block_size(const EVP_CIPHER *cipher); +# define EVP_CIPHER_block_size EVP_CIPHER_get_block_size +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); +# endif +int EVP_CIPHER_get_key_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_key_length EVP_CIPHER_get_key_length +int EVP_CIPHER_get_iv_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length +unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_flags EVP_CIPHER_get_flags +int EVP_CIPHER_get_mode(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode EVP_CIPHER_get_mode +int EVP_CIPHER_get_type(const EVP_CIPHER *cipher); +# define EVP_CIPHER_type EVP_CIPHER_get_type +EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_CIPHER_can_pipeline(const EVP_CIPHER *cipher, int enc); +int EVP_CIPHER_up_ref(EVP_CIPHER *cipher); +void EVP_CIPHER_free(EVP_CIPHER *cipher); + +const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx); +EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting +int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid +int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size +int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length +int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length +int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length +# ifndef OPENSSL_NO_DEPRECATED_3_0 +const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +# endif +int EVP_CIPHER_CTX_get_updated_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +int EVP_CIPHER_CTX_get_original_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); +# endif +int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num +int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in); +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_get0_name(c) EVP_CIPHER_get0_name(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_get_type(c) EVP_CIPHER_get_type(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(c)) +# endif +# define EVP_CIPHER_CTX_get_mode(c) EVP_CIPHER_get_mode(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode + +# define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) +# define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) + +# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_SignInit(a,b) EVP_DigestInit(a,b) +# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) +# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) +# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) + +# 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,(void *)(md)) +# endif +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(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,(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_get_params(const EVP_MD *digest, OSSL_PARAM params[]); +int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); +int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); +const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx); +const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx); +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 EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in); +__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_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, + const OSSL_PARAM params[]); +__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_Q_digest(OSSL_LIB_CTX *libctx, const char *name, + const char *propq, const void *data, size_t datalen, + unsigned char *md, size_t *mdlen); + +__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); +__owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *out, + size_t outlen); +__owur int EVP_DigestSqueeze(EVP_MD_CTX *ctx, unsigned char *out, + size_t outlen); + +__owur EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); + +int EVP_MD_up_ref(EVP_MD *md); +void EVP_MD_free(EVP_MD *md); + +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); + +__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_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); +__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_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); +__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_CipherInit_SKEY(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + EVP_SKEY *skey, const unsigned char *iv, size_t iv_len, + int enc, const OSSL_PARAM params[]); +__owur int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc, const OSSL_PARAM params[]); +__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_CipherPipelineEncryptInit(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, + const unsigned char *key, size_t keylen, + size_t numpipes, + const unsigned char **iv, size_t ivlen); +__owur int EVP_CipherPipelineDecryptInit(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, + const unsigned char *key, size_t keylen, + size_t numpipes, + const unsigned char **iv, size_t ivlen); +__owur int EVP_CipherPipelineUpdate(EVP_CIPHER_CTX *ctx, + unsigned char **out, size_t *outl, + const size_t *outsize, + const unsigned char **in, const size_t *inl); +__owur int EVP_CipherPipelineFinal(EVP_CIPHER_CTX *ctx, + unsigned char **outm, size_t *outl, + const size_t *outsize); +__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_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *propq); + +__owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen, const unsigned char *tbs, + size_t tbslen); + +__owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey); +__owur int EVP_VerifyFinal_ex(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); + +__owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, + size_t siglen, const unsigned char *tbs, + size_t tbslen); + +__owur int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); +__owur int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); +__owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen); + +__owur int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); +__owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); +__owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen); + +__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); + +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, const 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); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); +int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]); +int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]); +int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx); +const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx); + +int EVP_CIPHER_CTX_set_algor_params(EVP_CIPHER_CTX *ctx, const X509_ALGOR *alg); +int EVP_CIPHER_CTX_get_algor_params(EVP_CIPHER_CTX *ctx, X509_ALGOR *alg); +int EVP_CIPHER_CTX_get_algor(EVP_CIPHER_CTX *ctx, X509_ALGOR **alg); + +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); +const EVP_MD *EVP_sha512_224(void); +const EVP_MD *EVP_sha512_256(void); +const EVP_MD *EVP_sha3_224(void); +const EVP_MD *EVP_sha3_256(void); +const EVP_MD *EVP_sha3_384(void); +const EVP_MD *EVP_sha3_512(void); +const EVP_MD *EVP_shake128(void); +const EVP_MD *EVP_shake256(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 +# ifndef OPENSSL_NO_SM3 +const EVP_MD *EVP_sm3(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_ARIA +const EVP_CIPHER *EVP_aria_128_ecb(void); +const EVP_CIPHER *EVP_aria_128_cbc(void); +const EVP_CIPHER *EVP_aria_128_cfb1(void); +const EVP_CIPHER *EVP_aria_128_cfb8(void); +const EVP_CIPHER *EVP_aria_128_cfb128(void); +# define EVP_aria_128_cfb EVP_aria_128_cfb128 +const EVP_CIPHER *EVP_aria_128_ctr(void); +const EVP_CIPHER *EVP_aria_128_ofb(void); +const EVP_CIPHER *EVP_aria_128_gcm(void); +const EVP_CIPHER *EVP_aria_128_ccm(void); +const EVP_CIPHER *EVP_aria_192_ecb(void); +const EVP_CIPHER *EVP_aria_192_cbc(void); +const EVP_CIPHER *EVP_aria_192_cfb1(void); +const EVP_CIPHER *EVP_aria_192_cfb8(void); +const EVP_CIPHER *EVP_aria_192_cfb128(void); +# define EVP_aria_192_cfb EVP_aria_192_cfb128 +const EVP_CIPHER *EVP_aria_192_ctr(void); +const EVP_CIPHER *EVP_aria_192_ofb(void); +const EVP_CIPHER *EVP_aria_192_gcm(void); +const EVP_CIPHER *EVP_aria_192_ccm(void); +const EVP_CIPHER *EVP_aria_256_ecb(void); +const EVP_CIPHER *EVP_aria_256_cbc(void); +const EVP_CIPHER *EVP_aria_256_cfb1(void); +const EVP_CIPHER *EVP_aria_256_cfb8(void); +const EVP_CIPHER *EVP_aria_256_cfb128(void); +# define EVP_aria_256_cfb EVP_aria_256_cfb128 +const EVP_CIPHER *EVP_aria_256_ctr(void); +const EVP_CIPHER *EVP_aria_256_ofb(void); +const EVP_CIPHER *EVP_aria_256_gcm(void); +const EVP_CIPHER *EVP_aria_256_ccm(void); +# endif +# ifndef OPENSSL_NO_CAMELLIA +const EVP_CIPHER *EVP_camellia_128_ecb(void); +const EVP_CIPHER *EVP_camellia_128_cbc(void); +const EVP_CIPHER *EVP_camellia_128_cfb1(void); +const EVP_CIPHER *EVP_camellia_128_cfb8(void); +const EVP_CIPHER *EVP_camellia_128_cfb128(void); +# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 +const EVP_CIPHER *EVP_camellia_128_ofb(void); +const EVP_CIPHER *EVP_camellia_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 + +# ifndef OPENSSL_NO_SM4 +const EVP_CIPHER *EVP_sm4_ecb(void); +const EVP_CIPHER *EVP_sm4_cbc(void); +const EVP_CIPHER *EVP_sm4_cfb128(void); +# define EVP_sm4_cfb EVP_sm4_cfb128 +const EVP_CIPHER *EVP_sm4_ofb(void); +const EVP_CIPHER *EVP_sm4_ctr(void); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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_add_all_algorithms_conf() +# else +# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf() +# 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_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_CIPHER *cipher, void *arg), + 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); +void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MD *md, void *arg), + void *arg); + +/* MAC stuff */ + +EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_MAC_up_ref(EVP_MAC *mac); +void EVP_MAC_free(EVP_MAC *mac); +const char *EVP_MAC_get0_name(const EVP_MAC *mac); +const char *EVP_MAC_get0_description(const EVP_MAC *mac); +int EVP_MAC_is_a(const EVP_MAC *mac, const char *name); +const OSSL_PROVIDER *EVP_MAC_get0_provider(const EVP_MAC *mac); +int EVP_MAC_get_params(EVP_MAC *mac, OSSL_PARAM params[]); + +EVP_MAC_CTX *EVP_MAC_CTX_new(EVP_MAC *mac); +void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx); +EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src); +EVP_MAC *EVP_MAC_CTX_get0_mac(EVP_MAC_CTX *ctx); +int EVP_MAC_CTX_get_params(EVP_MAC_CTX *ctx, OSSL_PARAM params[]); +int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]); + +size_t EVP_MAC_CTX_get_mac_size(EVP_MAC_CTX *ctx); +size_t EVP_MAC_CTX_get_block_size(EVP_MAC_CTX *ctx); +unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq, + const char *subalg, const OSSL_PARAM *params, + const void *key, size_t keylen, + const unsigned char *data, size_t datalen, + unsigned char *out, size_t outsize, size_t *outlen); +int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_MAC_init_SKEY(EVP_MAC_CTX *ctx, EVP_SKEY *skey, const OSSL_PARAM params[]); +int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen); +int EVP_MAC_final(EVP_MAC_CTX *ctx, + unsigned char *out, size_t *outl, size_t outsize); +int EVP_MAC_finalXOF(EVP_MAC_CTX *ctx, unsigned char *out, size_t outsize); +const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx); +const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx); + +void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg); +int EVP_MAC_names_do_all(const EVP_MAC *mac, + void (*fn)(const char *name, void *data), + void *data); + +/* RAND stuff */ +EVP_RAND *EVP_RAND_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_RAND_up_ref(EVP_RAND *rand); +void EVP_RAND_free(EVP_RAND *rand); +const char *EVP_RAND_get0_name(const EVP_RAND *rand); +const char *EVP_RAND_get0_description(const EVP_RAND *md); +int EVP_RAND_is_a(const EVP_RAND *rand, const char *name); +const OSSL_PROVIDER *EVP_RAND_get0_provider(const EVP_RAND *rand); +int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]); + +EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent); +int EVP_RAND_CTX_up_ref(EVP_RAND_CTX *ctx); +void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx); +EVP_RAND *EVP_RAND_CTX_get0_rand(EVP_RAND_CTX *ctx); +int EVP_RAND_CTX_get_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]); +int EVP_RAND_CTX_set_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_CTX_gettable_params(EVP_RAND_CTX *ctx); +const OSSL_PARAM *EVP_RAND_CTX_settable_params(EVP_RAND_CTX *ctx); + +void EVP_RAND_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_RAND *rand, void *arg), + void *arg); +int EVP_RAND_names_do_all(const EVP_RAND *rand, + void (*fn)(const char *name, void *data), + void *data); + +__owur int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[]); +int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx); +__owur int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out, + size_t outlen, unsigned int strength, + int prediction_resistance, + const unsigned char *addin, size_t addin_len); +int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len); +__owur int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen); +__owur int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx); + +int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx); +unsigned int EVP_RAND_get_strength(EVP_RAND_CTX *ctx); +int EVP_RAND_get_state(EVP_RAND_CTX *ctx); + +# define EVP_RAND_STATE_UNINITIALISED 0 +# define EVP_RAND_STATE_READY 1 +# define EVP_RAND_STATE_ERROR 2 + +/* PKEY stuff */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, + int enc_key_len, + EVP_PKEY *private_key); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, + int key_len, EVP_PKEY *pub_key); +# endif +int EVP_PKEY_is_a(const EVP_PKEY *pkey, const char *name); +int EVP_PKEY_type_names_do_all(const EVP_PKEY *pkey, + void (*fn)(const char *name, void *data), + void *data); +int EVP_PKEY_type(int type); +int EVP_PKEY_get_id(const EVP_PKEY *pkey); +# define EVP_PKEY_id EVP_PKEY_get_id +int EVP_PKEY_get_base_id(const EVP_PKEY *pkey); +# define EVP_PKEY_base_id EVP_PKEY_get_base_id +int EVP_PKEY_get_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_bits EVP_PKEY_get_bits +int EVP_PKEY_get_security_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_security_bits EVP_PKEY_get_security_bits +int EVP_PKEY_get_size(const EVP_PKEY *pkey); +# define EVP_PKEY_size EVP_PKEY_get_size +int EVP_PKEY_can_sign(const 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_set_type_by_keymgmt(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); +# endif +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +OSSL_DEPRECATEDIN_3_0 +void *EVP_PKEY_get0(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); +# ifndef OPENSSL_NO_POLY1305 +OSSL_DEPRECATEDIN_3_0 +const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); +# endif +# ifndef OPENSSL_NO_SIPHASH +OSSL_DEPRECATEDIN_3_0 +const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); +# endif + +struct rsa_st; +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); +OSSL_DEPRECATEDIN_3_0 +const struct rsa_st *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); + +# ifndef OPENSSL_NO_DSA +struct dsa_st; +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); +OSSL_DEPRECATEDIN_3_0 +const struct dsa_st *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); +# endif + +# ifndef OPENSSL_NO_DH +struct dh_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +OSSL_DEPRECATEDIN_3_0 const struct dh_st *EVP_PKEY_get0_DH(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif + +# ifndef OPENSSL_NO_EC +struct ec_key_st; +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); +OSSL_DEPRECATEDIN_3_0 +const struct ec_key_st *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +EVP_PKEY *EVP_PKEY_new(void); +int EVP_PKEY_up_ref(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey); +void EVP_PKEY_free(EVP_PKEY *pkey); +const char *EVP_PKEY_get0_description(const EVP_PKEY *pkey); +const OSSL_PROVIDER *EVP_PKEY_get0_provider(const EVP_PKEY *key); + +EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PublicKey(const EVP_PKEY *a, unsigned char **pp); + + +EVP_PKEY *d2i_PrivateKey_ex(int type, EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +EVP_PKEY *d2i_AutoPrivateKey_ex(EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp); + +int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in); + +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_parameters_eq(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); +# endif + +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); +# ifndef OPENSSL_NO_STDIO +int EVP_PKEY_print_public_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +# endif + +int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); +int EVP_PKEY_get_default_digest_name(EVP_PKEY *pkey, + char *mdname, size_t mdname_sz); +int EVP_PKEY_digestsign_supports_digest(EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *name, const char *propq); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_set1_encoded_public_key in + * preference + */ +# define EVP_PKEY_set1_tls_encodedpoint(pkey, pt, ptlen) \ + EVP_PKEY_set1_encoded_public_key((pkey), (pt), (ptlen)) +# endif + +int EVP_PKEY_set1_encoded_public_key(EVP_PKEY *pkey, + const unsigned char *pub, size_t publen); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_get1_encoded_public_key in + * preference + */ +# define EVP_PKEY_get1_tls_encodedpoint(pkey, ppt) \ + EVP_PKEY_get1_encoded_public_key((pkey), (ppt)) +# endif + +size_t EVP_PKEY_get1_encoded_public_key(EVP_PKEY *pkey, unsigned char **ppub); + +/* 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_PBE_keyivgen_ex(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, OSSL_LIB_CTX *libctx, + const char *propq); +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); +int PKCS5_v2_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); + +#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 EVP_PBE_scrypt_ex(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, + OSSL_LIB_CTX *ctx, const char *propq); + +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); +int PKCS5_v2_scrypt_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); +#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); + +int EVP_PBE_CipherInit_ex(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); + +/* 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); +int EVP_PBE_find_ex(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen, EVP_PBE_KEYGEN_EX **pkeygen_ex); +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 +# define ASN1_PKEY_CTRL_CMS_IS_RI_TYPE_SUPPORTED 0xb + +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, + const 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, + const void *data, + const X509_ALGOR *a, + const ASN1_BIT_STRING *sig, + EVP_PKEY *pkey), + int (*item_sign) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + const void *data, + X509_ALGOR *alg1, + X509_ALGOR *alg2, + ASN1_BIT_STRING *sig)); + +void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, + int (*siginf_set) (X509_SIG_INFO *siginf, + const X509_ALGOR *alg, + const ASN1_STRING *sig)); + +void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_pub_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_param_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_priv_key) (EVP_PKEY *pk, + const unsigned char + *priv, + size_t len)); +void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_pub_key) (EVP_PKEY *pk, + const unsigned char *pub, + size_t len)); +void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_priv_key) (const EVP_PKEY *pk, + unsigned char *priv, + size_t *len)); +void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_pub_key) (const EVP_PKEY *pk, + unsigned char *pub, + size_t *len)); + +void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_security_bits) (const EVP_PKEY + *pk)); + +int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, const void *id, int len); +int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id); +int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len); + +int EVP_PKEY_CTX_set_kem_op(EVP_PKEY_CTX *ctx, const char *op); + +const char *EVP_PKEY_get0_type_name(const EVP_PKEY *key); + +# define EVP_PKEY_OP_UNDEFINED 0 +# define EVP_PKEY_OP_PARAMGEN (1 << 1) +# define EVP_PKEY_OP_KEYGEN (1 << 2) +# define EVP_PKEY_OP_FROMDATA (1 << 3) +# define EVP_PKEY_OP_SIGN (1 << 4) +# define EVP_PKEY_OP_VERIFY (1 << 5) +# define EVP_PKEY_OP_VERIFYRECOVER (1 << 6) +# define EVP_PKEY_OP_SIGNCTX (1 << 7) +# define EVP_PKEY_OP_VERIFYCTX (1 << 8) +# define EVP_PKEY_OP_ENCRYPT (1 << 9) +# define EVP_PKEY_OP_DECRYPT (1 << 10) +# define EVP_PKEY_OP_DERIVE (1 << 11) +# define EVP_PKEY_OP_ENCAPSULATE (1 << 12) +# define EVP_PKEY_OP_DECAPSULATE (1 << 13) +# define EVP_PKEY_OP_SIGNMSG (1 << 14) +# define EVP_PKEY_OP_VERIFYMSG (1 << 15) +/* Update the following when adding new EVP_PKEY_OPs */ +# define EVP_PKEY_OP_ALL ((1 << 16) - 1) + +# define EVP_PKEY_OP_TYPE_SIG \ + (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_SIGNMSG \ + | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYMSG \ + | 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_DERIVE \ + (EVP_PKEY_OP_DERIVE) + +# define EVP_PKEY_OP_TYPE_DATA \ + (EVP_PKEY_OP_FROMDATA) + +# define EVP_PKEY_OP_TYPE_KEM \ + (EVP_PKEY_OP_ENCAPSULATE | EVP_PKEY_OP_DECAPSULATE) + +# define EVP_PKEY_OP_TYPE_GEN \ + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + +# define EVP_PKEY_OP_TYPE_NOGEN \ + (EVP_PKEY_OP_ALL & ~EVP_PKEY_OP_TYPE_GEN) + +int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key, + int keylen); + +# define EVP_PKEY_CTRL_MD 1 +# define EVP_PKEY_CTRL_PEER_KEY 2 +# 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 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# 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_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 +# endif +# define EVP_PKEY_CTRL_CIPHER 12 +# define EVP_PKEY_CTRL_GET_MD 13 +# define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 +# define EVP_PKEY_CTRL_SET1_ID 15 +# define EVP_PKEY_CTRL_GET1_ID 16 +# define EVP_PKEY_CTRL_GET1_ID_LEN 17 + +# 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 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, + const EVP_PKEY_METHOD *src); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +# endif + +EVP_KEYMGMT *EVP_KEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEYMGMT_up_ref(EVP_KEYMGMT *keymgmt); +void EVP_KEYMGMT_free(EVP_KEYMGMT *keymgmt); +const OSSL_PROVIDER *EVP_KEYMGMT_get0_provider(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_name(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_description(const EVP_KEYMGMT *keymgmt); +int EVP_KEYMGMT_is_a(const EVP_KEYMGMT *keymgmt, const char *name); +void EVP_KEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYMGMT *keymgmt, void *arg), + void *arg); +int EVP_KEYMGMT_names_do_all(const EVP_KEYMGMT *keymgmt, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYMGMT_gettable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_settable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_gen_settable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_gen_gettable_params(const EVP_KEYMGMT *keymgmt); + +EVP_SKEYMGMT *EVP_SKEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_SKEYMGMT_up_ref(EVP_SKEYMGMT *keymgmt); +void EVP_SKEYMGMT_free(EVP_SKEYMGMT *keymgmt); +const OSSL_PROVIDER *EVP_SKEYMGMT_get0_provider(const EVP_SKEYMGMT *keymgmt); +const char *EVP_SKEYMGMT_get0_name(const EVP_SKEYMGMT *keymgmt); +const char *EVP_SKEYMGMT_get0_description(const EVP_SKEYMGMT *keymgmt); +int EVP_SKEYMGMT_is_a(const EVP_SKEYMGMT *keymgmt, const char *name); +void EVP_SKEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_SKEYMGMT *keymgmt, void *arg), + void *arg); +int EVP_SKEYMGMT_names_do_all(const EVP_SKEYMGMT *keymgmt, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_SKEYMGMT_get0_gen_settable_params(const EVP_SKEYMGMT *skeymgmt); +const OSSL_PARAM *EVP_SKEYMGMT_get0_imp_settable_params(const EVP_SKEYMGMT *skeymgmt); + +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_new_from_name(OSSL_LIB_CTX *libctx, + const char *name, + const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_pkey(OSSL_LIB_CTX *libctx, + EVP_PKEY *pkey, const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(const EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_is_a(EVP_PKEY_CTX *ctx, const char *keytype); + +int EVP_PKEY_CTX_get_params(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_gettable_params(const EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_settable_params(const EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_algor_params(EVP_PKEY_CTX *ctx, const X509_ALGOR *alg); +int EVP_PKEY_CTX_get_algor_params(EVP_PKEY_CTX *ctx, X509_ALGOR *alg); +int EVP_PKEY_CTX_get_algor(EVP_PKEY_CTX *ctx, X509_ALGOR **alg); + +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_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, uint64_t 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_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); + +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); +EVP_PKEY *EVP_PKEY_new_raw_private_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, + const char *propq, + const unsigned char *priv, size_t len); +EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, + const unsigned char *priv, + size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, const char *propq, + const unsigned char *pub, size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, + const unsigned char *pub, + size_t len); +int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, + size_t *len); +int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, + size_t *len); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, + size_t len, const EVP_CIPHER *cipher); +# endif + +void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_data(const 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_CTX_set_signature(EVP_PKEY_CTX *pctx, + const unsigned char *sig, size_t siglen); + +void EVP_SIGNATURE_free(EVP_SIGNATURE *signature); +int EVP_SIGNATURE_up_ref(EVP_SIGNATURE *signature); +OSSL_PROVIDER *EVP_SIGNATURE_get0_provider(const EVP_SIGNATURE *signature); +EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name); +const char *EVP_SIGNATURE_get0_name(const EVP_SIGNATURE *signature); +const char *EVP_SIGNATURE_get0_description(const EVP_SIGNATURE *signature); +void EVP_SIGNATURE_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_SIGNATURE *signature, + void *data), + void *data); +int EVP_SIGNATURE_names_do_all(const EVP_SIGNATURE *signature, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_SIGNATURE_gettable_ctx_params(const EVP_SIGNATURE *sig); +const OSSL_PARAM *EVP_SIGNATURE_settable_ctx_params(const EVP_SIGNATURE *sig); + +void EVP_ASYM_CIPHER_free(EVP_ASYM_CIPHER *cipher); +int EVP_ASYM_CIPHER_up_ref(EVP_ASYM_CIPHER *cipher); +OSSL_PROVIDER *EVP_ASYM_CIPHER_get0_provider(const EVP_ASYM_CIPHER *cipher); +EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name); +const char *EVP_ASYM_CIPHER_get0_name(const EVP_ASYM_CIPHER *cipher); +const char *EVP_ASYM_CIPHER_get0_description(const EVP_ASYM_CIPHER *cipher); +void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_ASYM_CIPHER *cipher, + void *arg), + void *arg); +int EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *ciph); +const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *ciph); + +void EVP_KEM_free(EVP_KEM *wrap); +int EVP_KEM_up_ref(EVP_KEM *wrap); +OSSL_PROVIDER *EVP_KEM_get0_provider(const EVP_KEM *wrap); +EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEM_is_a(const EVP_KEM *wrap, const char *name); +const char *EVP_KEM_get0_name(const EVP_KEM *wrap); +const char *EVP_KEM_get0_description(const EVP_KEM *wrap); +void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEM *wrap, void *arg), void *arg); +int EVP_KEM_names_do_all(const EVP_KEM *wrap, + void (*fn)(const char *name, void *data), void *data); +const OSSL_PARAM *EVP_KEM_gettable_ctx_params(const EVP_KEM *kem); +const OSSL_PARAM *EVP_KEM_settable_ctx_params(const EVP_KEM *kem); + +int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_sign_init_ex2(EVP_PKEY_CTX *ctx, + EVP_SIGNATURE *algo, const OSSL_PARAM params[]); +int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_sign_message_init(EVP_PKEY_CTX *ctx, + EVP_SIGNATURE *algo, const OSSL_PARAM params[]); +int EVP_PKEY_sign_message_update(EVP_PKEY_CTX *ctx, + const unsigned char *in, size_t inlen); +int EVP_PKEY_sign_message_final(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen); +int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_verify_init_ex2(EVP_PKEY_CTX *ctx, + EVP_SIGNATURE *algo, const OSSL_PARAM params[]); +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_message_init(EVP_PKEY_CTX *ctx, + EVP_SIGNATURE *algo, const OSSL_PARAM params[]); +int EVP_PKEY_verify_message_update(EVP_PKEY_CTX *ctx, + const unsigned char *in, size_t inlen); +int EVP_PKEY_verify_message_final(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover_init_ex(EVP_PKEY_CTX *ctx, + const OSSL_PARAM params[]); +int EVP_PKEY_verify_recover_init_ex2(EVP_PKEY_CTX *ctx, + EVP_SIGNATURE *algo, + const OSSL_PARAM params[]); +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_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +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_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +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_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer, + int validate_peer); +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); + +int EVP_PKEY_encapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_auth_encapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpriv, + const OSSL_PARAM params[]); +int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx, + unsigned char *wrappedkey, size_t *wrappedkeylen, + unsigned char *genkey, size_t *genkeylen); +int EVP_PKEY_decapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_auth_decapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpub, + const OSSL_PARAM params[]); +int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, + unsigned char *unwrapped, size_t *unwrappedlen, + const unsigned char *wrapped, size_t wrappedlen); +typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_fromdata_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey, int selection, + OSSL_PARAM param[]); +const OSSL_PARAM *EVP_PKEY_fromdata_settable(EVP_PKEY_CTX *ctx, int selection); + +int EVP_PKEY_todata(const EVP_PKEY *pkey, int selection, OSSL_PARAM **params); +int EVP_PKEY_export(const EVP_PKEY *pkey, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +const OSSL_PARAM *EVP_PKEY_gettable_params(const EVP_PKEY *pkey); +int EVP_PKEY_get_params(const EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_get_int_param(const EVP_PKEY *pkey, const char *key_name, + int *out); +int EVP_PKEY_get_size_t_param(const EVP_PKEY *pkey, const char *key_name, + size_t *out); +int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name, + BIGNUM **bn); +int EVP_PKEY_get_utf8_string_param(const EVP_PKEY *pkey, const char *key_name, + char *str, size_t max_buf_sz, size_t *out_sz); +int EVP_PKEY_get_octet_string_param(const EVP_PKEY *pkey, const char *key_name, + unsigned char *buf, size_t max_buf_sz, + size_t *out_sz); + +const OSSL_PARAM *EVP_PKEY_settable_params(const EVP_PKEY *pkey); +int EVP_PKEY_set_params(EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_set_int_param(EVP_PKEY *pkey, const char *key_name, int in); +int EVP_PKEY_set_size_t_param(EVP_PKEY *pkey, const char *key_name, size_t in); +int EVP_PKEY_set_bn_param(EVP_PKEY *pkey, const char *key_name, + const BIGNUM *bn); +int EVP_PKEY_set_utf8_string_param(EVP_PKEY *pkey, const char *key_name, + const char *str); +int EVP_PKEY_set_octet_string_param(EVP_PKEY *pkey, const char *key_name, + const unsigned char *buf, size_t bsize); + +int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey); +int EVP_PKEY_get_field_type(const EVP_PKEY *pkey); + +EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq, + const char *type, ...); +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); +int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check_quick(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check_quick(EVP_PKEY_CTX *ctx); +int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx); + +# define EVP_PKEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EVP_PKEY, l, p, newf, dupf, freef) +int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg); +void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx); + +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); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_copy + (EVP_PKEY_METHOD *pmeth, int (*copy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_cleanup + (EVP_PKEY_METHOD *pmeth, void (*cleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestsign + (EVP_PKEY_METHOD *pmeth, + int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestverify + (EVP_PKEY_METHOD *pmeth, + int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_public_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_param_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digest_custom + (EVP_PKEY_METHOD *pmeth, int (*digest_custom) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_init + (const EVP_PKEY_METHOD *pmeth, int (**pinit) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_copy + (const EVP_PKEY_METHOD *pmeth, int (**pcopy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_cleanup + (const EVP_PKEY_METHOD *pmeth, void (**pcleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_paramgen + (const EVP_PKEY_METHOD *pmeth, int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_keygen + (const EVP_PKEY_METHOD *pmeth, int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_sign + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify_recover + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_signctx + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verifyctx + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_encrypt + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_decrypt + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_derive + (const EVP_PKEY_METHOD *pmeth, int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_ctrl + (const 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)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestsign + (const EVP_PKEY_METHOD *pmeth, + int (**digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestverify + (const EVP_PKEY_METHOD *pmeth, + int (**digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_public_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_param_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digest_custom + (const EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +# endif + +void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange); +EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +OSSL_PROVIDER *EVP_KEYEXCH_get0_provider(const EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_is_a(const EVP_KEYEXCH *keyexch, const char *name); +const char *EVP_KEYEXCH_get0_name(const EVP_KEYEXCH *keyexch); +const char *EVP_KEYEXCH_get0_description(const EVP_KEYEXCH *keyexch); +void EVP_KEYEXCH_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYEXCH *keyexch, void *data), + void *data); +int EVP_KEYEXCH_names_do_all(const EVP_KEYEXCH *keyexch, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYEXCH_gettable_ctx_params(const EVP_KEYEXCH *keyexch); +const OSSL_PARAM *EVP_KEYEXCH_settable_ctx_params(const EVP_KEYEXCH *keyexch); + +void EVP_add_alg_module(void); + +int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX *ctx, char *name, size_t namelen); +int EVP_PKEY_get_group_name(const EVP_PKEY *pkey, char *name, size_t name_sz, + size_t *gname_len); + +OSSL_LIB_CTX *EVP_PKEY_CTX_get0_libctx(EVP_PKEY_CTX *ctx); +const char *EVP_PKEY_CTX_get0_propq(const EVP_PKEY_CTX *ctx); +const OSSL_PROVIDER *EVP_PKEY_CTX_get0_provider(const EVP_PKEY_CTX *ctx); + +int EVP_SKEY_is_a(const EVP_SKEY *skey, const char *name); +EVP_SKEY *EVP_SKEY_import(OSSL_LIB_CTX *libctx, const char *skeymgmtname, const char *propquery, + int selection, const OSSL_PARAM *params); +EVP_SKEY *EVP_SKEY_generate(OSSL_LIB_CTX *libctx, const char *skeymgmtname, + const char *propquery, const OSSL_PARAM *params); +EVP_SKEY *EVP_SKEY_import_raw_key(OSSL_LIB_CTX *libctx, const char *skeymgmtname, + unsigned char *key, size_t keylen, + const char *propquery); +int EVP_SKEY_get0_raw_key(const EVP_SKEY *skey, const unsigned char **key, + size_t *len); +const char *EVP_SKEY_get0_key_id(const EVP_SKEY *skey); +int EVP_SKEY_export(const EVP_SKEY *skey, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); +int EVP_SKEY_up_ref(EVP_SKEY *skey); +void EVP_SKEY_free(EVP_SKEY *skey); +const char *EVP_SKEY_get0_skeymgmt_name(const EVP_SKEY *skey); +const char *EVP_SKEY_get0_provider_name(const EVP_SKEY *skey); +EVP_SKEY *EVP_SKEY_to_provider(EVP_SKEY *skey, OSSL_LIB_CTX *libctx, + OSSL_PROVIDER *prov, const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/evperr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/evperr.h new file mode 100644 index 0000000..6dc846a --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/evperr.h @@ -0,0 +1,148 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_EVPERR_H +# define OPENSSL_EVPERR_H +# pragma once + +# include +# include +# include + + + +/* + * EVP reason codes. + */ +# define EVP_R_AES_KEY_SETUP_FAILED 143 +# define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_ALGORITHM_NAME 200 +# define EVP_R_BAD_DECRYPT 100 +# define EVP_R_BAD_KEY_LENGTH 195 +# define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CACHE_CONSTANTS_FAILED 225 +# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CANNOT_GET_PARAMETERS 197 +# define EVP_R_CANNOT_SET_PARAMETERS 198 +# define EVP_R_CIPHER_NOT_GCM_MODE 184 +# define EVP_R_CIPHER_PARAMETER_ERROR 122 +# define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_CONFLICTING_ALGORITHM_NAME 201 +# 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_DEFAULT_QUERY_PARSE_ERROR 210 +# define EVP_R_DIFFERENT_KEY_TYPES 101 +# define EVP_R_DIFFERENT_PARAMETERS 153 +# define EVP_R_ERROR_LOADING_SECTION 165 +# 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_ECX_KEY 219 +# define EVP_R_EXPECTING_A_EC_KEY 142 +# define EVP_R_EXPECTING_A_POLY1305_KEY 164 +# define EVP_R_EXPECTING_A_SIPHASH_KEY 175 +# define EVP_R_FINAL_ERROR 188 +# define EVP_R_GENERATE_ERROR 214 +# define EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED 229 +# define EVP_R_GET_RAW_KEY_FAILED 182 +# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS 204 +# define EVP_R_INACCESSIBLE_KEY 203 +# define EVP_R_INITIALIZATION_ERROR 134 +# define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_CUSTOM_LENGTH 185 +# define EVP_R_INVALID_DIGEST 152 +# define EVP_R_INVALID_IV_LENGTH 194 +# define EVP_R_INVALID_KEY 163 +# define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_LENGTH 221 +# define EVP_R_INVALID_NULL_ALGORITHM 218 +# define EVP_R_INVALID_OPERATION 148 +# define EVP_R_INVALID_PROVIDER_FUNCTIONS 193 +# define EVP_R_INVALID_SALT_LENGTH 186 +# define EVP_R_INVALID_SECRET_LENGTH 223 +# define EVP_R_INVALID_SEED_LENGTH 220 +# define EVP_R_INVALID_VALUE 222 +# define EVP_R_KEYMGMT_EXPORT_FAILURE 205 +# define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_LOCKING_NOT_SUPPORTED 213 +# 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_NOT_ABLE_TO_COPY_CTX 190 +# define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 +# 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_IMPORT_FUNCTION 206 +# define EVP_R_NO_KEYMGMT_AVAILABLE 199 +# define EVP_R_NO_KEYMGMT_PRESENT 196 +# define EVP_R_NO_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_NULL_MAC_PKEY_CTX 208 +# define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_INITIALIZED 151 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE 226 +# define EVP_R_OUTPUT_WOULD_OVERFLOW 202 +# define EVP_R_PARAMETER_TOO_LARGE 187 +# define EVP_R_PARTIALLY_OVERLAPPING 162 +# define EVP_R_PBKDF2_ERROR 181 +# define EVP_R_PIPELINE_NOT_SUPPORTED 230 +# define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 +# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 +# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 +# define EVP_R_PROVIDER_ASYM_CIPHER_FAILURE 232 +# define EVP_R_PROVIDER_ASYM_CIPHER_NOT_SUPPORTED 235 +# define EVP_R_PROVIDER_KEYMGMT_FAILURE 233 +# define EVP_R_PROVIDER_KEYMGMT_NOT_SUPPORTED 236 +# define EVP_R_PROVIDER_SIGNATURE_FAILURE 234 +# define EVP_R_PROVIDER_SIGNATURE_NOT_SUPPORTED 237 +# define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_SETTING_XOF_FAILED 227 +# define EVP_R_SET_DEFAULT_PROPERTY_FAILURE 209 +# define EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE 228 +# define EVP_R_TOO_MANY_PIPES 231 +# define EVP_R_TOO_MANY_RECORDS 183 +# define EVP_R_UNABLE_TO_ENABLE_LOCKING 212 +# define EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE 215 +# define EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH 216 +# define EVP_R_UNABLE_TO_LOCK_CONTEXT 211 +# define EVP_R_UNABLE_TO_SET_CALLBACKS 217 +# define EVP_R_UNKNOWN_BITS 166 +# define EVP_R_UNKNOWN_CIPHER 160 +# define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_KEY_TYPE 207 +# define EVP_R_UNKNOWN_MAX_SIZE 167 +# define EVP_R_UNKNOWN_OPTION 169 +# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 +# define EVP_R_UNKNOWN_SECURITY_BITS 168 +# 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_KEY_TYPE 224 +# define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 +# define EVP_R_UNSUPPORTED_PRF 125 +# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 +# define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_UPDATE_ERROR 189 +# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 +# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 +# define EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE 191 +# define EVP_R_XTS_DUPLICATED_KEYS 192 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/fips_names.h b/thirdparty/OpenSSL-3.5.3/include/openssl/fips_names.h new file mode 100644 index 0000000..fa481fc --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/fips_names.h @@ -0,0 +1,50 @@ +/* + * Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_FIPS_NAMES_H +# define OPENSSL_FIPS_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Parameter names that the FIPS Provider defines + * All parameters are of type: OSSL_PARAM_UTF8_STRING + */ + +/* The following 4 Parameters are used for FIPS Self Testing */ + +/* The calculated MAC of the module file */ +# define OSSL_PROV_FIPS_PARAM_MODULE_MAC "module-mac" +/* The Version number for the fips install process */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_VERSION "install-version" +/* The calculated MAC of the install status indicator */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_MAC "install-mac" +/* The install status indicator */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_STATUS "install-status" + +/* + * A boolean that determines if the FIPS conditional test errors result in + * the module entering an error state. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_CONDITIONAL_ERRORS "conditional-errors" + +/* The following are provided for backwards compatibility */ +# define OSSL_PROV_FIPS_PARAM_SECURITY_CHECKS OSSL_PROV_PARAM_SECURITY_CHECKS +# define OSSL_PROV_FIPS_PARAM_TLS1_PRF_EMS_CHECK OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK +# define OSSL_PROV_FIPS_PARAM_DRBG_TRUNC_DIGEST OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_FIPS_NAMES_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/fipskey.h b/thirdparty/OpenSSL-3.5.3/include/openssl/fipskey.h new file mode 100644 index 0000000..536bb70 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/fipskey.h @@ -0,0 +1,41 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\fipskey.h.in + * + * Copyright 2020-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + 0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13 + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" + +/* + * The FIPS provider vendor name, as a string. + */ +#define FIPS_VENDOR "OpenSSL non-compliant FIPS Provider" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/hmac.h b/thirdparty/OpenSSL-3.5.3/include/openssl/hmac.h new file mode 100644 index 0000000..f9e1bff --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/hmac.h @@ -0,0 +1,62 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_HMAC_H +# define OPENSSL_HMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_HMAC_H +# endif + +# include + +# include + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HMAC_MAX_MD_CBLOCK 200 /* Deprecated */ +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 size_t HMAC_size(const HMAC_CTX *e); +OSSL_DEPRECATEDIN_3_0 HMAC_CTX *HMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 int HMAC_CTX_reset(HMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_free(HMAC_CTX *ctx); +# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur int HMAC_Init(HMAC_CTX *ctx, + const void *key, int len, + const EVP_MD *md); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, + unsigned int *len); +OSSL_DEPRECATEDIN_3_0 __owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); +# endif + +unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, + const unsigned char *data, size_t data_len, + unsigned char *md, unsigned int *md_len); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/hpke.h b/thirdparty/OpenSSL-3.5.3/include/openssl/hpke.h new file mode 100644 index 0000000..482acd2 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/hpke.h @@ -0,0 +1,169 @@ +/* + * Copyright 2022-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + */ + +/* APIs and data structures for HPKE (RFC9180) */ +#ifndef OSSL_HPKE_H +# define OSSL_HPKE_H +# pragma once + +# include + +/* HPKE modes */ +# define OSSL_HPKE_MODE_BASE 0 /* Base mode */ +# define OSSL_HPKE_MODE_PSK 1 /* Pre-shared key mode */ +# define OSSL_HPKE_MODE_AUTH 2 /* Authenticated mode */ +# define OSSL_HPKE_MODE_PSKAUTH 3 /* PSK+authenticated mode */ + +/* + * Max for ikm, psk, pskid, info and exporter contexts. + * RFC9180, section 7.2.1 RECOMMENDS 64 octets but we have test vectors from + * Appendix A.6.1 with a 66 octet IKM so we'll allow that. + */ +# define OSSL_HPKE_MAX_PARMLEN 66 +# define OSSL_HPKE_MIN_PSKLEN 32 +# define OSSL_HPKE_MAX_INFOLEN 1024 + +/* + * The (16bit) HPKE algorithm ID IANA codepoints + * If/when new IANA codepoints are added there are tables in + * crypto/hpke/hpke_util.c that must also be updated. + */ +# define OSSL_HPKE_KEM_ID_RESERVED 0x0000 /* not used */ +# define OSSL_HPKE_KEM_ID_P256 0x0010 /* NIST P-256 */ +# define OSSL_HPKE_KEM_ID_P384 0x0011 /* NIST P-384 */ +# define OSSL_HPKE_KEM_ID_P521 0x0012 /* NIST P-521 */ +# define OSSL_HPKE_KEM_ID_X25519 0x0020 /* Curve25519 */ +# define OSSL_HPKE_KEM_ID_X448 0x0021 /* Curve448 */ + +# define OSSL_HPKE_KDF_ID_RESERVED 0x0000 /* not used */ +# define OSSL_HPKE_KDF_ID_HKDF_SHA256 0x0001 /* HKDF-SHA256 */ +# define OSSL_HPKE_KDF_ID_HKDF_SHA384 0x0002 /* HKDF-SHA384 */ +# define OSSL_HPKE_KDF_ID_HKDF_SHA512 0x0003 /* HKDF-SHA512 */ + +# define OSSL_HPKE_AEAD_ID_RESERVED 0x0000 /* not used */ +# define OSSL_HPKE_AEAD_ID_AES_GCM_128 0x0001 /* AES-GCM-128 */ +# define OSSL_HPKE_AEAD_ID_AES_GCM_256 0x0002 /* AES-GCM-256 */ +# define OSSL_HPKE_AEAD_ID_CHACHA_POLY1305 0x0003 /* Chacha20-Poly1305 */ +# define OSSL_HPKE_AEAD_ID_EXPORTONLY 0xFFFF /* export-only fake ID */ + +/* strings for suite components */ +# define OSSL_HPKE_KEMSTR_P256 "P-256" /* KEM id 0x10 */ +# define OSSL_HPKE_KEMSTR_P384 "P-384" /* KEM id 0x11 */ +# define OSSL_HPKE_KEMSTR_P521 "P-521" /* KEM id 0x12 */ +# define OSSL_HPKE_KEMSTR_X25519 "X25519" /* KEM id 0x20 */ +# define OSSL_HPKE_KEMSTR_X448 "X448" /* KEM id 0x21 */ +# define OSSL_HPKE_KDFSTR_256 "hkdf-sha256" /* KDF id 1 */ +# define OSSL_HPKE_KDFSTR_384 "hkdf-sha384" /* KDF id 2 */ +# define OSSL_HPKE_KDFSTR_512 "hkdf-sha512" /* KDF id 3 */ +# define OSSL_HPKE_AEADSTR_AES128GCM "aes-128-gcm" /* AEAD id 1 */ +# define OSSL_HPKE_AEADSTR_AES256GCM "aes-256-gcm" /* AEAD id 2 */ +# define OSSL_HPKE_AEADSTR_CP "chacha20-poly1305" /* AEAD id 3 */ +# define OSSL_HPKE_AEADSTR_EXP "exporter" /* AEAD id 0xff */ + +/* + * Roles for use in creating an OSSL_HPKE_CTX, most + * important use of this is to control nonce reuse. + */ +# define OSSL_HPKE_ROLE_SENDER 0 +# define OSSL_HPKE_ROLE_RECEIVER 1 + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct { + uint16_t kem_id; /* Key Encapsulation Method id */ + uint16_t kdf_id; /* Key Derivation Function id */ + uint16_t aead_id; /* AEAD alg id */ +} OSSL_HPKE_SUITE; + +/** + * Suite constants, use this like: + * OSSL_HPKE_SUITE myvar = OSSL_HPKE_SUITE_DEFAULT; + */ +# ifndef OPENSSL_NO_ECX +# define OSSL_HPKE_SUITE_DEFAULT \ + {\ + OSSL_HPKE_KEM_ID_X25519, \ + OSSL_HPKE_KDF_ID_HKDF_SHA256, \ + OSSL_HPKE_AEAD_ID_AES_GCM_128 \ + } +# else +# define OSSL_HPKE_SUITE_DEFAULT \ + {\ + OSSL_HPKE_KEM_ID_P256, \ + OSSL_HPKE_KDF_ID_HKDF_SHA256, \ + OSSL_HPKE_AEAD_ID_AES_GCM_128 \ + } +#endif + +typedef struct ossl_hpke_ctx_st OSSL_HPKE_CTX; + +OSSL_HPKE_CTX *OSSL_HPKE_CTX_new(int mode, OSSL_HPKE_SUITE suite, int role, + OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_HPKE_CTX_free(OSSL_HPKE_CTX *ctx); + +int OSSL_HPKE_encap(OSSL_HPKE_CTX *ctx, + unsigned char *enc, size_t *enclen, + const unsigned char *pub, size_t publen, + const unsigned char *info, size_t infolen); +int OSSL_HPKE_seal(OSSL_HPKE_CTX *ctx, + unsigned char *ct, size_t *ctlen, + const unsigned char *aad, size_t aadlen, + const unsigned char *pt, size_t ptlen); + +int OSSL_HPKE_keygen(OSSL_HPKE_SUITE suite, + unsigned char *pub, size_t *publen, EVP_PKEY **priv, + const unsigned char *ikm, size_t ikmlen, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_HPKE_decap(OSSL_HPKE_CTX *ctx, + const unsigned char *enc, size_t enclen, + EVP_PKEY *recippriv, + const unsigned char *info, size_t infolen); +int OSSL_HPKE_open(OSSL_HPKE_CTX *ctx, + unsigned char *pt, size_t *ptlen, + const unsigned char *aad, size_t aadlen, + const unsigned char *ct, size_t ctlen); + +int OSSL_HPKE_export(OSSL_HPKE_CTX *ctx, + unsigned char *secret, + size_t secretlen, + const unsigned char *label, + size_t labellen); + +int OSSL_HPKE_CTX_set1_authpriv(OSSL_HPKE_CTX *ctx, EVP_PKEY *priv); +int OSSL_HPKE_CTX_set1_authpub(OSSL_HPKE_CTX *ctx, + const unsigned char *pub, + size_t publen); +int OSSL_HPKE_CTX_set1_psk(OSSL_HPKE_CTX *ctx, + const char *pskid, + const unsigned char *psk, size_t psklen); + +int OSSL_HPKE_CTX_set1_ikme(OSSL_HPKE_CTX *ctx, + const unsigned char *ikme, size_t ikmelen); + +int OSSL_HPKE_CTX_set_seq(OSSL_HPKE_CTX *ctx, uint64_t seq); +int OSSL_HPKE_CTX_get_seq(OSSL_HPKE_CTX *ctx, uint64_t *seq); + +int OSSL_HPKE_suite_check(OSSL_HPKE_SUITE suite); +int OSSL_HPKE_get_grease_value(const OSSL_HPKE_SUITE *suite_in, + OSSL_HPKE_SUITE *suite, + unsigned char *enc, size_t *enclen, + unsigned char *ct, size_t ctlen, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_HPKE_str2suite(const char *str, OSSL_HPKE_SUITE *suite); +size_t OSSL_HPKE_get_ciphertext_size(OSSL_HPKE_SUITE suite, size_t clearlen); +size_t OSSL_HPKE_get_public_encap_size(OSSL_HPKE_SUITE suite); +size_t OSSL_HPKE_get_recommended_ikmelen(OSSL_HPKE_SUITE suite); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/http.h b/thirdparty/OpenSSL-3.5.3/include/openssl/http.h new file mode 100644 index 0000000..d7aa570 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/http.h @@ -0,0 +1,119 @@ +/* + * Copyright 2000-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Siemens AG 2018-2020 + * + * Licensed under the Apache License 2.0 (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 OPENSSL_HTTP_H +# define OPENSSL_HTTP_H +# pragma once + +# include + +# include +# include +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_HTTP_NAME "http" +# define OSSL_HTTPS_NAME "https" +# define OSSL_HTTP_PREFIX OSSL_HTTP_NAME"://" +# define OSSL_HTTPS_PREFIX OSSL_HTTPS_NAME"://" +# define OSSL_HTTP_PORT "80" +# define OSSL_HTTPS_PORT "443" +# define OPENSSL_NO_PROXY "NO_PROXY" +# define OPENSSL_HTTP_PROXY "HTTP_PROXY" +# define OPENSSL_HTTPS_PROXY "HTTPS_PROXY" + +/* We want to have this even in case of OPENSSL_NO_HTTP */ +int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); + +# ifndef OPENSSL_NO_HTTP + +# define OSSL_HTTP_DEFAULT_MAX_LINE_LEN (4 * 1024) +# define OSSL_HTTP_DEFAULT_MAX_RESP_LEN (100 * 1024) +# define OSSL_HTTP_DEFAULT_MAX_CRL_LEN (32 * 1024 * 1024) +# define OSSL_HTTP_DEFAULT_MAX_RESP_HDR_LINES 256 + + +/* Low-level HTTP API */ +OSSL_HTTP_REQ_CTX *OSSL_HTTP_REQ_CTX_new(BIO *wbio, BIO *rbio, int buf_size); +void OSSL_HTTP_REQ_CTX_free(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_set_request_line(OSSL_HTTP_REQ_CTX *rctx, int method_POST, + const char *server, const char *port, + const char *path); +int OSSL_HTTP_REQ_CTX_add1_header(OSSL_HTTP_REQ_CTX *rctx, + const char *name, const char *value); +int OSSL_HTTP_REQ_CTX_set_expected(OSSL_HTTP_REQ_CTX *rctx, + const char *content_type, int asn1, + int timeout, int keep_alive); +int OSSL_HTTP_REQ_CTX_set1_req(OSSL_HTTP_REQ_CTX *rctx, const char *content_type, + const ASN1_ITEM *it, const ASN1_VALUE *req); +int OSSL_HTTP_REQ_CTX_nbio(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_nbio_d2i(OSSL_HTTP_REQ_CTX *rctx, + ASN1_VALUE **pval, const ASN1_ITEM *it); +BIO *OSSL_HTTP_REQ_CTX_exchange(OSSL_HTTP_REQ_CTX *rctx); +BIO *OSSL_HTTP_REQ_CTX_get0_mem_bio(const OSSL_HTTP_REQ_CTX *rctx); +size_t OSSL_HTTP_REQ_CTX_get_resp_len(const OSSL_HTTP_REQ_CTX *rctx); +void OSSL_HTTP_REQ_CTX_set_max_response_length(OSSL_HTTP_REQ_CTX *rctx, + unsigned long len); +void OSSL_HTTP_REQ_CTX_set_max_response_hdr_lines(OSSL_HTTP_REQ_CTX *rctx, + size_t count); +int OSSL_HTTP_is_alive(const OSSL_HTTP_REQ_CTX *rctx); + +/* High-level HTTP API */ +typedef BIO *(*OSSL_HTTP_bio_cb_t)(BIO *bio, void *arg, int connect, int detail); +OSSL_HTTP_REQ_CTX *OSSL_HTTP_open(const char *server, const char *port, + const char *proxy, const char *no_proxy, + int use_ssl, BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, int overall_timeout); +int OSSL_HTTP_proxy_connect(BIO *bio, const char *server, const char *port, + const char *proxyuser, const char *proxypass, + int timeout, BIO *bio_err, const char *prog); +int OSSL_HTTP_set1_request(OSSL_HTTP_REQ_CTX *rctx, const char *path, + const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +BIO *OSSL_HTTP_exchange(OSSL_HTTP_REQ_CTX *rctx, char **redirection_url); +BIO *OSSL_HTTP_get(const char *url, const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout); +BIO *OSSL_HTTP_transfer(OSSL_HTTP_REQ_CTX **prctx, + const char *server, const char *port, + const char *path, int use_ssl, + const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +int OSSL_HTTP_close(OSSL_HTTP_REQ_CTX *rctx, int ok); + +/* Auxiliary functions */ +int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +const char *OSSL_HTTP_adapt_proxy(const char *proxy, const char *no_proxy, + const char *server, int use_ssl); + +# endif /* !defined(OPENSSL_NO_HTTP) */ +# ifdef __cplusplus +} +# endif +#endif /* !defined(OPENSSL_HTTP_H) */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/httperr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/httperr.h new file mode 100644 index 0000000..ae7f00c --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/httperr.h @@ -0,0 +1,56 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_HTTPERR_H +# define OPENSSL_HTTPERR_H +# pragma once + +# include +# include +# include + + + +/* + * HTTP reason codes. + */ +# define HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN 108 +# define HTTP_R_CONNECT_FAILURE 100 +# define HTTP_R_ERROR_PARSING_ASN1_LENGTH 109 +# define HTTP_R_ERROR_PARSING_CONTENT_LENGTH 119 +# define HTTP_R_ERROR_PARSING_URL 101 +# define HTTP_R_ERROR_RECEIVING 103 +# define HTTP_R_ERROR_SENDING 102 +# define HTTP_R_FAILED_READING_DATA 128 +# define HTTP_R_HEADER_PARSE_ERROR 126 +# define HTTP_R_INCONSISTENT_CONTENT_LENGTH 120 +# define HTTP_R_INVALID_PORT_NUMBER 123 +# define HTTP_R_INVALID_URL_PATH 125 +# define HTTP_R_INVALID_URL_SCHEME 124 +# define HTTP_R_MAX_RESP_LEN_EXCEEDED 117 +# define HTTP_R_MISSING_ASN1_ENCODING 110 +# define HTTP_R_MISSING_CONTENT_TYPE 121 +# define HTTP_R_MISSING_REDIRECT_LOCATION 111 +# define HTTP_R_RECEIVED_ERROR 105 +# define HTTP_R_RECEIVED_WRONG_HTTP_VERSION 106 +# define HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP 112 +# define HTTP_R_REDIRECTION_NOT_ENABLED 116 +# define HTTP_R_RESPONSE_LINE_TOO_LONG 113 +# define HTTP_R_RESPONSE_PARSE_ERROR 104 +# define HTTP_R_RESPONSE_TOO_MANY_HDRLINES 130 +# define HTTP_R_RETRY_TIMEOUT 129 +# define HTTP_R_SERVER_CANCELED_CONNECTION 127 +# define HTTP_R_SOCK_NOT_SUPPORTED 122 +# define HTTP_R_STATUS_CODE_UNSUPPORTED 114 +# define HTTP_R_TLS_NOT_ENABLED 107 +# define HTTP_R_TOO_MANY_REDIRECTIONS 115 +# define HTTP_R_UNEXPECTED_CONTENT_TYPE 118 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/idea.h b/thirdparty/OpenSSL-3.5.3/include/openssl/idea.h new file mode 100644 index 0000000..1f9bb3b --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/idea.h @@ -0,0 +1,82 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_IDEA_H +# define OPENSSL_IDEA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_IDEA_H +# endif + +# include + +# ifndef OPENSSL_NO_IDEA +# ifdef __cplusplus +extern "C" { +# endif + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +typedef unsigned int IDEA_INT; + +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 + +typedef struct idea_key_st { + IDEA_INT data[9][6]; +} IDEA_KEY_SCHEDULE; +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *IDEA_options(void); +OSSL_DEPRECATEDIN_3_0 void IDEA_ecb_encrypt(const unsigned char *in, + unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_encrypt_key(const unsigned char *key, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, + IDEA_KEY_SCHEDULE *dk); +OSSL_DEPRECATEDIN_3_0 void IDEA_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num); +OSSL_DEPRECATEDIN_3_0 void IDEA_encrypt(unsigned long *in, + IDEA_KEY_SCHEDULE *ks); +#endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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/thirdparty/OpenSSL-3.5.3/include/openssl/indicator.h b/thirdparty/OpenSSL-3.5.3/include/openssl/indicator.h new file mode 100644 index 0000000..3ea0122 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/indicator.h @@ -0,0 +1,31 @@ +/* + * Copyright 2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_INDICATOR_H +# define OPENSSL_INDICATOR_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +#include + +typedef int (OSSL_INDICATOR_CALLBACK)(const char *type, const char *desc, + const OSSL_PARAM params[]); + +void OSSL_INDICATOR_set_callback(OSSL_LIB_CTX *libctx, + OSSL_INDICATOR_CALLBACK *cb); +void OSSL_INDICATOR_get_callback(OSSL_LIB_CTX *libctx, + OSSL_INDICATOR_CALLBACK **cb); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_INDICATOR_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/kdf.h b/thirdparty/OpenSSL-3.5.3/include/openssl/kdf.h new file mode 100644 index 0000000..0983230 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/kdf.h @@ -0,0 +1,138 @@ +/* + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_KDF_H +# define OPENSSL_KDF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_KDF_H +# endif + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int EVP_KDF_up_ref(EVP_KDF *kdf); +void EVP_KDF_free(EVP_KDF *kdf); +EVP_KDF *EVP_KDF_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); + +EVP_KDF_CTX *EVP_KDF_CTX_new(EVP_KDF *kdf); +void EVP_KDF_CTX_free(EVP_KDF_CTX *ctx); +EVP_KDF_CTX *EVP_KDF_CTX_dup(const EVP_KDF_CTX *src); +const char *EVP_KDF_get0_description(const EVP_KDF *kdf); +int EVP_KDF_is_a(const EVP_KDF *kdf, const char *name); +const char *EVP_KDF_get0_name(const EVP_KDF *kdf); +const OSSL_PROVIDER *EVP_KDF_get0_provider(const EVP_KDF *kdf); +const EVP_KDF *EVP_KDF_CTX_kdf(EVP_KDF_CTX *ctx); + +void EVP_KDF_CTX_reset(EVP_KDF_CTX *ctx); +size_t EVP_KDF_CTX_get_kdf_size(EVP_KDF_CTX *ctx); +int EVP_KDF_derive(EVP_KDF_CTX *ctx, unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_KDF_get_params(EVP_KDF *kdf, OSSL_PARAM params[]); +int EVP_KDF_CTX_get_params(EVP_KDF_CTX *ctx, OSSL_PARAM params[]); +int EVP_KDF_CTX_set_params(EVP_KDF_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_KDF_gettable_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_gettable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_settable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_CTX_gettable_params(EVP_KDF_CTX *ctx); +const OSSL_PARAM *EVP_KDF_CTX_settable_params(EVP_KDF_CTX *ctx); + +void EVP_KDF_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KDF *kdf, void *arg), + void *arg); +int EVP_KDF_names_do_all(const EVP_KDF *kdf, + void (*fn)(const char *name, void *data), + void *data); + +# define EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_KDF_HKDF_MODE_EXTRACT_ONLY 1 +# define EVP_KDF_HKDF_MODE_EXPAND_ONLY 2 + +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV 65 +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_SRV_TO_CLI 66 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_CLI_TO_SRV 67 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_SRV_TO_CLI 68 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_CLI_TO_SRV 69 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_SRV_TO_CLI 70 + +/**** The legacy PKEY-based KDF API follows. ****/ + +# 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_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_PASS (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_SCRYPT_SALT (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_SCRYPT_N (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_SCRYPT_R (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) + +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND \ + EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY \ + EVP_KDF_HKDF_MODE_EXTRACT_ONLY +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY \ + EVP_KDF_HKDF_MODE_EXPAND_ONLY + +int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, + const unsigned char *sec, int seclen); + +int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, + const unsigned char *seed, int seedlen); + +int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); + +int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *ctx, + const unsigned char *key, int keylen); + +int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *ctx, + const unsigned char *info, int infolen); + +int EVP_PKEY_CTX_set_hkdf_mode(EVP_PKEY_CTX *ctx, int mode); +# define EVP_PKEY_CTX_hkdf_mode EVP_PKEY_CTX_set_hkdf_mode + +int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *ctx, const char *pass, + int passlen); + +int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); + +int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *ctx, uint64_t n); + +int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *ctx, uint64_t r); + +int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *ctx, uint64_t p); + +int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *ctx, + uint64_t maxmem_bytes); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/kdferr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/kdferr.h new file mode 100644 index 0000000..963d766 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/kdferr.h @@ -0,0 +1,16 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_KDFERR_H +# define OPENSSL_KDFERR_H +# pragma once + +#include + +#endif /* !defined(OPENSSL_KDFERR_H) */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/lhash.h b/thirdparty/OpenSSL-3.5.3/include/openssl/lhash.h new file mode 100644 index 0000000..62c55b2 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/lhash.h @@ -0,0 +1,398 @@ +/* + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef int (*OPENSSL_LH_COMPFUNCTHUNK) (const void *, const void *, OPENSSL_LH_COMPFUNC cfn); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNCTHUNK) (const void *, OPENSSL_LH_HASHFUNC hfn); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNC_THUNK) (void *, OPENSSL_LH_DOALL_FUNC doall); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG_THUNK) (void *, void *, OPENSSL_LH_DOALL_FUNCARG doall); +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); +OPENSSL_LHASH *OPENSSL_LH_set_thunks(OPENSSL_LHASH *lh, + OPENSSL_LH_HASHFUNCTHUNK hw, + OPENSSL_LH_COMPFUNCTHUNK cw, + OPENSSL_LH_DOALL_FUNC_THUNK daw, + OPENSSL_LH_DOALL_FUNCARG_THUNK daaw); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(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); +void OPENSSL_LH_doall_arg_thunk(OPENSSL_LHASH *lh, + OPENSSL_LH_DOALL_FUNCARG_THUNK daaw, + OPENSSL_LH_DOALL_FUNCARG fn, 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 +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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 + +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_inline unsigned long lh_##type##_hash_thunk(const void *data, OPENSSL_LH_HASHFUNC hfn) \ + { \ + unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn; \ + return hfn_conv((const type *)data); \ + } \ + static ossl_inline int lh_##type##_comp_thunk(const void *da, const void *db, OPENSSL_LH_COMPFUNC cfn) \ + { \ + int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn; \ + return cfn_conv((const type *)da, (const type *)db); \ + } \ + static ossl_inline void lh_##type##_doall_thunk(void *node, OPENSSL_LH_DOALL_FUNC doall) \ + { \ + void (*doall_conv)(type *) = (void (*)(type *))doall; \ + doall_conv((type *)node); \ + } \ + static ossl_inline void lh_##type##_doall_arg_thunk(void *node, void *arg, OPENSSL_LH_DOALL_FUNCARG doall) \ + { \ + void (*doall_conv)(type *, void *) = (void (*)(type *, void *))doall; \ + doall_conv((type *)node, arg); \ + } \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused 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_unused 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_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static unsigned long \ + lh_##type##_hfn_thunk(const void *data, OPENSSL_LH_HASHFUNC hfn) \ + { \ + unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn; \ + return hfn_conv((const type *)data); \ + } \ + static int lh_##type##_cfn_thunk(const void *da, const void *db, OPENSSL_LH_COMPFUNC cfn) \ + { \ + int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn; \ + return cfn_conv((const type *)da, (const type *)db); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused 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_unused ossl_inline void \ + lh_##type##_doall_thunk(void *node, OPENSSL_LH_DOALL_FUNC doall) \ + { \ + void (*doall_conv)(type *) = (void (*)(type *))doall; \ + doall_conv((type *)node); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg_thunk(void *node, void *arg, OPENSSL_LH_DOALL_FUNCARG doall) \ + { \ + void (*doall_conv)(type *, void *) = (void (*)(type *, void *))doall; \ + doall_conv((type *)node, arg); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + static ossl_unused 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_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \ + lh_##type##_hfn_thunk, lh_##type##_cfn_thunk, \ + lh_##type##_doall_thunk, \ + lh_##type##_doall_arg_thunk); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ + 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_unused ossl_inline void \ + lh_##type##_doall_##argtype##_thunk(void *node, void *arg, OPENSSL_LH_DOALL_FUNCARG fn) \ + { \ + void (*fn_conv)(cbargtype *, argtype *) = (void (*)(cbargtype *, argtype *))fn; \ + fn_conv((cbargtype *)node, (argtype *)arg); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg_thunk((OPENSSL_LHASH *)lh, \ + lh_##type##_doall_##argtype##_thunk, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, \ + (void *)arg); \ + } \ + LHASH_OF(type) + +DEFINE_LHASH_OF_INTERNAL(OPENSSL_STRING); +#define lh_OPENSSL_STRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_STRING) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_OPENSSL_STRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_STRING_lh_compfunc_type(cmp)), lh_OPENSSL_STRING_hash_thunk, lh_OPENSSL_STRING_comp_thunk, lh_OPENSSL_STRING_doall_thunk, lh_OPENSSL_STRING_doall_arg_thunk)) +#define lh_OPENSSL_STRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_insert(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_delete(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_retrieve(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_STRING_lh_type(lh), dl) +#define lh_OPENSSL_STRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_doallfunc_type(dfn)) +DEFINE_LHASH_OF_INTERNAL(OPENSSL_CSTRING); +#define lh_OPENSSL_CSTRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_CSTRING) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_OPENSSL_CSTRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_CSTRING_lh_compfunc_type(cmp)), lh_OPENSSL_CSTRING_hash_thunk, lh_OPENSSL_CSTRING_comp_thunk, lh_OPENSSL_CSTRING_doall_thunk, lh_OPENSSL_CSTRING_doall_arg_thunk)) +#define lh_OPENSSL_CSTRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_insert(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_delete(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_retrieve(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh), dl) +#define lh_OPENSSL_CSTRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_doallfunc_type(dfn)) + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/macros.h b/thirdparty/OpenSSL-3.5.3/include/openssl/macros.h new file mode 100644 index 0000000..296723e --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/macros.h @@ -0,0 +1,349 @@ +/* + * Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_MACROS_H +# define OPENSSL_MACROS_H +# pragma once + +#include +#include + + +/* Helper macros for CPP string composition */ +# define OPENSSL_MSTR_HELPER(x) #x +# define OPENSSL_MSTR(x) OPENSSL_MSTR_HELPER(x) + +/* + * Sometimes OPENSSL_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; + +/* + * Generic deprecation macro + * + * If OPENSSL_SUPPRESS_DEPRECATED is defined, then OSSL_DEPRECATED and + * OSSL_DEPRECATED_FOR become no-ops + */ +# ifndef OSSL_DEPRECATED +# undef OSSL_DEPRECATED_FOR +# ifndef OPENSSL_SUPPRESS_DEPRECATED +# if defined(_MSC_VER) + /* + * MSVC supports __declspec(deprecated) since MSVC 2003 (13.10), + * and __declspec(deprecated(message)) since MSVC 2005 (14.00) + */ +# if _MSC_VER >= 1400 +# define OSSL_DEPRECATED(since) \ + __declspec(deprecated("Since OpenSSL " # since)) +# define OSSL_DEPRECATED_FOR(since, message) \ + __declspec(deprecated("Since OpenSSL " # since ";" message)) +# elif _MSC_VER >= 1310 +# define OSSL_DEPRECATED(since) __declspec(deprecated) +# define OSSL_DEPRECATED_FOR(since, message) __declspec(deprecated) +# endif +# elif defined(__GNUC__) + /* + * According to GCC documentation, deprecations with message appeared in + * GCC 4.5.0 + */ +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define OSSL_DEPRECATED(since) \ + __attribute__((deprecated("Since OpenSSL " # since))) +# define OSSL_DEPRECATED_FOR(since, message) \ + __attribute__((deprecated("Since OpenSSL " # since ";" message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define OSSL_DEPRECATED(since) __attribute__((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# define OSSL_DEPRECATED(since) __attribute__ ((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__ ((deprecated)) +# endif +# endif +# endif +# endif + +/* + * Still not defined? Then define no-op macros. This means these macros + * are unsuitable for use in a typedef. + */ +# ifndef OSSL_DEPRECATED +# define OSSL_DEPRECATED(since) extern +# define OSSL_DEPRECATED_FOR(since, message) extern +# endif + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . If this is + * undefined, the value of the macro OPENSSL_CONFIGURED_API (defined in + * ) is the default. + * + * For any version number up until version 1.1.x, is expected to be + * the calculated version number 0xMNNFFPPSL. + * For version numbers 3.0 and on, is expected to be a computation + * of the major and minor numbers in decimal using this formula: + * + * MAJOR * 10000 + MINOR * 100 + * + * So version 3.0 becomes 30000, version 3.2 becomes 30200, etc. + */ + +/* + * We use the OPENSSL_API_COMPAT value to define API level macros. These + * macros are used to enable or disable features at that API version boundary. + */ + +# ifdef OPENSSL_API_LEVEL +# error "OPENSSL_API_LEVEL must not be defined by application" +# endif + +/* + * We figure out what API level was intended by simple numeric comparison. + * The lowest old style number we recognise is 0x00908000L, so we take some + * safety margin and assume that anything below 0x00900000L is a new style + * number. This allows new versions up to and including v943.71.83. + */ +# ifdef OPENSSL_API_COMPAT +# if OPENSSL_API_COMPAT < 0x900000L +# define OPENSSL_API_LEVEL (OPENSSL_API_COMPAT) +# else +# define OPENSSL_API_LEVEL \ + (((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF)) +# endif +# endif + +/* + * If OPENSSL_API_COMPAT wasn't given, we use default numbers to set + * the API compatibility level. + */ +# ifndef OPENSSL_API_LEVEL +# if OPENSSL_CONFIGURED_API > 0 +# define OPENSSL_API_LEVEL (OPENSSL_CONFIGURED_API) +# else +# define OPENSSL_API_LEVEL \ + (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# endif +# endif + +# if OPENSSL_API_LEVEL > OPENSSL_CONFIGURED_API +# error "The requested API level higher than the configured API compatibility level" +# endif + +/* + * Check of sane values. + */ +/* Can't go higher than the current version. */ +# if OPENSSL_API_LEVEL > (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* OpenSSL will have no version 2.y.z */ +# if OPENSSL_API_LEVEL < 30000 && OPENSSL_API_LEVEL >= 20000 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* Below 0.9.8 is unacceptably low */ +# if OPENSSL_API_LEVEL < 908 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif + +/* + * Define macros for deprecation and simulated removal purposes. + * + * The macros OSSL_DEPRECATEDIN_{major}_{minor} are always defined for + * all OpenSSL versions we care for. They can be used as attributes + * in function declarations where appropriate. + * + * The macros OPENSSL_NO_DEPRECATED_{major}_{minor} are defined for + * all OpenSSL versions up to or equal to the version given with + * OPENSSL_API_COMPAT. They are used as guards around anything that's + * deprecated up to that version, as an effect of the developer option + * 'no-deprecated'. + */ + +# undef OPENSSL_NO_DEPRECATED_3_4 +# undef OPENSSL_NO_DEPRECATED_3_1 +# undef OPENSSL_NO_DEPRECATED_3_0 +# undef OPENSSL_NO_DEPRECATED_1_1_1 +# undef OPENSSL_NO_DEPRECATED_1_1_0 +# undef OPENSSL_NO_DEPRECATED_1_0_2 +# undef OPENSSL_NO_DEPRECATED_1_0_1 +# undef OPENSSL_NO_DEPRECATED_1_0_0 +# undef OPENSSL_NO_DEPRECATED_0_9_8 + +# if OPENSSL_API_LEVEL >= 30500 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_5 OSSL_DEPRECATED(3.5) +# define OSSL_DEPRECATEDIN_3_5_FOR(msg) OSSL_DEPRECATED_FOR(3.5, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_5 +# endif +# else +# define OSSL_DEPRECATEDIN_3_5 +# define OSSL_DEPRECATEDIN_3_5_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 30400 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_4 OSSL_DEPRECATED(3.4) +# define OSSL_DEPRECATEDIN_3_4_FOR(msg) OSSL_DEPRECATED_FOR(3.4, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_4 +# endif +# else +# define OSSL_DEPRECATEDIN_3_4 +# define OSSL_DEPRECATEDIN_3_4_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 30100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_1 OSSL_DEPRECATED(3.1) +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) OSSL_DEPRECATED_FOR(3.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_1 +# endif +# else +# define OSSL_DEPRECATEDIN_3_1 +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 30000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) OSSL_DEPRECATED_FOR(3.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_0 +# endif +# else +# define OSSL_DEPRECATEDIN_3_0 +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10101 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_1 OSSL_DEPRECATED(1.1.1) +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) OSSL_DEPRECATED_FOR(1.1.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_1 +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_0 OSSL_DEPRECATED(1.1.0) +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) OSSL_DEPRECATED_FOR(1.1.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_0 +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10002 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_2 OSSL_DEPRECATED(1.0.2) +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) OSSL_DEPRECATED_FOR(1.0.2, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_2 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_2 +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10001 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_1 OSSL_DEPRECATED(1.0.1) +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) OSSL_DEPRECATED_FOR(1.0.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_1 +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_0 OSSL_DEPRECATED(1.0.0) +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) OSSL_DEPRECATED_FOR(1.0.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_0 +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 908 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_0_9_8 OSSL_DEPRECATED(0.9.8) +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) OSSL_DEPRECATED_FOR(0.9.8, msg) +# else +# define OPENSSL_NO_DEPRECATED_0_9_8 +# endif +# else +# define OSSL_DEPRECATEDIN_0_9_8 +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) +# endif + +/* + * Make our own variants of __FILE__ and __LINE__, depending on configuration + */ + +# 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 + +/* + * __func__ was standardized in C99, so for any compiler that claims + * to implement that language level or newer, we assume we can safely + * use that symbol. + * + * GNU C also provides __FUNCTION__ since version 2, which predates + * C99. We can, however, only use this if __STDC_VERSION__ exists, + * as it's otherwise not allowed according to ISO C standards (C90). + * (compiling with GNU C's -pedantic tells us so) + * + * If none of the above applies, we check if the compiler is MSVC, + * and use __FUNCTION__ if that's the case. + */ +# ifndef OPENSSL_FUNC +# if defined(__STDC_VERSION__) +# if __STDC_VERSION__ >= 199901L +# define OPENSSL_FUNC __func__ +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define OPENSSL_FUNC __FUNCTION__ +# endif +# elif defined(_MSC_VER) +# define OPENSSL_FUNC __FUNCTION__ +# endif +/* + * If all these possibilities are exhausted, we give up and use a + * static string. + */ +# ifndef OPENSSL_FUNC +# define OPENSSL_FUNC "(unknown function)" +# endif +# endif + +# ifndef OSSL_CRYPTO_ALLOC +# if defined(__GNUC__) +# define OSSL_CRYPTO_ALLOC __attribute__((__malloc__)) +# elif defined(_MSC_VER) +# define OSSL_CRYPTO_ALLOC __declspec(restrict) +# else +# define OSSL_CRYPTO_ALLOC +# endif +# endif + +#endif /* OPENSSL_MACROS_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/md2.h b/thirdparty/OpenSSL-3.5.3/include/openssl/md2.h new file mode 100644 index 0000000..5d4cb77 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/md2.h @@ -0,0 +1,56 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_MD2_H +# define OPENSSL_MD2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD2_H +# endif + +# include + +# ifndef OPENSSL_NO_MD2 +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define MD2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +typedef unsigned char MD2_INT; + +# 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; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *MD2_options(void); +OSSL_DEPRECATEDIN_3_0 int MD2_Init(MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD2_Update(MD2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MD2_Final(unsigned char *md, MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD2(const unsigned char *d, size_t n, + unsigned char *md); +# endif + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/md4.h b/thirdparty/OpenSSL-3.5.3/include/openssl/md4.h new file mode 100644 index 0000000..6c150a6 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/md4.h @@ -0,0 +1,63 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_MD4_H +# define OPENSSL_MD4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD4_H +# endif + +# include + +# ifndef OPENSSL_NO_MD4 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define MD4_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! 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) + +typedef struct MD4state_st { + MD4_LONG A, B, C, D; + MD4_LONG Nl, Nh; + MD4_LONG data[MD4_LBLOCK]; + unsigned int num; +} MD4_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD4_Init(MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD4_Update(MD4_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD4_Final(unsigned char *md, MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD4(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD4_Transform(MD4_CTX *c, const unsigned char *b); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/md5.h b/thirdparty/OpenSSL-3.5.3/include/openssl/md5.h new file mode 100644 index 0000000..77a5773 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/md5.h @@ -0,0 +1,62 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_MD5_H +# define OPENSSL_MD5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD5_H +# endif + +# include + +# ifndef OPENSSL_NO_MD5 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define MD5_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! 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) + +typedef struct MD5state_st { + MD5_LONG A, B, C, D; + MD5_LONG Nl, Nh; + MD5_LONG data[MD5_LBLOCK]; + unsigned int num; +} MD5_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD5_Update(MD5_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD5_Final(unsigned char *md, MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD5(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD5_Transform(MD5_CTX *c, const unsigned char *b); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/mdc2.h b/thirdparty/OpenSSL-3.5.3/include/openssl/mdc2.h new file mode 100644 index 0000000..5a7ee28 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/mdc2.h @@ -0,0 +1,55 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_MDC2_H +# define OPENSSL_MDC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MDC2_H +# endif + +# include + +# ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define MDC2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define MDC2_BLOCK 8 + +typedef struct mdc2_ctx_st { + unsigned int num; + unsigned char data[MDC2_BLOCK]; + DES_cblock h, hh; + unsigned int pad_type; /* either 1 or 2, default 1 */ +} MDC2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MDC2_Init(MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MDC2_Update(MDC2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MDC2_Final(unsigned char *md, MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MDC2(const unsigned char *d, size_t n, + unsigned char *md); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ml_kem.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ml_kem.h new file mode 100644 index 0000000..1c90163 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ml_kem.h @@ -0,0 +1,31 @@ +/* + * Copyright 2024-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_ML_KEM_H +# define OPENSSL_ML_KEM_H +# pragma once + +# define OSSL_ML_KEM_SHARED_SECRET_BYTES 32 + +# define OSSL_ML_KEM_512_BITS 512 +# define OSSL_ML_KEM_512_SECURITY_BITS 128 +# define OSSL_ML_KEM_512_CIPHERTEXT_BYTES 768 +# define OSSL_ML_KEM_512_PUBLIC_KEY_BYTES 800 + +# define OSSL_ML_KEM_768_BITS 768 +# define OSSL_ML_KEM_768_SECURITY_BITS 192 +# define OSSL_ML_KEM_768_CIPHERTEXT_BYTES 1088 +# define OSSL_ML_KEM_768_PUBLIC_KEY_BYTES 1184 + +# define OSSL_ML_KEM_1024_BITS 1024 +# define OSSL_ML_KEM_1024_SECURITY_BITS 256 +# define OSSL_ML_KEM_1024_CIPHERTEXT_BYTES 1568 +# define OSSL_ML_KEM_1024_PUBLIC_KEY_BYTES 1568 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/modes.h b/thirdparty/OpenSSL-3.5.3/include/openssl/modes.h new file mode 100644 index 0000000..e190799 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/modes.h @@ -0,0 +1,219 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_MODES_H +# define OPENSSL_MODES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MODES_H +# endif + +# include +# 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 (*ecb128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + 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 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/obj_mac.h b/thirdparty/OpenSSL-3.5.3/include/openssl/obj_mac.h new file mode 100644 index 0000000..ee71e26 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/obj_mac.h @@ -0,0 +1,6636 @@ +/* + * WARNING: do not edit! + * Generated by crypto/objects/objects.pl + * + * Copyright 2000-2025 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the Apache License 2.0 (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 OPENSSL_OBJ_MAC_H +# define OPENSSL_OBJ_MAC_H +# pragma once + +#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_gmac "GMAC" +#define LN_gmac "gmac" +#define NID_gmac 1195 +#define OBJ_gmac OBJ_iso,0L,9797L,3L,4L + +#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_x509ExtAdmission "x509ExtAdmission" +#define LN_x509ExtAdmission "Professional Information or basis for Admission" +#define NID_x509ExtAdmission 1093 +#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L + +#define SN_certicom_arc "certicom-arc" +#define NID_certicom_arc 677 +#define OBJ_certicom_arc OBJ_identified_organization,132L + +#define SN_ieee "ieee" +#define NID_ieee 1170 +#define OBJ_ieee OBJ_identified_organization,111L + +#define SN_ieee_siswg "ieee-siswg" +#define LN_ieee_siswg "IEEE Security in Storage Working Group" +#define NID_ieee_siswg 1171 +#define OBJ_ieee_siswg OBJ_ieee,2L,1619L + +#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_ISO_CN "ISO-CN" +#define LN_ISO_CN "ISO CN Member Body" +#define NID_ISO_CN 1140 +#define OBJ_ISO_CN OBJ_member_body,156L + +#define SN_oscca "oscca" +#define NID_oscca 1141 +#define OBJ_oscca OBJ_ISO_CN,10197L + +#define SN_sm_scheme "sm-scheme" +#define NID_sm_scheme 1142 +#define OBJ_sm_scheme OBJ_oscca,1L + +#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_sha512_224WithRSAEncryption "RSA-SHA512/224" +#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" +#define NID_sha512_224WithRSAEncryption 1145 +#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L + +#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" +#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" +#define NID_sha512_256WithRSAEncryption 1146 +#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L + +#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_routeOriginAuthz "id-ct-routeOriginAuthz" +#define NID_id_ct_routeOriginAuthz 1234 +#define OBJ_id_ct_routeOriginAuthz OBJ_id_smime_ct,24L + +#define SN_id_ct_rpkiManifest "id-ct-rpkiManifest" +#define NID_id_ct_rpkiManifest 1235 +#define OBJ_id_ct_rpkiManifest OBJ_id_smime_ct,26L + +#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_ct_rpkiGhostbusters "id-ct-rpkiGhostbusters" +#define NID_id_ct_rpkiGhostbusters 1236 +#define OBJ_id_ct_rpkiGhostbusters OBJ_id_smime_ct,35L + +#define SN_id_ct_resourceTaggedAttest "id-ct-resourceTaggedAttest" +#define NID_id_ct_resourceTaggedAttest 1237 +#define OBJ_id_ct_resourceTaggedAttest OBJ_id_smime_ct,36L + +#define SN_id_ct_geofeedCSVwithCRLF "id-ct-geofeedCSVwithCRLF" +#define NID_id_ct_geofeedCSVwithCRLF 1246 +#define OBJ_id_ct_geofeedCSVwithCRLF OBJ_id_smime_ct,47L + +#define SN_id_ct_signedChecklist "id-ct-signedChecklist" +#define NID_id_ct_signedChecklist 1247 +#define OBJ_id_ct_signedChecklist OBJ_id_smime_ct,48L + +#define SN_id_ct_ASPA "id-ct-ASPA" +#define NID_id_ct_ASPA 1250 +#define OBJ_id_ct_ASPA OBJ_id_smime_ct,49L + +#define SN_id_ct_signedTAL "id-ct-signedTAL" +#define NID_id_ct_signedTAL 1284 +#define OBJ_id_ct_signedTAL OBJ_id_smime_ct,50L + +#define SN_id_ct_rpkiSignedPrefixList "id-ct-rpkiSignedPrefixList" +#define NID_id_ct_rpkiSignedPrefixList 1320 +#define OBJ_id_ct_rpkiSignedPrefixList OBJ_id_smime_ct,51L + +#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_aa_ets_attrCertificateRefs "id-aa-ets-attrCertificateRefs" +#define NID_id_aa_ets_attrCertificateRefs 1261 +#define OBJ_id_aa_ets_attrCertificateRefs OBJ_id_smime_aa,44L + +#define SN_id_aa_ets_attrRevocationRefs "id-aa-ets-attrRevocationRefs" +#define NID_id_aa_ets_attrRevocationRefs 1262 +#define OBJ_id_aa_ets_attrRevocationRefs OBJ_id_smime_aa,45L + +#define SN_id_smime_aa_signingCertificateV2 "id-smime-aa-signingCertificateV2" +#define NID_id_smime_aa_signingCertificateV2 1086 +#define OBJ_id_smime_aa_signingCertificateV2 OBJ_id_smime_aa,47L + +#define SN_id_aa_ets_archiveTimestampV2 "id-aa-ets-archiveTimestampV2" +#define NID_id_aa_ets_archiveTimestampV2 1280 +#define OBJ_id_aa_ets_archiveTimestampV2 OBJ_id_smime_aa,48L + +#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 OBJ_ms_corp 1L,3L,6L,1L,4L,1L,311L + +#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 OBJ_ms_corp,17L,1L + +#define SN_LocalKeySet "LocalKeySet" +#define LN_LocalKeySet "Microsoft Local Key set" +#define NID_LocalKeySet 856 +#define OBJ_LocalKeySet OBJ_ms_corp,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 SN_id_aa_CMSAlgorithmProtection "id-aa-CMSAlgorithmProtection" +#define NID_id_aa_CMSAlgorithmProtection 1263 +#define OBJ_id_aa_CMSAlgorithmProtection OBJ_pkcs9,52L + +#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 SN_sm2 "SM2" +#define LN_sm2 "sm2" +#define NID_sm2 1172 +#define OBJ_sm2 OBJ_sm_scheme,301L + +#define SN_sm3 "SM3" +#define LN_sm3 "sm3" +#define NID_sm3 1143 +#define OBJ_sm3 OBJ_sm_scheme,401L + +#define SN_sm3WithRSAEncryption "RSA-SM3" +#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption" +#define NID_sm3WithRSAEncryption 1144 +#define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L + +#define SN_SM2_with_SM3 "SM2-SM3" +#define LN_SM2_with_SM3 "SM2-with-SM3" +#define NID_SM2_with_SM3 1204 +#define OBJ_SM2_with_SM3 OBJ_sm_scheme,501L + +#define LN_hmacWithSM3 "hmacWithSM3" +#define NID_hmacWithSM3 1281 +#define OBJ_hmacWithSM3 OBJ_sm3,3L,1L + +#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 LN_hmacWithSHA512_224 "hmacWithSHA512-224" +#define NID_hmacWithSHA512_224 1193 +#define OBJ_hmacWithSHA512_224 OBJ_rsadsi,2L,12L + +#define LN_hmacWithSHA512_256 "hmacWithSHA512-256" +#define NID_hmacWithSHA512_256 1194 +#define OBJ_hmacWithSHA512_256 OBJ_rsadsi,2L,13L + +#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 OBJ_ms_corp,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 OBJ_ms_corp,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 OBJ_ms_corp,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 OBJ_ms_corp,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 OBJ_ms_corp,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 OBJ_ms_corp,10L,3L,4L + +#define SN_ms_smartcard_login "msSmartcardLogin" +#define LN_ms_smartcard_login "Microsoft Smartcard Login" +#define NID_ms_smartcard_login 648 +#define OBJ_ms_smartcard_login OBJ_ms_corp,20L,2L,2L + +#define SN_ms_upn "msUPN" +#define LN_ms_upn "Microsoft User Principal Name" +#define NID_ms_upn 649 +#define OBJ_ms_upn OBJ_ms_corp,20L,2L,3L + +#define SN_ms_ntds_sec_ext "ms-ntds-sec-ext" +#define LN_ms_ntds_sec_ext "Microsoft NTDS CA Extension" +#define NID_ms_ntds_sec_ext 1292 +#define OBJ_ms_ntds_sec_ext OBJ_ms_corp,25L,2L + +#define SN_ms_ntds_obj_sid "ms-ntds-obj-sid" +#define LN_ms_ntds_obj_sid "Microsoft NTDS AD objectSid" +#define NID_ms_ntds_obj_sid 1291 +#define OBJ_ms_ntds_obj_sid OBJ_ms_corp,25L,2L,1L + +#define SN_ms_cert_templ "ms-cert-templ" +#define LN_ms_cert_templ "Microsoft certificate template" +#define NID_ms_cert_templ 1293 +#define OBJ_ms_cert_templ OBJ_ms_corp,21L,7L + +#define SN_ms_app_policies "ms-app-policies" +#define LN_ms_app_policies "Microsoft Application Policies Extension" +#define NID_ms_app_policies 1294 +#define OBJ_ms_app_policies OBJ_ms_corp,21L,10L + +#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_cp "id-cp" +#define NID_id_cp 1238 +#define OBJ_id_cp OBJ_id_pkix,14L + +#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_id_mod_cmp2000_02 "id-mod-cmp2000-02" +#define NID_id_mod_cmp2000_02 1251 +#define OBJ_id_mod_cmp2000_02 OBJ_id_pkix_mod,50L + +#define SN_id_mod_cmp2021_88 "id-mod-cmp2021-88" +#define NID_id_mod_cmp2021_88 1252 +#define OBJ_id_mod_cmp2021_88 OBJ_id_pkix_mod,99L + +#define SN_id_mod_cmp2021_02 "id-mod-cmp2021-02" +#define NID_id_mod_cmp2021_02 1253 +#define OBJ_id_mod_cmp2021_02 OBJ_id_pkix_mod,100L + +#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_auditIdentity "ac-auditIdentity" +#define LN_ac_auditIdentity "X509v3 Audit Identity" +#define NID_ac_auditIdentity 287 +#define OBJ_ac_auditIdentity OBJ_id_pe,4L + +#define NID_ac_auditEntity 1323 +#define OBJ_ac_auditEntity OBJ_ac_auditIdentity + +#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_sbgp_ipAddrBlockv2 "sbgp-ipAddrBlockv2" +#define NID_sbgp_ipAddrBlockv2 1239 +#define OBJ_sbgp_ipAddrBlockv2 OBJ_id_pe,28L + +#define SN_sbgp_autonomousSysNumv2 "sbgp-autonomousSysNumv2" +#define NID_sbgp_autonomousSysNumv2 1240 +#define OBJ_sbgp_autonomousSysNumv2 OBJ_id_pe,29L + +#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_cmcCA "cmcCA" +#define LN_cmcCA "CMC Certificate Authority" +#define NID_cmcCA 1131 +#define OBJ_cmcCA OBJ_id_kp,27L + +#define SN_cmcRA "cmcRA" +#define LN_cmcRA "CMC Registration Authority" +#define NID_cmcRA 1132 +#define OBJ_cmcRA OBJ_id_kp,28L + +#define SN_cmcArchive "cmcArchive" +#define LN_cmcArchive "CMC Archive Server" +#define NID_cmcArchive 1219 +#define OBJ_cmcArchive OBJ_id_kp,29L + +#define SN_id_kp_bgpsec_router "id-kp-bgpsec-router" +#define LN_id_kp_bgpsec_router "BGPsec Router" +#define NID_id_kp_bgpsec_router 1220 +#define OBJ_id_kp_bgpsec_router OBJ_id_kp,30L + +#define SN_id_kp_BrandIndicatorforMessageIdentification "id-kp-BrandIndicatorforMessageIdentification" +#define LN_id_kp_BrandIndicatorforMessageIdentification "Brand Indicator for Message Identification" +#define NID_id_kp_BrandIndicatorforMessageIdentification 1221 +#define OBJ_id_kp_BrandIndicatorforMessageIdentification OBJ_id_kp,31L + +#define SN_cmKGA "cmKGA" +#define LN_cmKGA "Certificate Management Key Generation Authority" +#define NID_cmKGA 1222 +#define OBJ_cmKGA OBJ_id_kp,32L + +#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_it_caCerts "id-it-caCerts" +#define NID_id_it_caCerts 1223 +#define OBJ_id_it_caCerts OBJ_id_it,17L + +#define SN_id_it_rootCaKeyUpdate "id-it-rootCaKeyUpdate" +#define NID_id_it_rootCaKeyUpdate 1224 +#define OBJ_id_it_rootCaKeyUpdate OBJ_id_it,18L + +#define SN_id_it_certReqTemplate "id-it-certReqTemplate" +#define NID_id_it_certReqTemplate 1225 +#define OBJ_id_it_certReqTemplate OBJ_id_it,19L + +#define SN_id_it_rootCaCert "id-it-rootCaCert" +#define NID_id_it_rootCaCert 1254 +#define OBJ_id_it_rootCaCert OBJ_id_it,20L + +#define SN_id_it_certProfile "id-it-certProfile" +#define NID_id_it_certProfile 1255 +#define OBJ_id_it_certProfile OBJ_id_it,21L + +#define SN_id_it_crlStatusList "id-it-crlStatusList" +#define NID_id_it_crlStatusList 1256 +#define OBJ_id_it_crlStatusList OBJ_id_it,22L + +#define SN_id_it_crls "id-it-crls" +#define NID_id_it_crls 1257 +#define OBJ_id_it_crls OBJ_id_it,23L + +#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_regCtrl_altCertTemplate "id-regCtrl-altCertTemplate" +#define NID_id_regCtrl_altCertTemplate 1258 +#define OBJ_id_regCtrl_altCertTemplate OBJ_id_regCtrl,7L + +#define SN_id_regCtrl_algId "id-regCtrl-algId" +#define NID_id_regCtrl_algId 1259 +#define OBJ_id_regCtrl_algId OBJ_id_regCtrl,11L + +#define SN_id_regCtrl_rsaKeyLen "id-regCtrl-rsaKeyLen" +#define NID_id_regCtrl_rsaKeyLen 1260 +#define OBJ_id_regCtrl_rsaKeyLen OBJ_id_regCtrl,12L + +#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_on_hardwareModuleName "id-on-hardwareModuleName" +#define LN_id_on_hardwareModuleName "Hardware Module Name" +#define NID_id_on_hardwareModuleName 1321 +#define OBJ_id_on_hardwareModuleName OBJ_id_on,4L + +#define SN_XmppAddr "id-on-xmppAddr" +#define LN_XmppAddr "XmppAddr" +#define NID_XmppAddr 1209 +#define OBJ_XmppAddr OBJ_id_on,5L + +#define SN_SRVName "id-on-dnsSRV" +#define LN_SRVName "SRVName" +#define NID_SRVName 1210 +#define OBJ_SRVName OBJ_id_on,7L + +#define SN_NAIRealm "id-on-NAIRealm" +#define LN_NAIRealm "NAIRealm" +#define NID_NAIRealm 1211 +#define OBJ_NAIRealm OBJ_id_on,8L + +#define SN_id_on_SmtpUTF8Mailbox "id-on-SmtpUTF8Mailbox" +#define LN_id_on_SmtpUTF8Mailbox "Smtp UTF8 Mailbox" +#define NID_id_on_SmtpUTF8Mailbox 1208 +#define OBJ_id_on_SmtpUTF8Mailbox OBJ_id_on,9L + +#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_ipAddr_asNumber "ipAddr-asNumber" +#define NID_ipAddr_asNumber 1241 +#define OBJ_ipAddr_asNumber OBJ_id_cp,2L + +#define SN_ipAddr_asNumberv2 "ipAddr-asNumberv2" +#define NID_ipAddr_asNumberv2 1242 +#define OBJ_ipAddr_asNumberv2 OBJ_id_cp,3L + +#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 SN_rpkiManifest "rpkiManifest" +#define LN_rpkiManifest "RPKI Manifest" +#define NID_rpkiManifest 1243 +#define OBJ_rpkiManifest OBJ_id_ad,10L + +#define SN_signedObject "signedObject" +#define LN_signedObject "Signed Object" +#define NID_signedObject 1244 +#define OBJ_signedObject OBJ_id_ad,11L + +#define SN_rpkiNotify "rpkiNotify" +#define LN_rpkiNotify "RPKI Notify" +#define NID_rpkiNotify 1245 +#define OBJ_rpkiNotify OBJ_id_ad,13L + +#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_blake2bmac "BLAKE2BMAC" +#define LN_blake2bmac "blake2bmac" +#define NID_blake2bmac 1201 +#define OBJ_blake2bmac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L + +#define SN_blake2smac "BLAKE2SMAC" +#define LN_blake2smac "blake2smac" +#define NID_blake2smac 1202 +#define OBJ_blake2smac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L + +#define SN_blake2b512 "BLAKE2b512" +#define LN_blake2b512 "blake2b512" +#define NID_blake2b512 1056 +#define OBJ_blake2b512 OBJ_blake2bmac,16L + +#define SN_blake2s256 "BLAKE2s256" +#define LN_blake2s256 "blake2s256" +#define NID_blake2s256 1057 +#define OBJ_blake2s256 OBJ_blake2smac,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 LN_organizationIdentifier "organizationIdentifier" +#define NID_organizationIdentifier 1089 +#define OBJ_organizationIdentifier OBJ_X509,97L + +#define SN_countryCode3c "c3" +#define LN_countryCode3c "countryCode3c" +#define NID_countryCode3c 1090 +#define OBJ_countryCode3c OBJ_X509,98L + +#define SN_countryCode3n "n3" +#define LN_countryCode3n "countryCode3n" +#define NID_countryCode3n 1091 +#define OBJ_countryCode3n OBJ_X509,99L + +#define LN_dnsName "dnsName" +#define NID_dnsName 1092 +#define OBJ_dnsName OBJ_X509,100L + +#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_authority_attribute_identifier "authorityAttributeIdentifier" +#define LN_authority_attribute_identifier "X509v3 Authority Attribute Identifier" +#define NID_authority_attribute_identifier 1295 +#define OBJ_authority_attribute_identifier OBJ_id_ce,38L + +#define SN_role_spec_cert_identifier "roleSpecCertIdentifier" +#define LN_role_spec_cert_identifier "X509v3 Role Specification Certificate Identifier" +#define NID_role_spec_cert_identifier 1296 +#define OBJ_role_spec_cert_identifier OBJ_id_ce,39L + +#define SN_basic_att_constraints "basicAttConstraints" +#define LN_basic_att_constraints "X509v3 Basic Attribute Certificate Constraints" +#define NID_basic_att_constraints 1297 +#define OBJ_basic_att_constraints OBJ_id_ce,41L + +#define SN_delegated_name_constraints "delegatedNameConstraints" +#define LN_delegated_name_constraints "X509v3 Delegated Name Constraints" +#define NID_delegated_name_constraints 1298 +#define OBJ_delegated_name_constraints OBJ_id_ce,42L + +#define SN_time_specification "timeSpecification" +#define LN_time_specification "X509v3 Time Specification" +#define NID_time_specification 1299 +#define OBJ_time_specification OBJ_id_ce,43L + +#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_attribute_descriptor "attributeDescriptor" +#define LN_attribute_descriptor "X509v3 Attribute Descriptor" +#define NID_attribute_descriptor 1300 +#define OBJ_attribute_descriptor OBJ_id_ce,48L + +#define SN_user_notice "userNotice" +#define LN_user_notice "X509v3 User Notice" +#define NID_user_notice 1301 +#define OBJ_user_notice OBJ_id_ce,49L + +#define SN_soa_identifier "sOAIdentifier" +#define LN_soa_identifier "X509v3 Source of Authority Identifier" +#define NID_soa_identifier 1302 +#define OBJ_soa_identifier OBJ_id_ce,50L + +#define SN_acceptable_cert_policies "acceptableCertPolicies" +#define LN_acceptable_cert_policies "X509v3 Acceptable Certification Policies" +#define NID_acceptable_cert_policies 1303 +#define OBJ_acceptable_cert_policies OBJ_id_ce,52L + +#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_acceptable_privilege_policies "acceptablePrivPolicies" +#define LN_acceptable_privilege_policies "X509v3 Acceptable Privilege Policies" +#define NID_acceptable_privilege_policies 1304 +#define OBJ_acceptable_privilege_policies OBJ_id_ce,57L + +#define SN_indirect_issuer "indirectIssuer" +#define LN_indirect_issuer "X509v3 Indirect Issuer" +#define NID_indirect_issuer 1305 +#define OBJ_indirect_issuer OBJ_id_ce,61L + +#define SN_no_assertion "noAssertion" +#define LN_no_assertion "X509v3 No Assertion" +#define NID_no_assertion 1306 +#define OBJ_no_assertion OBJ_id_ce,62L + +#define SN_id_aa_issuing_distribution_point "aAissuingDistributionPoint" +#define LN_id_aa_issuing_distribution_point "X509v3 Attribute Authority Issuing Distribution Point" +#define NID_id_aa_issuing_distribution_point 1307 +#define OBJ_id_aa_issuing_distribution_point OBJ_id_ce,63L + +#define SN_issued_on_behalf_of "issuedOnBehalfOf" +#define LN_issued_on_behalf_of "X509v3 Issued On Behalf Of" +#define NID_issued_on_behalf_of 1308 +#define OBJ_issued_on_behalf_of OBJ_id_ce,64L + +#define SN_single_use "singleUse" +#define LN_single_use "X509v3 Single Use" +#define NID_single_use 1309 +#define OBJ_single_use OBJ_id_ce,65L + +#define SN_group_ac "groupAC" +#define LN_group_ac "X509v3 Group Attribute Certificate" +#define NID_group_ac 1310 +#define OBJ_group_ac OBJ_id_ce,66L + +#define SN_allowed_attribute_assignments "allowedAttributeAssignments" +#define LN_allowed_attribute_assignments "X509v3 Allowed Attribute Assignments" +#define NID_allowed_attribute_assignments 1311 +#define OBJ_allowed_attribute_assignments OBJ_id_ce,67L + +#define SN_attribute_mappings "attributeMappings" +#define LN_attribute_mappings "X509v3 Attribute Mappings" +#define NID_attribute_mappings 1312 +#define OBJ_attribute_mappings OBJ_id_ce,68L + +#define SN_holder_name_constraints "holderNameConstraints" +#define LN_holder_name_constraints "X509v3 Holder Name Constraints" +#define NID_holder_name_constraints 1313 +#define OBJ_holder_name_constraints OBJ_id_ce,69L + +#define SN_authorization_validation "authorizationValidation" +#define LN_authorization_validation "X509v3 Authorization Validation" +#define NID_authorization_validation 1314 +#define OBJ_authorization_validation OBJ_id_ce,70L + +#define SN_prot_restrict "protRestrict" +#define LN_prot_restrict "X509v3 Protocol Restriction" +#define NID_prot_restrict 1315 +#define OBJ_prot_restrict OBJ_id_ce,71L + +#define SN_subject_alt_public_key_info "subjectAltPublicKeyInfo" +#define LN_subject_alt_public_key_info "X509v3 Subject Alternative Public Key Info" +#define NID_subject_alt_public_key_info 1316 +#define OBJ_subject_alt_public_key_info OBJ_id_ce,72L + +#define SN_alt_signature_algorithm "altSignatureAlgorithm" +#define LN_alt_signature_algorithm "X509v3 Alternative Signature Algorithm" +#define NID_alt_signature_algorithm 1317 +#define OBJ_alt_signature_algorithm OBJ_id_ce,73L + +#define SN_alt_signature_value "altSignatureValue" +#define LN_alt_signature_value "X509v3 Alternative Signature Value" +#define NID_alt_signature_value 1318 +#define OBJ_alt_signature_value OBJ_id_ce,74L + +#define SN_associated_information "associatedInformation" +#define LN_associated_information "X509v3 Associated Information" +#define NID_associated_information 1319 +#define OBJ_associated_information OBJ_id_ce,75L + +#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_id_kp_wisun_fan_device "id-kp-wisun-fan-device" +#define LN_id_kp_wisun_fan_device "Wi-SUN Alliance Field Area Network (FAN)" +#define NID_id_kp_wisun_fan_device 1322 +#define OBJ_id_kp_wisun_fan_device OBJ_Enterprises,45605L,1L + +#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_xts "AES-128-XTS" +#define LN_aes_128_xts "aes-128-xts" +#define NID_aes_128_xts 913 +#define OBJ_aes_128_xts OBJ_ieee_siswg,0L,1L,1L + +#define SN_aes_256_xts "AES-256-XTS" +#define LN_aes_256_xts "aes-256-xts" +#define NID_aes_256_xts 914 +#define OBJ_aes_256_xts OBJ_ieee_siswg,0L,1L,2L + +#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_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 SN_sha512_224 "SHA512-224" +#define LN_sha512_224 "sha512-224" +#define NID_sha512_224 1094 +#define OBJ_sha512_224 OBJ_nist_hashalgs,5L + +#define SN_sha512_256 "SHA512-256" +#define LN_sha512_256 "sha512-256" +#define NID_sha512_256 1095 +#define OBJ_sha512_256 OBJ_nist_hashalgs,6L + +#define SN_sha3_224 "SHA3-224" +#define LN_sha3_224 "sha3-224" +#define NID_sha3_224 1096 +#define OBJ_sha3_224 OBJ_nist_hashalgs,7L + +#define SN_sha3_256 "SHA3-256" +#define LN_sha3_256 "sha3-256" +#define NID_sha3_256 1097 +#define OBJ_sha3_256 OBJ_nist_hashalgs,8L + +#define SN_sha3_384 "SHA3-384" +#define LN_sha3_384 "sha3-384" +#define NID_sha3_384 1098 +#define OBJ_sha3_384 OBJ_nist_hashalgs,9L + +#define SN_sha3_512 "SHA3-512" +#define LN_sha3_512 "sha3-512" +#define NID_sha3_512 1099 +#define OBJ_sha3_512 OBJ_nist_hashalgs,10L + +#define SN_shake128 "SHAKE128" +#define LN_shake128 "shake128" +#define NID_shake128 1100 +#define OBJ_shake128 OBJ_nist_hashalgs,11L + +#define SN_shake256 "SHAKE256" +#define LN_shake256 "shake256" +#define NID_shake256 1101 +#define OBJ_shake256 OBJ_nist_hashalgs,12L + +#define SN_hmac_sha3_224 "id-hmacWithSHA3-224" +#define LN_hmac_sha3_224 "hmac-sha3-224" +#define NID_hmac_sha3_224 1102 +#define OBJ_hmac_sha3_224 OBJ_nist_hashalgs,13L + +#define SN_hmac_sha3_256 "id-hmacWithSHA3-256" +#define LN_hmac_sha3_256 "hmac-sha3-256" +#define NID_hmac_sha3_256 1103 +#define OBJ_hmac_sha3_256 OBJ_nist_hashalgs,14L + +#define SN_hmac_sha3_384 "id-hmacWithSHA3-384" +#define LN_hmac_sha3_384 "hmac-sha3-384" +#define NID_hmac_sha3_384 1104 +#define OBJ_hmac_sha3_384 OBJ_nist_hashalgs,15L + +#define SN_hmac_sha3_512 "id-hmacWithSHA3-512" +#define LN_hmac_sha3_512 "hmac-sha3-512" +#define NID_hmac_sha3_512 1105 +#define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L + +#define SN_kmac128 "KMAC128" +#define LN_kmac128 "kmac128" +#define NID_kmac128 1196 +#define OBJ_kmac128 OBJ_nist_hashalgs,19L + +#define SN_kmac256 "KMAC256" +#define LN_kmac256 "kmac256" +#define NID_kmac256 1197 +#define OBJ_kmac256 OBJ_nist_hashalgs,20L + +#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 OBJ_sigAlgs OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA384 "id-dsa-with-sha384" +#define LN_dsa_with_SHA384 "dsa_with_SHA384" +#define NID_dsa_with_SHA384 1106 +#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L + +#define SN_dsa_with_SHA512 "id-dsa-with-sha512" +#define LN_dsa_with_SHA512 "dsa_with_SHA512" +#define NID_dsa_with_SHA512 1107 +#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L + +#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224" +#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224" +#define NID_dsa_with_SHA3_224 1108 +#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L + +#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256" +#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256" +#define NID_dsa_with_SHA3_256 1109 +#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L + +#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384" +#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384" +#define NID_dsa_with_SHA3_384 1110 +#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L + +#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512" +#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512" +#define NID_dsa_with_SHA3_512 1111 +#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L + +#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224" +#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224" +#define NID_ecdsa_with_SHA3_224 1112 +#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L + +#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256" +#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256" +#define NID_ecdsa_with_SHA3_256 1113 +#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L + +#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384" +#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384" +#define NID_ecdsa_with_SHA3_384 1114 +#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L + +#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512" +#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512" +#define NID_ecdsa_with_SHA3_512 1115 +#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L + +#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224" +#define LN_RSA_SHA3_224 "RSA-SHA3-224" +#define NID_RSA_SHA3_224 1116 +#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L + +#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256" +#define LN_RSA_SHA3_256 "RSA-SHA3-256" +#define NID_RSA_SHA3_256 1117 +#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L + +#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384" +#define LN_RSA_SHA3_384 "RSA-SHA3-384" +#define NID_RSA_SHA3_384 1118 +#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L + +#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512" +#define LN_RSA_SHA3_512 "RSA-SHA3-512" +#define NID_RSA_SHA3_512 1119 +#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L + +#define SN_ML_DSA_44 "id-ml-dsa-44" +#define LN_ML_DSA_44 "ML-DSA-44" +#define NID_ML_DSA_44 1457 +#define OBJ_ML_DSA_44 OBJ_sigAlgs,17L + +#define SN_ML_DSA_65 "id-ml-dsa-65" +#define LN_ML_DSA_65 "ML-DSA-65" +#define NID_ML_DSA_65 1458 +#define OBJ_ML_DSA_65 OBJ_sigAlgs,18L + +#define SN_ML_DSA_87 "id-ml-dsa-87" +#define LN_ML_DSA_87 "ML-DSA-87" +#define NID_ML_DSA_87 1459 +#define OBJ_ML_DSA_87 OBJ_sigAlgs,19L + +#define SN_SLH_DSA_SHA2_128s "id-slh-dsa-sha2-128s" +#define LN_SLH_DSA_SHA2_128s "SLH-DSA-SHA2-128s" +#define NID_SLH_DSA_SHA2_128s 1460 +#define OBJ_SLH_DSA_SHA2_128s OBJ_sigAlgs,20L + +#define SN_SLH_DSA_SHA2_128f "id-slh-dsa-sha2-128f" +#define LN_SLH_DSA_SHA2_128f "SLH-DSA-SHA2-128f" +#define NID_SLH_DSA_SHA2_128f 1461 +#define OBJ_SLH_DSA_SHA2_128f OBJ_sigAlgs,21L + +#define SN_SLH_DSA_SHA2_192s "id-slh-dsa-sha2-192s" +#define LN_SLH_DSA_SHA2_192s "SLH-DSA-SHA2-192s" +#define NID_SLH_DSA_SHA2_192s 1462 +#define OBJ_SLH_DSA_SHA2_192s OBJ_sigAlgs,22L + +#define SN_SLH_DSA_SHA2_192f "id-slh-dsa-sha2-192f" +#define LN_SLH_DSA_SHA2_192f "SLH-DSA-SHA2-192f" +#define NID_SLH_DSA_SHA2_192f 1463 +#define OBJ_SLH_DSA_SHA2_192f OBJ_sigAlgs,23L + +#define SN_SLH_DSA_SHA2_256s "id-slh-dsa-sha2-256s" +#define LN_SLH_DSA_SHA2_256s "SLH-DSA-SHA2-256s" +#define NID_SLH_DSA_SHA2_256s 1464 +#define OBJ_SLH_DSA_SHA2_256s OBJ_sigAlgs,24L + +#define SN_SLH_DSA_SHA2_256f "id-slh-dsa-sha2-256f" +#define LN_SLH_DSA_SHA2_256f "SLH-DSA-SHA2-256f" +#define NID_SLH_DSA_SHA2_256f 1465 +#define OBJ_SLH_DSA_SHA2_256f OBJ_sigAlgs,25L + +#define SN_SLH_DSA_SHAKE_128s "id-slh-dsa-shake-128s" +#define LN_SLH_DSA_SHAKE_128s "SLH-DSA-SHAKE-128s" +#define NID_SLH_DSA_SHAKE_128s 1466 +#define OBJ_SLH_DSA_SHAKE_128s OBJ_sigAlgs,26L + +#define SN_SLH_DSA_SHAKE_128f "id-slh-dsa-shake-128f" +#define LN_SLH_DSA_SHAKE_128f "SLH-DSA-SHAKE-128f" +#define NID_SLH_DSA_SHAKE_128f 1467 +#define OBJ_SLH_DSA_SHAKE_128f OBJ_sigAlgs,27L + +#define SN_SLH_DSA_SHAKE_192s "id-slh-dsa-shake-192s" +#define LN_SLH_DSA_SHAKE_192s "SLH-DSA-SHAKE-192s" +#define NID_SLH_DSA_SHAKE_192s 1468 +#define OBJ_SLH_DSA_SHAKE_192s OBJ_sigAlgs,28L + +#define SN_SLH_DSA_SHAKE_192f "id-slh-dsa-shake-192f" +#define LN_SLH_DSA_SHAKE_192f "SLH-DSA-SHAKE-192f" +#define NID_SLH_DSA_SHAKE_192f 1469 +#define OBJ_SLH_DSA_SHAKE_192f OBJ_sigAlgs,29L + +#define SN_SLH_DSA_SHAKE_256s "id-slh-dsa-shake-256s" +#define LN_SLH_DSA_SHAKE_256s "SLH-DSA-SHAKE-256s" +#define NID_SLH_DSA_SHAKE_256s 1470 +#define OBJ_SLH_DSA_SHAKE_256s OBJ_sigAlgs,30L + +#define SN_SLH_DSA_SHAKE_256f "id-slh-dsa-shake-256f" +#define LN_SLH_DSA_SHAKE_256f "SLH-DSA-SHAKE-256f" +#define NID_SLH_DSA_SHAKE_256f 1471 +#define OBJ_SLH_DSA_SHAKE_256f OBJ_sigAlgs,31L + +#define SN_HASH_ML_DSA_44_WITH_SHA512 "id-hash-ml-dsa-44-with-sha512" +#define LN_HASH_ML_DSA_44_WITH_SHA512 "HASH-ML-DSA-44-WITH-SHA512" +#define NID_HASH_ML_DSA_44_WITH_SHA512 1472 +#define OBJ_HASH_ML_DSA_44_WITH_SHA512 OBJ_sigAlgs,32L + +#define SN_HASH_ML_DSA_65_WITH_SHA512 "id-hash-ml-dsa-65-with-sha512" +#define LN_HASH_ML_DSA_65_WITH_SHA512 "HASH-ML-DSA-65-WITH-SHA512" +#define NID_HASH_ML_DSA_65_WITH_SHA512 1473 +#define OBJ_HASH_ML_DSA_65_WITH_SHA512 OBJ_sigAlgs,33L + +#define SN_HASH_ML_DSA_87_WITH_SHA512 "id-hash-ml-dsa-87-with-sha512" +#define LN_HASH_ML_DSA_87_WITH_SHA512 "HASH-ML-DSA-87-WITH-SHA512" +#define NID_HASH_ML_DSA_87_WITH_SHA512 1474 +#define OBJ_HASH_ML_DSA_87_WITH_SHA512 OBJ_sigAlgs,34L + +#define SN_SLH_DSA_SHA2_128s_WITH_SHA256 "id-hash-slh-dsa-sha2-128s-with-sha256" +#define LN_SLH_DSA_SHA2_128s_WITH_SHA256 "SLH-DSA-SHA2-128s-WITH-SHA256" +#define NID_SLH_DSA_SHA2_128s_WITH_SHA256 1475 +#define OBJ_SLH_DSA_SHA2_128s_WITH_SHA256 OBJ_sigAlgs,35L + +#define SN_SLH_DSA_SHA2_128f_WITH_SHA256 "id-hash-slh-dsa-sha2-128f-with-sha256" +#define LN_SLH_DSA_SHA2_128f_WITH_SHA256 "SLH-DSA-SHA2-128f-WITH-SHA256" +#define NID_SLH_DSA_SHA2_128f_WITH_SHA256 1476 +#define OBJ_SLH_DSA_SHA2_128f_WITH_SHA256 OBJ_sigAlgs,36L + +#define SN_SLH_DSA_SHA2_192s_WITH_SHA512 "id-hash-slh-dsa-sha2-192s-with-sha512" +#define LN_SLH_DSA_SHA2_192s_WITH_SHA512 "SLH-DSA-SHA2-192s-WITH-SHA512" +#define NID_SLH_DSA_SHA2_192s_WITH_SHA512 1477 +#define OBJ_SLH_DSA_SHA2_192s_WITH_SHA512 OBJ_sigAlgs,37L + +#define SN_SLH_DSA_SHA2_192f_WITH_SHA512 "id-hash-slh-dsa-sha2-192f-with-sha512" +#define LN_SLH_DSA_SHA2_192f_WITH_SHA512 "SLH-DSA-SHA2-192f-WITH-SHA512" +#define NID_SLH_DSA_SHA2_192f_WITH_SHA512 1478 +#define OBJ_SLH_DSA_SHA2_192f_WITH_SHA512 OBJ_sigAlgs,38L + +#define SN_SLH_DSA_SHA2_256s_WITH_SHA512 "id-hash-slh-dsa-sha2-256s-with-sha512" +#define LN_SLH_DSA_SHA2_256s_WITH_SHA512 "SLH-DSA-SHA2-256s-WITH-SHA512" +#define NID_SLH_DSA_SHA2_256s_WITH_SHA512 1479 +#define OBJ_SLH_DSA_SHA2_256s_WITH_SHA512 OBJ_sigAlgs,39L + +#define SN_SLH_DSA_SHA2_256f_WITH_SHA512 "id-hash-slh-dsa-sha2-256f-with-sha512" +#define LN_SLH_DSA_SHA2_256f_WITH_SHA512 "SLH-DSA-SHA2-256f-WITH-SHA512" +#define NID_SLH_DSA_SHA2_256f_WITH_SHA512 1480 +#define OBJ_SLH_DSA_SHA2_256f_WITH_SHA512 OBJ_sigAlgs,40L + +#define SN_SLH_DSA_SHAKE_128s_WITH_SHAKE128 "id-hash-slh-dsa-shake-128s-with-shake128" +#define LN_SLH_DSA_SHAKE_128s_WITH_SHAKE128 "SLH-DSA-SHAKE-128s-WITH-SHAKE128" +#define NID_SLH_DSA_SHAKE_128s_WITH_SHAKE128 1481 +#define OBJ_SLH_DSA_SHAKE_128s_WITH_SHAKE128 OBJ_sigAlgs,41L + +#define SN_SLH_DSA_SHAKE_128f_WITH_SHAKE128 "id-hash-slh-dsa-shake-128f-with-shake128" +#define LN_SLH_DSA_SHAKE_128f_WITH_SHAKE128 "SLH-DSA-SHAKE-128f-WITH-SHAKE128" +#define NID_SLH_DSA_SHAKE_128f_WITH_SHAKE128 1482 +#define OBJ_SLH_DSA_SHAKE_128f_WITH_SHAKE128 OBJ_sigAlgs,42L + +#define SN_SLH_DSA_SHAKE_192s_WITH_SHAKE256 "id-hash-slh-dsa-shake-192s-with-shake256" +#define LN_SLH_DSA_SHAKE_192s_WITH_SHAKE256 "SLH-DSA-SHAKE-192s-WITH-SHAKE256" +#define NID_SLH_DSA_SHAKE_192s_WITH_SHAKE256 1483 +#define OBJ_SLH_DSA_SHAKE_192s_WITH_SHAKE256 OBJ_sigAlgs,43L + +#define SN_SLH_DSA_SHAKE_192f_WITH_SHAKE256 "id-hash-slh-dsa-shake-192f-with-shake256" +#define LN_SLH_DSA_SHAKE_192f_WITH_SHAKE256 "SLH-DSA-SHAKE-192f-WITH-SHAKE256" +#define NID_SLH_DSA_SHAKE_192f_WITH_SHAKE256 1484 +#define OBJ_SLH_DSA_SHAKE_192f_WITH_SHAKE256 OBJ_sigAlgs,44L + +#define SN_SLH_DSA_SHAKE_256s_WITH_SHAKE256 "id-hash-slh-dsa-shake-256s-with-shake256" +#define LN_SLH_DSA_SHAKE_256s_WITH_SHAKE256 "SLH-DSA-SHAKE-256s-WITH-SHAKE256" +#define NID_SLH_DSA_SHAKE_256s_WITH_SHAKE256 1485 +#define OBJ_SLH_DSA_SHAKE_256s_WITH_SHAKE256 OBJ_sigAlgs,45L + +#define SN_SLH_DSA_SHAKE_256f_WITH_SHAKE256 "id-hash-slh-dsa-shake-256f-with-shake256" +#define LN_SLH_DSA_SHAKE_256f_WITH_SHAKE256 "SLH-DSA-SHAKE-256f-WITH-SHAKE256" +#define NID_SLH_DSA_SHAKE_256f_WITH_SHAKE256 1486 +#define OBJ_SLH_DSA_SHAKE_256f_WITH_SHAKE256 OBJ_sigAlgs,46L + +#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_itu_t_identified_organization "itu-t-identified-organization" +#define NID_itu_t_identified_organization 1264 +#define OBJ_itu_t_identified_organization OBJ_itu_t,4L + +#define SN_etsi "etsi" +#define NID_etsi 1265 +#define OBJ_etsi OBJ_itu_t_identified_organization,0L + +#define SN_electronic_signature_standard "electronic-signature-standard" +#define NID_electronic_signature_standard 1266 +#define OBJ_electronic_signature_standard OBJ_etsi,1733L + +#define SN_ess_attributes "ess-attributes" +#define NID_ess_attributes 1267 +#define OBJ_ess_attributes OBJ_electronic_signature_standard,2L + +#define SN_id_aa_ets_mimeType "id-aa-ets-mimeType" +#define NID_id_aa_ets_mimeType 1268 +#define OBJ_id_aa_ets_mimeType OBJ_ess_attributes,1L + +#define SN_id_aa_ets_longTermValidation "id-aa-ets-longTermValidation" +#define NID_id_aa_ets_longTermValidation 1269 +#define OBJ_id_aa_ets_longTermValidation OBJ_ess_attributes,2L + +#define SN_id_aa_ets_SignaturePolicyDocument "id-aa-ets-SignaturePolicyDocument" +#define NID_id_aa_ets_SignaturePolicyDocument 1270 +#define OBJ_id_aa_ets_SignaturePolicyDocument OBJ_ess_attributes,3L + +#define SN_id_aa_ets_archiveTimestampV3 "id-aa-ets-archiveTimestampV3" +#define NID_id_aa_ets_archiveTimestampV3 1271 +#define OBJ_id_aa_ets_archiveTimestampV3 OBJ_ess_attributes,4L + +#define SN_id_aa_ATSHashIndex "id-aa-ATSHashIndex" +#define NID_id_aa_ATSHashIndex 1272 +#define OBJ_id_aa_ATSHashIndex OBJ_ess_attributes,5L + +#define SN_cades "cades" +#define NID_cades 1273 +#define OBJ_cades OBJ_etsi,19122L + +#define SN_cades_attributes "cades-attributes" +#define NID_cades_attributes 1274 +#define OBJ_cades_attributes OBJ_cades,1L + +#define SN_id_aa_ets_signerAttrV2 "id-aa-ets-signerAttrV2" +#define NID_id_aa_ets_signerAttrV2 1275 +#define OBJ_id_aa_ets_signerAttrV2 OBJ_cades_attributes,1L + +#define SN_id_aa_ets_sigPolicyStore "id-aa-ets-sigPolicyStore" +#define NID_id_aa_ets_sigPolicyStore 1276 +#define OBJ_id_aa_ets_sigPolicyStore OBJ_cades_attributes,3L + +#define SN_id_aa_ATSHashIndex_v2 "id-aa-ATSHashIndex-v2" +#define NID_id_aa_ATSHashIndex_v2 1277 +#define OBJ_id_aa_ATSHashIndex_v2 OBJ_cades_attributes,4L + +#define SN_id_aa_ATSHashIndex_v3 "id-aa-ATSHashIndex-v3" +#define NID_id_aa_ATSHashIndex_v3 1278 +#define OBJ_id_aa_ATSHashIndex_v3 OBJ_cades_attributes,5L + +#define SN_signedAssertion "signedAssertion" +#define NID_signedAssertion 1279 +#define OBJ_signedAssertion OBJ_cades_attributes,6L + +#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_cipher_gostr3412_2015_magma "id-tc26-cipher-gostr3412-2015-magma" +#define NID_id_tc26_cipher_gostr3412_2015_magma 1173 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L + +#define SN_magma_ctr_acpkm "magma-ctr-acpkm" +#define NID_magma_ctr_acpkm 1174 +#define OBJ_magma_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L + +#define SN_magma_ctr_acpkm_omac "magma-ctr-acpkm-omac" +#define NID_magma_ctr_acpkm_omac 1175 +#define OBJ_magma_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L + +#define SN_kuznyechik_ctr_acpkm "kuznyechik-ctr-acpkm" +#define NID_kuznyechik_ctr_acpkm 1177 +#define OBJ_kuznyechik_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L + +#define SN_kuznyechik_ctr_acpkm_omac "kuznyechik-ctr-acpkm-omac" +#define NID_kuznyechik_ctr_acpkm_omac 1178 +#define OBJ_kuznyechik_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L + +#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_wrap "id-tc26-wrap" +#define NID_id_tc26_wrap 1179 +#define OBJ_id_tc26_wrap OBJ_id_tc26_algorithms,7L + +#define SN_id_tc26_wrap_gostr3412_2015_magma "id-tc26-wrap-gostr3412-2015-magma" +#define NID_id_tc26_wrap_gostr3412_2015_magma 1180 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L + +#define SN_magma_kexp15 "magma-kexp15" +#define NID_magma_kexp15 1181 +#define OBJ_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L + +#define SN_kuznyechik_kexp15 "kuznyechik-kexp15" +#define NID_kuznyechik_kexp15 1183 +#define OBJ_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L + +#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_256_constants "id-tc26-gost-3410-2012-256-constants" +#define NID_id_tc26_gost_3410_2012_256_constants 1147 +#define OBJ_id_tc26_gost_3410_2012_256_constants OBJ_id_tc26_sign_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetA "id-tc26-gost-3410-2012-256-paramSetA" +#define LN_id_tc26_gost_3410_2012_256_paramSetA "GOST R 34.10-2012 (256 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_256_paramSetA 1148 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetA OBJ_id_tc26_gost_3410_2012_256_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetB "id-tc26-gost-3410-2012-256-paramSetB" +#define LN_id_tc26_gost_3410_2012_256_paramSetB "GOST R 34.10-2012 (256 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_256_paramSetB 1184 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetB OBJ_id_tc26_gost_3410_2012_256_constants,2L + +#define SN_id_tc26_gost_3410_2012_256_paramSetC "id-tc26-gost-3410-2012-256-paramSetC" +#define LN_id_tc26_gost_3410_2012_256_paramSetC "GOST R 34.10-2012 (256 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_256_paramSetC 1185 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetC OBJ_id_tc26_gost_3410_2012_256_constants,3L + +#define SN_id_tc26_gost_3410_2012_256_paramSetD "id-tc26-gost-3410-2012-256-paramSetD" +#define LN_id_tc26_gost_3410_2012_256_paramSetD "GOST R 34.10-2012 (256 bit) ParamSet D" +#define NID_id_tc26_gost_3410_2012_256_paramSetD 1186 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetD OBJ_id_tc26_gost_3410_2012_256_constants,4L + +#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_gost_3410_2012_512_paramSetC "id-tc26-gost-3410-2012-512-paramSetC" +#define LN_id_tc26_gost_3410_2012_512_paramSetC "GOST R 34.10-2012 (512 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_512_paramSetC 1149 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetC OBJ_id_tc26_gost_3410_2012_512_constants,3L + +#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_OGRNIP "OGRNIP" +#define LN_OGRNIP "OGRNIP" +#define NID_OGRNIP 1226 +#define OBJ_OGRNIP OBJ_member_body,643L,100L,5L + +#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_classSignTool "classSignTool" +#define LN_classSignTool "Class of Signing Tool" +#define NID_classSignTool 1227 +#define OBJ_classSignTool OBJ_member_body,643L,100L,113L + +#define SN_classSignToolKC1 "classSignToolKC1" +#define LN_classSignToolKC1 "Class of Signing Tool KC1" +#define NID_classSignToolKC1 1228 +#define OBJ_classSignToolKC1 OBJ_member_body,643L,100L,113L,1L + +#define SN_classSignToolKC2 "classSignToolKC2" +#define LN_classSignToolKC2 "Class of Signing Tool KC2" +#define NID_classSignToolKC2 1229 +#define OBJ_classSignToolKC2 OBJ_member_body,643L,100L,113L,2L + +#define SN_classSignToolKC3 "classSignToolKC3" +#define LN_classSignToolKC3 "Class of Signing Tool KC3" +#define NID_classSignToolKC3 1230 +#define OBJ_classSignToolKC3 OBJ_member_body,643L,100L,113L,3L + +#define SN_classSignToolKB1 "classSignToolKB1" +#define LN_classSignToolKB1 "Class of Signing Tool KB1" +#define NID_classSignToolKB1 1231 +#define OBJ_classSignToolKB1 OBJ_member_body,643L,100L,113L,4L + +#define SN_classSignToolKB2 "classSignToolKB2" +#define LN_classSignToolKB2 "Class of Signing Tool KB2" +#define NID_classSignToolKB2 1232 +#define OBJ_classSignToolKB2 OBJ_member_body,643L,100L,113L,5L + +#define SN_classSignToolKA1 "classSignToolKA1" +#define LN_classSignToolKA1 "Class of Signing Tool KA1" +#define NID_classSignToolKA1 1233 +#define OBJ_classSignToolKA1 OBJ_member_body,643L,100L,113L,6L + +#define SN_kuznyechik_ecb "kuznyechik-ecb" +#define NID_kuznyechik_ecb 1012 + +#define SN_kuznyechik_ctr "kuznyechik-ctr" +#define NID_kuznyechik_ctr 1013 + +#define SN_kuznyechik_ofb "kuznyechik-ofb" +#define NID_kuznyechik_ofb 1014 + +#define SN_kuznyechik_cbc "kuznyechik-cbc" +#define NID_kuznyechik_cbc 1015 + +#define SN_kuznyechik_cfb "kuznyechik-cfb" +#define NID_kuznyechik_cfb 1016 + +#define SN_kuznyechik_mac "kuznyechik-mac" +#define NID_kuznyechik_mac 1017 + +#define SN_magma_ecb "magma-ecb" +#define NID_magma_ecb 1187 + +#define SN_magma_ctr "magma-ctr" +#define NID_magma_ctr 1188 + +#define SN_magma_ofb "magma-ofb" +#define NID_magma_ofb 1189 + +#define SN_magma_cbc "magma-cbc" +#define NID_magma_cbc 1190 + +#define SN_magma_cfb "magma-cfb" +#define NID_magma_cfb 1191 + +#define SN_magma_mac "magma-mac" +#define NID_magma_mac 1192 + +#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 OBJ_aria 1L,2L,410L,200046L,1L,1L + +#define SN_aria_128_ecb "ARIA-128-ECB" +#define LN_aria_128_ecb "aria-128-ecb" +#define NID_aria_128_ecb 1065 +#define OBJ_aria_128_ecb OBJ_aria,1L + +#define SN_aria_128_cbc "ARIA-128-CBC" +#define LN_aria_128_cbc "aria-128-cbc" +#define NID_aria_128_cbc 1066 +#define OBJ_aria_128_cbc OBJ_aria,2L + +#define SN_aria_128_cfb128 "ARIA-128-CFB" +#define LN_aria_128_cfb128 "aria-128-cfb" +#define NID_aria_128_cfb128 1067 +#define OBJ_aria_128_cfb128 OBJ_aria,3L + +#define SN_aria_128_ofb128 "ARIA-128-OFB" +#define LN_aria_128_ofb128 "aria-128-ofb" +#define NID_aria_128_ofb128 1068 +#define OBJ_aria_128_ofb128 OBJ_aria,4L + +#define SN_aria_128_ctr "ARIA-128-CTR" +#define LN_aria_128_ctr "aria-128-ctr" +#define NID_aria_128_ctr 1069 +#define OBJ_aria_128_ctr OBJ_aria,5L + +#define SN_aria_192_ecb "ARIA-192-ECB" +#define LN_aria_192_ecb "aria-192-ecb" +#define NID_aria_192_ecb 1070 +#define OBJ_aria_192_ecb OBJ_aria,6L + +#define SN_aria_192_cbc "ARIA-192-CBC" +#define LN_aria_192_cbc "aria-192-cbc" +#define NID_aria_192_cbc 1071 +#define OBJ_aria_192_cbc OBJ_aria,7L + +#define SN_aria_192_cfb128 "ARIA-192-CFB" +#define LN_aria_192_cfb128 "aria-192-cfb" +#define NID_aria_192_cfb128 1072 +#define OBJ_aria_192_cfb128 OBJ_aria,8L + +#define SN_aria_192_ofb128 "ARIA-192-OFB" +#define LN_aria_192_ofb128 "aria-192-ofb" +#define NID_aria_192_ofb128 1073 +#define OBJ_aria_192_ofb128 OBJ_aria,9L + +#define SN_aria_192_ctr "ARIA-192-CTR" +#define LN_aria_192_ctr "aria-192-ctr" +#define NID_aria_192_ctr 1074 +#define OBJ_aria_192_ctr OBJ_aria,10L + +#define SN_aria_256_ecb "ARIA-256-ECB" +#define LN_aria_256_ecb "aria-256-ecb" +#define NID_aria_256_ecb 1075 +#define OBJ_aria_256_ecb OBJ_aria,11L + +#define SN_aria_256_cbc "ARIA-256-CBC" +#define LN_aria_256_cbc "aria-256-cbc" +#define NID_aria_256_cbc 1076 +#define OBJ_aria_256_cbc OBJ_aria,12L + +#define SN_aria_256_cfb128 "ARIA-256-CFB" +#define LN_aria_256_cfb128 "aria-256-cfb" +#define NID_aria_256_cfb128 1077 +#define OBJ_aria_256_cfb128 OBJ_aria,13L + +#define SN_aria_256_ofb128 "ARIA-256-OFB" +#define LN_aria_256_ofb128 "aria-256-ofb" +#define NID_aria_256_ofb128 1078 +#define OBJ_aria_256_ofb128 OBJ_aria,14L + +#define SN_aria_256_ctr "ARIA-256-CTR" +#define LN_aria_256_ctr "aria-256-ctr" +#define NID_aria_256_ctr 1079 +#define OBJ_aria_256_ctr OBJ_aria,15L + +#define SN_aria_128_cfb1 "ARIA-128-CFB1" +#define LN_aria_128_cfb1 "aria-128-cfb1" +#define NID_aria_128_cfb1 1080 + +#define SN_aria_192_cfb1 "ARIA-192-CFB1" +#define LN_aria_192_cfb1 "aria-192-cfb1" +#define NID_aria_192_cfb1 1081 + +#define SN_aria_256_cfb1 "ARIA-256-CFB1" +#define LN_aria_256_cfb1 "aria-256-cfb1" +#define NID_aria_256_cfb1 1082 + +#define SN_aria_128_cfb8 "ARIA-128-CFB8" +#define LN_aria_128_cfb8 "aria-128-cfb8" +#define NID_aria_128_cfb8 1083 + +#define SN_aria_192_cfb8 "ARIA-192-CFB8" +#define LN_aria_192_cfb8 "aria-192-cfb8" +#define NID_aria_192_cfb8 1084 + +#define SN_aria_256_cfb8 "ARIA-256-CFB8" +#define LN_aria_256_cfb8 "aria-256-cfb8" +#define NID_aria_256_cfb8 1085 + +#define SN_aria_128_ccm "ARIA-128-CCM" +#define LN_aria_128_ccm "aria-128-ccm" +#define NID_aria_128_ccm 1120 +#define OBJ_aria_128_ccm OBJ_aria,37L + +#define SN_aria_192_ccm "ARIA-192-CCM" +#define LN_aria_192_ccm "aria-192-ccm" +#define NID_aria_192_ccm 1121 +#define OBJ_aria_192_ccm OBJ_aria,38L + +#define SN_aria_256_ccm "ARIA-256-CCM" +#define LN_aria_256_ccm "aria-256-ccm" +#define NID_aria_256_ccm 1122 +#define OBJ_aria_256_ccm OBJ_aria,39L + +#define SN_aria_128_gcm "ARIA-128-GCM" +#define LN_aria_128_gcm "aria-128-gcm" +#define NID_aria_128_gcm 1123 +#define OBJ_aria_128_gcm OBJ_aria,34L + +#define SN_aria_192_gcm "ARIA-192-GCM" +#define LN_aria_192_gcm "aria-192-gcm" +#define NID_aria_192_gcm 1124 +#define OBJ_aria_192_gcm OBJ_aria,35L + +#define SN_aria_256_gcm "ARIA-256-GCM" +#define LN_aria_256_gcm "aria-256-gcm" +#define NID_aria_256_gcm 1125 +#define OBJ_aria_256_gcm OBJ_aria,36L + +#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_sm4_ecb "SM4-ECB" +#define LN_sm4_ecb "sm4-ecb" +#define NID_sm4_ecb 1133 +#define OBJ_sm4_ecb OBJ_sm_scheme,104L,1L + +#define SN_sm4_cbc "SM4-CBC" +#define LN_sm4_cbc "sm4-cbc" +#define NID_sm4_cbc 1134 +#define OBJ_sm4_cbc OBJ_sm_scheme,104L,2L + +#define SN_sm4_ofb128 "SM4-OFB" +#define LN_sm4_ofb128 "sm4-ofb" +#define NID_sm4_ofb128 1135 +#define OBJ_sm4_ofb128 OBJ_sm_scheme,104L,3L + +#define SN_sm4_cfb128 "SM4-CFB" +#define LN_sm4_cfb128 "sm4-cfb" +#define NID_sm4_cfb128 1137 +#define OBJ_sm4_cfb128 OBJ_sm_scheme,104L,4L + +#define SN_sm4_cfb1 "SM4-CFB1" +#define LN_sm4_cfb1 "sm4-cfb1" +#define NID_sm4_cfb1 1136 +#define OBJ_sm4_cfb1 OBJ_sm_scheme,104L,5L + +#define SN_sm4_cfb8 "SM4-CFB8" +#define LN_sm4_cfb8 "sm4-cfb8" +#define NID_sm4_cfb8 1138 +#define OBJ_sm4_cfb8 OBJ_sm_scheme,104L,6L + +#define SN_sm4_ctr "SM4-CTR" +#define LN_sm4_ctr "sm4-ctr" +#define NID_sm4_ctr 1139 +#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L + +#define SN_sm4_gcm "SM4-GCM" +#define LN_sm4_gcm "sm4-gcm" +#define NID_sm4_gcm 1248 +#define OBJ_sm4_gcm OBJ_sm_scheme,104L,8L + +#define SN_sm4_ccm "SM4-CCM" +#define LN_sm4_ccm "sm4-ccm" +#define NID_sm4_ccm 1249 +#define OBJ_sm4_ccm OBJ_sm_scheme,104L,9L + +#define SN_sm4_xts "SM4-XTS" +#define LN_sm4_xts "sm4-xts" +#define NID_sm4_xts 1290 +#define OBJ_sm4_xts OBJ_sm_scheme,104L,10L + +#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_brainpoolP256r1tls13 "brainpoolP256r1tls13" +#define NID_brainpoolP256r1tls13 1285 + +#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_brainpoolP384r1tls13 "brainpoolP384r1tls13" +#define NID_brainpoolP384r1tls13 1286 + +#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_brainpoolP512r1tls13 "brainpoolP512r1tls13" +#define NID_brainpoolP512r1tls13 1287 + +#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 OBJ_ms_corp,60L,2L,1L,1L + +#define SN_jurisdictionStateOrProvinceName "jurisdictionST" +#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" +#define NID_jurisdictionStateOrProvinceName 956 +#define OBJ_jurisdictionStateOrProvinceName OBJ_ms_corp,60L,2L,1L,2L + +#define SN_jurisdictionCountryName "jurisdictionC" +#define LN_jurisdictionCountryName "jurisdictionCountryName" +#define NID_jurisdictionCountryName 957 +#define OBJ_jurisdictionCountryName OBJ_ms_corp,60L,2L,1L,3L + +#define SN_id_scrypt "id-scrypt" +#define LN_id_scrypt "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_sshkdf "SSHKDF" +#define LN_sshkdf "sshkdf" +#define NID_sshkdf 1203 + +#define SN_sskdf "SSKDF" +#define LN_sskdf "sskdf" +#define NID_sskdf 1205 + +#define SN_x942kdf "X942KDF" +#define LN_x942kdf "x942kdf" +#define NID_x942kdf 1207 + +#define SN_x963kdf "X963KDF" +#define LN_x963kdf "x963kdf" +#define NID_x963kdf 1206 + +#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_ED25519 "ED25519" +#define NID_ED25519 1087 +#define OBJ_ED25519 1L,3L,101L,112L + +#define SN_ED448 "ED448" +#define NID_ED448 1088 +#define OBJ_ED448 1L,3L,101L,113L + +#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_kx_gost18 "KxGOST18" +#define LN_kx_gost18 "kx-gost18" +#define NID_kx_gost18 1218 + +#define SN_kx_any "KxANY" +#define LN_kx_any "kx-any" +#define NID_kx_any 1063 + +#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 + +#define SN_auth_any "AuthANY" +#define LN_auth_any "auth-any" +#define NID_auth_any 1064 + +#define SN_poly1305 "Poly1305" +#define LN_poly1305 "poly1305" +#define NID_poly1305 1061 + +#define SN_siphash "SipHash" +#define LN_siphash "siphash" +#define NID_siphash 1062 + +#define SN_ffdhe2048 "ffdhe2048" +#define NID_ffdhe2048 1126 + +#define SN_ffdhe3072 "ffdhe3072" +#define NID_ffdhe3072 1127 + +#define SN_ffdhe4096 "ffdhe4096" +#define NID_ffdhe4096 1128 + +#define SN_ffdhe6144 "ffdhe6144" +#define NID_ffdhe6144 1129 + +#define SN_ffdhe8192 "ffdhe8192" +#define NID_ffdhe8192 1130 + +#define SN_modp_1536 "modp_1536" +#define NID_modp_1536 1212 + +#define SN_modp_2048 "modp_2048" +#define NID_modp_2048 1213 + +#define SN_modp_3072 "modp_3072" +#define NID_modp_3072 1214 + +#define SN_modp_4096 "modp_4096" +#define NID_modp_4096 1215 + +#define SN_modp_6144 "modp_6144" +#define NID_modp_6144 1216 + +#define SN_modp_8192 "modp_8192" +#define NID_modp_8192 1217 + +#define SN_ISO_UA "ISO-UA" +#define NID_ISO_UA 1150 +#define OBJ_ISO_UA OBJ_member_body,804L + +#define SN_ua_pki "ua-pki" +#define NID_ua_pki 1151 +#define OBJ_ua_pki OBJ_ISO_UA,2L,1L,1L,1L + +#define SN_dstu28147 "dstu28147" +#define LN_dstu28147 "DSTU Gost 28147-2009" +#define NID_dstu28147 1152 +#define OBJ_dstu28147 OBJ_ua_pki,1L,1L,1L + +#define SN_dstu28147_ofb "dstu28147-ofb" +#define LN_dstu28147_ofb "DSTU Gost 28147-2009 OFB mode" +#define NID_dstu28147_ofb 1153 +#define OBJ_dstu28147_ofb OBJ_dstu28147,2L + +#define SN_dstu28147_cfb "dstu28147-cfb" +#define LN_dstu28147_cfb "DSTU Gost 28147-2009 CFB mode" +#define NID_dstu28147_cfb 1154 +#define OBJ_dstu28147_cfb OBJ_dstu28147,3L + +#define SN_dstu28147_wrap "dstu28147-wrap" +#define LN_dstu28147_wrap "DSTU Gost 28147-2009 key wrap" +#define NID_dstu28147_wrap 1155 +#define OBJ_dstu28147_wrap OBJ_dstu28147,5L + +#define SN_hmacWithDstu34311 "hmacWithDstu34311" +#define LN_hmacWithDstu34311 "HMAC DSTU Gost 34311-95" +#define NID_hmacWithDstu34311 1156 +#define OBJ_hmacWithDstu34311 OBJ_ua_pki,1L,1L,2L + +#define SN_dstu34311 "dstu34311" +#define LN_dstu34311 "DSTU Gost 34311-95" +#define NID_dstu34311 1157 +#define OBJ_dstu34311 OBJ_ua_pki,1L,2L,1L + +#define SN_dstu4145le "dstu4145le" +#define LN_dstu4145le "DSTU 4145-2002 little endian" +#define NID_dstu4145le 1158 +#define OBJ_dstu4145le OBJ_ua_pki,1L,3L,1L,1L + +#define SN_dstu4145be "dstu4145be" +#define LN_dstu4145be "DSTU 4145-2002 big endian" +#define NID_dstu4145be 1159 +#define OBJ_dstu4145be OBJ_dstu4145le,1L,1L + +#define SN_uacurve0 "uacurve0" +#define LN_uacurve0 "DSTU curve 0" +#define NID_uacurve0 1160 +#define OBJ_uacurve0 OBJ_dstu4145le,2L,0L + +#define SN_uacurve1 "uacurve1" +#define LN_uacurve1 "DSTU curve 1" +#define NID_uacurve1 1161 +#define OBJ_uacurve1 OBJ_dstu4145le,2L,1L + +#define SN_uacurve2 "uacurve2" +#define LN_uacurve2 "DSTU curve 2" +#define NID_uacurve2 1162 +#define OBJ_uacurve2 OBJ_dstu4145le,2L,2L + +#define SN_uacurve3 "uacurve3" +#define LN_uacurve3 "DSTU curve 3" +#define NID_uacurve3 1163 +#define OBJ_uacurve3 OBJ_dstu4145le,2L,3L + +#define SN_uacurve4 "uacurve4" +#define LN_uacurve4 "DSTU curve 4" +#define NID_uacurve4 1164 +#define OBJ_uacurve4 OBJ_dstu4145le,2L,4L + +#define SN_uacurve5 "uacurve5" +#define LN_uacurve5 "DSTU curve 5" +#define NID_uacurve5 1165 +#define OBJ_uacurve5 OBJ_dstu4145le,2L,5L + +#define SN_uacurve6 "uacurve6" +#define LN_uacurve6 "DSTU curve 6" +#define NID_uacurve6 1166 +#define OBJ_uacurve6 OBJ_dstu4145le,2L,6L + +#define SN_uacurve7 "uacurve7" +#define LN_uacurve7 "DSTU curve 7" +#define NID_uacurve7 1167 +#define OBJ_uacurve7 OBJ_dstu4145le,2L,7L + +#define SN_uacurve8 "uacurve8" +#define LN_uacurve8 "DSTU curve 8" +#define NID_uacurve8 1168 +#define OBJ_uacurve8 OBJ_dstu4145le,2L,8L + +#define SN_uacurve9 "uacurve9" +#define LN_uacurve9 "DSTU curve 9" +#define NID_uacurve9 1169 +#define OBJ_uacurve9 OBJ_dstu4145le,2L,9L + +#define SN_aes_128_siv "AES-128-SIV" +#define LN_aes_128_siv "aes-128-siv" +#define NID_aes_128_siv 1198 + +#define SN_aes_192_siv "AES-192-SIV" +#define LN_aes_192_siv "aes-192-siv" +#define NID_aes_192_siv 1199 + +#define SN_aes_256_siv "AES-256-SIV" +#define LN_aes_256_siv "aes-256-siv" +#define NID_aes_256_siv 1200 + +#define SN_oracle "oracle-organization" +#define LN_oracle "Oracle organization" +#define NID_oracle 1282 +#define OBJ_oracle OBJ_joint_iso_itu_t,16L,840L,1L,113894L + +#define SN_oracle_jdk_trustedkeyusage "oracle-jdk-trustedkeyusage" +#define LN_oracle_jdk_trustedkeyusage "Trusted key usage (Oracle)" +#define NID_oracle_jdk_trustedkeyusage 1283 +#define OBJ_oracle_jdk_trustedkeyusage OBJ_oracle,746875L,1L,1L + +#define SN_brotli "brotli" +#define LN_brotli "Brotli compression" +#define NID_brotli 1288 + +#define SN_zstd "zstd" +#define LN_zstd "Zstandard compression" +#define NID_zstd 1289 + +#define SN_tcg "tcg" +#define LN_tcg "Trusted Computing Group" +#define NID_tcg 1324 +#define OBJ_tcg 2L,23L,133L + +#define SN_tcg_tcpaSpecVersion "tcg-tcpaSpecVersion" +#define NID_tcg_tcpaSpecVersion 1325 +#define OBJ_tcg_tcpaSpecVersion OBJ_tcg,1L + +#define SN_tcg_attribute "tcg-attribute" +#define LN_tcg_attribute "Trusted Computing Group Attributes" +#define NID_tcg_attribute 1326 +#define OBJ_tcg_attribute OBJ_tcg,2L + +#define SN_tcg_protocol "tcg-protocol" +#define LN_tcg_protocol "Trusted Computing Group Protocols" +#define NID_tcg_protocol 1327 +#define OBJ_tcg_protocol OBJ_tcg,3L + +#define SN_tcg_algorithm "tcg-algorithm" +#define LN_tcg_algorithm "Trusted Computing Group Algorithms" +#define NID_tcg_algorithm 1328 +#define OBJ_tcg_algorithm OBJ_tcg,4L + +#define SN_tcg_platformClass "tcg-platformClass" +#define LN_tcg_platformClass "Trusted Computing Group Platform Classes" +#define NID_tcg_platformClass 1329 +#define OBJ_tcg_platformClass OBJ_tcg,5L + +#define SN_tcg_ce "tcg-ce" +#define LN_tcg_ce "Trusted Computing Group Certificate Extensions" +#define NID_tcg_ce 1330 +#define OBJ_tcg_ce OBJ_tcg,6L + +#define SN_tcg_kp "tcg-kp" +#define LN_tcg_kp "Trusted Computing Group Key Purposes" +#define NID_tcg_kp 1331 +#define OBJ_tcg_kp OBJ_tcg,8L + +#define SN_tcg_ca "tcg-ca" +#define LN_tcg_ca "Trusted Computing Group Certificate Policies" +#define NID_tcg_ca 1332 +#define OBJ_tcg_ca OBJ_tcg,11L + +#define SN_tcg_address "tcg-address" +#define LN_tcg_address "Trusted Computing Group Address Formats" +#define NID_tcg_address 1333 +#define OBJ_tcg_address OBJ_tcg,17L + +#define SN_tcg_registry "tcg-registry" +#define LN_tcg_registry "Trusted Computing Group Registry" +#define NID_tcg_registry 1334 +#define OBJ_tcg_registry OBJ_tcg,18L + +#define SN_tcg_traits "tcg-traits" +#define LN_tcg_traits "Trusted Computing Group Traits" +#define NID_tcg_traits 1335 +#define OBJ_tcg_traits OBJ_tcg,19L + +#define SN_tcg_common "tcg-common" +#define LN_tcg_common "Trusted Computing Group Common" +#define NID_tcg_common 1336 +#define OBJ_tcg_common OBJ_tcg_platformClass,1L + +#define SN_tcg_at_platformManufacturerStr "tcg-at-platformManufacturerStr" +#define LN_tcg_at_platformManufacturerStr "TCG Platform Manufacturer String" +#define NID_tcg_at_platformManufacturerStr 1337 +#define OBJ_tcg_at_platformManufacturerStr OBJ_tcg_common,1L + +#define SN_tcg_at_platformManufacturerId "tcg-at-platformManufacturerId" +#define LN_tcg_at_platformManufacturerId "TCG Platform Manufacturer ID" +#define NID_tcg_at_platformManufacturerId 1338 +#define OBJ_tcg_at_platformManufacturerId OBJ_tcg_common,2L + +#define SN_tcg_at_platformConfigUri "tcg-at-platformConfigUri" +#define LN_tcg_at_platformConfigUri "TCG Platform Configuration URI" +#define NID_tcg_at_platformConfigUri 1339 +#define OBJ_tcg_at_platformConfigUri OBJ_tcg_common,3L + +#define SN_tcg_at_platformModel "tcg-at-platformModel" +#define LN_tcg_at_platformModel "TCG Platform Model" +#define NID_tcg_at_platformModel 1340 +#define OBJ_tcg_at_platformModel OBJ_tcg_common,4L + +#define SN_tcg_at_platformVersion "tcg-at-platformVersion" +#define LN_tcg_at_platformVersion "TCG Platform Version" +#define NID_tcg_at_platformVersion 1341 +#define OBJ_tcg_at_platformVersion OBJ_tcg_common,5L + +#define SN_tcg_at_platformSerial "tcg-at-platformSerial" +#define LN_tcg_at_platformSerial "TCG Platform Serial Number" +#define NID_tcg_at_platformSerial 1342 +#define OBJ_tcg_at_platformSerial OBJ_tcg_common,6L + +#define SN_tcg_at_platformConfiguration "tcg-at-platformConfiguration" +#define LN_tcg_at_platformConfiguration "TCG Platform Configuration" +#define NID_tcg_at_platformConfiguration 1343 +#define OBJ_tcg_at_platformConfiguration OBJ_tcg_common,7L + +#define SN_tcg_at_platformIdentifier "tcg-at-platformIdentifier" +#define LN_tcg_at_platformIdentifier "TCG Platform Identifier" +#define NID_tcg_at_platformIdentifier 1344 +#define OBJ_tcg_at_platformIdentifier OBJ_tcg_common,8L + +#define SN_tcg_at_tpmManufacturer "tcg-at-tpmManufacturer" +#define LN_tcg_at_tpmManufacturer "TPM Manufacturer" +#define NID_tcg_at_tpmManufacturer 1345 +#define OBJ_tcg_at_tpmManufacturer OBJ_tcg_attribute,1L + +#define SN_tcg_at_tpmModel "tcg-at-tpmModel" +#define LN_tcg_at_tpmModel "TPM Model" +#define NID_tcg_at_tpmModel 1346 +#define OBJ_tcg_at_tpmModel OBJ_tcg_attribute,2L + +#define SN_tcg_at_tpmVersion "tcg-at-tpmVersion" +#define LN_tcg_at_tpmVersion "TPM Version" +#define NID_tcg_at_tpmVersion 1347 +#define OBJ_tcg_at_tpmVersion OBJ_tcg_attribute,3L + +#define SN_tcg_at_securityQualities "tcg-at-securityQualities" +#define LN_tcg_at_securityQualities "Security Qualities" +#define NID_tcg_at_securityQualities 1348 +#define OBJ_tcg_at_securityQualities OBJ_tcg_attribute,10L + +#define SN_tcg_at_tpmProtectionProfile "tcg-at-tpmProtectionProfile" +#define LN_tcg_at_tpmProtectionProfile "TPM Protection Profile" +#define NID_tcg_at_tpmProtectionProfile 1349 +#define OBJ_tcg_at_tpmProtectionProfile OBJ_tcg_attribute,11L + +#define SN_tcg_at_tpmSecurityTarget "tcg-at-tpmSecurityTarget" +#define LN_tcg_at_tpmSecurityTarget "TPM Security Target" +#define NID_tcg_at_tpmSecurityTarget 1350 +#define OBJ_tcg_at_tpmSecurityTarget OBJ_tcg_attribute,12L + +#define SN_tcg_at_tbbProtectionProfile "tcg-at-tbbProtectionProfile" +#define LN_tcg_at_tbbProtectionProfile "TBB Protection Profile" +#define NID_tcg_at_tbbProtectionProfile 1351 +#define OBJ_tcg_at_tbbProtectionProfile OBJ_tcg_attribute,13L + +#define SN_tcg_at_tbbSecurityTarget "tcg-at-tbbSecurityTarget" +#define LN_tcg_at_tbbSecurityTarget "TBB Security Target" +#define NID_tcg_at_tbbSecurityTarget 1352 +#define OBJ_tcg_at_tbbSecurityTarget OBJ_tcg_attribute,14L + +#define SN_tcg_at_tpmIdLabel "tcg-at-tpmIdLabel" +#define LN_tcg_at_tpmIdLabel "TPM ID Label" +#define NID_tcg_at_tpmIdLabel 1353 +#define OBJ_tcg_at_tpmIdLabel OBJ_tcg_attribute,15L + +#define SN_tcg_at_tpmSpecification "tcg-at-tpmSpecification" +#define LN_tcg_at_tpmSpecification "TPM Specification" +#define NID_tcg_at_tpmSpecification 1354 +#define OBJ_tcg_at_tpmSpecification OBJ_tcg_attribute,16L + +#define SN_tcg_at_tcgPlatformSpecification "tcg-at-tcgPlatformSpecification" +#define LN_tcg_at_tcgPlatformSpecification "TPM Platform Specification" +#define NID_tcg_at_tcgPlatformSpecification 1355 +#define OBJ_tcg_at_tcgPlatformSpecification OBJ_tcg_attribute,17L + +#define SN_tcg_at_tpmSecurityAssertions "tcg-at-tpmSecurityAssertions" +#define LN_tcg_at_tpmSecurityAssertions "TPM Security Assertions" +#define NID_tcg_at_tpmSecurityAssertions 1356 +#define OBJ_tcg_at_tpmSecurityAssertions OBJ_tcg_attribute,18L + +#define SN_tcg_at_tbbSecurityAssertions "tcg-at-tbbSecurityAssertions" +#define LN_tcg_at_tbbSecurityAssertions "TBB Security Assertions" +#define NID_tcg_at_tbbSecurityAssertions 1357 +#define OBJ_tcg_at_tbbSecurityAssertions OBJ_tcg_attribute,19L + +#define SN_tcg_at_tcgCredentialSpecification "tcg-at-tcgCredentialSpecification" +#define LN_tcg_at_tcgCredentialSpecification "TCG Credential Specification" +#define NID_tcg_at_tcgCredentialSpecification 1358 +#define OBJ_tcg_at_tcgCredentialSpecification OBJ_tcg_attribute,23L + +#define SN_tcg_at_tcgCredentialType "tcg-at-tcgCredentialType" +#define LN_tcg_at_tcgCredentialType "TCG Credential Type" +#define NID_tcg_at_tcgCredentialType 1359 +#define OBJ_tcg_at_tcgCredentialType OBJ_tcg_attribute,25L + +#define SN_tcg_at_previousPlatformCertificates "tcg-at-previousPlatformCertificates" +#define LN_tcg_at_previousPlatformCertificates "TCG Previous Platform Certificates" +#define NID_tcg_at_previousPlatformCertificates 1360 +#define OBJ_tcg_at_previousPlatformCertificates OBJ_tcg_attribute,26L + +#define SN_tcg_at_tbbSecurityAssertions_v3 "tcg-at-tbbSecurityAssertions-v3" +#define LN_tcg_at_tbbSecurityAssertions_v3 "TCG TBB Security Assertions V3" +#define NID_tcg_at_tbbSecurityAssertions_v3 1361 +#define OBJ_tcg_at_tbbSecurityAssertions_v3 OBJ_tcg_attribute,27L + +#define SN_tcg_at_cryptographicAnchors "tcg-at-cryptographicAnchors" +#define LN_tcg_at_cryptographicAnchors "TCG Cryptographic Anchors" +#define NID_tcg_at_cryptographicAnchors 1362 +#define OBJ_tcg_at_cryptographicAnchors OBJ_tcg_attribute,28L + +#define SN_tcg_at_platformConfiguration_v1 "tcg-at-platformConfiguration-v1" +#define LN_tcg_at_platformConfiguration_v1 "Platform Configuration Version 1" +#define NID_tcg_at_platformConfiguration_v1 1363 +#define OBJ_tcg_at_platformConfiguration_v1 OBJ_tcg_at_platformConfiguration,1L + +#define SN_tcg_at_platformConfiguration_v2 "tcg-at-platformConfiguration-v2" +#define LN_tcg_at_platformConfiguration_v2 "Platform Configuration Version 2" +#define NID_tcg_at_platformConfiguration_v2 1364 +#define OBJ_tcg_at_platformConfiguration_v2 OBJ_tcg_at_platformConfiguration,2L + +#define SN_tcg_at_platformConfiguration_v3 "tcg-at-platformConfiguration-v3" +#define LN_tcg_at_platformConfiguration_v3 "Platform Configuration Version 3" +#define NID_tcg_at_platformConfiguration_v3 1365 +#define OBJ_tcg_at_platformConfiguration_v3 OBJ_tcg_at_platformConfiguration,3L + +#define SN_tcg_at_platformConfigUri_v3 "tcg-at-platformConfigUri-v3" +#define LN_tcg_at_platformConfigUri_v3 "Platform Configuration URI Version 3" +#define NID_tcg_at_platformConfigUri_v3 1366 +#define OBJ_tcg_at_platformConfigUri_v3 OBJ_tcg_at_platformConfiguration,4L + +#define SN_tcg_algorithm_null "tcg-algorithm-null" +#define LN_tcg_algorithm_null "TCG NULL Algorithm" +#define NID_tcg_algorithm_null 1367 +#define OBJ_tcg_algorithm_null OBJ_tcg_algorithm,1L + +#define SN_tcg_kp_EKCertificate "tcg-kp-EKCertificate" +#define LN_tcg_kp_EKCertificate "Endorsement Key Certificate" +#define NID_tcg_kp_EKCertificate 1368 +#define OBJ_tcg_kp_EKCertificate OBJ_tcg_kp,1L + +#define SN_tcg_kp_PlatformAttributeCertificate "tcg-kp-PlatformAttributeCertificate" +#define LN_tcg_kp_PlatformAttributeCertificate "Platform Attribute Certificate" +#define NID_tcg_kp_PlatformAttributeCertificate 1369 +#define OBJ_tcg_kp_PlatformAttributeCertificate OBJ_tcg_kp,2L + +#define SN_tcg_kp_AIKCertificate "tcg-kp-AIKCertificate" +#define LN_tcg_kp_AIKCertificate "Attestation Identity Key Certificate" +#define NID_tcg_kp_AIKCertificate 1370 +#define OBJ_tcg_kp_AIKCertificate OBJ_tcg_kp,3L + +#define SN_tcg_kp_PlatformKeyCertificate "tcg-kp-PlatformKeyCertificate" +#define LN_tcg_kp_PlatformKeyCertificate "Platform Key Certificate" +#define NID_tcg_kp_PlatformKeyCertificate 1371 +#define OBJ_tcg_kp_PlatformKeyCertificate OBJ_tcg_kp,4L + +#define SN_tcg_kp_DeltaPlatformAttributeCertificate "tcg-kp-DeltaPlatformAttributeCertificate" +#define LN_tcg_kp_DeltaPlatformAttributeCertificate "Delta Platform Attribute Certificate" +#define NID_tcg_kp_DeltaPlatformAttributeCertificate 1372 +#define OBJ_tcg_kp_DeltaPlatformAttributeCertificate OBJ_tcg_kp,5L + +#define SN_tcg_kp_DeltaPlatformKeyCertificate "tcg-kp-DeltaPlatformKeyCertificate" +#define LN_tcg_kp_DeltaPlatformKeyCertificate "Delta Platform Key Certificate" +#define NID_tcg_kp_DeltaPlatformKeyCertificate 1373 +#define OBJ_tcg_kp_DeltaPlatformKeyCertificate OBJ_tcg_kp,6L + +#define SN_tcg_kp_AdditionalPlatformAttributeCertificate "tcg-kp-AdditionalPlatformAttributeCertificate" +#define LN_tcg_kp_AdditionalPlatformAttributeCertificate "Additional Platform Attribute Certificate" +#define NID_tcg_kp_AdditionalPlatformAttributeCertificate 1374 +#define OBJ_tcg_kp_AdditionalPlatformAttributeCertificate OBJ_tcg_kp,7L + +#define SN_tcg_kp_AdditionalPlatformKeyCertificate "tcg-kp-AdditionalPlatformKeyCertificate" +#define LN_tcg_kp_AdditionalPlatformKeyCertificate "Additional Platform Key Certificate" +#define NID_tcg_kp_AdditionalPlatformKeyCertificate 1375 +#define OBJ_tcg_kp_AdditionalPlatformKeyCertificate OBJ_tcg_kp,8L + +#define SN_tcg_ce_relevantCredentials "tcg-ce-relevantCredentials" +#define LN_tcg_ce_relevantCredentials "Relevant Credentials" +#define NID_tcg_ce_relevantCredentials 1376 +#define OBJ_tcg_ce_relevantCredentials OBJ_tcg_ce,2L + +#define SN_tcg_ce_relevantManifests "tcg-ce-relevantManifests" +#define LN_tcg_ce_relevantManifests "Relevant Manifests" +#define NID_tcg_ce_relevantManifests 1377 +#define OBJ_tcg_ce_relevantManifests OBJ_tcg_ce,3L + +#define SN_tcg_ce_virtualPlatformAttestationService "tcg-ce-virtualPlatformAttestationService" +#define LN_tcg_ce_virtualPlatformAttestationService "Virtual Platform Attestation Service" +#define NID_tcg_ce_virtualPlatformAttestationService 1378 +#define OBJ_tcg_ce_virtualPlatformAttestationService OBJ_tcg_ce,4L + +#define SN_tcg_ce_migrationControllerAttestationService "tcg-ce-migrationControllerAttestationService" +#define LN_tcg_ce_migrationControllerAttestationService "Migration Controller Attestation Service" +#define NID_tcg_ce_migrationControllerAttestationService 1379 +#define OBJ_tcg_ce_migrationControllerAttestationService OBJ_tcg_ce,5L + +#define SN_tcg_ce_migrationControllerRegistrationService "tcg-ce-migrationControllerRegistrationService" +#define LN_tcg_ce_migrationControllerRegistrationService "Migration Controller Registration Service" +#define NID_tcg_ce_migrationControllerRegistrationService 1380 +#define OBJ_tcg_ce_migrationControllerRegistrationService OBJ_tcg_ce,6L + +#define SN_tcg_ce_virtualPlatformBackupService "tcg-ce-virtualPlatformBackupService" +#define LN_tcg_ce_virtualPlatformBackupService "Virtual Platform Backup Service" +#define NID_tcg_ce_virtualPlatformBackupService 1381 +#define OBJ_tcg_ce_virtualPlatformBackupService OBJ_tcg_ce,7L + +#define SN_tcg_prt_tpmIdProtocol "tcg-prt-tpmIdProtocol" +#define LN_tcg_prt_tpmIdProtocol "TCG TPM Protocol" +#define NID_tcg_prt_tpmIdProtocol 1382 +#define OBJ_tcg_prt_tpmIdProtocol OBJ_tcg_protocol,1L + +#define SN_tcg_address_ethernetmac "tcg-address-ethernetmac" +#define LN_tcg_address_ethernetmac "Ethernet MAC Address" +#define NID_tcg_address_ethernetmac 1383 +#define OBJ_tcg_address_ethernetmac OBJ_tcg_address,1L + +#define SN_tcg_address_wlanmac "tcg-address-wlanmac" +#define LN_tcg_address_wlanmac "WLAN MAC Address" +#define NID_tcg_address_wlanmac 1384 +#define OBJ_tcg_address_wlanmac OBJ_tcg_address,2L + +#define SN_tcg_address_bluetoothmac "tcg-address-bluetoothmac" +#define LN_tcg_address_bluetoothmac "Bluetooth MAC Address" +#define NID_tcg_address_bluetoothmac 1385 +#define OBJ_tcg_address_bluetoothmac OBJ_tcg_address,3L + +#define SN_tcg_registry_componentClass "tcg-registry-componentClass" +#define LN_tcg_registry_componentClass "TCG Component Class" +#define NID_tcg_registry_componentClass 1386 +#define OBJ_tcg_registry_componentClass OBJ_tcg_registry,3L + +#define SN_tcg_registry_componentClass_tcg "tcg-registry-componentClass-tcg" +#define LN_tcg_registry_componentClass_tcg "Trusted Computed Group Registry" +#define NID_tcg_registry_componentClass_tcg 1387 +#define OBJ_tcg_registry_componentClass_tcg OBJ_tcg_registry_componentClass,1L + +#define SN_tcg_registry_componentClass_ietf "tcg-registry-componentClass-ietf" +#define LN_tcg_registry_componentClass_ietf "Internet Engineering Task Force Registry" +#define NID_tcg_registry_componentClass_ietf 1388 +#define OBJ_tcg_registry_componentClass_ietf OBJ_tcg_registry_componentClass,2L + +#define SN_tcg_registry_componentClass_dmtf "tcg-registry-componentClass-dmtf" +#define LN_tcg_registry_componentClass_dmtf "Distributed Management Task Force Registry" +#define NID_tcg_registry_componentClass_dmtf 1389 +#define OBJ_tcg_registry_componentClass_dmtf OBJ_tcg_registry_componentClass,3L + +#define SN_tcg_registry_componentClass_pcie "tcg-registry-componentClass-pcie" +#define LN_tcg_registry_componentClass_pcie "PCIE Component Class" +#define NID_tcg_registry_componentClass_pcie 1390 +#define OBJ_tcg_registry_componentClass_pcie OBJ_tcg_registry_componentClass,4L + +#define SN_tcg_registry_componentClass_disk "tcg-registry-componentClass-disk" +#define LN_tcg_registry_componentClass_disk "Disk Component Class" +#define NID_tcg_registry_componentClass_disk 1391 +#define OBJ_tcg_registry_componentClass_disk OBJ_tcg_registry_componentClass,5L + +#define SN_tcg_cap_verifiedPlatformCertificate "tcg-cap-verifiedPlatformCertificate" +#define LN_tcg_cap_verifiedPlatformCertificate "TCG Verified Platform Certificate CA Policy" +#define NID_tcg_cap_verifiedPlatformCertificate 1392 +#define OBJ_tcg_cap_verifiedPlatformCertificate OBJ_tcg_ca,4L + +#define SN_tcg_tr_ID "tcg-tr-ID" +#define LN_tcg_tr_ID "TCG Trait Identifiers" +#define NID_tcg_tr_ID 1393 +#define OBJ_tcg_tr_ID OBJ_tcg_traits,1L + +#define SN_tcg_tr_category "tcg-tr-category" +#define LN_tcg_tr_category "TCG Trait Categories" +#define NID_tcg_tr_category 1394 +#define OBJ_tcg_tr_category OBJ_tcg_traits,2L + +#define SN_tcg_tr_registry "tcg-tr-registry" +#define LN_tcg_tr_registry "TCG Trait Registries" +#define NID_tcg_tr_registry 1395 +#define OBJ_tcg_tr_registry OBJ_tcg_traits,3L + +#define SN_tcg_tr_ID_Boolean "tcg-tr-ID-Boolean" +#define LN_tcg_tr_ID_Boolean "Boolean Trait" +#define NID_tcg_tr_ID_Boolean 1396 +#define OBJ_tcg_tr_ID_Boolean OBJ_tcg_tr_ID,1L + +#define SN_tcg_tr_ID_CertificateIdentifier "tcg-tr-ID-CertificateIdentifier" +#define LN_tcg_tr_ID_CertificateIdentifier "Certificate Identifier Trait" +#define NID_tcg_tr_ID_CertificateIdentifier 1397 +#define OBJ_tcg_tr_ID_CertificateIdentifier OBJ_tcg_tr_ID,2L + +#define SN_tcg_tr_ID_CommonCriteria "tcg-tr-ID-CommonCriteria" +#define LN_tcg_tr_ID_CommonCriteria "Common Criteria Trait" +#define NID_tcg_tr_ID_CommonCriteria 1398 +#define OBJ_tcg_tr_ID_CommonCriteria OBJ_tcg_tr_ID,3L + +#define SN_tcg_tr_ID_componentClass "tcg-tr-ID-componentClass" +#define LN_tcg_tr_ID_componentClass "Component Class Trait" +#define NID_tcg_tr_ID_componentClass 1399 +#define OBJ_tcg_tr_ID_componentClass OBJ_tcg_tr_ID,4L + +#define SN_tcg_tr_ID_componentIdentifierV11 "tcg-tr-ID-componentIdentifierV11" +#define LN_tcg_tr_ID_componentIdentifierV11 "Component Identifier V1.1 Trait" +#define NID_tcg_tr_ID_componentIdentifierV11 1400 +#define OBJ_tcg_tr_ID_componentIdentifierV11 OBJ_tcg_tr_ID,5L + +#define SN_tcg_tr_ID_FIPSLevel "tcg-tr-ID-FIPSLevel" +#define LN_tcg_tr_ID_FIPSLevel "FIPS Level Trait" +#define NID_tcg_tr_ID_FIPSLevel 1401 +#define OBJ_tcg_tr_ID_FIPSLevel OBJ_tcg_tr_ID,6L + +#define SN_tcg_tr_ID_ISO9000Level "tcg-tr-ID-ISO9000Level" +#define LN_tcg_tr_ID_ISO9000Level "ISO 9000 Level Trait" +#define NID_tcg_tr_ID_ISO9000Level 1402 +#define OBJ_tcg_tr_ID_ISO9000Level OBJ_tcg_tr_ID,7L + +#define SN_tcg_tr_ID_networkMAC "tcg-tr-ID-networkMAC" +#define LN_tcg_tr_ID_networkMAC "Network MAC Trait" +#define NID_tcg_tr_ID_networkMAC 1403 +#define OBJ_tcg_tr_ID_networkMAC OBJ_tcg_tr_ID,8L + +#define SN_tcg_tr_ID_OID "tcg-tr-ID-OID" +#define LN_tcg_tr_ID_OID "Object Identifier Trait" +#define NID_tcg_tr_ID_OID 1404 +#define OBJ_tcg_tr_ID_OID OBJ_tcg_tr_ID,9L + +#define SN_tcg_tr_ID_PEN "tcg-tr-ID-PEN" +#define LN_tcg_tr_ID_PEN "Private Enterprise Number Trait" +#define NID_tcg_tr_ID_PEN 1405 +#define OBJ_tcg_tr_ID_PEN OBJ_tcg_tr_ID,10L + +#define SN_tcg_tr_ID_platformFirmwareCapabilities "tcg-tr-ID-platformFirmwareCapabilities" +#define LN_tcg_tr_ID_platformFirmwareCapabilities "Platform Firmware Capabilities Trait" +#define NID_tcg_tr_ID_platformFirmwareCapabilities 1406 +#define OBJ_tcg_tr_ID_platformFirmwareCapabilities OBJ_tcg_tr_ID,11L + +#define SN_tcg_tr_ID_platformFirmwareSignatureVerification "tcg-tr-ID-platformFirmwareSignatureVerification" +#define LN_tcg_tr_ID_platformFirmwareSignatureVerification "Platform Firmware Signature Verification Trait" +#define NID_tcg_tr_ID_platformFirmwareSignatureVerification 1407 +#define OBJ_tcg_tr_ID_platformFirmwareSignatureVerification OBJ_tcg_tr_ID,12L + +#define SN_tcg_tr_ID_platformFirmwareUpdateCompliance "tcg-tr-ID-platformFirmwareUpdateCompliance" +#define LN_tcg_tr_ID_platformFirmwareUpdateCompliance "Platform Firmware Update Compliance Trait" +#define NID_tcg_tr_ID_platformFirmwareUpdateCompliance 1408 +#define OBJ_tcg_tr_ID_platformFirmwareUpdateCompliance OBJ_tcg_tr_ID,13L + +#define SN_tcg_tr_ID_platformHardwareCapabilities "tcg-tr-ID-platformHardwareCapabilities" +#define LN_tcg_tr_ID_platformHardwareCapabilities "Platform Hardware Capabilities Trait" +#define NID_tcg_tr_ID_platformHardwareCapabilities 1409 +#define OBJ_tcg_tr_ID_platformHardwareCapabilities OBJ_tcg_tr_ID,14L + +#define SN_tcg_tr_ID_RTM "tcg-tr-ID-RTM" +#define LN_tcg_tr_ID_RTM "Root of Trust for Measurement Trait" +#define NID_tcg_tr_ID_RTM 1410 +#define OBJ_tcg_tr_ID_RTM OBJ_tcg_tr_ID,15L + +#define SN_tcg_tr_ID_status "tcg-tr-ID-status" +#define LN_tcg_tr_ID_status "Attribute Status Trait" +#define NID_tcg_tr_ID_status 1411 +#define OBJ_tcg_tr_ID_status OBJ_tcg_tr_ID,16L + +#define SN_tcg_tr_ID_URI "tcg-tr-ID-URI" +#define LN_tcg_tr_ID_URI "Uniform Resource Identifier Trait" +#define NID_tcg_tr_ID_URI 1412 +#define OBJ_tcg_tr_ID_URI OBJ_tcg_tr_ID,17L + +#define SN_tcg_tr_ID_UTF8String "tcg-tr-ID-UTF8String" +#define LN_tcg_tr_ID_UTF8String "UTF8String Trait" +#define NID_tcg_tr_ID_UTF8String 1413 +#define OBJ_tcg_tr_ID_UTF8String OBJ_tcg_tr_ID,18L + +#define SN_tcg_tr_ID_IA5String "tcg-tr-ID-IA5String" +#define LN_tcg_tr_ID_IA5String "IA5String Trait" +#define NID_tcg_tr_ID_IA5String 1414 +#define OBJ_tcg_tr_ID_IA5String OBJ_tcg_tr_ID,19L + +#define SN_tcg_tr_ID_PEMCertString "tcg-tr-ID-PEMCertString" +#define LN_tcg_tr_ID_PEMCertString "PEM-Encoded Certificate String Trait" +#define NID_tcg_tr_ID_PEMCertString 1415 +#define OBJ_tcg_tr_ID_PEMCertString OBJ_tcg_tr_ID,20L + +#define SN_tcg_tr_ID_PublicKey "tcg-tr-ID-PublicKey" +#define LN_tcg_tr_ID_PublicKey "Public Key Trait" +#define NID_tcg_tr_ID_PublicKey 1416 +#define OBJ_tcg_tr_ID_PublicKey OBJ_tcg_tr_ID,21L + +#define SN_tcg_tr_cat_platformManufacturer "tcg-tr-cat-platformManufacturer" +#define LN_tcg_tr_cat_platformManufacturer "Platform Manufacturer Trait Category" +#define NID_tcg_tr_cat_platformManufacturer 1417 +#define OBJ_tcg_tr_cat_platformManufacturer OBJ_tcg_tr_category,1L + +#define SN_tcg_tr_cat_platformModel "tcg-tr-cat-platformModel" +#define LN_tcg_tr_cat_platformModel "Platform Model Trait Category" +#define NID_tcg_tr_cat_platformModel 1418 +#define OBJ_tcg_tr_cat_platformModel OBJ_tcg_tr_category,2L + +#define SN_tcg_tr_cat_platformVersion "tcg-tr-cat-platformVersion" +#define LN_tcg_tr_cat_platformVersion "Platform Version Trait Category" +#define NID_tcg_tr_cat_platformVersion 1419 +#define OBJ_tcg_tr_cat_platformVersion OBJ_tcg_tr_category,3L + +#define SN_tcg_tr_cat_platformSerial "tcg-tr-cat-platformSerial" +#define LN_tcg_tr_cat_platformSerial "Platform Serial Trait Category" +#define NID_tcg_tr_cat_platformSerial 1420 +#define OBJ_tcg_tr_cat_platformSerial OBJ_tcg_tr_category,4L + +#define SN_tcg_tr_cat_platformManufacturerIdentifier "tcg-tr-cat-platformManufacturerIdentifier" +#define LN_tcg_tr_cat_platformManufacturerIdentifier "Platform Manufacturer Identifier Trait Category" +#define NID_tcg_tr_cat_platformManufacturerIdentifier 1421 +#define OBJ_tcg_tr_cat_platformManufacturerIdentifier OBJ_tcg_tr_category,5L + +#define SN_tcg_tr_cat_platformOwnership "tcg-tr-cat-platformOwnership" +#define LN_tcg_tr_cat_platformOwnership "Platform Ownership Trait Category" +#define NID_tcg_tr_cat_platformOwnership 1422 +#define OBJ_tcg_tr_cat_platformOwnership OBJ_tcg_tr_category,6L + +#define SN_tcg_tr_cat_componentClass "tcg-tr-cat-componentClass" +#define LN_tcg_tr_cat_componentClass "Component Class Trait Category" +#define NID_tcg_tr_cat_componentClass 1423 +#define OBJ_tcg_tr_cat_componentClass OBJ_tcg_tr_category,7L + +#define SN_tcg_tr_cat_componentManufacturer "tcg-tr-cat-componentManufacturer" +#define LN_tcg_tr_cat_componentManufacturer "Component Manufacturer Trait Category" +#define NID_tcg_tr_cat_componentManufacturer 1424 +#define OBJ_tcg_tr_cat_componentManufacturer OBJ_tcg_tr_category,8L + +#define SN_tcg_tr_cat_componentModel "tcg-tr-cat-componentModel" +#define LN_tcg_tr_cat_componentModel "Component Model Trait Category" +#define NID_tcg_tr_cat_componentModel 1425 +#define OBJ_tcg_tr_cat_componentModel OBJ_tcg_tr_category,9L + +#define SN_tcg_tr_cat_componentSerial "tcg-tr-cat-componentSerial" +#define LN_tcg_tr_cat_componentSerial "Component Serial Trait Category" +#define NID_tcg_tr_cat_componentSerial 1426 +#define OBJ_tcg_tr_cat_componentSerial OBJ_tcg_tr_category,10L + +#define SN_tcg_tr_cat_componentStatus "tcg-tr-cat-componentStatus" +#define LN_tcg_tr_cat_componentStatus "Component Status Trait Category" +#define NID_tcg_tr_cat_componentStatus 1427 +#define OBJ_tcg_tr_cat_componentStatus OBJ_tcg_tr_category,11L + +#define SN_tcg_tr_cat_componentLocation "tcg-tr-cat-componentLocation" +#define LN_tcg_tr_cat_componentLocation "Component Location Trait Category" +#define NID_tcg_tr_cat_componentLocation 1428 +#define OBJ_tcg_tr_cat_componentLocation OBJ_tcg_tr_category,12L + +#define SN_tcg_tr_cat_componentRevision "tcg-tr-cat-componentRevision" +#define LN_tcg_tr_cat_componentRevision "Component Revision Trait Category" +#define NID_tcg_tr_cat_componentRevision 1429 +#define OBJ_tcg_tr_cat_componentRevision OBJ_tcg_tr_category,13L + +#define SN_tcg_tr_cat_componentFieldReplaceable "tcg-tr-cat-componentFieldReplaceable" +#define LN_tcg_tr_cat_componentFieldReplaceable "Component Field Replaceable Trait Category" +#define NID_tcg_tr_cat_componentFieldReplaceable 1430 +#define OBJ_tcg_tr_cat_componentFieldReplaceable OBJ_tcg_tr_category,14L + +#define SN_tcg_tr_cat_EKCertificate "tcg-tr-cat-EKCertificate" +#define LN_tcg_tr_cat_EKCertificate "EK Certificate Trait Category" +#define NID_tcg_tr_cat_EKCertificate 1431 +#define OBJ_tcg_tr_cat_EKCertificate OBJ_tcg_tr_category,15L + +#define SN_tcg_tr_cat_IAKCertificate "tcg-tr-cat-IAKCertificate" +#define LN_tcg_tr_cat_IAKCertificate "IAK Certificate Trait Category" +#define NID_tcg_tr_cat_IAKCertificate 1432 +#define OBJ_tcg_tr_cat_IAKCertificate OBJ_tcg_tr_category,16L + +#define SN_tcg_tr_cat_IDevIDCertificate "tcg-tr-cat-IDevIDCertificate" +#define LN_tcg_tr_cat_IDevIDCertificate "IDevID Certificate Trait Category" +#define NID_tcg_tr_cat_IDevIDCertificate 1433 +#define OBJ_tcg_tr_cat_IDevIDCertificate OBJ_tcg_tr_category,17L + +#define SN_tcg_tr_cat_DICECertificate "tcg-tr-cat-DICECertificate" +#define LN_tcg_tr_cat_DICECertificate "DICE Certificate Trait Category" +#define NID_tcg_tr_cat_DICECertificate 1434 +#define OBJ_tcg_tr_cat_DICECertificate OBJ_tcg_tr_category,18L + +#define SN_tcg_tr_cat_SPDMCertificate "tcg-tr-cat-SPDMCertificate" +#define LN_tcg_tr_cat_SPDMCertificate "SPDM Certificate Trait Category" +#define NID_tcg_tr_cat_SPDMCertificate 1435 +#define OBJ_tcg_tr_cat_SPDMCertificate OBJ_tcg_tr_category,19L + +#define SN_tcg_tr_cat_PEMCertificate "tcg-tr-cat-PEMCertificate" +#define LN_tcg_tr_cat_PEMCertificate "PEM Certificate Trait Category" +#define NID_tcg_tr_cat_PEMCertificate 1436 +#define OBJ_tcg_tr_cat_PEMCertificate OBJ_tcg_tr_category,20L + +#define SN_tcg_tr_cat_PlatformCertificate "tcg-tr-cat-PlatformCertificate" +#define LN_tcg_tr_cat_PlatformCertificate "Platform Certificate Trait Category" +#define NID_tcg_tr_cat_PlatformCertificate 1437 +#define OBJ_tcg_tr_cat_PlatformCertificate OBJ_tcg_tr_category,21L + +#define SN_tcg_tr_cat_DeltaPlatformCertificate "tcg-tr-cat-DeltaPlatformCertificate" +#define LN_tcg_tr_cat_DeltaPlatformCertificate "Delta Platform Certificate Trait Category" +#define NID_tcg_tr_cat_DeltaPlatformCertificate 1438 +#define OBJ_tcg_tr_cat_DeltaPlatformCertificate OBJ_tcg_tr_category,22L + +#define SN_tcg_tr_cat_RebasePlatformCertificate "tcg-tr-cat-RebasePlatformCertificate" +#define LN_tcg_tr_cat_RebasePlatformCertificate "Rebase Platform Certificate Trait Category" +#define NID_tcg_tr_cat_RebasePlatformCertificate 1439 +#define OBJ_tcg_tr_cat_RebasePlatformCertificate OBJ_tcg_tr_category,23L + +#define SN_tcg_tr_cat_genericCertificate "tcg-tr-cat-genericCertificate" +#define LN_tcg_tr_cat_genericCertificate "Generic Certificate Trait Category" +#define NID_tcg_tr_cat_genericCertificate 1440 +#define OBJ_tcg_tr_cat_genericCertificate OBJ_tcg_tr_category,24L + +#define SN_tcg_tr_cat_CommonCriteria "tcg-tr-cat-CommonCriteria" +#define LN_tcg_tr_cat_CommonCriteria "Common Criteria Trait Category" +#define NID_tcg_tr_cat_CommonCriteria 1441 +#define OBJ_tcg_tr_cat_CommonCriteria OBJ_tcg_tr_category,25L + +#define SN_tcg_tr_cat_componentIdentifierV11 "tcg-tr-cat-componentIdentifierV11" +#define LN_tcg_tr_cat_componentIdentifierV11 "Component Identifier V1.1 Trait Category" +#define NID_tcg_tr_cat_componentIdentifierV11 1442 +#define OBJ_tcg_tr_cat_componentIdentifierV11 OBJ_tcg_tr_category,26L + +#define SN_tcg_tr_cat_FIPSLevel "tcg-tr-cat-FIPSLevel" +#define LN_tcg_tr_cat_FIPSLevel "FIPS Level Trait Category" +#define NID_tcg_tr_cat_FIPSLevel 1443 +#define OBJ_tcg_tr_cat_FIPSLevel OBJ_tcg_tr_category,27L + +#define SN_tcg_tr_cat_ISO9000 "tcg-tr-cat-ISO9000" +#define LN_tcg_tr_cat_ISO9000 "ISO 9000 Trait Category" +#define NID_tcg_tr_cat_ISO9000 1444 +#define OBJ_tcg_tr_cat_ISO9000 OBJ_tcg_tr_category,28L + +#define SN_tcg_tr_cat_networkMAC "tcg-tr-cat-networkMAC" +#define LN_tcg_tr_cat_networkMAC "Network MAC Trait Category" +#define NID_tcg_tr_cat_networkMAC 1445 +#define OBJ_tcg_tr_cat_networkMAC OBJ_tcg_tr_category,29L + +#define SN_tcg_tr_cat_attestationProtocol "tcg-tr-cat-attestationProtocol" +#define LN_tcg_tr_cat_attestationProtocol "Attestation Protocol Trait Category" +#define NID_tcg_tr_cat_attestationProtocol 1446 +#define OBJ_tcg_tr_cat_attestationProtocol OBJ_tcg_tr_category,30L + +#define SN_tcg_tr_cat_PEN "tcg-tr-cat-PEN" +#define LN_tcg_tr_cat_PEN "Private Enterprise Number Trait Category" +#define NID_tcg_tr_cat_PEN 1447 +#define OBJ_tcg_tr_cat_PEN OBJ_tcg_tr_category,31L + +#define SN_tcg_tr_cat_platformFirmwareCapabilities "tcg-tr-cat-platformFirmwareCapabilities" +#define LN_tcg_tr_cat_platformFirmwareCapabilities "Platform Firmware Capabilities Trait Category" +#define NID_tcg_tr_cat_platformFirmwareCapabilities 1448 +#define OBJ_tcg_tr_cat_platformFirmwareCapabilities OBJ_tcg_tr_category,32L + +#define SN_tcg_tr_cat_platformHardwareCapabilities "tcg-tr-cat-platformHardwareCapabilities" +#define LN_tcg_tr_cat_platformHardwareCapabilities "Platform Hardware Capabilities Trait Category" +#define NID_tcg_tr_cat_platformHardwareCapabilities 1449 +#define OBJ_tcg_tr_cat_platformHardwareCapabilities OBJ_tcg_tr_category,33L + +#define SN_tcg_tr_cat_platformFirmwareSignatureVerification "tcg-tr-cat-platformFirmwareSignatureVerification" +#define LN_tcg_tr_cat_platformFirmwareSignatureVerification "Platform Firmware Signature Verification Trait Category" +#define NID_tcg_tr_cat_platformFirmwareSignatureVerification 1450 +#define OBJ_tcg_tr_cat_platformFirmwareSignatureVerification OBJ_tcg_tr_category,34L + +#define SN_tcg_tr_cat_platformFirmwareUpdateCompliance "tcg-tr-cat-platformFirmwareUpdateCompliance" +#define LN_tcg_tr_cat_platformFirmwareUpdateCompliance "Platform Firmware Update Compliance Trait Category" +#define NID_tcg_tr_cat_platformFirmwareUpdateCompliance 1451 +#define OBJ_tcg_tr_cat_platformFirmwareUpdateCompliance OBJ_tcg_tr_category,35L + +#define SN_tcg_tr_cat_RTM "tcg-tr-cat-RTM" +#define LN_tcg_tr_cat_RTM "Root of Trust of Measurement Trait Category" +#define NID_tcg_tr_cat_RTM 1452 +#define OBJ_tcg_tr_cat_RTM OBJ_tcg_tr_category,36L + +#define SN_tcg_tr_cat_PublicKey "tcg-tr-cat-PublicKey" +#define LN_tcg_tr_cat_PublicKey "Public Key Trait Category" +#define NID_tcg_tr_cat_PublicKey 1453 +#define OBJ_tcg_tr_cat_PublicKey OBJ_tcg_tr_category,37L + +#define OBJ_nistKems OBJ_nistAlgorithms,4L + +#define SN_ML_KEM_512 "id-alg-ml-kem-512" +#define LN_ML_KEM_512 "ML-KEM-512" +#define NID_ML_KEM_512 1454 +#define OBJ_ML_KEM_512 OBJ_nistKems,1L + +#define SN_ML_KEM_768 "id-alg-ml-kem-768" +#define LN_ML_KEM_768 "ML-KEM-768" +#define NID_ML_KEM_768 1455 +#define OBJ_ML_KEM_768 OBJ_nistKems,2L + +#define SN_ML_KEM_1024 "id-alg-ml-kem-1024" +#define LN_ML_KEM_1024 "ML-KEM-1024" +#define NID_ML_KEM_1024 1456 +#define OBJ_ML_KEM_1024 OBJ_nistKems,3L + +#endif /* OPENSSL_OBJ_MAC_H */ + +#ifndef OPENSSL_NO_DEPRECATED_3_0 + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm SN_magma_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm NID_magma_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_magma_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac SN_magma_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac NID_magma_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_magma_ctr_acpkm_omac + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm SN_kuznyechik_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm NID_kuznyechik_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_kuznyechik_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac SN_kuznyechik_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac NID_kuznyechik_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_kuznyechik_ctr_acpkm_omac + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 SN_magma_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 NID_magma_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_magma_kexp15 + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 SN_kuznyechik_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 NID_kuznyechik_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_kuznyechik_kexp15 + +#define SN_grasshopper_ecb SN_kuznyechik_ecb +#define NID_grasshopper_ecb NID_kuznyechik_ecb + +#define SN_grasshopper_ctr SN_kuznyechik_ctr +#define NID_grasshopper_ctr NID_kuznyechik_ctr + +#define SN_grasshopper_ofb SN_kuznyechik_ofb +#define NID_grasshopper_ofb NID_kuznyechik_ofb + +#define SN_grasshopper_cbc SN_kuznyechik_cbc +#define NID_grasshopper_cbc NID_kuznyechik_cbc + +#define SN_grasshopper_cfb SN_kuznyechik_cfb +#define NID_grasshopper_cfb NID_kuznyechik_cfb + +#define SN_grasshopper_mac SN_kuznyechik_mac +#define NID_grasshopper_mac NID_kuznyechik_mac + +#endif /* OPENSSL_NO_DEPRECATED_3_0 */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/objects.h b/thirdparty/OpenSSL-3.5.3/include/openssl/objects.h new file mode 100644 index 0000000..cc9f3c5 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/objects.h @@ -0,0 +1,184 @@ +/* + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_OBJECTS_H +# define OPENSSL_OBJECTS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OBJECTS_H +# endif + +# include +# include +# 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_MAC_METH 0x05 +# define OBJ_NAME_TYPE_KDF_METH 0x06 +# define OBJ_NAME_TYPE_NUM 0x07 + +# 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); + +DECLARE_ASN1_DUP_FUNCTION_name(ASN1_OBJECT, OBJ) +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 assignment 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, declare 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); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); + +#define SN_ac_auditEntity SN_ac_auditIdentity + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/objectserr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/objectserr.h new file mode 100644 index 0000000..585217f --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/objectserr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_OBJECTSERR_H +# define OPENSSL_OBJECTSERR_H +# pragma once + +# include +# include +# include + + + +/* + * OBJ reason codes. + */ +# define OBJ_R_OID_EXISTS 102 +# define OBJ_R_UNKNOWN_NID 101 +# define OBJ_R_UNKNOWN_OBJECT_NAME 103 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ocsp.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ocsp.h new file mode 100644 index 0000000..5688381 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ocsp.h @@ -0,0 +1,483 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\ocsp.h.in + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# 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), + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } + */ +# 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 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 + + +# 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 +# define OCSP_PARTIAL_CHAIN 0x1000 + +typedef struct ocsp_cert_id_st OCSP_CERTID; +typedef struct ocsp_one_request_st OCSP_ONEREQ; +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) +#define sk_OCSP_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_value(sk, idx) ((OCSP_CERTID *)OPENSSL_sk_value(ossl_check_const_OCSP_CERTID_sk_type(sk), (idx))) +#define sk_OCSP_CERTID_new(cmp) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new(ossl_check_OCSP_CERTID_compfunc_type(cmp))) +#define sk_OCSP_CERTID_new_null() ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_CERTID_new_reserve(cmp, n) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_CERTID_compfunc_type(cmp), (n))) +#define sk_OCSP_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_CERTID_sk_type(sk), (n)) +#define sk_OCSP_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_delete(sk, i) ((OCSP_CERTID *)OPENSSL_sk_delete(ossl_check_OCSP_CERTID_sk_type(sk), (i))) +#define sk_OCSP_CERTID_delete_ptr(sk, ptr) ((OCSP_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_pop(sk) ((OCSP_CERTID *)OPENSSL_sk_pop(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_shift(sk) ((OCSP_CERTID *)OPENSSL_sk_shift(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_CERTID_sk_type(sk),ossl_check_OCSP_CERTID_freefunc_type(freefunc)) +#define sk_OCSP_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), (idx)) +#define sk_OCSP_CERTID_set(sk, idx, ptr) ((OCSP_CERTID *)OPENSSL_sk_set(ossl_check_OCSP_CERTID_sk_type(sk), (idx), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), pnum) +#define sk_OCSP_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_dup(sk) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_copyfunc_type(copyfunc), ossl_check_OCSP_CERTID_freefunc_type(freefunc))) +#define sk_OCSP_CERTID_set_cmp_func(sk, cmp) ((sk_OCSP_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_ONEREQ, OCSP_ONEREQ, OCSP_ONEREQ) +#define sk_OCSP_ONEREQ_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_value(sk, idx) ((OCSP_ONEREQ *)OPENSSL_sk_value(ossl_check_const_OCSP_ONEREQ_sk_type(sk), (idx))) +#define sk_OCSP_ONEREQ_new(cmp) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new(ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) +#define sk_OCSP_ONEREQ_new_null() ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_null()) +#define sk_OCSP_ONEREQ_new_reserve(cmp, n) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_ONEREQ_compfunc_type(cmp), (n))) +#define sk_OCSP_ONEREQ_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_ONEREQ_sk_type(sk), (n)) +#define sk_OCSP_ONEREQ_free(sk) OPENSSL_sk_free(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_delete(sk, i) ((OCSP_ONEREQ *)OPENSSL_sk_delete(ossl_check_OCSP_ONEREQ_sk_type(sk), (i))) +#define sk_OCSP_ONEREQ_delete_ptr(sk, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_pop(sk) ((OCSP_ONEREQ *)OPENSSL_sk_pop(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_shift(sk) ((OCSP_ONEREQ *)OPENSSL_sk_shift(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_ONEREQ_sk_type(sk),ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)) +#define sk_OCSP_ONEREQ_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), (idx)) +#define sk_OCSP_ONEREQ_set(sk, idx, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_set(ossl_check_OCSP_ONEREQ_sk_type(sk), (idx), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), pnum) +#define sk_OCSP_ONEREQ_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_dup(sk) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_dup(ossl_check_const_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_copyfunc_type(copyfunc), ossl_check_OCSP_ONEREQ_freefunc_type(freefunc))) +#define sk_OCSP_ONEREQ_set_cmp_func(sk, cmp) ((sk_OCSP_ONEREQ_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) + + +# 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 + +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_RESPID, OCSP_RESPID, OCSP_RESPID) +#define sk_OCSP_RESPID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_value(sk, idx) ((OCSP_RESPID *)OPENSSL_sk_value(ossl_check_const_OCSP_RESPID_sk_type(sk), (idx))) +#define sk_OCSP_RESPID_new(cmp) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new(ossl_check_OCSP_RESPID_compfunc_type(cmp))) +#define sk_OCSP_RESPID_new_null() ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_RESPID_new_reserve(cmp, n) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_RESPID_compfunc_type(cmp), (n))) +#define sk_OCSP_RESPID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_RESPID_sk_type(sk), (n)) +#define sk_OCSP_RESPID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_delete(sk, i) ((OCSP_RESPID *)OPENSSL_sk_delete(ossl_check_OCSP_RESPID_sk_type(sk), (i))) +#define sk_OCSP_RESPID_delete_ptr(sk, ptr) ((OCSP_RESPID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_pop(sk) ((OCSP_RESPID *)OPENSSL_sk_pop(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_shift(sk) ((OCSP_RESPID *)OPENSSL_sk_shift(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_RESPID_sk_type(sk),ossl_check_OCSP_RESPID_freefunc_type(freefunc)) +#define sk_OCSP_RESPID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), (idx)) +#define sk_OCSP_RESPID_set(sk, idx, ptr) ((OCSP_RESPID *)OPENSSL_sk_set(ossl_check_OCSP_RESPID_sk_type(sk), (idx), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), pnum) +#define sk_OCSP_RESPID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_dup(sk) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_copyfunc_type(copyfunc), ossl_check_OCSP_RESPID_freefunc_type(freefunc))) +#define sk_OCSP_RESPID_set_cmp_func(sk, cmp) ((sk_OCSP_RESPID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_compfunc_type(cmp))) + + +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; + +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_SINGLERESP, OCSP_SINGLERESP, OCSP_SINGLERESP) +#define sk_OCSP_SINGLERESP_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_value(sk, idx) ((OCSP_SINGLERESP *)OPENSSL_sk_value(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), (idx))) +#define sk_OCSP_SINGLERESP_new(cmp) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) +#define sk_OCSP_SINGLERESP_new_null() ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_null()) +#define sk_OCSP_SINGLERESP_new_reserve(cmp, n) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp), (n))) +#define sk_OCSP_SINGLERESP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_SINGLERESP_sk_type(sk), (n)) +#define sk_OCSP_SINGLERESP_free(sk) OPENSSL_sk_free(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_delete(sk, i) ((OCSP_SINGLERESP *)OPENSSL_sk_delete(ossl_check_OCSP_SINGLERESP_sk_type(sk), (i))) +#define sk_OCSP_SINGLERESP_delete_ptr(sk, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_pop(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_pop(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_shift(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_shift(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_SINGLERESP_sk_type(sk),ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)) +#define sk_OCSP_SINGLERESP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), (idx)) +#define sk_OCSP_SINGLERESP_set(sk, idx, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_set(ossl_check_OCSP_SINGLERESP_sk_type(sk), (idx), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), pnum) +#define sk_OCSP_SINGLERESP_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_dup(sk) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_dup(ossl_check_const_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_copyfunc_type(copyfunc), ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc))) +#define sk_OCSP_SINGLERESP_set_cmp_func(sk, cmp) ((sk_OCSP_SINGLERESP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) + + +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 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((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) + +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) + +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif + +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, const 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); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, + STACK_OF(X509) *extra_certs); + +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_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + 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); + +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) + +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const 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_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); +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(const 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); + + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ocsperr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ocsperr.h new file mode 100644 index 0000000..46a0523 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ocsperr.h @@ -0,0 +1,53 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_OCSPERR_H +# define OPENSSL_OCSPERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_OCSP + + +/* + * OCSP reason codes. + */ +# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 +# define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_DIGEST_NAME_ERR 106 +# define OCSP_R_DIGEST_SIZE_ERR 107 +# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 +# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 +# 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_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 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/opensslconf.h b/thirdparty/OpenSSL-3.5.3/include/openssl/opensslconf.h new file mode 100644 index 0000000..1e83371 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/opensslconf.h @@ -0,0 +1,17 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_OPENSSLCONF_H +# define OPENSSL_OPENSSLCONF_H +# pragma once + +# include +# include + +#endif /* OPENSSL_OPENSSLCONF_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/opensslv.h b/thirdparty/OpenSSL-3.5.3/include/openssl/opensslv.h new file mode 100644 index 0000000..162cdfd --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/opensslv.h @@ -0,0 +1,109 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\opensslv.h.in + * + * Copyright 1999-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * SECTION 1: VERSION DATA. These will change for each release + */ + +/* + * Base version macros + * + * These macros express version number MAJOR.MINOR.PATCH exactly + */ +# define OPENSSL_VERSION_MAJOR 3 +# define OPENSSL_VERSION_MINOR 5 +# define OPENSSL_VERSION_PATCH 3 + +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ + +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION 3 + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "3.5.3" +# define OPENSSL_FULL_VERSION_STR "3.5.3" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "16 Sep 2025" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL 3.5.3 16 Sep 2025" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |0xfL ) + +# ifdef __cplusplus +} +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ossl_typ.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ossl_typ.h new file mode 100644 index 0000000..82a5898 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ossl_typ.h @@ -0,0 +1,16 @@ +/* + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 original was renamed to + * + * This header file only exists for compatibility reasons with older + * applications which #include . + */ +# include diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/param_build.h b/thirdparty/OpenSSL-3.5.3/include/openssl/param_build.h new file mode 100644 index 0000000..f29fdb2 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/param_build.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PARAM_BUILD_H +# define OPENSSL_PARAM_BUILD_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_PARAM_BLD *OSSL_PARAM_BLD_new(void); +OSSL_PARAM *OSSL_PARAM_BLD_to_param(OSSL_PARAM_BLD *bld); +void OSSL_PARAM_BLD_free(OSSL_PARAM_BLD *bld); + +int OSSL_PARAM_BLD_push_int(OSSL_PARAM_BLD *bld, const char *key, int val); +int OSSL_PARAM_BLD_push_uint(OSSL_PARAM_BLD *bld, const char *key, + unsigned int val); +int OSSL_PARAM_BLD_push_long(OSSL_PARAM_BLD *bld, const char *key, + long int val); +int OSSL_PARAM_BLD_push_ulong(OSSL_PARAM_BLD *bld, const char *key, + unsigned long int val); +int OSSL_PARAM_BLD_push_int32(OSSL_PARAM_BLD *bld, const char *key, + int32_t val); +int OSSL_PARAM_BLD_push_uint32(OSSL_PARAM_BLD *bld, const char *key, + uint32_t val); +int OSSL_PARAM_BLD_push_int64(OSSL_PARAM_BLD *bld, const char *key, + int64_t val); +int OSSL_PARAM_BLD_push_uint64(OSSL_PARAM_BLD *bld, const char *key, + uint64_t val); +int OSSL_PARAM_BLD_push_size_t(OSSL_PARAM_BLD *bld, const char *key, + size_t val); +int OSSL_PARAM_BLD_push_time_t(OSSL_PARAM_BLD *bld, const char *key, + time_t val); +int OSSL_PARAM_BLD_push_double(OSSL_PARAM_BLD *bld, const char *key, + double val); +int OSSL_PARAM_BLD_push_BN(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn); +int OSSL_PARAM_BLD_push_BN_pad(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn, size_t sz); +int OSSL_PARAM_BLD_push_utf8_string(OSSL_PARAM_BLD *bld, const char *key, + const char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_utf8_ptr(OSSL_PARAM_BLD *bld, const char *key, + char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_string(OSSL_PARAM_BLD *bld, const char *key, + const void *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_ptr(OSSL_PARAM_BLD *bld, const char *key, + void *buf, size_t bsize); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PARAM_BUILD_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/params.h b/thirdparty/OpenSSL-3.5.3/include/openssl/params.h new file mode 100644 index 0000000..d4b855d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/params.h @@ -0,0 +1,163 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PARAMS_H +# define OPENSSL_PARAMS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_PARAM_UNMODIFIED ((size_t)-1) + +# define OSSL_PARAM_END \ + { NULL, 0, NULL, 0, 0 } + +# define OSSL_PARAM_DEFN(key, type, addr, sz) \ + { (key), (type), (addr), (sz), OSSL_PARAM_UNMODIFIED } + +/* Basic parameter types without return sizes */ +# define OSSL_PARAM_int(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int)) +# define OSSL_PARAM_uint(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned int)) +# define OSSL_PARAM_long(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(long int)) +# define OSSL_PARAM_ulong(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned long int)) +# define OSSL_PARAM_int32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int32_t)) +# define OSSL_PARAM_uint32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint32_t)) +# define OSSL_PARAM_int64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int64_t)) +# define OSSL_PARAM_uint64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint64_t)) +# define OSSL_PARAM_size_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), sizeof(size_t)) +# define OSSL_PARAM_time_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(time_t)) +# define OSSL_PARAM_double(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_REAL, (addr), sizeof(double)) + +# define OSSL_PARAM_BN(key, bn, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (bn), (sz)) +# define OSSL_PARAM_utf8_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_STRING, (addr), sz) +# define OSSL_PARAM_octet_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_STRING, (addr), sz) + +# define OSSL_PARAM_utf8_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_PTR, (addr), sz) +# define OSSL_PARAM_octet_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_PTR, (addr), sz) + +/* Search an OSSL_PARAM array for a matching name */ +OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *p, const char *key); +const OSSL_PARAM *OSSL_PARAM_locate_const(const OSSL_PARAM *p, const char *key); + +/* Basic parameter type run-time construction */ +OSSL_PARAM OSSL_PARAM_construct_int(const char *key, int *buf); +OSSL_PARAM OSSL_PARAM_construct_uint(const char *key, unsigned int *buf); +OSSL_PARAM OSSL_PARAM_construct_long(const char *key, long int *buf); +OSSL_PARAM OSSL_PARAM_construct_ulong(const char *key, unsigned long int *buf); +OSSL_PARAM OSSL_PARAM_construct_int32(const char *key, int32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint32(const char *key, uint32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_int64(const char *key, int64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint64(const char *key, uint64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_size_t(const char *key, size_t *buf); +OSSL_PARAM OSSL_PARAM_construct_time_t(const char *key, time_t *buf); +OSSL_PARAM OSSL_PARAM_construct_BN(const char *key, unsigned char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_double(const char *key, double *buf); +OSSL_PARAM OSSL_PARAM_construct_utf8_string(const char *key, char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_end(void); + +int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, + const OSSL_PARAM *paramdefs, + const char *key, const char *value, + size_t value_n, int *found); + +int OSSL_PARAM_print_to_bio(const OSSL_PARAM *params, BIO *bio, + int print_values); + +int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); +int OSSL_PARAM_get_uint(const OSSL_PARAM *p, unsigned int *val); +int OSSL_PARAM_get_long(const OSSL_PARAM *p, long int *val); +int OSSL_PARAM_get_ulong(const OSSL_PARAM *p, unsigned long int *val); +int OSSL_PARAM_get_int32(const OSSL_PARAM *p, int32_t *val); +int OSSL_PARAM_get_uint32(const OSSL_PARAM *p, uint32_t *val); +int OSSL_PARAM_get_int64(const OSSL_PARAM *p, int64_t *val); +int OSSL_PARAM_get_uint64(const OSSL_PARAM *p, uint64_t *val); +int OSSL_PARAM_get_size_t(const OSSL_PARAM *p, size_t *val); +int OSSL_PARAM_get_time_t(const OSSL_PARAM *p, time_t *val); + +int OSSL_PARAM_set_int(OSSL_PARAM *p, int val); +int OSSL_PARAM_set_uint(OSSL_PARAM *p, unsigned int val); +int OSSL_PARAM_set_long(OSSL_PARAM *p, long int val); +int OSSL_PARAM_set_ulong(OSSL_PARAM *p, unsigned long int val); +int OSSL_PARAM_set_int32(OSSL_PARAM *p, int32_t val); +int OSSL_PARAM_set_uint32(OSSL_PARAM *p, uint32_t val); +int OSSL_PARAM_set_int64(OSSL_PARAM *p, int64_t val); +int OSSL_PARAM_set_uint64(OSSL_PARAM *p, uint64_t val); +int OSSL_PARAM_set_size_t(OSSL_PARAM *p, size_t val); +int OSSL_PARAM_set_time_t(OSSL_PARAM *p, time_t val); + +int OSSL_PARAM_get_double(const OSSL_PARAM *p, double *val); +int OSSL_PARAM_set_double(OSSL_PARAM *p, double val); + +int OSSL_PARAM_get_BN(const OSSL_PARAM *p, BIGNUM **val); +int OSSL_PARAM_set_BN(OSSL_PARAM *p, const BIGNUM *val); + +int OSSL_PARAM_get_utf8_string(const OSSL_PARAM *p, char **val, size_t max_len); +int OSSL_PARAM_set_utf8_string(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_string(const OSSL_PARAM *p, void **val, size_t max_len, + size_t *used_len); +int OSSL_PARAM_set_octet_string(OSSL_PARAM *p, const void *val, size_t len); + +int OSSL_PARAM_get_utf8_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_set_utf8_ptr(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); +int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val, + size_t used_len); + +int OSSL_PARAM_get_utf8_string_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_get_octet_string_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); + +int OSSL_PARAM_modified(const OSSL_PARAM *p); +void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *p); + +OSSL_PARAM *OSSL_PARAM_dup(const OSSL_PARAM *p); +OSSL_PARAM *OSSL_PARAM_merge(const OSSL_PARAM *p1, const OSSL_PARAM *p2); +void OSSL_PARAM_free(OSSL_PARAM *p); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/pem.h b/thirdparty/OpenSSL-3.5.3/include/openssl/pem.h new file mode 100644 index 0000000..de1b658 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/pem.h @@ -0,0 +1,548 @@ +/* + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PEM_H +# define OPENSSL_PEM_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM_H +# endif + +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#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_STRING_SM2PRIVATEKEY "SM2 PRIVATE KEY" +# define PEM_STRING_SM2PARAMETERS "SM2 PARAMETERS" +# define PEM_STRING_ACERT "ATTRIBUTE CERTIFICATE" + +# define PEM_TYPE_ENCRYPTED 10 +# define PEM_TYPE_MIC_ONLY 20 +# define PEM_TYPE_MIC_CLEAR 30 +# define PEM_TYPE_CLEAR 40 + +/* + * 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(...) + */ + +# define PEM_read_cb_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u) +# define PEM_read_cb_ex_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name##_ex(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + +# define PEM_write_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x) +# define PEM_write_cb_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u) +# define PEM_write_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) +# define PEM_write_cb_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + +# ifdef OPENSSL_NO_STDIO + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# endif +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# endif +# 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) \ + PEM_write_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL, NULL, 0, NULL, NULL); \ + } + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) +# endif + +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) +# endif +# 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) \ + PEM_write_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL,NULL,0,NULL,NULL); \ + } + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) +# endif + +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) +# endif + +# define IMPLEMENT_PEM_write(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# 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) +# endif + +# 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) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# 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) +# endif + +# 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) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_const(name, type, str, asn1) +# endif + +# 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 */ + +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ +# if defined(OPENSSL_NO_STDIO) + +# define DECLARE_PEM_read_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) /**/ +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) /**/ + +# else + +# define DECLARE_PEM_read_fp_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); \ + attr PEM_read_cb_ex_fnsig(name, type, FILE, read); + +# define DECLARE_PEM_write_fp_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); \ + attr PEM_write_ex_fnsig(name, type, FILE, write); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); \ + attr PEM_write_cb_ex_fnsig(name, type, FILE, write); + +# endif + +# define DECLARE_PEM_read_fp(name, type) \ + DECLARE_PEM_read_fp_attr(extern, name, type) +# define DECLARE_PEM_write_fp(name, type) \ + DECLARE_PEM_write_fp_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const(name, type) \ + DECLARE_PEM_write_fp_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_fp(name, type) \ + DECLARE_PEM_write_cb_fp_attr(extern, name, type) + +# define DECLARE_PEM_read_bio_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); \ + attr PEM_read_cb_ex_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_bio_attr(extern, name, type) +# define DECLARE_PEM_read_bio_ex(name, type) \ + DECLARE_PEM_read_bio_ex_attr(extern, name, type) + +# define DECLARE_PEM_write_bio_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_bio_attr(extern, name, type) +# define DECLARE_PEM_write_bio_ex(name, type) \ + DECLARE_PEM_write_bio_ex_attr(extern, name, type) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_bio_const_attr(extern, name, type) +# endif + +# define DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_cb_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_bio_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex_bio(name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(extern, name, type) + +# define DECLARE_PEM_write_attr(attr, name, type) \ + DECLARE_PEM_write_bio_attr(attr, name, type) \ + DECLARE_PEM_write_fp_attr(attr, name, type) +# define DECLARE_PEM_write_ex_attr(attr, name, type) \ + DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_write(name, type) \ + DECLARE_PEM_write_attr(extern, name, type) +# define DECLARE_PEM_write_ex(name, type) \ + DECLARE_PEM_write_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_const_attr(attr, name, type) \ + DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + DECLARE_PEM_write_fp_const_attr(attr, name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_attr(attr, name, type) +# define DECLARE_PEM_write_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex(name, type) \ + DECLARE_PEM_write_cb_ex_attr(extern, name, type) +# define DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_read_bio_attr(attr, name, type) \ + DECLARE_PEM_read_fp_attr(attr, name, type) +# define DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_read_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_attr(extern, name, type) +# define DECLARE_PEM_read_ex(name, type) \ + DECLARE_PEM_read_ex_attr(extern, name, type) +# define DECLARE_PEM_rw_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_attr(attr, name, type) +# define DECLARE_PEM_rw_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_ex_attr(attr, name, type) +# define DECLARE_PEM_rw(name, type) \ + DECLARE_PEM_rw_attr(extern, name, type) +# define DECLARE_PEM_rw_ex(name, type) \ + DECLARE_PEM_rw_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_rw_const_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_const_attr(attr, name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_rw_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_rw_cb_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_cb_attr(attr, name, type) +# define DECLARE_PEM_rw_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_ex_attr(attr, name, type) +# define DECLARE_PEM_rw_cb(name, type) \ + DECLARE_PEM_rw_cb_attr(extern, name, type) +# define DECLARE_PEM_rw_cb_ex(name, type) \ + DECLARE_PEM_rw_cb_ex_attr(extern, name, type) + +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); +# define PEM_FLAG_SECURE 0x1 +# define PEM_FLAG_EAY_COMPATIBLE 0x2 +# define PEM_FLAG_ONLY_B64 0x4 +int PEM_read_bio_ex(BIO *bp, char **name, char **header, + unsigned char **data, long *len, unsigned int flags); +int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); +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, + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_ASN1_write_bio_ctx(OSSL_i2d_of_void_ctx *i2d, void *vctx, + const char *name, BIO *bp, const void *x, + const EVP_CIPHER *enc, const 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); +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_bio_ex(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u, OSSL_LIB_CTX *libctx, + const char *propq); + +int PEM_X509_INFO_write_bio(BIO *bp, const X509_INFO *xi, EVP_CIPHER *enc, + const 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, + const void *x, const EVP_CIPHER *enc, + const 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); +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_ex(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, + void *u, OSSL_LIB_CTX *libctx, const char *propq); +#endif + +int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +int PEM_SignUpdate(EVP_MD_CTX *ctx, const unsigned char *d, unsigned int cnt); +int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, EVP_PKEY *pkey); + +/* The default pem_password_cb that's used internally */ +int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); +void PEM_proc_type(char *buf, int type); +void PEM_dek_info(char *buf, const char *type, int len, const 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(X509_PUBKEY, X509_PUBKEY) +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_DEPRECATED_3_0 +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, RSAPrivateKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSAPublicKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSA_PUBKEY, RSA) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, DSAPrivateKey, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSA_PUBKEY, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSAparams, DSA) +# endif +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, ECPrivateKey, EC_KEY) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, EC_PUBKEY, EC_KEY) +# endif +# endif + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DHparams, DH) +DECLARE_PEM_write_attr(OSSL_DEPRECATEDIN_3_0, DHxparams, DH) +# endif +# endif +DECLARE_PEM_rw_cb_ex(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw_ex(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PrivateKey_traditional(BIO *bp, const EVP_PKEY *x, + const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +/* Why do these take a signed char *kstr? */ +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_bio_PKCS8PrivateKey(BIO *, const EVP_PKEY *, const EVP_CIPHER *, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_bio(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, const EVP_PKEY *x, int nid, + const 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, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, const EVP_PKEY *x, int nid, + const 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, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, + pem_password_cb *cd, void *u); +# endif +EVP_PKEY *PEM_read_bio_Parameters_ex(BIO *bp, EVP_PKEY **x, + OSSL_LIB_CTX *libctx, const char *propq); +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, const EVP_PKEY *x); + +EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PrivateKey_bio(BIO *in); +EVP_PKEY *b2i_PublicKey_bio(BIO *in); +int i2b_PrivateKey_bio(BIO *out, const EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, const EVP_PKEY *pk); +EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +EVP_PKEY *b2i_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +int i2b_PVK_bio(BIO *out, const EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u); +int i2b_PVK_bio_ex(BIO *out, const EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/pem2.h b/thirdparty/OpenSSL-3.5.3/include/openssl/pem2.h new file mode 100644 index 0000000..a8a5325 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/pem2.h @@ -0,0 +1,19 @@ +/* + * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PEM2_H +# define OPENSSL_PEM2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM2_H +# endif +# include +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/pemerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/pemerr.h new file mode 100644 index 0000000..3530775 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/pemerr.h @@ -0,0 +1,59 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PEMERR_H +# define OPENSSL_PEMERR_H +# pragma once + +# include +# include +# include + + + +/* + * PEM 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_DSS_KEY_BLOB 131 +# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_EXPECTING_RSA_KEY_BLOB 132 +# 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 +# define PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE 110 +# define PEM_R_UNSUPPORTED_PVK_KEY_TYPE 133 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12.h b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12.h new file mode 100644 index 0000000..f6efafc --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12.h @@ -0,0 +1,366 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\pkcs12.h.in + * + * Copyright 1999-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#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 + +/* The macro is expected to be used only internally. Kept for backwards compatibility. */ +# 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; + +SKM_DEFINE_STACK_OF_INTERNAL(PKCS12_SAFEBAG, PKCS12_SAFEBAG, PKCS12_SAFEBAG) +#define sk_PKCS12_SAFEBAG_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_value(sk, idx) ((PKCS12_SAFEBAG *)OPENSSL_sk_value(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), (idx))) +#define sk_PKCS12_SAFEBAG_new(cmp) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) +#define sk_PKCS12_SAFEBAG_new_null() ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_null()) +#define sk_PKCS12_SAFEBAG_new_reserve(cmp, n) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_reserve(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp), (n))) +#define sk_PKCS12_SAFEBAG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (n)) +#define sk_PKCS12_SAFEBAG_free(sk) OPENSSL_sk_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_delete(sk, i) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (i))) +#define sk_PKCS12_SAFEBAG_delete_ptr(sk, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete_ptr(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_pop(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_pop(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_shift(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_shift(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk),ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)) +#define sk_PKCS12_SAFEBAG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), (idx)) +#define sk_PKCS12_SAFEBAG_set(sk, idx, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_set(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (idx), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), pnum) +#define sk_PKCS12_SAFEBAG_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_dup(sk) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_dup(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_copyfunc_type(copyfunc), ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc))) +#define sk_PKCS12_SAFEBAG_set_cmp_func(sk, cmp) ((sk_PKCS12_SAFEBAG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) + + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 + +# 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 +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif + +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); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); +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_create_secret(int type, int vtype, const unsigned char *value, int len); +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_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); + +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 *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); +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_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); +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); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + +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 PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); +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); +void PKCS12_SAFEBAG_set0_attrs(PKCS12_SAFEBAG *bag, STACK_OF(X509_ATTRIBUTE) *attrs); +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); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); +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); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); +PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + +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_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +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_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +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_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + +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_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); +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_set_pbmac1_pbkdf2(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type, const char *prf_md_name); +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); +typedef int PKCS12_create_cb(PKCS12_SAFEBAG *bag, void *cbarg); +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 *PKCS12_create_ex(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, + OSSL_LIB_CTX *ctx, const char *propq); +PKCS12 *PKCS12_create_ex2(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, + OSSL_LIB_CTX *ctx, const char *propq, + PKCS12_create_cb *cb, void *cbarg); + +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); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, const 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); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12err.h b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12err.h new file mode 100644 index 0000000..abce373 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs12err.h @@ -0,0 +1,46 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PKCS12ERR_H +# define OPENSSL_PKCS12ERR_H +# pragma once + +# include +# include +# include + + + +/* + * PKCS12 reason codes. + */ +# define PKCS12_R_CALLBACK_FAILED 115 +# 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_INVALID_TYPE 112 +# 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_CIPHERFINAL_ERROR 116 +# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 +# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7.h b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7.h new file mode 100644 index 0000000..03633b1 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7.h @@ -0,0 +1,430 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\pkcs7.h.in + * + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif + +# include +# include +# include + +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + +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; /* confusing name, actually used for signing */ + ASN1_OCTET_STRING *enc_digest; /* confusing name, actually signature */ + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; + const PKCS7_CTX *ctx; +} PKCS7_SIGNER_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO) +#define sk_PKCS7_SIGNER_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_value(sk, idx) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_SIGNER_INFO_new(cmp) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) +#define sk_PKCS7_SIGNER_INFO_new_null() ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_SIGNER_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_SIGNER_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (n)) +#define sk_PKCS7_SIGNER_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_delete(sk, i) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (i))) +#define sk_PKCS7_SIGNER_INFO_delete_ptr(sk, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_pop(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_shift(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk),ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_SIGNER_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), (idx)) +#define sk_PKCS7_SIGNER_INFO_set(sk, idx, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (idx), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), pnum) +#define sk_PKCS7_SIGNER_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_dup(sk) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_SIGNER_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_SIGNER_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) + + +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 */ + const PKCS7_CTX *ctx; +} PKCS7_RECIP_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) +#define sk_PKCS7_RECIP_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_value(sk, idx) ((PKCS7_RECIP_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_RECIP_INFO_new(cmp) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) +#define sk_PKCS7_RECIP_INFO_new_null() ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_RECIP_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_RECIP_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (n)) +#define sk_PKCS7_RECIP_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_delete(sk, i) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (i))) +#define sk_PKCS7_RECIP_INFO_delete_ptr(sk, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_pop(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_shift(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk),ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_RECIP_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), (idx)) +#define sk_PKCS7_RECIP_INFO_set(sk, idx, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (idx), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), pnum) +#define sk_PKCS7_RECIP_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_dup(sk) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_RECIP_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_RECIP_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) + + + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ /* name should be 'certificates' */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ + 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; + const PKCS7_CTX *ctx; +} 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 ] */ /* name should be 'certificates' */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ + 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; /* field name 'signed' would clash with C keyword */ + /* 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_CTX ctx; +} PKCS7; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7, PKCS7, PKCS7) +#define sk_PKCS7_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_value(sk, idx) ((PKCS7 *)OPENSSL_sk_value(ossl_check_const_PKCS7_sk_type(sk), (idx))) +#define sk_PKCS7_new(cmp) ((STACK_OF(PKCS7) *)OPENSSL_sk_new(ossl_check_PKCS7_compfunc_type(cmp))) +#define sk_PKCS7_new_null() ((STACK_OF(PKCS7) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_new_reserve(cmp, n) ((STACK_OF(PKCS7) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_compfunc_type(cmp), (n))) +#define sk_PKCS7_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_sk_type(sk), (n)) +#define sk_PKCS7_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_delete(sk, i) ((PKCS7 *)OPENSSL_sk_delete(ossl_check_PKCS7_sk_type(sk), (i))) +#define sk_PKCS7_delete_ptr(sk, ptr) ((PKCS7 *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_pop(sk) ((PKCS7 *)OPENSSL_sk_pop(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_shift(sk) ((PKCS7 *)OPENSSL_sk_shift(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_sk_type(sk),ossl_check_PKCS7_freefunc_type(freefunc)) +#define sk_PKCS7_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), (idx)) +#define sk_PKCS7_set(sk, idx, ptr) ((PKCS7 *)OPENSSL_sk_set(ossl_check_PKCS7_sk_type(sk), (idx), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), pnum) +#define sk_PKCS7_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_dup(sk) ((STACK_OF(PKCS7) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_sk_type(sk))) +#define sk_PKCS7_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_sk_type(sk), ossl_check_PKCS7_copyfunc_type(copyfunc), ossl_check_PKCS7_freefunc_type(freefunc))) +#define sk_PKCS7_set_cmp_func(sk, cmp) ((sk_PKCS7_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_compfunc_type(cmp))) + + + +# 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, const PKCS7 *p7); +# endif +DECLARE_ASN1_DUP_FUNCTION(PKCS7) +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, const 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) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +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_type_is_other(PKCS7 *p7); +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 *cert); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl); +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 *signer); + +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_get_octet_string(PKCS7 *p7); +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(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const 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 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); + +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); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); +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_ex(BIO *bio, BIO **bcont, PKCS7 **p7); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7err.h b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7err.h new file mode 100644 index 0000000..ceb1a50 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/pkcs7err.h @@ -0,0 +1,63 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PKCS7ERR_H +# define OPENSSL_PKCS7ERR_H +# pragma once + +# include +# include +# include + + + +/* + * PKCS7 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 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/prov_ssl.h b/thirdparty/OpenSSL-3.5.3/include/openssl/prov_ssl.h new file mode 100644 index 0000000..76d01e1 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/prov_ssl.h @@ -0,0 +1,38 @@ +/* + * Copyright 2021-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PROV_SSL_H +# define OPENSSL_PROV_SSL_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* SSL/TLS related defines useful to providers */ + +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +/* SSL/TLS uses a 2 byte unsigned version number */ +# define SSL3_VERSION 0x0300 +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS1_3_VERSION 0x0304 +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS1_BAD_VER 0x0100 + +/* QUIC uses a 4 byte unsigned version number */ +# define OSSL_QUIC1_VERSION 0x0000001 + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PROV_SSL_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/proverr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/proverr.h new file mode 100644 index 0000000..10bcd42 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/proverr.h @@ -0,0 +1,170 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PROVERR_H +# define OPENSSL_PROVERR_H +# pragma once + +# include +# include +# include + + + +/* + * PROV reason codes. + */ +# define PROV_R_ADDITIONAL_INPUT_TOO_LONG 184 +# define PROV_R_ALGORITHM_MISMATCH 173 +# define PROV_R_ALREADY_INSTANTIATED 185 +# define PROV_R_BAD_DECRYPT 100 +# define PROV_R_BAD_ENCODING 141 +# define PROV_R_BAD_LENGTH 142 +# define PROV_R_BAD_TLS_CLIENT_VERSION 161 +# define PROV_R_BN_ERROR 160 +# define PROV_R_CIPHER_OPERATION_FAILED 102 +# define PROV_R_COFACTOR_REQUIRED 236 +# define PROV_R_DERIVATION_FUNCTION_INIT_FAILED 205 +# define PROV_R_DIGEST_NOT_ALLOWED 174 +# define PROV_R_EMS_NOT_ENABLED 233 +# define PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS 244 +# define PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK 186 +# define PROV_R_ERROR_INSTANTIATING_DRBG 188 +# define PROV_R_ERROR_RETRIEVING_ENTROPY 189 +# define PROV_R_ERROR_RETRIEVING_NONCE 190 +# define PROV_R_FAILED_DURING_DERIVATION 164 +# define PROV_R_FAILED_TO_CREATE_LOCK 180 +# define PROV_R_FAILED_TO_DECRYPT 162 +# define PROV_R_FAILED_TO_GENERATE_KEY 121 +# define PROV_R_FAILED_TO_GET_PARAMETER 103 +# define PROV_R_FAILED_TO_SET_PARAMETER 104 +# define PROV_R_FAILED_TO_SIGN 175 +# define PROV_R_FINAL_CALL_OUT_OF_ORDER 237 +# define PROV_R_FIPS_MODULE_CONDITIONAL_ERROR 227 +# define PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE 224 +# define PROV_R_FIPS_MODULE_IMPORT_PCT_ERROR 253 +# define PROV_R_FIPS_MODULE_IN_ERROR_STATE 225 +# define PROV_R_GENERATE_ERROR 191 +# define PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 165 +# define PROV_R_INDICATOR_INTEGRITY_FAILURE 210 +# define PROV_R_INIT_CALL_OUT_OF_ORDER 238 +# define PROV_R_INSUFFICIENT_DRBG_STRENGTH 181 +# define PROV_R_INVALID_AAD 108 +# define PROV_R_INVALID_AEAD 231 +# define PROV_R_INVALID_CONFIG_DATA 211 +# define PROV_R_INVALID_CONSTANT_LENGTH 157 +# define PROV_R_INVALID_CURVE 176 +# define PROV_R_INVALID_CUSTOM_LENGTH 111 +# define PROV_R_INVALID_DATA 115 +# define PROV_R_INVALID_DIGEST 122 +# define PROV_R_INVALID_DIGEST_LENGTH 166 +# define PROV_R_INVALID_DIGEST_SIZE 218 +# define PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION 243 +# define PROV_R_INVALID_INPUT_LENGTH 230 +# define PROV_R_INVALID_ITERATION_COUNT 123 +# define PROV_R_INVALID_IV_LENGTH 109 +# define PROV_R_INVALID_KDF 232 +# define PROV_R_INVALID_KEY 158 +# define PROV_R_INVALID_KEY_LENGTH 105 +# define PROV_R_INVALID_MAC 151 +# define PROV_R_INVALID_MEMORY_SIZE 235 +# define PROV_R_INVALID_MGF1_MD 167 +# define PROV_R_INVALID_MODE 125 +# define PROV_R_INVALID_OUTPUT_LENGTH 217 +# define PROV_R_INVALID_PADDING_MODE 168 +# define PROV_R_INVALID_PREHASHED_DIGEST_LENGTH 241 +# define PROV_R_INVALID_PUBINFO 198 +# define PROV_R_INVALID_SALT_LENGTH 112 +# define PROV_R_INVALID_SEED_LENGTH 154 +# define PROV_R_INVALID_SIGNATURE_SIZE 179 +# define PROV_R_INVALID_STATE 212 +# define PROV_R_INVALID_TAG 110 +# define PROV_R_INVALID_TAG_LENGTH 118 +# define PROV_R_INVALID_THREAD_POOL_SIZE 234 +# define PROV_R_INVALID_UKM_LENGTH 200 +# define PROV_R_INVALID_X931_DIGEST 170 +# define PROV_R_IN_ERROR_STATE 192 +# define PROV_R_KEY_SETUP_FAILED 101 +# define PROV_R_KEY_SIZE_TOO_SMALL 171 +# define PROV_R_LENGTH_TOO_LARGE 202 +# define PROV_R_MISMATCHING_DOMAIN_PARAMETERS 203 +# define PROV_R_MISSING_CEK_ALG 144 +# define PROV_R_MISSING_CIPHER 155 +# define PROV_R_MISSING_CONFIG_DATA 213 +# define PROV_R_MISSING_CONSTANT 156 +# define PROV_R_MISSING_KEY 128 +# define PROV_R_MISSING_MAC 150 +# define PROV_R_MISSING_MESSAGE_DIGEST 129 +# define PROV_R_MISSING_OID 209 +# define PROV_R_MISSING_PASS 130 +# define PROV_R_MISSING_SALT 131 +# define PROV_R_MISSING_SECRET 132 +# define PROV_R_MISSING_SEED 140 +# define PROV_R_MISSING_SESSION_ID 133 +# define PROV_R_MISSING_TYPE 134 +# define PROV_R_MISSING_XCGHASH 135 +# define PROV_R_ML_DSA_NO_FORMAT 245 +# define PROV_R_ML_KEM_NO_FORMAT 246 +# define PROV_R_MODULE_INTEGRITY_FAILURE 214 +# define PROV_R_NOT_A_PRIVATE_KEY 221 +# define PROV_R_NOT_A_PUBLIC_KEY 220 +# define PROV_R_NOT_INSTANTIATED 193 +# define PROV_R_NOT_PARAMETERS 226 +# define PROV_R_NOT_SUPPORTED 136 +# define PROV_R_NOT_XOF_OR_INVALID_LENGTH 113 +# define PROV_R_NO_INSTANCE_ALLOWED 242 +# define PROV_R_NO_KEY_SET 114 +# define PROV_R_NO_PARAMETERS_SET 177 +# define PROV_R_NULL_LENGTH_POINTER 247 +# define PROV_R_NULL_OUTPUT_BUFFER 248 +# define PROV_R_ONESHOT_CALL_OUT_OF_ORDER 239 +# define PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 178 +# define PROV_R_OUTPUT_BUFFER_TOO_SMALL 106 +# define PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS 228 +# define PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED 187 +# define PROV_R_PARENT_LOCKING_NOT_ENABLED 182 +# define PROV_R_PARENT_STRENGTH_TOO_WEAK 194 +# define PROV_R_PATH_MUST_BE_ABSOLUTE 219 +# define PROV_R_PERSONALISATION_STRING_TOO_LONG 195 +# define PROV_R_PSS_SALTLEN_TOO_SMALL 172 +# define PROV_R_REQUEST_TOO_LARGE_FOR_DRBG 196 +# define PROV_R_REQUIRE_CTR_MODE_CIPHER 206 +# define PROV_R_RESEED_ERROR 197 +# define PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 222 +# define PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT 229 +# define PROV_R_SELF_TEST_KAT_FAILURE 215 +# define PROV_R_SELF_TEST_POST_FAILURE 216 +# define PROV_R_TAG_NOT_NEEDED 120 +# define PROV_R_TAG_NOT_SET 119 +# define PROV_R_TOO_MANY_RECORDS 126 +# define PROV_R_UNABLE_TO_FIND_CIPHERS 207 +# define PROV_R_UNABLE_TO_GET_PARENT_STRENGTH 199 +# define PROV_R_UNABLE_TO_GET_PASSPHRASE 159 +# define PROV_R_UNABLE_TO_INITIALISE_CIPHERS 208 +# define PROV_R_UNABLE_TO_LOAD_SHA256 147 +# define PROV_R_UNABLE_TO_LOCK_PARENT 201 +# define PROV_R_UNABLE_TO_RESEED 204 +# define PROV_R_UNEXPECTED_KEY_PARAMETERS 249 +# define PROV_R_UNSUPPORTED_CEK_ALG 145 +# define PROV_R_UNSUPPORTED_KEY_SIZE 153 +# define PROV_R_UNSUPPORTED_MAC_TYPE 137 +# define PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS 152 +# define PROV_R_UNSUPPORTED_SELECTION 250 +# define PROV_R_UPDATE_CALL_OUT_OF_ORDER 240 +# define PROV_R_URI_AUTHORITY_UNSUPPORTED 223 +# define PROV_R_VALUE_ERROR 138 +# define PROV_R_WRONG_CIPHERTEXT_SIZE 251 +# define PROV_R_WRONG_FINAL_BLOCK_LENGTH 107 +# define PROV_R_WRONG_OUTPUT_BUFFER_SIZE 139 +# define PROV_R_XOF_DIGESTS_NOT_ALLOWED 183 +# define PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE 148 +# define PROV_R_XTS_DUPLICATED_KEYS 149 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/provider.h b/thirdparty/OpenSSL-3.5.3/include/openssl/provider.h new file mode 100644 index 0000000..5144357 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/provider.h @@ -0,0 +1,94 @@ +/* + * Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_PROVIDER_H +# define OPENSSL_PROVIDER_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Set and Get a library context search path */ +int OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *, const char *path); +const char *OSSL_PROVIDER_get0_default_search_path(OSSL_LIB_CTX *libctx); + +/* Load and unload a provider */ +OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *, const char *name); +OSSL_PROVIDER *OSSL_PROVIDER_load_ex(OSSL_LIB_CTX *, const char *name, + OSSL_PARAM *params); +OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *, const char *name, + int retain_fallbacks); +OSSL_PROVIDER *OSSL_PROVIDER_try_load_ex(OSSL_LIB_CTX *, const char *name, + OSSL_PARAM *params, + int retain_fallbacks); +int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov); +int OSSL_PROVIDER_available(OSSL_LIB_CTX *, const char *name); +int OSSL_PROVIDER_do_all(OSSL_LIB_CTX *ctx, + int (*cb)(OSSL_PROVIDER *provider, void *cbdata), + void *cbdata); + +const OSSL_PARAM *OSSL_PROVIDER_gettable_params(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int OSSL_PROVIDER_self_test(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); + +/*- + * Provider configuration parameters are normally set in the configuration file, + * but can also be set early in the main program before a provider is in use by + * multiple threads. + * + * Only UTF8-string values are supported. + */ +int OSSL_PROVIDER_add_conf_parameter(OSSL_PROVIDER *prov, const char *name, + const char *value); +/* + * Retrieves any of the requested configuration parameters for the given + * provider that were set in the configuration file or via the above + * OSSL_PROVIDER_add_parameter() function. + * + * The |params| array elements MUST have type OSSL_PARAM_UTF8_PTR, values are + * returned by reference, not as copies. + */ +int OSSL_PROVIDER_get_conf_parameters(const OSSL_PROVIDER *prov, + OSSL_PARAM params[]); +/* + * Parse a provider configuration parameter as a boolean value, + * or return a default value if unable to retrieve the parameter. + * Values like "1", "yes", "true", ... are true (nonzero). + * Values like "0", "no", "false", ... are false (zero). + */ +int OSSL_PROVIDER_conf_get_bool(const OSSL_PROVIDER *prov, + const char *name, int defval); + +const OSSL_ALGORITHM *OSSL_PROVIDER_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void OSSL_PROVIDER_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, const OSSL_ALGORITHM *algs); +void *OSSL_PROVIDER_get0_provider_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *OSSL_PROVIDER_get0_dispatch(const OSSL_PROVIDER *prov); + +/* Add a built in providers */ +int OSSL_PROVIDER_add_builtin(OSSL_LIB_CTX *, const char *name, + OSSL_provider_init_fn *init_fn); + +/* Information */ +const char *OSSL_PROVIDER_get0_name(const OSSL_PROVIDER *prov); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/quic.h b/thirdparty/OpenSSL-3.5.3/include/openssl/quic.h new file mode 100644 index 0000000..8eacc63 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/quic.h @@ -0,0 +1,75 @@ +/* + * Copyright 2022-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_QUIC_H +# define OPENSSL_QUIC_H +# pragma once + +# include +# include + +# ifndef OPENSSL_NO_QUIC + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Method used for non-thread-assisted QUIC client operation. + */ +__owur const SSL_METHOD *OSSL_QUIC_client_method(void); + +/* + * Method used for thread-assisted QUIC client operation. + */ +__owur const SSL_METHOD *OSSL_QUIC_client_thread_method(void); + +/* + * QUIC transport error codes (RFC 9000 s. 20.1) + */ +# define OSSL_QUIC_ERR_NO_ERROR 0x00 +# define OSSL_QUIC_ERR_INTERNAL_ERROR 0x01 +# define OSSL_QUIC_ERR_CONNECTION_REFUSED 0x02 +# define OSSL_QUIC_ERR_FLOW_CONTROL_ERROR 0x03 +# define OSSL_QUIC_ERR_STREAM_LIMIT_ERROR 0x04 +# define OSSL_QUIC_ERR_STREAM_STATE_ERROR 0x05 +# define OSSL_QUIC_ERR_FINAL_SIZE_ERROR 0x06 +# define OSSL_QUIC_ERR_FRAME_ENCODING_ERROR 0x07 +# define OSSL_QUIC_ERR_TRANSPORT_PARAMETER_ERROR 0x08 +# define OSSL_QUIC_ERR_CONNECTION_ID_LIMIT_ERROR 0x09 +# define OSSL_QUIC_ERR_PROTOCOL_VIOLATION 0x0A +# define OSSL_QUIC_ERR_INVALID_TOKEN 0x0B +# define OSSL_QUIC_ERR_APPLICATION_ERROR 0x0C +# define OSSL_QUIC_ERR_CRYPTO_BUFFER_EXCEEDED 0x0D +# define OSSL_QUIC_ERR_KEY_UPDATE_ERROR 0x0E +# define OSSL_QUIC_ERR_AEAD_LIMIT_REACHED 0x0F +# define OSSL_QUIC_ERR_NO_VIABLE_PATH 0x10 + +/* Inclusive range for handshake-specific errors. */ +# define OSSL_QUIC_ERR_CRYPTO_ERR_BEGIN 0x0100 +# define OSSL_QUIC_ERR_CRYPTO_ERR_END 0x01FF + +# define OSSL_QUIC_ERR_CRYPTO_ERR(X) \ + (OSSL_QUIC_ERR_CRYPTO_ERR_BEGIN + (X)) + +/* Local errors. */ +# define OSSL_QUIC_LOCAL_ERR_IDLE_TIMEOUT \ + ((uint64_t)0xFFFFFFFFFFFFFFFFULL) + +/* + * Method used for QUIC server operation. + */ +__owur const SSL_METHOD *OSSL_QUIC_server_method(void); + +# ifdef __cplusplus +} +# endif + +# endif /* OPENSSL_NO_QUIC */ +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/rand.h b/thirdparty/OpenSSL-3.5.3/include/openssl/rand.h new file mode 100644 index 0000000..4e59e50 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/rand.h @@ -0,0 +1,131 @@ +/* + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RAND_H +# define OPENSSL_RAND_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RAND_H +# endif + +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + */ +# define RAND_DRBG_STRENGTH 256 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +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 randomness); + int (*pseudorand) (unsigned char *buf, int num); + int (*status) (void); +}; + +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_method(const RAND_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_engine(ENGINE *engine); +# endif + +OSSL_DEPRECATEDIN_3_0 RAND_METHOD *RAND_OpenSSL(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define RAND_cleanup() while(0) continue +# endif +int RAND_bytes(unsigned char *buf, int num); +int RAND_priv_bytes(unsigned char *buf, int num); + +/* + * Equivalent of RAND_priv_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +/* + * Equivalent of RAND_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 int RAND_pseudo_bytes(unsigned char *buf, int num); +# endif + +EVP_RAND_CTX *RAND_get0_primary(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_public(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_private(OSSL_LIB_CTX *ctx); +int RAND_set0_public(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); +int RAND_set0_private(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); + +int RAND_set_DRBG_type(OSSL_LIB_CTX *ctx, const char *drbg, const char *propq, + const char *cipher, const char *digest); +int RAND_set_seed_source_type(OSSL_LIB_CTX *ctx, const char *seed, + const char *propq); + +void RAND_seed(const void *buf, int num); +void RAND_keep_random_devices_open(int keep); + +# if defined(__ANDROID__) && defined(__NDK_FPABI__) +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +# endif +void RAND_add(const void *buf, int num, double randomness); +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 */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void RAND_screen(void); +OSSL_DEPRECATEDIN_1_1_0 int RAND_event(UINT, WPARAM, LPARAM); +# endif +# endif + +int RAND_set1_random_provider(OSSL_LIB_CTX *ctx, OSSL_PROVIDER *p); + +/* Which parameter to provider_random call */ +# define OSSL_PROV_RANDOM_PUBLIC 0 +# define OSSL_PROV_RANDOM_PRIVATE 1 + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/randerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/randerr.h new file mode 100644 index 0000000..5e1e6d7 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/randerr.h @@ -0,0 +1,70 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RANDERR_H +# define OPENSSL_RANDERR_H +# pragma once + +# include +# include +# include + + + +/* + * RAND reason codes. + */ +# define RAND_R_ADDITIONAL_INPUT_TOO_LONG 102 +# define RAND_R_ALREADY_INSTANTIATED 103 +# define RAND_R_ARGUMENT_OUT_OF_RANGE 105 +# define RAND_R_CANNOT_OPEN_FILE 121 +# define RAND_R_DRBG_ALREADY_INITIALIZED 129 +# define RAND_R_DRBG_NOT_INITIALISED 104 +# define RAND_R_ENTROPY_INPUT_TOO_LONG 106 +# define RAND_R_ENTROPY_OUT_OF_RANGE 124 +# define RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED 127 +# define RAND_R_ERROR_INITIALISING_DRBG 107 +# define RAND_R_ERROR_INSTANTIATING_DRBG 108 +# define RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 109 +# define RAND_R_ERROR_RETRIEVING_ENTROPY 110 +# define RAND_R_ERROR_RETRIEVING_NONCE 111 +# define RAND_R_FAILED_TO_CREATE_LOCK 126 +# define RAND_R_FUNC_NOT_IMPLEMENTED 101 +# define RAND_R_FWRITE_ERROR 123 +# define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INSUFFICIENT_DRBG_STRENGTH 139 +# define RAND_R_INTERNAL_ERROR 113 +# define RAND_R_INVALID_PROPERTY_QUERY 137 +# define RAND_R_IN_ERROR_STATE 114 +# define RAND_R_NOT_A_REGULAR_FILE 122 +# define RAND_R_NOT_INSTANTIATED 115 +# define RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED 128 +# define RAND_R_PARENT_LOCKING_NOT_ENABLED 130 +# define RAND_R_PARENT_STRENGTH_TOO_WEAK 131 +# define RAND_R_PERSONALISATION_STRING_TOO_LONG 116 +# define RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED 133 +# define RAND_R_PRNG_NOT_SEEDED 100 +# define RAND_R_RANDOM_POOL_IS_EMPTY 142 +# define RAND_R_RANDOM_POOL_OVERFLOW 125 +# define RAND_R_RANDOM_POOL_UNDERFLOW 134 +# define RAND_R_REQUEST_TOO_LARGE_FOR_DRBG 117 +# define RAND_R_RESEED_ERROR 118 +# define RAND_R_SELFTEST_FAILURE 119 +# define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 +# define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNABLE_TO_CREATE_DRBG 143 +# define RAND_R_UNABLE_TO_FETCH_DRBG 144 +# define RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER 141 +# define RAND_R_UNABLE_TO_GET_PARENT_STRENGTH 138 +# define RAND_R_UNABLE_TO_LOCK_PARENT 140 +# define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 +# define RAND_R_UNSUPPORTED_DRBG_TYPE 120 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/rc2.h b/thirdparty/OpenSSL-3.5.3/include/openssl/rc2.h new file mode 100644 index 0000000..ff633fd --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/rc2.h @@ -0,0 +1,68 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RC2_H +# define OPENSSL_RC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC2_H +# endif + +# include + +# ifndef OPENSSL_NO_RC2 +# ifdef __cplusplus +extern "C" { +# endif + +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef unsigned int RC2_INT; + +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 + +typedef struct rc2_key_st { + RC2_INT data[64]; +} RC2_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void RC2_set_key(RC2_KEY *key, int len, + const unsigned char *data, int bits); +OSSL_DEPRECATEDIN_3_0 void RC2_ecb_encrypt(const unsigned char *in, + unsigned char *out, RC2_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_encrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_decrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/rc4.h b/thirdparty/OpenSSL-3.5.3/include/openssl/rc4.h new file mode 100644 index 0000000..600b288 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/rc4.h @@ -0,0 +1,47 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RC4_H +# define OPENSSL_RC4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC4_H +# endif + +# include + +# ifndef OPENSSL_NO_RC4 +# include +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rc4_key_st { + RC4_INT x, y; + RC4_INT data[256]; +} RC4_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *RC4_options(void); +OSSL_DEPRECATEDIN_3_0 void RC4_set_key(RC4_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void RC4(RC4_KEY *key, size_t len, + const unsigned char *indata, + unsigned char *outdata); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/rc5.h b/thirdparty/OpenSSL-3.5.3/include/openssl/rc5.h new file mode 100644 index 0000000..de83352 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/rc5.h @@ -0,0 +1,79 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RC5_H +# define OPENSSL_RC5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC5_H +# endif + +# include + +# ifndef OPENSSL_NO_RC5 +# ifdef __cplusplus +extern "C" { +# endif + +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 + +# define RC5_32_INT unsigned int + +/* + * 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; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RC5_32_set_key(RC5_32_KEY *key, int len, + const unsigned char *data, + int rounds); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ecb_encrypt(const unsigned char *in, + unsigned char *out, + RC5_32_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 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); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ripemd.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ripemd.h new file mode 100644 index 0000000..900ee31 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ripemd.h @@ -0,0 +1,59 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RIPEMD_H +# define OPENSSL_RIPEMD_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RIPEMD_H +# endif + +# include + +# ifndef OPENSSL_NO_RMD160 +# include +# include + +# define RIPEMD160_DIGEST_LENGTH 20 + +# ifdef __cplusplus +extern "C" { +# endif +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define RIPEMD160_LONG unsigned int + +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) + +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; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Init(RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *RIPEMD160(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void RIPEMD160_Transform(RIPEMD160_CTX *c, + const unsigned char *b); +# endif + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/rsa.h b/thirdparty/OpenSSL-3.5.3/include/openssl/rsa.h new file mode 100644 index 0000000..167427d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/rsa.h @@ -0,0 +1,615 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RSA_H +# define OPENSSL_RSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RSA_H +# endif + +# include + +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +# endif + +# define RSA_3 0x3L +# define RSA_F4 0x10001L + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048 + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif + +/* exponent limit enforced for "large" modulus only */ +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif +/* based on RFC 8017 appendix A.1.2 */ +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 + +# define RSA_DEFAULT_PRIME_NUM 2 + +# define RSA_METHOD_FLAG_NO_CHECK 0x0001 +# 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 +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define RSA_FLAG_NO_CONSTTIME 0x0000 +# endif +/* 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. + */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME +# endif + +/*- + * New with 3.0: use part of the flags to denote exact type of RSA key, + * some of which are limited to specific signature and encryption schemes. + * These different types share the same RSA structure, but indicate the + * use of certain fields in that structure. + * Currently known are: + * RSA - this is the "normal" unlimited RSA structure (typenum 0) + * RSASSA-PSS - indicates that the PSS parameters are used. + * RSAES-OAEP - no specific field used for the moment, but OAEP padding + * is expected. (currently unused) + * + * 4 bits allow for 16 types + */ +# define RSA_FLAG_TYPE_MASK 0xF000 +# define RSA_FLAG_TYPE_RSA 0x0000 +# define RSA_FLAG_TYPE_RSASSAPSS 0x1000 +# define RSA_FLAG_TYPE_RSAESOAEP 0x2000 + +int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode); +int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad_mode); + +int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen); + +int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits); +int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); +int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +# endif + +/* Salt length matches digest */ +# define RSA_PSS_SALTLEN_DIGEST -1 +/* Verify only: auto detect salt length */ +# define RSA_PSS_SALTLEN_AUTO -2 +/* Set salt length to maximum possible */ +# define RSA_PSS_SALTLEN_MAX -3 +/* Auto-detect on verify, set salt length to min(maximum possible, digest + * length) on sign */ +# define RSA_PSS_SALTLEN_AUTO_DIGEST_MAX -4 +/* Old compatible max salt length for sign only */ +# define RSA_PSS_SALTLEN_MAX_SIGN -2 + +int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name(EVP_PKEY_CTX *ctx, + const char *mdname); + +int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx, + const char *mdname, + const char *mdprops); + +int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int llen); +int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); + +# 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 EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) + +# define EVP_PKEY_CTRL_RSA_IMPLICIT_REJECTION (EVP_PKEY_ALG_CTRL + 14) + +# define RSA_PKCS1_PADDING 1 +# 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_WITH_TLS_PADDING 7 + +/* internal RSA_ only */ +# define RSA_PKCS1_NO_IMPLICIT_REJECT_PADDING 8 + +# 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) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new(void); +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 int RSA_bits(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_security_bits(const RSA *rsa); + +OSSL_DEPRECATEDIN_3_0 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_crt_params(RSA *r, + BIGNUM *dmp1, BIGNUM *dmq1, + BIGNUM *iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_multi_prime_params(RSA *r, + BIGNUM *primes[], + BIGNUM *exps[], + BIGNUM *coeffs[], + int pnum); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, + const BIGNUM **d); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_factors(const RSA *r, + const BIGNUM **p, const BIGNUM **q); +OSSL_DEPRECATEDIN_3_0 int RSA_get_multi_prime_extra_count(const RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_factors(const RSA *r, + const BIGNUM *primes[]); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, + const BIGNUM **dmq1, + const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 +int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], + const BIGNUM *coeffs[]); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_n(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_e(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_d(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_p(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_q(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmp1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmq1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_iqmp(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +OSSL_DEPRECATEDIN_3_0 void RSA_clear_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_test_flags(const RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_set_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_get_version(RSA *r); +OSSL_DEPRECATEDIN_3_0 ENGINE *RSA_get0_engine(const RSA *r); +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ + +# define EVP_RSA_gen(bits) \ + EVP_PKEY_Q_keygen(NULL, NULL, "RSA", (size_t)(0 + (bits))) + +/* Deprecated version */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg); +# endif + +/* New version */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb); +/* Multi-prime version */ +OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb); + +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_generate_key_ex(RSA *rsa, int bits, + const BIGNUM *e, + BN_GENCB *cb); + +OSSL_DEPRECATEDIN_3_0 int RSA_check_key(const RSA *); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key_ex(const RSA *, BN_GENCB *cb); + /* next 4 return -1 on error */ +OSSL_DEPRECATEDIN_3_0 +int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r); +/* "up" the RSA object's reference count */ +OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); + +OSSL_DEPRECATEDIN_3_0 void RSA_set_default_method(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_null_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_method(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); + +/* these are the actual RSA functions */ +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_PKCS1_OpenSSL(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPrivateKey) +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ + +int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); + +struct rsa_pss_params_st { + X509_ALGOR *hashAlgorithm; + X509_ALGOR *maskGenAlgorithm; + ASN1_INTEGER *saltLength; + ASN1_INTEGER *trailerField; + /* Decoded hash algorithm from maskGenAlgorithm */ + X509_ALGOR *maskHash; +}; + +DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) +DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) + +typedef struct rsa_oaep_params_st { + X509_ALGOR *hashFunc; + X509_ALGOR *maskGenFunc; + X509_ALGOR *pSourceFunc; + /* Decoded hash algorithm from maskGenFunc */ + X509_ALGOR *maskHash; +} RSA_OAEP_PARAMS; + +DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif + +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 int RSA_sign(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigret, + unsigned int *siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 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 + */ +OSSL_DEPRECATEDIN_3_0 +int RSA_sign_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int RSA_verify_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigbuf, unsigned int siglen, + RSA *rsa); + +OSSL_DEPRECATEDIN_3_0 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void RSA_blinding_off(RSA *rsa); +OSSL_DEPRECATEDIN_3_0 BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); + +OSSL_DEPRECATEDIN_3_0 +int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 +int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 +int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 +int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int PKCS1_MGF1(unsigned char *mask, long len, + const unsigned char *seed, long seedlen, + const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 +int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, + const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_none(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_hash_id(int nid); + +OSSL_DEPRECATEDIN_3_0 +int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const unsigned char *EM, + int sLen); +OSSL_DEPRECATEDIN_3_0 +int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, const EVP_MD *Hash, + int sLen); + +OSSL_DEPRECATEDIN_3_0 +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); + +OSSL_DEPRECATEDIN_3_0 +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) +OSSL_DEPRECATEDIN_3_0 int RSA_set_ex_data(RSA *r, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *RSA_get_ex_data(const RSA *r, int idx); + +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPublicKey) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey) + +/* + * 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 + +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_meth_free(RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const char *RSA_meth_get0_name(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set1_name(RSA_METHOD *meth, + const char *name); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_get_flags(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +OSSL_DEPRECATEDIN_3_0 void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set0_app_data(RSA_METHOD *meth, + void *app_data); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r0, + const BIGNUM *i, + RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int RSA_meth_set_mod_exp(RSA_METHOD *rsa, + int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, + BN_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) (RSA *rsa, int bits, + BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int RSA_meth_set_keygen(RSA_METHOD *rsa, + int (*keygen) (RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb)); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) (RSA *rsa, + int bits, + int primes, + BIGNUM *e, + BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, + int (*keygen) (RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb)); +#endif /* !OPENSSL_NO_DEPRECATED_3_0 */ + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/rsaerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/rsaerr.h new file mode 100644 index 0000000..c58463c --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/rsaerr.h @@ -0,0 +1,107 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_RSAERR_H +# define OPENSSL_RSAERR_H +# pragma once + +# include +# include +# include + + + +/* + * RSA 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_NOT_ALLOWED 145 +# 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_KEYPAIR 171 +# define RSA_R_INVALID_KEY_LENGTH 173 +# define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_LENGTH 181 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MODULUS 174 +# define RSA_R_INVALID_MULTI_PRIME_KEY 167 +# 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_REQUEST 175 +# define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_STRENGTH 176 +# 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_PRIME_NUM_INVALID 165 +# define RSA_R_KEY_SIZE_TOO_SMALL 120 +# define RSA_R_LAST_OCTET_INVALID 134 +# define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MISSING_PRIVATE_KEY 179 +# define RSA_R_MODULUS_TOO_LARGE 105 +# define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 +# define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 +# define RSA_R_MP_R_NOT_PRIME 170 +# define RSA_R_NO_PUBLIC_EXPONENT 140 +# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 +# define RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 172 +# 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_PAIRWISE_TEST_FAILURE 177 +# define RSA_R_PKCS_DECODING_ERROR 159 +# define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_PUB_EXPONENT_OUT_OF_RANGE 178 +# define RSA_R_P_NOT_PRIME 128 +# define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RANDOMNESS_SOURCE_STRENGTH_INSUFFICIENT 180 +# 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 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/safestack.h b/thirdparty/OpenSSL-3.5.3/include/openssl/safestack.h new file mode 100644 index 0000000..159ccf2 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/safestack.h @@ -0,0 +1,297 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\safestack.h.in + * + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(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_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + +# 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_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused 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_unused 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_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_unused 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_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused 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_unused 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_unused 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_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused 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_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused 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_unused 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_unused 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_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) + +/*- + * 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. + */ +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) +#define sk_OPENSSL_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_value(sk, idx) ((char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_STRING_sk_type(sk), (idx))) +#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_STRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_STRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_STRING_sk_type(sk), (n)) +#define sk_OPENSSL_STRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_delete(sk, i) ((char *)OPENSSL_sk_delete(ossl_check_OPENSSL_STRING_sk_type(sk), (i))) +#define sk_OPENSSL_STRING_delete_ptr(sk, ptr) ((char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_pop(sk) ((char *)OPENSSL_sk_pop(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_shift(sk) ((char *)OPENSSL_sk_shift(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk),ossl_check_OPENSSL_STRING_freefunc_type(freefunc)) +#define sk_OPENSSL_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), (idx)) +#define sk_OPENSSL_STRING_set(sk, idx, ptr) ((char *)OPENSSL_sk_set(ossl_check_OPENSSL_STRING_sk_type(sk), (idx), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), pnum) +#define sk_OPENSSL_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_dup(sk) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_STRING_freefunc_type(freefunc))) +#define sk_OPENSSL_STRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_CSTRING, const char, char) +#define sk_OPENSSL_CSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_value(sk, idx) ((const char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), (idx))) +#define sk_OPENSSL_CSTRING_new(cmp) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) +#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_CSTRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_CSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_CSTRING_sk_type(sk), (n)) +#define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_delete(sk, i) ((const char *)OPENSSL_sk_delete(ossl_check_OPENSSL_CSTRING_sk_type(sk), (i))) +#define sk_OPENSSL_CSTRING_delete_ptr(sk, ptr) ((const char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_shift(sk) ((const char *)OPENSSL_sk_shift(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_CSTRING_sk_type(sk),ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)) +#define sk_OPENSSL_CSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), (idx)) +#define sk_OPENSSL_CSTRING_set(sk, idx, ptr) ((const char *)OPENSSL_sk_set(ossl_check_OPENSSL_CSTRING_sk_type(sk), (idx), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), pnum) +#define sk_OPENSSL_CSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_dup(sk) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc))) +#define sk_OPENSSL_CSTRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_CSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) + + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) +/* + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_BLOCK, void, void) +#define sk_OPENSSL_BLOCK_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), (idx))) +#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) +#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_BLOCK_new_reserve(cmp, n) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp), (n))) +#define sk_OPENSSL_BLOCK_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_BLOCK_sk_type(sk), (n)) +#define sk_OPENSSL_BLOCK_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_OPENSSL_BLOCK_sk_type(sk), (i))) +#define sk_OPENSSL_BLOCK_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_BLOCK_sk_type(sk),ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)) +#define sk_OPENSSL_BLOCK_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), (idx)) +#define sk_OPENSSL_BLOCK_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_OPENSSL_BLOCK_sk_type(sk), (idx), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), pnum) +#define sk_OPENSSL_BLOCK_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_dup(sk) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_copyfunc_type(copyfunc), ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc))) +#define sk_OPENSSL_BLOCK_set_cmp_func(sk, cmp) ((sk_OPENSSL_BLOCK_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) + +#endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/seed.h b/thirdparty/OpenSSL-3.5.3/include/openssl/seed.h new file mode 100644 index 0000000..edb218a --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/seed.h @@ -0,0 +1,113 @@ +/* + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SEED_H +# define OPENSSL_SEED_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SEED_H +# endif + +# include + +# ifndef OPENSSL_NO_SEED +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif + + +typedef struct seed_key_st { +# ifdef SEED_LONG + unsigned long data[32]; +# else + unsigned int data[32]; +# endif +} SEED_KEY_SCHEDULE; +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 +void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 +void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 +void SEED_ecb_encrypt(const unsigned char *in, + unsigned char *out, + const SEED_KEY_SCHEDULE *ks, int enc); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +OSSL_DEPRECATEDIN_3_0 +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); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/self_test.h b/thirdparty/OpenSSL-3.5.3/include/openssl/self_test.h new file mode 100644 index 0000000..6c81cef --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/self_test.h @@ -0,0 +1,114 @@ +/* + * Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SELF_TEST_H +# define OPENSSL_SELF_TEST_H +# pragma once + +# include /* OSSL_CALLBACK */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* The test event phases */ +# define OSSL_SELF_TEST_PHASE_NONE "None" +# define OSSL_SELF_TEST_PHASE_START "Start" +# define OSSL_SELF_TEST_PHASE_CORRUPT "Corrupt" +# define OSSL_SELF_TEST_PHASE_PASS "Pass" +# define OSSL_SELF_TEST_PHASE_FAIL "Fail" + +/* Test event categories */ +# define OSSL_SELF_TEST_TYPE_NONE "None" +# define OSSL_SELF_TEST_TYPE_MODULE_INTEGRITY "Module_Integrity" +# define OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY "Install_Integrity" +# define OSSL_SELF_TEST_TYPE_CRNG "Continuous_RNG_Test" +# define OSSL_SELF_TEST_TYPE_PCT "Conditional_PCT" +# define OSSL_SELF_TEST_TYPE_PCT_KAT "Conditional_KAT" +# define OSSL_SELF_TEST_TYPE_PCT_IMPORT "Import_PCT" +# define OSSL_SELF_TEST_TYPE_KAT_INTEGRITY "KAT_Integrity" +# define OSSL_SELF_TEST_TYPE_KAT_CIPHER "KAT_Cipher" +# define OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER "KAT_AsymmetricCipher" +# define OSSL_SELF_TEST_TYPE_KAT_ASYM_KEYGEN "KAT_AsymmetricKeyGeneration" +# define OSSL_SELF_TEST_TYPE_KAT_KEM "KAT_KEM" +# define OSSL_SELF_TEST_TYPE_KAT_DIGEST "KAT_Digest" +# define OSSL_SELF_TEST_TYPE_KAT_SIGNATURE "KAT_Signature" +# define OSSL_SELF_TEST_TYPE_PCT_SIGNATURE "PCT_Signature" +# define OSSL_SELF_TEST_TYPE_KAT_KDF "KAT_KDF" +# define OSSL_SELF_TEST_TYPE_KAT_KA "KAT_KA" +# define OSSL_SELF_TEST_TYPE_DRBG "DRBG" + +/* Test event sub categories */ +# define OSSL_SELF_TEST_DESC_NONE "None" +# define OSSL_SELF_TEST_DESC_INTEGRITY_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_PCT_RSA "RSA" +# define OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1 "RSA" +# define OSSL_SELF_TEST_DESC_PCT_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_PCT_EDDSA "EDDSA" +# define OSSL_SELF_TEST_DESC_PCT_DH "DH" +# define OSSL_SELF_TEST_DESC_PCT_DSA "DSA" +# define OSSL_SELF_TEST_DESC_PCT_ML_DSA "ML-DSA" +# define OSSL_SELF_TEST_DESC_PCT_ML_KEM "ML-KEM" +# define OSSL_SELF_TEST_DESC_PCT_SLH_DSA "SLH-DSA" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_GCM "AES_GCM" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_ECB "AES_ECB_Decrypt" +# define OSSL_SELF_TEST_DESC_CIPHER_TDES "TDES" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_ENC "RSA_Encrypt" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_DEC "RSA_Decrypt" +# define OSSL_SELF_TEST_DESC_MD_SHA1 "SHA1" +# define OSSL_SELF_TEST_DESC_MD_SHA2 "SHA2" +# define OSSL_SELF_TEST_DESC_MD_SHA3 "SHA3" +# define OSSL_SELF_TEST_DESC_SIGN_DSA "DSA" +# define OSSL_SELF_TEST_DESC_SIGN_RSA "RSA" +# define OSSL_SELF_TEST_DESC_SIGN_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_SIGN_EDDSA "EDDSA" +# define OSSL_SELF_TEST_DESC_SIGN_ML_DSA "ML-DSA" +# define OSSL_SELF_TEST_DESC_SIGN_SLH_DSA "SLH-DSA" +# define OSSL_SELF_TEST_DESC_KEM "KEM" +# define OSSL_SELF_TEST_DESC_DRBG_CTR "CTR" +# define OSSL_SELF_TEST_DESC_DRBG_HASH "HASH" +# define OSSL_SELF_TEST_DESC_DRBG_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_KA_DH "DH" +# define OSSL_SELF_TEST_DESC_KA_ECDH "ECDH" +# define OSSL_SELF_TEST_DESC_KDF_HKDF "HKDF" +# define OSSL_SELF_TEST_DESC_KDF_SSKDF "SSKDF" +# define OSSL_SELF_TEST_DESC_KDF_X963KDF "X963KDF" +# define OSSL_SELF_TEST_DESC_KDF_X942KDF "X942KDF" +# define OSSL_SELF_TEST_DESC_KDF_PBKDF2 "PBKDF2" +# define OSSL_SELF_TEST_DESC_KDF_SSHKDF "SSHKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS12_PRF "TLS12_PRF" +# define OSSL_SELF_TEST_DESC_KDF_KBKDF "KBKDF" +# define OSSL_SELF_TEST_DESC_KDF_KBKDF_KMAC "KBKDF_KMAC" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT "TLS13_KDF_EXTRACT" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND "TLS13_KDF_EXPAND" +# define OSSL_SELF_TEST_DESC_RNG "RNG" +# define OSSL_SELF_TEST_DESC_KEYGEN_ML_DSA "ML-DSA" +# define OSSL_SELF_TEST_DESC_KEYGEN_ML_KEM "ML-KEM" +# define OSSL_SELF_TEST_DESC_KEYGEN_SLH_DSA "SLH-DSA" +# define OSSL_SELF_TEST_DESC_ENCAP_KEM "KEM_Encap" +# define OSSL_SELF_TEST_DESC_DECAP_KEM "KEM_Decap" +# define OSSL_SELF_TEST_DESC_DECAP_KEM_FAIL "KEM_Decap_Reject" + +void OSSL_SELF_TEST_set_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK *cb, + void *cbarg); +void OSSL_SELF_TEST_get_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK **cb, + void **cbarg); + +OSSL_SELF_TEST *OSSL_SELF_TEST_new(OSSL_CALLBACK *cb, void *cbarg); +void OSSL_SELF_TEST_free(OSSL_SELF_TEST *st); + +void OSSL_SELF_TEST_onbegin(OSSL_SELF_TEST *st, const char *type, + const char *desc); +int OSSL_SELF_TEST_oncorrupt_byte(OSSL_SELF_TEST *st, unsigned char *bytes); +void OSSL_SELF_TEST_onend(OSSL_SELF_TEST *st, int ret); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_SELF_TEST_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/sha.h b/thirdparty/OpenSSL-3.5.3/include/openssl/sha.h new file mode 100644 index 0000000..163a7d5 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/sha.h @@ -0,0 +1,139 @@ +/* + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SHA_H +# define OPENSSL_SHA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SHA_H +# endif + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define SHA_DIGEST_LENGTH 20 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! 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) + +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; + +OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +# endif + +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# 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; + +OSSL_DEPRECATEDIN_3_0 int SHA224_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA256_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, + const unsigned char *data); +# endif + +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); + +# define SHA256_192_DIGEST_LENGTH 24 +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * 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 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# else +# define SHA_LONG64 unsigned long long +# 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; + +OSSL_DEPRECATEDIN_3_0 int SHA384_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA512_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA512_Transform(SHA512_CTX *c, + const unsigned char *data); +# endif + +unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); +unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/srp.h b/thirdparty/OpenSSL-3.5.3/include/openssl/srp.h new file mode 100644 index 0000000..a86fa5d --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/srp.h @@ -0,0 +1,285 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\srp.h.in + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + * + * Originally written by Christophe Renou and Peter Sylvester, + * for the EdelKey project. + */ + + + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN_cache, SRP_gN_cache, SRP_gN_cache) +#define sk_SRP_gN_cache_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_value(sk, idx) ((SRP_gN_cache *)OPENSSL_sk_value(ossl_check_const_SRP_gN_cache_sk_type(sk), (idx))) +#define sk_SRP_gN_cache_new(cmp) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new(ossl_check_SRP_gN_cache_compfunc_type(cmp))) +#define sk_SRP_gN_cache_new_null() ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_cache_new_reserve(cmp, n) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_cache_compfunc_type(cmp), (n))) +#define sk_SRP_gN_cache_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_cache_sk_type(sk), (n)) +#define sk_SRP_gN_cache_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_delete(sk, i) ((SRP_gN_cache *)OPENSSL_sk_delete(ossl_check_SRP_gN_cache_sk_type(sk), (i))) +#define sk_SRP_gN_cache_delete_ptr(sk, ptr) ((SRP_gN_cache *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_pop(sk) ((SRP_gN_cache *)OPENSSL_sk_pop(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_shift(sk) ((SRP_gN_cache *)OPENSSL_sk_shift(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_cache_sk_type(sk),ossl_check_SRP_gN_cache_freefunc_type(freefunc)) +#define sk_SRP_gN_cache_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), (idx)) +#define sk_SRP_gN_cache_set(sk, idx, ptr) ((SRP_gN_cache *)OPENSSL_sk_set(ossl_check_SRP_gN_cache_sk_type(sk), (idx), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), pnum) +#define sk_SRP_gN_cache_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_dup(sk) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_copyfunc_type(copyfunc), ossl_check_SRP_gN_cache_freefunc_type(freefunc))) +#define sk_SRP_gN_cache_set_cmp_func(sk, cmp) ((sk_SRP_gN_cache_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_compfunc_type(cmp))) + + + +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; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_user_pwd, SRP_user_pwd, SRP_user_pwd) +#define sk_SRP_user_pwd_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_value(sk, idx) ((SRP_user_pwd *)OPENSSL_sk_value(ossl_check_const_SRP_user_pwd_sk_type(sk), (idx))) +#define sk_SRP_user_pwd_new(cmp) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new(ossl_check_SRP_user_pwd_compfunc_type(cmp))) +#define sk_SRP_user_pwd_new_null() ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_null()) +#define sk_SRP_user_pwd_new_reserve(cmp, n) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_reserve(ossl_check_SRP_user_pwd_compfunc_type(cmp), (n))) +#define sk_SRP_user_pwd_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_user_pwd_sk_type(sk), (n)) +#define sk_SRP_user_pwd_free(sk) OPENSSL_sk_free(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_delete(sk, i) ((SRP_user_pwd *)OPENSSL_sk_delete(ossl_check_SRP_user_pwd_sk_type(sk), (i))) +#define sk_SRP_user_pwd_delete_ptr(sk, ptr) ((SRP_user_pwd *)OPENSSL_sk_delete_ptr(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_pop(sk) ((SRP_user_pwd *)OPENSSL_sk_pop(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_shift(sk) ((SRP_user_pwd *)OPENSSL_sk_shift(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_user_pwd_sk_type(sk),ossl_check_SRP_user_pwd_freefunc_type(freefunc)) +#define sk_SRP_user_pwd_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), (idx)) +#define sk_SRP_user_pwd_set(sk, idx, ptr) ((SRP_user_pwd *)OPENSSL_sk_set(ossl_check_SRP_user_pwd_sk_type(sk), (idx), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), pnum) +#define sk_SRP_user_pwd_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_dup(sk) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_dup(ossl_check_const_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_copyfunc_type(copyfunc), ossl_check_SRP_user_pwd_freefunc_type(freefunc))) +#define sk_SRP_user_pwd_set_cmp_func(sk, cmp) ((sk_SRP_user_pwd_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_compfunc_type(cmp))) + + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); + +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; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN, SRP_gN, SRP_gN) +#define sk_SRP_gN_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_value(sk, idx) ((SRP_gN *)OPENSSL_sk_value(ossl_check_const_SRP_gN_sk_type(sk), (idx))) +#define sk_SRP_gN_new(cmp) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new(ossl_check_SRP_gN_compfunc_type(cmp))) +#define sk_SRP_gN_new_null() ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_new_reserve(cmp, n) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_compfunc_type(cmp), (n))) +#define sk_SRP_gN_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_sk_type(sk), (n)) +#define sk_SRP_gN_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_delete(sk, i) ((SRP_gN *)OPENSSL_sk_delete(ossl_check_SRP_gN_sk_type(sk), (i))) +#define sk_SRP_gN_delete_ptr(sk, ptr) ((SRP_gN *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_pop(sk) ((SRP_gN *)OPENSSL_sk_pop(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_shift(sk) ((SRP_gN *)OPENSSL_sk_shift(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_sk_type(sk),ossl_check_SRP_gN_freefunc_type(freefunc)) +#define sk_SRP_gN_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), (idx)) +#define sk_SRP_gN_set(sk, idx, ptr) ((SRP_gN *)OPENSSL_sk_set(ossl_check_SRP_gN_sk_type(sk), (idx), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), pnum) +#define sk_SRP_gN_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_dup(sk) ((STACK_OF(SRP_gN) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_sk_type(sk), ossl_check_SRP_gN_copyfunc_type(copyfunc), ossl_check_SRP_gN_freefunc_type(freefunc))) +#define sk_SRP_gN_set_cmp_func(sk, cmp) ((sk_SRP_gN_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_compfunc_type(cmp))) + + + +OSSL_DEPRECATEDIN_3_0 +SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 +void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 +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 */ +OSSL_DEPRECATEDIN_3_0 +char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/srtp.h b/thirdparty/OpenSSL-3.5.3/include/openssl/srtp.h new file mode 100644 index 0000000..2c2c334 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/srtp.h @@ -0,0 +1,68 @@ +/* + * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SRTP_H +# define OPENSSL_SRTP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_D1_SRTP_H +# endif + +# 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 + +/* DOUBLE AEAD SRTP protection profiles from RFC 8723 */ +# define SRTP_DOUBLE_AEAD_AES_128_GCM_AEAD_AES_128_GCM 0x0009 +# define SRTP_DOUBLE_AEAD_AES_256_GCM_AEAD_AES_256_GCM 0x000A + +/* ARIA SRTP protection profiles from RFC 8269 */ +# define SRTP_ARIA_128_CTR_HMAC_SHA1_80 0x000B +# define SRTP_ARIA_128_CTR_HMAC_SHA1_32 0x000C +# define SRTP_ARIA_256_CTR_HMAC_SHA1_80 0x000D +# define SRTP_ARIA_256_CTR_HMAC_SHA1_32 0x000E +# define SRTP_AEAD_ARIA_128_GCM 0x000F +# define SRTP_AEAD_ARIA_256_GCM 0x0010 + +# 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 *ssl, 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/thirdparty/OpenSSL-3.5.3/include/openssl/ssl.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ssl.h new file mode 100644 index 0000000..3ed798b --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ssl.h @@ -0,0 +1,2933 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\ssl.h.in + * + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif + +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif +# include +# include +# include +# include + +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#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 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ + +/* 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"/* this cipher class has been removed */ +# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ +# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ +# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ +# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ +# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ +# 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_kGOST18 "kGOST18" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ +# 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_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" + +# 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'. + * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously + */ +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# endif +/* + * 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; + +STACK_OF(SSL_CIPHER); + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; +SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE) +#define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx))) +#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) +#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null()) +#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n))) +#define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n)) +#define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_delete(sk, i) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (i))) +#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete_ptr(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)) +#define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx)) +#define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), pnum) +#define sk_SRTP_PROTECTION_PROFILE_sort(sk) OPENSSL_sk_sort(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_dup(sk) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_dup(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_deep_copy(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_copyfunc_type(copyfunc), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc))) +#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, cmp) ((sk_SRTP_PROTECTION_PROFILE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) + + + +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); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x00001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x00002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x00008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x00020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x00040 +#define SSL_EXT_CLIENT_HELLO 0x00080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x00100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x00200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x00400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x00800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x01000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x02000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x04000 +#define SSL_EXT_TLS1_3_CERTIFICATE_COMPRESSION 0x08000 +/* When sending a raw public key in a certificate message */ +#define SSL_EXT_TLS1_3_RAW_PUBLIC_KEY 0x10000 + +/* 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); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); + +/* Typedef for verification callback */ +typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); + +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); + +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) + +/* + * SSL/TLS connection options. + */ + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * 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 SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) +# ifndef OPENSSL_NO_DTLS1_METHOD + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) +# endif + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue an 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 SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * 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 SSL_OP_BIT(31) +/* + * Disable RFC8879 certificate compression + * SSL_OP_NO_TX_CERTIFICATE_COMPRESSION: don't send compressed certificates, + * and ignore the extension when received. + * SSL_OP_NO_RX_CERTIFICATE_COMPRESSION: don't send the extension, and + * subsequently indicating that receiving is not supported + */ +# define SSL_OP_NO_TX_CERTIFICATE_COMPRESSION SSL_OP_BIT(32) +# define SSL_OP_NO_RX_CERTIFICATE_COMPRESSION SSL_OP_BIT(33) + /* Enable KTLS TX zerocopy on Linux */ +# define SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE SSL_OP_BIT(34) + +#define SSL_OP_PREFER_NO_DHE_KEX SSL_OP_BIT(35) + +/* + * Option "collections." + */ +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) + +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) + +/* + * OBSOLETE OPTIONS retained for compatibility + */ + +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +# define SSL_OP_TLS_D5_BUG 0x0 +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 +# define SSL_OP_SINGLE_ECDH_USE 0x0 +# define SSL_OP_SINGLE_DH_USE 0x0 +# define SSL_OP_EPHEMERAL_RSA 0x0 +# define SSL_OP_NO_SSLv2 0x0 +# 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 0x0 + +/* + * 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 freed. + */ +# 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 + +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + +/* 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 +/* Cert pkey valid for raw public key use */ +# define CERT_PKEY_RPK 0x1000 + +# 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 +# define SSL_CONF_TYPE_STORE 0x5 + +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t 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) + +# 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 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif +# 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) (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) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 + +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)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated +# 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); +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + 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 256 +# define PSK_MAX_PSK_LEN 512 +typedef unsigned int (*SSL_psk_client_cb_func)(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_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + +__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 + +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + +/* 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_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, + void *add_arg, + SSL_custom_ext_parse_cb_ex 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 +# define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 + +/* 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_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) +# 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_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 + +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER) +#define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx))) +#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp))) +#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null()) +#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n))) +#define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n)) +#define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_delete(sk, i) ((const SSL_CIPHER *)OPENSSL_sk_delete(ossl_check_SSL_CIPHER_sk_type(sk), (i))) +#define sk_SSL_CIPHER_delete_ptr(sk, ptr) ((const SSL_CIPHER *)OPENSSL_sk_delete_ptr(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc)) +#define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx)) +#define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), pnum) +#define sk_SSL_CIPHER_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_dup(sk) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_dup(ossl_check_const_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_copyfunc_type(copyfunc), ossl_check_SSL_CIPHER_freefunc_type(freefunc))) +#define sk_SSL_CIPHER_set_cmp_func(sk, cmp) ((sk_SSL_CIPHER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_compfunc_type(cmp))) + + +/* 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))) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif + +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 + +/* + * 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_COMP_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_COMP_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_COMP_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_COMP_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, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA +} 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(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const 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 3 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 SSL_VERIFY_POST_HANDSHAKE 0x08 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# 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_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +# 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_ERROR_WANT_CLIENT_HELLO_CB 11 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + +# 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 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif +# 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 +# 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_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 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_PEER_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_CTRL_GET_MIN_PROTO_VERSION 130 +# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_GET_IANA_GROUPS 135 +# define SSL_CTRL_SET_RETRY_VERIFY 136 +# define SSL_CTRL_GET_VERIFY_CERT_STORE 137 +# define SSL_CTRL_GET_CHAIN_CERT_STORE 138 +# define SSL_CTRL_GET0_IMPLEMENTED_GROUPS 139 +# define SSL_CTRL_GET_SIGNATURE_NAME 140 +# define SSL_CTRL_GET_PEER_SIGNATURE_NAME 141 +# 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) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# 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) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif +# 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_get0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(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_CTX_get0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_set1_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_add0_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_add1_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_get0_chain_certs(s,px509) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(s) \ + SSL_set0_chain(s,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_set_current_cert(s,op) \ + SSL_ctrl(s,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_get0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(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_get0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + +# define SSL_get1_groups(s, glist) \ + SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) +# define SSL_get0_iana_groups(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_IANA_GROUPS,0,(uint16_t **)(plst)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_CTX_get0_implemented_groups(ctx, all, out) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET0_IMPLEMENTED_GROUPS, all, \ + (STACK_OF(OPENSSL_CSTRING) *)(out)) +# define SSL_set1_groups(s, glist, glistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,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(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) +# 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(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_client_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) +# 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_get0_signature_name(s, str) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NAME,0,(1?(str):(const char **)NULL)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) +# define SSL_get0_peer_signature_name(s, str) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NAME,0,(1?(str):(const char **)NULL)) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_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_CTX_get_min_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_CTX_get_max_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, 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) +# define SSL_get_min_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_get_max_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) + +const char *SSL_get0_group_name(SSL *s); +const char *SSL_group_to_name(SSL *s, int id); + +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* 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); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + 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 *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +#ifndef OPENSSL_NO_DEPRECATED_3_4 +OSSL_DEPRECATEDIN_3_4_FOR("not Y2038-safe, replace with SSL_CTX_flush_sessions_ex()") +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); +#endif +void SSL_CTX_flush_sessions_ex(SSL_CTX *ctx, time_t tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_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 const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_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 const EVP_MD *SSL_CIPHER_get_handshake_digest(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 size); +__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); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(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 SSL_verify_cb SSL_get_verify_callback(const SSL *s); +void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); +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_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__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); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 + +/* 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_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__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_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__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 STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +__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); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); + +#ifndef OPENSSL_NO_DEPRECATED_3_4 +OSSL_DEPRECATEDIN_3_4_FOR("not Y2038-safe, replace with SSL_SESSION_get_time_ex()") +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +OSSL_DEPRECATEDIN_3_4_FOR("not Y2038-safe, replace with SSL_SESSION_set_time_ex()") +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +#endif +__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 int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +__owur time_t SSL_SESSION_get_time_ex(const SSL_SESSION *s); +__owur time_t SSL_SESSION_set_time_ex(SSL_SESSION *s, time_t t); + +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +__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 uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); +__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 int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +__owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); +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(const SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); +SSL_SESSION *d2i_SSL_SESSION_ex(SSL_SESSION **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); + +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif +# 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 SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); +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_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__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); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + +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); +int SSL_is_tls(const SSL *s); +int SSL_is_quic(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 *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); + +__owur int SSL_set1_host(SSL *s, const char *host); +__owur int SSL_add1_host(SSL *s, const char *host); +__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, const 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, const unsigned 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 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); + +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif +# endif + +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +typedef int (*SSL_new_pending_conn_cb_fn) (SSL_CTX *ctx, SSL *new_ssl, + void *arg); +void SSL_CTX_set_new_pending_conn_cb(SSL_CTX *c, SSL_new_pending_conn_cb_fn cb, + void *arg); + +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get_extension_order(SSL *s, uint16_t *exts, + size_t *num_exts); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + +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); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); +__owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); +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)); + +# define SSL_WRITE_FLAG_CONCLUDE (1U << 0) + +__owur int SSL_write_ex2(SSL *s, const void *buf, size_t num, + uint64_t flags, + size_t *written); + +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); +__owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt); + +/* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif + +# ifndef OPENSSL_NO_SSL3_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif +# 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 +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +/* DTLSv1.2 */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif +# 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 size_t DTLS_get_data_mtu(const SSL *s); + +__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_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); +int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const 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_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +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); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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(const 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_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__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 *sess, + unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); + +#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) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) + +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 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +OSSL_DEPRECATEDIN_3_0 +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif +# endif + +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); +__owur int SSL_COMP_get_id(const SSL_COMP *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); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); + +/* 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 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)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); +int SSL_CTX_set_block_padding_ex(SSL_CTX *ctx, size_t app_block_size, + size_t hs_block_size); + +int SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); +int SSL_set_block_padding_ex(SSL *ssl, size_t app_block_size, + size_t hs_block_size); +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + +/* QUIC support */ +int SSL_handle_events(SSL *s); +__owur int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite); +__owur int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); +__owur int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); +__owur int SSL_net_read_desired(SSL *s); +__owur int SSL_net_write_desired(SSL *s); +__owur int SSL_set_blocking_mode(SSL *s, int blocking); +__owur int SSL_get_blocking_mode(SSL *s); +__owur int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr); +__owur SSL *SSL_get0_connection(SSL *s); +__owur int SSL_is_connection(SSL *s); + +__owur int SSL_is_listener(SSL *ssl); +__owur SSL *SSL_get0_listener(SSL *s); +#define SSL_LISTENER_FLAG_NO_VALIDATE (1UL << 1) +__owur SSL *SSL_new_listener(SSL_CTX *ctx, uint64_t flags); +__owur SSL *SSL_new_listener_from(SSL *ssl, uint64_t flags); +__owur SSL *SSL_new_from_listener(SSL *ssl, uint64_t flags); +#define SSL_ACCEPT_CONNECTION_NO_BLOCK (1UL << 0) +__owur SSL *SSL_accept_connection(SSL *ssl, uint64_t flags); +__owur size_t SSL_get_accept_connection_queue_len(SSL *ssl); +__owur int SSL_listen(SSL *ssl); + +__owur int SSL_is_domain(SSL *s); +__owur SSL *SSL_get0_domain(SSL *s); +__owur SSL *SSL_new_domain(SSL_CTX *ctx, uint64_t flags); + +#define SSL_DOMAIN_FLAG_SINGLE_THREAD (1U << 0) +#define SSL_DOMAIN_FLAG_MULTI_THREAD (1U << 1) +#define SSL_DOMAIN_FLAG_THREAD_ASSISTED (1U << 2) +#define SSL_DOMAIN_FLAG_BLOCKING (1U << 3) +#define SSL_DOMAIN_FLAG_LEGACY_BLOCKING (1U << 4) + +__owur int SSL_CTX_set_domain_flags(SSL_CTX *ctx, uint64_t domain_flags); +__owur int SSL_CTX_get_domain_flags(const SSL_CTX *ctx, uint64_t *domain_flags); +__owur int SSL_get_domain_flags(const SSL *ssl, uint64_t *domain_flags); + +#define SSL_STREAM_TYPE_NONE 0 +#define SSL_STREAM_TYPE_READ (1U << 0) +#define SSL_STREAM_TYPE_WRITE (1U << 1) +#define SSL_STREAM_TYPE_BIDI (SSL_STREAM_TYPE_READ | SSL_STREAM_TYPE_WRITE) +__owur int SSL_get_stream_type(SSL *s); + +__owur uint64_t SSL_get_stream_id(SSL *s); +__owur int SSL_is_stream_local(SSL *s); + +#define SSL_DEFAULT_STREAM_MODE_NONE 0 +#define SSL_DEFAULT_STREAM_MODE_AUTO_BIDI 1 +#define SSL_DEFAULT_STREAM_MODE_AUTO_UNI 2 +__owur int SSL_set_default_stream_mode(SSL *s, uint32_t mode); + +#define SSL_STREAM_FLAG_UNI (1U << 0) +#define SSL_STREAM_FLAG_NO_BLOCK (1U << 1) +#define SSL_STREAM_FLAG_ADVANCE (1U << 2) +__owur SSL *SSL_new_stream(SSL *s, uint64_t flags); + +#define SSL_INCOMING_STREAM_POLICY_AUTO 0 +#define SSL_INCOMING_STREAM_POLICY_ACCEPT 1 +#define SSL_INCOMING_STREAM_POLICY_REJECT 2 +__owur int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec); + +#define SSL_ACCEPT_STREAM_NO_BLOCK (1U << 0) +__owur SSL *SSL_accept_stream(SSL *s, uint64_t flags); +__owur size_t SSL_get_accept_stream_queue_len(SSL *s); + +# ifndef OPENSSL_NO_QUIC +__owur int SSL_inject_net_dgram(SSL *s, const unsigned char *buf, + size_t buf_len, + const BIO_ADDR *peer, + const BIO_ADDR *local); +# endif + +typedef struct ssl_shutdown_ex_args_st { + uint64_t quic_error_code; + const char *quic_reason; +} SSL_SHUTDOWN_EX_ARGS; + +#define SSL_SHUTDOWN_FLAG_RAPID (1U << 0) +#define SSL_SHUTDOWN_FLAG_NO_STREAM_FLUSH (1U << 1) +#define SSL_SHUTDOWN_FLAG_NO_BLOCK (1U << 2) +#define SSL_SHUTDOWN_FLAG_WAIT_PEER (1U << 3) + +__owur int SSL_shutdown_ex(SSL *ssl, uint64_t flags, + const SSL_SHUTDOWN_EX_ARGS *args, + size_t args_len); + +__owur int SSL_stream_conclude(SSL *ssl, uint64_t flags); + +typedef struct ssl_stream_reset_args_st { + uint64_t quic_error_code; +} SSL_STREAM_RESET_ARGS; + +__owur int SSL_stream_reset(SSL *ssl, + const SSL_STREAM_RESET_ARGS *args, + size_t args_len); + +#define SSL_STREAM_STATE_NONE 0 +#define SSL_STREAM_STATE_OK 1 +#define SSL_STREAM_STATE_WRONG_DIR 2 +#define SSL_STREAM_STATE_FINISHED 3 +#define SSL_STREAM_STATE_RESET_LOCAL 4 +#define SSL_STREAM_STATE_RESET_REMOTE 5 +#define SSL_STREAM_STATE_CONN_CLOSED 6 +__owur int SSL_get_stream_read_state(SSL *ssl); +__owur int SSL_get_stream_write_state(SSL *ssl); + +__owur int SSL_get_stream_read_error_code(SSL *ssl, uint64_t *app_error_code); +__owur int SSL_get_stream_write_error_code(SSL *ssl, uint64_t *app_error_code); + +#define SSL_CONN_CLOSE_FLAG_LOCAL (1U << 0) +#define SSL_CONN_CLOSE_FLAG_TRANSPORT (1U << 1) + +typedef struct ssl_conn_close_info_st { + uint64_t error_code, frame_type; + const char *reason; + size_t reason_len; + uint32_t flags; +} SSL_CONN_CLOSE_INFO; + +__owur int SSL_get_conn_close_info(SSL *ssl, + SSL_CONN_CLOSE_INFO *info, + size_t info_len); + +# define SSL_VALUE_CLASS_GENERIC 0 +# define SSL_VALUE_CLASS_FEATURE_REQUEST 1 +# define SSL_VALUE_CLASS_FEATURE_PEER_REQUEST 2 +# define SSL_VALUE_CLASS_FEATURE_NEGOTIATED 3 + +# define SSL_VALUE_NONE 0 +# define SSL_VALUE_QUIC_STREAM_BIDI_LOCAL_AVAIL 1 +# define SSL_VALUE_QUIC_STREAM_BIDI_REMOTE_AVAIL 2 +# define SSL_VALUE_QUIC_STREAM_UNI_LOCAL_AVAIL 3 +# define SSL_VALUE_QUIC_STREAM_UNI_REMOTE_AVAIL 4 +# define SSL_VALUE_QUIC_IDLE_TIMEOUT 5 +# define SSL_VALUE_EVENT_HANDLING_MODE 6 +# define SSL_VALUE_STREAM_WRITE_BUF_SIZE 7 +# define SSL_VALUE_STREAM_WRITE_BUF_USED 8 +# define SSL_VALUE_STREAM_WRITE_BUF_AVAIL 9 + +# define SSL_VALUE_EVENT_HANDLING_MODE_INHERIT 0 +# define SSL_VALUE_EVENT_HANDLING_MODE_IMPLICIT 1 +# define SSL_VALUE_EVENT_HANDLING_MODE_EXPLICIT 2 + +int SSL_get_value_uint(SSL *s, uint32_t class_, uint32_t id, uint64_t *v); +int SSL_set_value_uint(SSL *s, uint32_t class_, uint32_t id, uint64_t v); + +# define SSL_get_generic_value_uint(ssl, id, v) \ + SSL_get_value_uint((ssl), SSL_VALUE_CLASS_GENERIC, (id), (v)) +# define SSL_set_generic_value_uint(ssl, id, v) \ + SSL_set_value_uint((ssl), SSL_VALUE_CLASS_GENERIC, (id), (v)) +# define SSL_get_feature_request_uint(ssl, id, v) \ + SSL_get_value_uint((ssl), SSL_VALUE_CLASS_FEATURE_REQUEST, (id), (v)) +# define SSL_set_feature_request_uint(ssl, id, v) \ + SSL_set_value_uint((ssl), SSL_VALUE_CLASS_FEATURE_REQUEST, (id), (v)) +# define SSL_get_feature_peer_request_uint(ssl, id, v) \ + SSL_get_value_uint((ssl), SSL_VALUE_CLASS_FEATURE_PEER_REQUEST, (id), (v)) +# define SSL_get_feature_negotiated_uint(ssl, id, v) \ + SSL_get_value_uint((ssl), SSL_VALUE_CLASS_FEATURE_NEGOTIATED, (id), (v)) + +# define SSL_get_quic_stream_bidi_local_avail(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_QUIC_STREAM_BIDI_LOCAL_AVAIL, \ + (value)) +# define SSL_get_quic_stream_bidi_remote_avail(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_QUIC_STREAM_BIDI_REMOTE_AVAIL, \ + (value)) +# define SSL_get_quic_stream_uni_local_avail(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_QUIC_STREAM_UNI_LOCAL_AVAIL, \ + (value)) +# define SSL_get_quic_stream_uni_remote_avail(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_QUIC_STREAM_UNI_REMOTE_AVAIL, \ + (value)) + +# define SSL_get_event_handling_mode(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_EVENT_HANDLING_MODE, \ + (value)) +# define SSL_set_event_handling_mode(ssl, value) \ + SSL_set_generic_value_uint((ssl), SSL_VALUE_EVENT_HANDLING_MODE, \ + (value)) + +# define SSL_get_stream_write_buf_size(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_STREAM_WRITE_BUF_SIZE, \ + (value)) +# define SSL_get_stream_write_buf_used(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_STREAM_WRITE_BUF_USED, \ + (value)) +# define SSL_get_stream_write_buf_avail(ssl, value) \ + SSL_get_generic_value_uint((ssl), SSL_VALUE_STREAM_WRITE_BUF_AVAIL, \ + (value)) + +# define SSL_POLL_EVENT_NONE 0 + +# define SSL_POLL_EVENT_F (1U << 0) /* F (Failure) */ +# define SSL_POLL_EVENT_EL (1U << 1) /* EL (Exception on Listener) */ +# define SSL_POLL_EVENT_EC (1U << 2) /* EC (Exception on Conn) */ +# define SSL_POLL_EVENT_ECD (1U << 3) /* ECD (Exception on Conn Drained) */ +# define SSL_POLL_EVENT_ER (1U << 4) /* ER (Exception on Read) */ +# define SSL_POLL_EVENT_EW (1U << 5) /* EW (Exception on Write) */ +# define SSL_POLL_EVENT_R (1U << 6) /* R (Readable) */ +# define SSL_POLL_EVENT_W (1U << 7) /* W (Writable) */ +# define SSL_POLL_EVENT_IC (1U << 8) /* IC (Incoming Connection) */ +# define SSL_POLL_EVENT_ISB (1U << 9) /* ISB (Incoming Stream: Bidi) */ +# define SSL_POLL_EVENT_ISU (1U << 10) /* ISU (Incoming Stream: Uni) */ +# define SSL_POLL_EVENT_OSB (1U << 11) /* OSB (Outgoing Stream: Bidi) */ +# define SSL_POLL_EVENT_OSU (1U << 12) /* OSU (Outgoing Stream: Uni) */ + +# define SSL_POLL_EVENT_RW (SSL_POLL_EVENT_R | SSL_POLL_EVENT_W) +# define SSL_POLL_EVENT_RE (SSL_POLL_EVENT_R | SSL_POLL_EVENT_ER) +# define SSL_POLL_EVENT_WE (SSL_POLL_EVENT_W | SSL_POLL_EVENT_EW) +# define SSL_POLL_EVENT_RWE (SSL_POLL_EVENT_RE | SSL_POLL_EVENT_WE) +# define SSL_POLL_EVENT_E (SSL_POLL_EVENT_EL | SSL_POLL_EVENT_EC \ + | SSL_POLL_EVENT_ER | SSL_POLL_EVENT_EW) +# define SSL_POLL_EVENT_IS (SSL_POLL_EVENT_ISB | SSL_POLL_EVENT_ISU) +# define SSL_POLL_EVENT_ISE (SSL_POLL_EVENT_IS | SSL_POLL_EVENT_EC) +# define SSL_POLL_EVENT_I (SSL_POLL_EVENT_IS | SSL_POLL_EVENT_IC) +# define SSL_POLL_EVENT_OS (SSL_POLL_EVENT_OSB | SSL_POLL_EVENT_OSU) +# define SSL_POLL_EVENT_OSE (SSL_POLL_EVENT_OS | SSL_POLL_EVENT_EC) + +typedef struct ssl_poll_item_st { + BIO_POLL_DESCRIPTOR desc; + uint64_t events, revents; +} SSL_POLL_ITEM; + +# define SSL_POLL_FLAG_NO_HANDLE_EVENTS (1U << 0) + +__owur int SSL_poll(SSL_POLL_ITEM *items, + size_t num_items, + size_t stride, + const struct timeval *timeout, + uint64_t flags, + size_t *result_count); + +static ossl_inline ossl_unused BIO_POLL_DESCRIPTOR +SSL_as_poll_descriptor(SSL *s) +{ + BIO_POLL_DESCRIPTOR d; + + d.type = BIO_POLL_DESCRIPTOR_TYPE_SSL; + d.value.ssl = s; + return d; +} + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(const SSL *s); +__owur int SSL_is_server(const 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); +# 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 + +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + + +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); + +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + +/* RFC8879 Certificate compression APIs */ + +int SSL_CTX_compress_certs(SSL_CTX *ctx, int alg); +int SSL_compress_certs(SSL *ssl, int alg); + +int SSL_CTX_set1_cert_comp_preference(SSL_CTX *ctx, int *algs, size_t len); +int SSL_set1_cert_comp_preference(SSL *ssl, int *algs, size_t len); + +int SSL_CTX_set1_compressed_cert(SSL_CTX *ctx, int algorithm, unsigned char *comp_data, + size_t comp_length, size_t orig_length); +int SSL_set1_compressed_cert(SSL *ssl, int algorithm, unsigned char *comp_data, + size_t comp_length, size_t orig_length); +size_t SSL_CTX_get1_compressed_cert(SSL_CTX *ctx, int alg, unsigned char **data, size_t *orig_len); +size_t SSL_get1_compressed_cert(SSL *ssl, int alg, unsigned char **data, size_t *orig_len); + +__owur int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk); +__owur EVP_PKEY *SSL_get0_peer_rpk(const SSL *s); +__owur EVP_PKEY *SSL_SESSION_get0_peer_rpk(SSL_SESSION *s); +__owur int SSL_get_negotiated_client_cert_type(const SSL *s); +__owur int SSL_get_negotiated_server_cert_type(const SSL *s); + +__owur int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len); +__owur int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len); +__owur int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); +__owur int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); +__owur int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len); +__owur int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len); +__owur int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len); +__owur int SSL_CTX_get0_server_cert_type(const SSL_CTX *s, unsigned char **t, size_t *len); + +/* + * Protection level. For <= TLSv1.2 only "NONE" and "APPLICATION" are used. + */ +# define OSSL_RECORD_PROTECTION_LEVEL_NONE 0 +# define OSSL_RECORD_PROTECTION_LEVEL_EARLY 1 +# define OSSL_RECORD_PROTECTION_LEVEL_HANDSHAKE 2 +# define OSSL_RECORD_PROTECTION_LEVEL_APPLICATION 3 + +int SSL_set_quic_tls_cbs(SSL *s, const OSSL_DISPATCH *qtdis, void *arg); +int SSL_set_quic_tls_transport_params(SSL *s, + const unsigned char *params, + size_t params_len); + +int SSL_set_quic_tls_early_data_enabled(SSL *s, int enabled); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ssl2.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ssl2.h new file mode 100644 index 0000000..428ead0 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ssl2.h @@ -0,0 +1,30 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SSL2_H +# define OPENSSL_SSL2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL2_H +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL2_VERSION 0x0002 + +# define SSL2_MT_CLIENT_HELLO 1 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ssl3.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ssl3.h new file mode 100644 index 0000000..b8dada1 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ssl3.h @@ -0,0 +1,358 @@ +/* + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SSL3_H +# define OPENSSL_SSL3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL3_H +# endif + +# 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 + +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define SSL3_RFC_RSA_NULL_MD5 "TLS_RSA_WITH_NULL_MD5" +# define SSL3_RFC_RSA_NULL_SHA "TLS_RSA_WITH_NULL_SHA" +# define SSL3_RFC_RSA_DES_192_CBC3_SHA "TLS_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_ADH_DES_192_CBC_SHA "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_RSA_IDEA_128_SHA "TLS_RSA_WITH_IDEA_CBC_SHA" +# define SSL3_RFC_RSA_RC4_128_MD5 "TLS_RSA_WITH_RC4_128_MD5" +# define SSL3_RFC_RSA_RC4_128_SHA "TLS_RSA_WITH_RC4_128_SHA" +# define SSL3_RFC_ADH_RC4_128_MD5 "TLS_DH_anon_WITH_RC4_128_MD5" + +# 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) +# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD 256 + +/* + * 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_TLS13_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD) +# 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" + +/* SSL3_VERSION is defined in prov_ssl.h */ +# 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 + +/* 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 types for SSL/TLS header info */ +# define SSL3_RT_HEADER 0x100 +# define SSL3_RT_INNER_CONTENT_TYPE 0x101 + +/* Pseudo content types for QUIC */ +# define SSL3_RT_QUIC_DATAGRAM 0x200 +# define SSL3_RT_QUIC_PACKET 0x201 +# define SSL3_RT_QUIC_FRAME_FULL 0x202 +# define SSL3_RT_QUIC_FRAME_HEADER 0x203 +# define SSL3_RT_QUIC_FRAME_PADDING 0x204 + +# 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 for *either* SSLv3 and TLSv1. + */ +# define SSL3_CT_NUMBER 12 + +# if defined(TLS_CT_NUMBER) +# if TLS_CT_NUMBER != SSL3_CT_NUMBER +# error "SSL/TLS CT_NUMBER values do not match" +# endif +# endif + +/* No longer used as of OpenSSL 1.1.1 */ +# 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_READ 0x0100 +# define TLS1_FLAGS_ENCRYPT_THEN_MAC TLS1_FLAGS_ENCRYPT_THEN_MAC_READ + +/* Set if extended master secret extension received from peer */ +# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 + +# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE 0x0400 + +# define TLS1_FLAGS_STATELESS 0x0800 + +/* Set if extended master secret extension required on renegotiation */ +# define TLS1_FLAGS_REQUIRED_EXTMS 0x1000 + +/* 0x2000 is reserved for TLS1_FLAGS_QUIC (internal) */ +/* 0x4000 is reserved for TLS1_FLAGS_QUIC_INTERNAL (internal) */ + +# 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_END_OF_EARLY_DATA 5 +# define SSL3_MT_ENCRYPTED_EXTENSIONS 8 +# 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_URL 21 +# define SSL3_MT_CERTIFICATE_STATUS 22 +# define SSL3_MT_SUPPLEMENTAL_DATA 23 +# define SSL3_MT_KEY_UPDATE 24 +# define SSL3_MT_COMPRESSED_CERTIFICATE 25 +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_MT_NEXT_PROTO 67 +# endif +# define SSL3_MT_MESSAGE_HASH 254 +# 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 0x001 +# define SSL3_CC_WRITE 0x002 +# define SSL3_CC_CLIENT 0x010 +# define SSL3_CC_SERVER 0x020 +# define SSL3_CC_EARLY 0x040 +# define SSL3_CC_HANDSHAKE 0x080 +# define SSL3_CC_APPLICATION 0x100 +# 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/thirdparty/OpenSSL-3.5.3/include/openssl/sslerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/sslerr.h new file mode 100644 index 0000000..53e0dec --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/sslerr.h @@ -0,0 +1,382 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SSLERR_H +# define OPENSSL_SSLERR_H +# pragma once + +# include +# include +# include + + + +/* + * SSL reason codes. + */ +# define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 +# 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_2_NEEDED_IN_SUITEB_MODE 158 +# define SSL_R_BAD_CERTIFICATE 348 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# define SSL_R_BAD_CIPHER 186 +# define SSL_R_BAD_COMPRESSION_ALGORITHM 326 +# 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_EARLY_DATA 233 +# define SSL_R_BAD_ECC_CERT 304 +# define SSL_R_BAD_ECPOINT 306 +# define SSL_R_BAD_EXTENSION 110 +# define SSL_R_BAD_HANDSHAKE_LENGTH 332 +# define SSL_R_BAD_HANDSHAKE_STATE 236 +# define SSL_R_BAD_HELLO_REQUEST 105 +# define SSL_R_BAD_HRR_VERSION 263 +# define SSL_R_BAD_KEY_SHARE 108 +# define SSL_R_BAD_KEY_UPDATE 122 +# define SSL_R_BAD_LEGACY_VERSION 292 +# define SSL_R_BAD_LENGTH 271 +# define SSL_R_BAD_PACKET 240 +# define SSL_R_BAD_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_PSK 219 +# define SSL_R_BAD_PSK_IDENTITY 114 +# define SSL_R_BAD_RECORD_TYPE 443 +# 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_BINDER_DOES_NOT_VERIFY 253 +# 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_CALLBACK_FAILED 234 +# define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CANNOT_GET_GROUP_NAME 299 +# 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_CIPHERSUITE_DIGEST_HAS_CHANGED 218 +# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 +# 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_CONN_USE_ONLY 356 +# 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_COPY_PARAMETERS_FAILED 296 +# 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_DOMAIN_USE_ONLY 422 +# 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_RAW_PUBLIC_KEY 349 +# 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_IN_SYSTEM_DEFAULT_CONFIG 419 +# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 +# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTENSION_NOT_RECEIVED 279 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_EXT_LENGTH_MISMATCH 163 +# define SSL_R_FAILED_TO_GET_PARAMETER 316 +# define SSL_R_FAILED_TO_INIT_ASYNC 405 +# define SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE 417 +# define SSL_R_FEATURE_NOT_RENEGOTIABLE 413 +# 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_POINT_COMPRESSION 162 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INCONSISTENT_EARLY_DATA_ALPN 222 +# define SSL_R_INCONSISTENT_EARLY_DATA_SNI 231 +# define SSL_R_INCONSISTENT_EXTMS 104 +# define SSL_R_INSUFFICIENT_SECURITY 241 +# define SSL_R_INVALID_ALERT 205 +# define SSL_R_INVALID_CCS_MESSAGE 260 +# define SSL_R_INVALID_CERTIFICATE_OR_ALG 238 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_CONFIG 283 +# define SSL_R_INVALID_CONFIGURATION_NAME 113 +# define SSL_R_INVALID_CONTEXT 282 +# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 +# define SSL_R_INVALID_KEY_UPDATE_TYPE 120 +# define SSL_R_INVALID_MAX_EARLY_DATA 174 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_RAW_PUBLIC_KEY 350 +# define SSL_R_INVALID_RECORD 317 +# define SSL_R_INVALID_SEQUENCE_NUMBER 402 +# define SSL_R_INVALID_SERVERINFO_DATA 388 +# define SSL_R_INVALID_SESSION_ID 999 +# 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_LEGACY_SIGALG_DISALLOWED_OR_UNSUPPORTED 333 +# 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_LISTENER_USE_ONLY 421 +# define SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED 395 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# define SSL_R_MISSING_FATAL 256 +# define SSL_R_MISSING_PARAMETERS 290 +# define SSL_R_MISSING_PSK_KEX_MODES_EXTENSION 310 +# define SSL_R_MISSING_QUIC_TLS_FUNCTIONS 423 +# 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_SIGALGS_EXTENSION 112 +# define SSL_R_MISSING_SIGNING_CERT 221 +# define SSL_R_MISSING_SRP_PARAM 358 +# define SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION 209 +# define SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION 420 +# define SSL_R_MISSING_TMP_DH_KEY 171 +# define SSL_R_MISSING_TMP_ECDH_KEY 311 +# define SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA 293 +# define SSL_R_NOT_ON_RECORD_BOUNDARY 182 +# define SSL_R_NOT_REPLACING_CERTIFICATE 289 +# define SSL_R_NOT_SERVER 284 +# define SSL_R_NO_APPLICATION_PROTOCOL 235 +# 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_CHANGE_FOLLOWING_HRR 214 +# 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_COOKIE_CALLBACK_SET 287 +# 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_GROUPS 410 +# define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_STREAM 355 +# define SSL_R_NO_SUITABLE_DIGEST_ALGORITHM 297 +# define SSL_R_NO_SUITABLE_GROUPS 295 +# define SSL_R_NO_SUITABLE_KEY_SHARE 101 +# define SSL_R_NO_SUITABLE_RECORD_LAYER 322 +# define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 +# 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_OCSP_CALLBACK_FAILURE 305 +# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 +# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 +# define SSL_R_OVERFLOW_ERROR 237 +# 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_POLL_REQUEST_NOT_SUPPORTED 418 +# define SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR 278 +# define SSL_R_PRIVATE_KEY_MISMATCH 288 +# 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_QUIC_HANDSHAKE_LAYER_ERROR 393 +# define SSL_R_QUIC_NETWORK_ERROR 387 +# define SSL_R_QUIC_PROTOCOL_ERROR 382 +# define SSL_R_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_RECORDS_NOT_RELEASED 321 +# define SSL_R_RECORD_LAYER_FAILURE 313 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# define SSL_R_RECORD_TOO_SMALL 298 +# define SSL_R_REMOTE_PEER_ADDRESS_NOT_SET 346 +# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 +# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 +# define SSL_R_RENEGOTIATION_MISMATCH 337 +# define SSL_R_REQUEST_PENDING 285 +# define SSL_R_REQUEST_SENT 286 +# 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_SEQUENCE_CTR_WRAPPED 327 +# 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_MAX_FRAGMENT_LENGTH 232 +# 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_CONTEXT_TOO_LONG 273 +# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 +# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 +# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 +# define SSL_R_STILL_IN_INIT 121 +# define SSL_R_STREAM_COUNT_LIMITED 411 +# define SSL_R_STREAM_FINISHED 365 +# define SSL_R_STREAM_RECV_ONLY 366 +# define SSL_R_STREAM_RESET 375 +# define SSL_R_STREAM_SEND_ONLY 379 +# define SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116 +# define SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109 +# 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_APPLICATION_PROTOCOL 1120 +# 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_UNKNOWN_PSK_IDENTITY 1115 +# 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_ILLEGAL_EXPORTER_LABEL 367 +# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 +# define SSL_R_TOO_MANY_KEY_UPDATES 132 +# define SSL_R_TOO_MANY_WARN_ALERTS 409 +# define SSL_R_TOO_MUCH_EARLY_DATA 164 +# 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_CCS_MESSAGE 262 +# define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_EOF_WHILE_READING 294 +# 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_MANDATORY_PARAMETER 323 +# 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_UNSOLICITED_EXTENSION 217 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# define SSL_R_UNSUPPORTED_CONFIG_VALUE 414 +# define SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS 415 +# define SSL_R_UNSUPPORTED_CONFIG_VALUE_OP 416 +# 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_UNSUPPORTED_WRITE_FLAG 412 +# 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_RPK_TYPE 351 +# 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 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/sslerr_legacy.h b/thirdparty/OpenSSL-3.5.3/include/openssl/sslerr_legacy.h new file mode 100644 index 0000000..4c35367 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/sslerr_legacy.h @@ -0,0 +1,467 @@ +/* + * Copyright 2020-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public sslerr.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_SSLERR_LEGACY_H +# define OPENSSL_SSLERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_SSL_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 0 +# define SSL_F_ADD_KEY_SHARE 0 +# define SSL_F_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 0 +# define SSL_F_CIPHERSUITE_CB 0 +# define SSL_F_CONSTRUCT_CA_NAMES 0 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 0 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 0 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 0 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 0 +# define SSL_F_CREATE_TICKET_PREQUEL 0 +# define SSL_F_CT_MOVE_SCTS 0 +# define SSL_F_CT_STRICT 0 +# define SSL_F_CUSTOM_EXT_ADD 0 +# define SSL_F_CUSTOM_EXT_PARSE 0 +# define SSL_F_D2I_SSL_SESSION 0 +# define SSL_F_DANE_CTX_ENABLE 0 +# define SSL_F_DANE_MTYPE_SET 0 +# define SSL_F_DANE_TLSA_ADD 0 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 0 +# define SSL_F_DO_DTLS1_WRITE 0 +# define SSL_F_DO_SSL3_WRITE 0 +# define SSL_F_DTLS1_BUFFER_RECORD 0 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 0 +# define SSL_F_DTLS1_HEARTBEAT 0 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 0 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 0 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 0 +# define SSL_F_DTLS1_PROCESS_RECORD 0 +# define SSL_F_DTLS1_READ_BYTES 0 +# define SSL_F_DTLS1_READ_FAILED 0 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 0 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 0 +# define SSL_F_DTLS1_WRITE_BYTES 0 +# define SSL_F_DTLSV1_LISTEN 0 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 0 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 0 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 0 +# define SSL_F_DTLS_RECORD_LAYER_NEW 0 +# define SSL_F_DTLS_WAIT_FOR_DRY 0 +# define SSL_F_EARLY_DATA_COUNT_OK 0 +# define SSL_F_FINAL_EARLY_DATA 0 +# define SSL_F_FINAL_EC_PT_FORMATS 0 +# define SSL_F_FINAL_EMS 0 +# define SSL_F_FINAL_KEY_SHARE 0 +# define SSL_F_FINAL_MAXFRAGMENTLEN 0 +# define SSL_F_FINAL_RENEGOTIATE 0 +# define SSL_F_FINAL_SERVER_NAME 0 +# define SSL_F_FINAL_SIG_ALGS 0 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 0 +# define SSL_F_NSS_KEYLOG_INT 0 +# define SSL_F_OPENSSL_INIT_SSL 0 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 0 +# define SSL_F_PARSE_CA_NAMES 0 +# define SSL_F_PITEM_NEW 0 +# define SSL_F_PQUEUE_NEW 0 +# define SSL_F_PROCESS_KEY_SHARE_EXT 0 +# define SSL_F_READ_STATE_MACHINE 0 +# define SSL_F_SET_CLIENT_CIPHERSUITE 0 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 0 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 0 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 0 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 0 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 0 +# define SSL_F_SSL3_CTRL 0 +# define SSL_F_SSL3_CTX_CTRL 0 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 0 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 0 +# define SSL_F_SSL3_ENC 0 +# define SSL_F_SSL3_FINAL_FINISH_MAC 0 +# define SSL_F_SSL3_FINISH_MAC 0 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 0 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 0 +# define SSL_F_SSL3_GET_RECORD 0 +# define SSL_F_SSL3_INIT_FINISHED_MAC 0 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 0 +# define SSL_F_SSL3_READ_BYTES 0 +# define SSL_F_SSL3_READ_N 0 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 0 +# define SSL_F_SSL3_SETUP_READ_BUFFER 0 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 0 +# define SSL_F_SSL3_WRITE_BYTES 0 +# define SSL_F_SSL3_WRITE_PENDING 0 +# define SSL_F_SSL_ADD_CERT_CHAIN 0 +# define SSL_F_SSL_ADD_CERT_TO_BUF 0 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_BUILD_CERT_CHAIN 0 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_SSL_CACHE_CIPHERLIST 0 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 0 +# define SSL_F_SSL_CERT_DUP 0 +# define SSL_F_SSL_CERT_NEW 0 +# define SSL_F_SSL_CERT_SET0_CHAIN 0 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 0 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 0 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 0 +# define SSL_F_SSL_CIPHER_DESCRIPTION 0 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 0 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 0 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 0 +# define SSL_F_SSL_CLEAR 0 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 0 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 0 +# define SSL_F_SSL_CONF_CMD 0 +# define SSL_F_SSL_CREATE_CIPHER_LIST 0 +# define SSL_F_SSL_CTRL 0 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CTX_ENABLE_CT 0 +# define SSL_F_SSL_CTX_MAKE_PROFILES 0 +# define SSL_F_SSL_CTX_NEW 0 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 0 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 0 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 0 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 0 +# define SSL_F_SSL_DANE_DUP 0 +# define SSL_F_SSL_DANE_ENABLE 0 +# define SSL_F_SSL_DERIVE 0 +# define SSL_F_SSL_DO_CONFIG 0 +# define SSL_F_SSL_DO_HANDSHAKE 0 +# define SSL_F_SSL_DUP_CA_LIST 0 +# define SSL_F_SSL_ENABLE_CT 0 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 0 +# define SSL_F_SSL_GENERATE_SESSION_ID 0 +# define SSL_F_SSL_GET_NEW_SESSION 0 +# define SSL_F_SSL_GET_PREV_SESSION 0 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 0 +# define SSL_F_SSL_GET_SIGN_PKEY 0 +# define SSL_F_SSL_HANDSHAKE_HASH 0 +# define SSL_F_SSL_INIT_WBIO_BUFFER 0 +# define SSL_F_SSL_KEY_UPDATE 0 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 0 +# define SSL_F_SSL_LOG_MASTER_SECRET 0 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_SSL_MODULE_INIT 0 +# define SSL_F_SSL_NEW 0 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PEEK 0 +# define SSL_F_SSL_PEEK_EX 0 +# define SSL_F_SSL_PEEK_INTERNAL 0 +# define SSL_F_SSL_READ 0 +# define SSL_F_SSL_READ_EARLY_DATA 0 +# define SSL_F_SSL_READ_EX 0 +# define SSL_F_SSL_READ_INTERNAL 0 +# define SSL_F_SSL_RENEGOTIATE 0 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 0 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_SESSION_DUP 0 +# define SSL_F_SSL_SESSION_NEW 0 +# define SSL_F_SSL_SESSION_PRINT_FP 0 +# define SSL_F_SSL_SESSION_SET1_ID 0 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 0 +# define SSL_F_SSL_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_SET_CERT 0 +# define SSL_F_SSL_SET_CERT_AND_KEY 0 +# define SSL_F_SSL_SET_CIPHER_LIST 0 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_SET_FD 0 +# define SSL_F_SSL_SET_PKEY 0 +# define SSL_F_SSL_SET_RFD 0 +# define SSL_F_SSL_SET_SESSION 0 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 0 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_SET_WFD 0 +# define SSL_F_SSL_SHUTDOWN 0 +# define SSL_F_SSL_SRP_CTX_INIT 0 +# define SSL_F_SSL_START_ASYNC_JOB 0 +# define SSL_F_SSL_UNDEFINED_FUNCTION 0 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 0 +# define SSL_F_SSL_USE_CERTIFICATE 0 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_USE_PRIVATEKEY 0 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_VALIDATE_CT 0 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 0 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 0 +# define SSL_F_SSL_WRITE 0 +# define SSL_F_SSL_WRITE_EARLY_DATA 0 +# define SSL_F_SSL_WRITE_EARLY_FINISH 0 +# define SSL_F_SSL_WRITE_EX 0 +# define SSL_F_SSL_WRITE_INTERNAL 0 +# define SSL_F_STATE_MACHINE 0 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 0 +# define SSL_F_TLS12_COPY_SIGALGS 0 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS13_ENC 0 +# define SSL_F_TLS13_FINAL_FINISH_MAC 0 +# define SSL_F_TLS13_GENERATE_SECRET 0 +# define SSL_F_TLS13_HKDF_EXPAND 0 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 0 +# define SSL_F_TLS1_ENC 0 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 0 +# define SSL_F_TLS1_GET_CURVELIST 0 +# define SSL_F_TLS1_PRF 0 +# define SSL_F_TLS1_SAVE_U16 0 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_SET_GROUPS 0 +# define SSL_F_TLS1_SET_RAW_SIGALGS 0 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 0 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 0 +# define SSL_F_TLS1_SET_SIGALGS 0 +# define SSL_F_TLS_CHOOSE_SIGALG 0 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 0 +# define SSL_F_TLS_COLLECT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 0 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 0 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 0 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_FINISHED 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 0 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 0 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 0 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 0 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_FINISH_HANDSHAKE 0 +# define SSL_F_TLS_GET_MESSAGE_BODY 0 +# define SSL_F_TLS_GET_MESSAGE_HEADER 0 +# define SSL_F_TLS_HANDLE_ALPN 0 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_PARSE_CTOS_ALPN 0 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 0 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_CTOS_EMS 0 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_PARSE_CTOS_PSK 0 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 0 +# define SSL_F_TLS_PARSE_CTOS_SRP 0 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 0 +# define SSL_F_TLS_PARSE_STOC_ALPN 0 +# define SSL_F_TLS_PARSE_STOC_COOKIE 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_STOC_NPN 0 +# define SSL_F_TLS_PARSE_STOC_PSK 0 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_STOC_SCT 0 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 0 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 0 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_PROCESS_CKE_DHE 0 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_CKE_GOST 0 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_CKE_RSA 0 +# define SSL_F_TLS_PROCESS_CKE_SRP 0 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_PROCESS_FINISHED 0 +# define SSL_F_TLS_PROCESS_HELLO_REQ 0 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 0 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 0 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 0 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_SERVER_DONE 0 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 0 +# define SSL_F_TLS_PROCESS_SKE_DHE 0 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_SKE_SRP 0 +# define SSL_F_TLS_PSK_DO_BINDER 0 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_SETUP_HANDSHAKE 0 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 0 +# define SSL_F_WPACKET_INTERN_INIT_LEN 0 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 0 +# define SSL_F_WRITE_STATE_MACHINE 0 +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/stack.h b/thirdparty/OpenSSL-3.5.3/include/openssl/stack.h new file mode 100644 index 0000000..f0c5c54 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/stack.h @@ -0,0 +1,90 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_STACK_H +# define OPENSSL_STACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_STACK_H +# endif + +#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); +OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); +int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); +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_find_all(OPENSSL_STACK *st, const void *data, int *pnum); +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); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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/thirdparty/OpenSSL-3.5.3/include/openssl/store.h b/thirdparty/OpenSSL-3.5.3/include/openssl/store.h new file mode 100644 index 0000000..e6ea3cf --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/store.h @@ -0,0 +1,377 @@ +/* + * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_STORE_H +# define OPENSSL_STORE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OSSL_STORE_H +# endif + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * The main OSSL_STORE functions. + * ------------------------------ + * + * These allow applications to open a channel to a resource with supported + * data (keys, certs, crls, ...), read the data a piece at a time and decide + * what to do with it, and finally close. + */ + +typedef struct ossl_store_ctx_st OSSL_STORE_CTX; + +/* + * Typedef for the OSSL_STORE_INFO post processing callback. This can be used + * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning + * NULL). + */ +typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, + void *); + +/* + * Open a channel given a URI. The given UI method will be used any time the + * loader needs extra input, for example when a password or pin is needed, and + * will be passed the same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + */ +OSSL_STORE_CTX * +OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open_ex(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); + +/* + * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be + * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to + * determine which loader is used), except for common commands (see below). + * Each command takes different arguments. + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, + ... /* args */); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, + va_list args); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +/* + * Common ctrl commands that different loaders may choose to support. + */ +/* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ +# define OSSL_STORE_C_USE_SECMEM 1 +/* Where custom commands start */ +# define OSSL_STORE_C_CUSTOM_START 100 + +# endif + +/* + * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE + * functionality, given a context. + * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be + * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... + * NULL is returned on error, which may include that the data found at the URI + * can't be figured out for certain or is ambiguous. + */ +OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); + +/* + * Deletes the object in the store by URI. + * Returns 1 on success, 0 otherwise. + */ +int OSSL_STORE_delete(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[]); + +/* + * Check if end of data (end of file) is reached + * Returns 1 on end, 0 otherwise. + */ +int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); + +/* + * Check if an error occurred + * Returns 1 if it did, 0 otherwise. + */ +int OSSL_STORE_error(OSSL_STORE_CTX *ctx); + +/* + * Close the channel + * Returns 1 on success, 0 on error. + */ +int OSSL_STORE_close(OSSL_STORE_CTX *ctx); + +/* + * Attach to a BIO. This works like OSSL_STORE_open() except it takes a + * BIO instead of a uri, along with a scheme to use when reading. + * The given UI method will be used any time the loader needs extra input, + * for example when a password or pin is needed, and will be passed the + * same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + * + * Note that this function is considered unsafe, all depending on what the + * BIO actually reads. + */ +OSSL_STORE_CTX *OSSL_STORE_attach(BIO *bio, const char *scheme, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); + +/*- + * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs + * --------------------------------------------------------------- + */ + +/* + * Types of data that can be ossl_stored in a OSSL_STORE_INFO. + * OSSL_STORE_INFO_NAME is typically found when getting a listing of + * available "files" / "tokens" / what have you. + */ +# define OSSL_STORE_INFO_NAME 1 /* char * */ +# define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PUBKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 4 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 5 /* X509 * */ +# define OSSL_STORE_INFO_CRL 6 /* X509_CRL * */ + +/* + * Functions to generate OSSL_STORE_INFOs, one function for each type we + * support having in them, as well as a generic constructor. + * + * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO + * and will therefore be freed when the OSSL_STORE_INFO is freed. + */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); +int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PUBKEY(EVP_PKEY *pubkey); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); + +/* + * Functions to try to extract data from a OSSL_STORE_INFO. + */ +int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PUBKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); + +const char *OSSL_STORE_INFO_type_string(int type); + +/* + * Free the OSSL_STORE_INFO + */ +void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); + + +/*- + * Functions to construct a search URI from a base URI and search criteria + * ----------------------------------------------------------------------- + */ + +/* OSSL_STORE search types */ +# define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ +# define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 +# define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 +# define OSSL_STORE_SEARCH_BY_ALIAS 4 + +/* To check what search types the scheme handler supports */ +int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); + +/* Search term constructors */ +/* + * The input is considered to be owned by the caller, and must therefore + * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH + */ +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, + const ASN1_INTEGER + *serial); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, + const unsigned char + *bytes, size_t len); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); + +/* Search term destructor */ +void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); + +/* Search term accessors */ +int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(const OSSL_STORE_SEARCH *criterion); +const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH + *criterion); +const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH + *criterion, size_t *length); +const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); +const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); + +/* + * Add search criterion and expected return type (which can be unspecified) + * to the loading channel. This MUST happen before the first OSSL_STORE_load(). + */ +int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, const OSSL_STORE_SEARCH *search); + + +/*- + * Function to fetch a loader and extract data from it + * --------------------------------------------------- + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; + +OSSL_STORE_LOADER *OSSL_STORE_LOADER_fetch(OSSL_LIB_CTX *libctx, + const char *scheme, + const char *properties); +int OSSL_STORE_LOADER_up_ref(OSSL_STORE_LOADER *loader); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); +const OSSL_PROVIDER *OSSL_STORE_LOADER_get0_provider(const OSSL_STORE_LOADER * + loader); +const char *OSSL_STORE_LOADER_get0_properties(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_description(const OSSL_STORE_LOADER *loader); +int OSSL_STORE_LOADER_is_a(const OSSL_STORE_LOADER *loader, + const char *scheme); +void OSSL_STORE_LOADER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_STORE_LOADER *loader, + void *arg), + void *arg); +int OSSL_STORE_LOADER_names_do_all(const OSSL_STORE_LOADER *loader, + void (*fn)(const char *name, void *data), + void *data); + +/*- + * Function to register a loader for the given URI scheme. + * ------------------------------------------------------- + * + * The loader receives all the main components of an URI except for the + * scheme. + */ + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +/* struct ossl_store_loader_ctx_st is defined differently by each loader */ +typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn) + (const OSSL_STORE_LOADER *loader, const char *uri, + const UI_METHOD *ui_method, void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_ex_fn) + (const OSSL_STORE_LOADER *loader, + const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); + +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_attach_fn) + (const OSSL_STORE_LOADER *loader, BIO *bio, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_ctrl_fn) + (OSSL_STORE_LOADER_CTX *ctx, int cmd, va_list args); +typedef int (*OSSL_STORE_expect_fn) + (OSSL_STORE_LOADER_CTX *ctx, int expected); +typedef int (*OSSL_STORE_find_fn) + (OSSL_STORE_LOADER_CTX *ctx, const OSSL_STORE_SEARCH *criteria); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn) + (OSSL_STORE_LOADER_CTX *ctx, const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); + +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_fn open_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_open_ex(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_ex_fn open_ex_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_attach(OSSL_STORE_LOADER *loader, + OSSL_STORE_attach_fn attach_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, + OSSL_STORE_ctrl_fn ctrl_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, + OSSL_STORE_expect_fn expect_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, + OSSL_STORE_find_fn find_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, + OSSL_STORE_load_fn load_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, + OSSL_STORE_eof_fn eof_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, + OSSL_STORE_error_fn error_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, + OSSL_STORE_close_fn close_function); +OSSL_DEPRECATEDIN_3_0 +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 +const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 +OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); +# endif + +/*- + * Functions to list STORE loaders + * ------------------------------- + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_do_all_loaders(void (*do_function)(const OSSL_STORE_LOADER *loader, + void *do_arg), + void *do_arg); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/storeerr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/storeerr.h new file mode 100644 index 0000000..00529c8 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/storeerr.h @@ -0,0 +1,49 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_STOREERR_H +# define OPENSSL_STOREERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_STORE reason codes. + */ +# define OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE 107 +# define OSSL_STORE_R_BAD_PASSWORD_READ 115 +# define OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC 113 +# define OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST 121 +# define OSSL_STORE_R_INVALID_SCHEME 106 +# define OSSL_STORE_R_IS_NOT_A 112 +# define OSSL_STORE_R_LOADER_INCOMPLETE 116 +# define OSSL_STORE_R_LOADING_STARTED 117 +# define OSSL_STORE_R_NOT_A_CERTIFICATE 100 +# define OSSL_STORE_R_NOT_A_CRL 101 +# define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_A_PRIVATE_KEY 102 +# define OSSL_STORE_R_NOT_A_PUBLIC_KEY 122 +# define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_NO_LOADERS_FOUND 123 +# define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 +# define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 +# define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 +# define OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED 109 +# define OSSL_STORE_R_UNREGISTERED_SCHEME 105 +# define OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE 110 +# define OSSL_STORE_R_UNSUPPORTED_OPERATION 118 +# define OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE 120 +# define OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED 111 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/symhacks.h b/thirdparty/OpenSSL-3.5.3/include/openssl/symhacks.h new file mode 100644 index 0000000..816f8f9 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/symhacks.h @@ -0,0 +1,39 @@ +/* + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_SYMHACKS_H +# define OPENSSL_SYMHACKS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SYMHACKS_H +# endif + +# 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 + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/thread.h b/thirdparty/OpenSSL-3.5.3/include/openssl/thread.h new file mode 100644 index 0000000..3926ce5 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/thread.h @@ -0,0 +1,31 @@ +/* + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (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 OPENSSL_THREAD_H +# define OPENSSL_THREAD_H + +# define OSSL_THREAD_SUPPORT_FLAG_THREAD_POOL (1U<<0) +# define OSSL_THREAD_SUPPORT_FLAG_DEFAULT_SPAWN (1U<<1) + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +uint32_t OSSL_get_thread_support_flags(void); +int OSSL_set_max_threads(OSSL_LIB_CTX *ctx, uint64_t max_threads); +uint64_t OSSL_get_max_threads(OSSL_LIB_CTX *ctx); + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_THREAD_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/tls1.h b/thirdparty/OpenSSL-3.5.3/include/openssl/tls1.h new file mode 100644 index 0000000..8e9b110 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/tls1.h @@ -0,0 +1,1220 @@ +/* + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_TLS1_H +# define OPENSSL_TLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TLS1_H +# endif + +# include +# 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 2 +# endif + +/* TLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_MAX_VERSION TLS1_3_VERSION +# endif + +/* 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 +/* TLSv1.3 alerts */ +# define TLS13_AD_MISSING_EXTENSION 109 /* fatal */ +# define TLS13_AD_CERTIFICATE_REQUIRED 116 /* fatal */ +/* 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 */ +/* + * Prior to TLSv1.3 the supported_groups extension was known as + * elliptic_curves + */ +# define TLSEXT_TYPE_supported_groups 10 +# define TLSEXT_TYPE_elliptic_curves TLSEXT_TYPE_supported_groups +# 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 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 + +/* + * Extension type for Raw Public Keys + * https://tools.ietf.org/html/rfc7250 + * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml + */ +# define TLSEXT_TYPE_client_cert_type 19 +# define TLSEXT_TYPE_server_cert_type 20 + +/* + * 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 RFC8879 */ +# define TLSEXT_TYPE_compress_certificate 27 + +/* ExtensionType value from RFC4507 */ +# define TLSEXT_TYPE_session_ticket 35 + +/* As defined for TLS1.3 */ +# define TLSEXT_TYPE_psk 41 +# define TLSEXT_TYPE_early_data 42 +# define TLSEXT_TYPE_supported_versions 43 +# define TLSEXT_TYPE_cookie 44 +# define TLSEXT_TYPE_psk_kex_modes 45 +# define TLSEXT_TYPE_certificate_authorities 47 +# define TLSEXT_TYPE_post_handshake_auth 49 +# define TLSEXT_TYPE_signature_algorithms_cert 50 +# define TLSEXT_TYPE_key_share 51 +# define TLSEXT_TYPE_quic_transport_parameters 57 + +/* 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 + +/* Possible compression values from RFC8879 */ +/* Not defined in RFC8879, but used internally for no-compression */ +# define TLSEXT_comp_cert_none 0 +# define TLSEXT_comp_cert_zlib 1 +# define TLSEXT_comp_cert_brotli 2 +# define TLSEXT_comp_cert_zstd 3 +/* one more than the number of defined values - used as size of 0-terminated array */ +# define TLSEXT_comp_cert_limit 4 + +/* Flag set for unrecognised algorithms */ +# define TLSEXT_nid_unknown 0x1000000 + +/* ECC curves */ + +# define TLSEXT_curve_P_256 23 +# define TLSEXT_curve_P_384 24 + +/* OpenSSL value to disable maximum fragment length extension */ +# define TLSEXT_max_fragment_length_DISABLED 0 +/* Allowed values for max fragment length extension */ +# define TLSEXT_max_fragment_length_512 1 +# define TLSEXT_max_fragment_length_1024 2 +# define TLSEXT_max_fragment_length_2048 3 +# define TLSEXT_max_fragment_length_4096 4 +/* OpenSSL value for unset maximum fragment length extension */ +# define TLSEXT_max_fragment_length_UNSPECIFIED 255 + +/* + * TLS Certificate Type (for RFC7250) + * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-3 + */ +# define TLSEXT_cert_type_x509 0 +# define TLSEXT_cert_type_pgp 1 /* recognized, but not supported */ +# define TLSEXT_cert_type_rpk 2 +# define TLSEXT_cert_type_1609dot2 3 /* recognized, but not supported */ + +int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); +int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); + +# 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 + * 0 or -1 otherwise. + */ +__owur int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, + const char *label, size_t llen, + const unsigned char *context, + size_t contextlen, int use_context); + +/* + * SSL_export_keying_material_early exports a value derived from the + * early exporter master secret, as specified in + * https://tools.ietf.org/html/draft-ietf-tls-tls13-23. It writes + * |olen| bytes to |out| given a label and optional context. It + * returns 1 on success and 0 otherwise. + */ +__owur int SSL_export_keying_material_early(SSL *s, unsigned char *out, + size_t olen, const char *label, + size_t llen, + const unsigned char *context, + size_t contextlen); + +int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid); +int SSL_get_signature_type_nid(const SSL *s, int *pnid); + +int SSL_get_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +char *SSL_get1_builtin_sigalgs(OSSL_LIB_CTX *libctx); + +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,\ + (void *)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,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,arg) + +# define SSL_set_tlsext_status_exts(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) + +# define SSL_get_tlsext_status_ids(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) + +# define SSL_set_tlsext_status_ids(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) + +# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) + +# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,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,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 *)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,arg) +# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,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) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# 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) +# endif +int SSL_CTX_set_tlsext_ticket_key_evp_cb + (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *, + EVP_CIPHER_CTX *, EVP_MAC_CTX *, int)); + +/* 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 + +/* TLS v1.3 ciphersuites */ +# define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 +# define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 +# define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303 +# define TLS1_3_CK_AES_128_CCM_SHA256 0x03001304 +# define TLS1_3_CK_AES_128_CCM_8_SHA256 0x03001305 + +/* Integrity-only ciphersuites from RFC 9150 */ +# define TLS1_3_CK_SHA256_SHA256 0x0300C0B4 +# define TLS1_3_CK_SHA384_SHA384 0x0300C0B5 + +/* Aria ciphersuites from RFC6209 */ +# define TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C050 +# define TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C051 +# define TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C052 +# define TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C053 +# define TLS1_CK_DH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C054 +# define TLS1_CK_DH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C055 +# define TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C056 +# define TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C057 +# define TLS1_CK_DH_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C058 +# define TLS1_CK_DH_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C059 +# define TLS1_CK_DH_anon_WITH_ARIA_128_GCM_SHA256 0x0300C05A +# define TLS1_CK_DH_anon_WITH_ARIA_256_GCM_SHA384 0x0300C05B +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05C +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05D +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05E +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05F +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C060 +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C061 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C062 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C063 +# define TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06A +# define TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06B +# define TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06C +# define TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06D +# define TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06E +# define TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06F + +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define TLS1_RFC_RSA_WITH_AES_128_SHA "TLS_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_128_SHA "TLS_DH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_WITH_AES_256_SHA "TLS_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_256_SHA "TLS_DH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_NULL_SHA256 "TLS_RSA_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_SHA256 "TLS_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_SHA256 "TLS_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_128_SHA256 "TLS_DH_anon_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_SHA256 "TLS_DH_anon_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256 "TLS_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384 "TLS_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256 "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384 "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256 "TLS_DH_anon_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384 "TLS_DH_anon_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_WITH_AES_128_CCM "TLS_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_RSA_WITH_AES_256_CCM "TLS_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM "TLS_DHE_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM "TLS_DHE_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_RSA_WITH_AES_128_CCM_8 "TLS_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_RSA_WITH_AES_256_CCM_8 "TLS_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8 "TLS_DHE_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8 "TLS_DHE_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_128_CCM "TLS_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_PSK_WITH_AES_256_CCM "TLS_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM "TLS_DHE_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM "TLS_DHE_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_PSK_WITH_AES_128_CCM_8 "TLS_PSK_WITH_AES_128_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_256_CCM_8 "TLS_PSK_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8 "TLS_PSK_DHE_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8 "TLS_PSK_DHE_WITH_AES_256_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM "TLS_ECDHE_ECDSA_WITH_AES_128_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM "TLS_ECDHE_ECDSA_WITH_AES_256_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8" +# define TLS1_3_RFC_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256" +# define TLS1_3_RFC_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384" +# define TLS1_3_RFC_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256" +# define TLS1_3_RFC_SHA256_SHA256 "TLS_SHA256_SHA256" +# define TLS1_3_RFC_SHA384_SHA384 "TLS_SHA384_SHA384" +# define TLS1_3_RFC_AES_128_CCM_SHA256 "TLS_AES_128_CCM_SHA256" +# define TLS1_3_RFC_AES_128_CCM_8_SHA256 "TLS_AES_128_CCM_8_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA "TLS_ECDHE_ECDSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA "TLS_ECDHE_RSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_NULL_SHA "TLS_ECDH_anon_WITH_NULL_SHA" +# define TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA "TLS_ECDH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA "TLS_PSK_WITH_NULL_SHA" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA "TLS_DHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA "TLS_RSA_PSK_WITH_NULL_SHA" +# define TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA "TLS_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA "TLS_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA "TLS_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA "TLS_DHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA "TLS_DHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA "TLS_RSA_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA "TLS_RSA_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256 "TLS_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384 "TLS_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256 "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384 "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256 "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384 "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256 "TLS_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384 "TLS_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA256 "TLS_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_PSK_WITH_NULL_SHA384 "TLS_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA256 "TLS_DHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA384 "TLS_DHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256 "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384 "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA256 "TLS_RSA_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA384 "TLS_RSA_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA "TLS_ECDHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256 "TLS_ECDHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384 "TLS_ECDHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305 "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_PSK_WITH_CHACHA20_POLY1305 "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305 "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305 "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_WITH_SEED_SHA "TLS_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_SEED_SHA "TLS_DHE_DSS_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_SEED_SHA "TLS_DHE_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ADH_WITH_SEED_SHA "TLS_DH_anon_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA "TLS_ECDHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA "TLS_ECDH_anon_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA "TLS_ECDHE_RSA_WITH_RC4_128_SHA" +# define TLS1_RFC_PSK_WITH_RC4_128_SHA "TLS_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA "TLS_RSA_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA "TLS_DHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_anon_WITH_ARIA_128_GCM_SHA256 "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_anon_WITH_ARIA_256_GCM_SHA384 "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384" + + +/* + * 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" + +/* Aria ciphersuites from RFC6209 */ +# define TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256 "ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384 "ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "DHE-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "DHE-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_ARIA_128_GCM_SHA256 "DH-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_ARIA_256_GCM_SHA384 "DH-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "DHE-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "DHE-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_ARIA_128_GCM_SHA256 "DH-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_ARIA_256_GCM_SHA384 "DH-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_anon_WITH_ARIA_128_GCM_SHA256 "ADH-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_anon_WITH_ARIA_256_GCM_SHA384 "ADH-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ARIA256-GCM-SHA384" +# define TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256 "PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384 "PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "DHE-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "DHE-PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "RSA-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "RSA-PSK-ARIA256-GCM-SHA384" + +# define TLS_CT_RSA_SIGN 1 +# define TLS_CT_DSS_SIGN 2 +# define TLS_CT_RSA_FIXED_DH 3 +# define TLS_CT_DSS_FIXED_DH 4 +# define TLS_CT_ECDSA_SIGN 64 +# define TLS_CT_RSA_FIXED_ECDH 65 +# define TLS_CT_ECDSA_FIXED_ECDH 66 +# define TLS_CT_GOST01_SIGN 22 +# define TLS_CT_GOST12_IANA_SIGN 67 +# define TLS_CT_GOST12_IANA_512_SIGN 68 +# define TLS_CT_GOST12_LEGACY_SIGN 238 +# define TLS_CT_GOST12_LEGACY_512_SIGN 239 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_CT_GOST12_SIGN TLS_CT_GOST12_LEGACY_SIGN +# define TLS_CT_GOST12_512_SIGN TLS_CT_GOST12_LEGACY_512_SIGN +# endif + +/* + * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see + * comment there) + */ +# define TLS_CT_NUMBER 12 + +# if defined(SSL3_CT_NUMBER) +# if TLS_CT_NUMBER != SSL3_CT_NUMBER +# error "SSL/TLS CT_NUMBER values do not match" +# endif +# endif + +# define TLS1_FINISH_MAC_LENGTH 12 + +# define TLS_MD_MAX_CONST_SIZE 22 + +/* ASCII: "client finished", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +/* ASCII: "server finished", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "key expansion", in hex for EBCDIC compatibility */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +/* ASCII: "client write key", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "IV block", in hex for EBCDIC compatibility */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +/* ASCII: "master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 +/* ASCII: "extended master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 + +/* TLS Session Ticket extension struct */ +struct tls_session_ticket_ext_st { + unsigned short length; + void *data; +}; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/trace.h b/thirdparty/OpenSSL-3.5.3/include/openssl/trace.h new file mode 100644 index 0000000..2ca07f7 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/trace.h @@ -0,0 +1,321 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_TRACE_H +# define OPENSSL_TRACE_H +# pragma once + +# include + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * TRACE CATEGORIES + */ + +/* + * The trace messages of the OpenSSL libraries are organized into different + * categories. For every trace category, the application can register a separate + * tracer callback. When a callback is registered, a so called trace channel is + * created for this category. This channel consists essentially of an internal + * BIO which sends all trace output it receives to the registered application + * callback. + * + * The ALL category can be used as a fallback category to register a single + * channel which receives the output from all categories. However, if the + * application intends to print the trace channel name in the line prefix, + * it is better to register channels for all categories separately. + * (This is how the openssl application does it.) + */ +# define OSSL_TRACE_CATEGORY_ALL 0 /* The fallback */ +# define OSSL_TRACE_CATEGORY_TRACE 1 +# define OSSL_TRACE_CATEGORY_INIT 2 +# define OSSL_TRACE_CATEGORY_TLS 3 +# define OSSL_TRACE_CATEGORY_TLS_CIPHER 4 +# define OSSL_TRACE_CATEGORY_CONF 5 +# define OSSL_TRACE_CATEGORY_ENGINE_TABLE 6 +# define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT 7 +# define OSSL_TRACE_CATEGORY_PKCS5V2 8 +# define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN 9 +# define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT 10 +# define OSSL_TRACE_CATEGORY_X509V3_POLICY 11 +# define OSSL_TRACE_CATEGORY_BN_CTX 12 +# define OSSL_TRACE_CATEGORY_CMP 13 +# define OSSL_TRACE_CATEGORY_STORE 14 +# define OSSL_TRACE_CATEGORY_DECODER 15 +# define OSSL_TRACE_CATEGORY_ENCODER 16 +# define OSSL_TRACE_CATEGORY_REF_COUNT 17 +# define OSSL_TRACE_CATEGORY_HTTP 18 +# define OSSL_TRACE_CATEGORY_PROVIDER 19 +# define OSSL_TRACE_CATEGORY_QUERY 20 +# define OSSL_TRACE_CATEGORY_NUM 21 +/* KEEP THIS LIST IN SYNC with trace_categories[] in crypto/trace.c */ + +/* Returns the trace category number for the given |name| */ +int OSSL_trace_get_category_num(const char *name); + +/* Returns the trace category name for the given |num| */ +const char *OSSL_trace_get_category_name(int num); + +/* + * TRACE CONSUMERS + */ + +/* + * Enables tracing for the given |category| by providing a BIO sink + * as |channel|. If a null pointer is passed as |channel|, an existing + * trace channel is removed and tracing for the category is disabled. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_channel(int category, BIO* channel); + +/* + * Attach a prefix and a suffix to the given |category|, to be printed at the + * beginning and at the end of each trace output group, i.e. when + * OSSL_trace_begin() and OSSL_trace_end() are called. + * If a null pointer is passed as argument, the existing prefix or suffix is + * removed. + * + * They return 1 on success and 0 on failure + */ +int OSSL_trace_set_prefix(int category, const char *prefix); +int OSSL_trace_set_suffix(int category, const char *suffix); + +/* + * OSSL_trace_cb is the type tracing callback provided by the application. + * It MUST return the number of bytes written, or 0 on error (in other words, + * it can never write zero bytes). + * + * The |buffer| will always contain text, which may consist of several lines. + * The |data| argument points to whatever data was provided by the application + * when registering the tracer function. + * + * The |category| number is given, as well as a |cmd| number, described below. + */ +typedef size_t (*OSSL_trace_cb)(const char *buffer, size_t count, + int category, int cmd, void *data); +/* + * Possible |cmd| numbers. + */ +# define OSSL_TRACE_CTRL_BEGIN 0 +# define OSSL_TRACE_CTRL_WRITE 1 +# define OSSL_TRACE_CTRL_END 2 + +/* + * Enables tracing for the given |category| by creating an internal + * trace channel which sends the output to the given |callback|. + * If a null pointer is passed as callback, an existing trace channel + * is removed and tracing for the category is disabled. + * + * NOTE: OSSL_trace_set_channel() and OSSL_trace_set_callback() are mutually + * exclusive. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_callback(int category, OSSL_trace_cb callback, void *data); + +/* + * TRACE PRODUCERS + */ + +/* + * Returns 1 if tracing for the specified category is enabled, otherwise 0 + */ +int OSSL_trace_enabled(int category); + +/* + * Wrap a group of tracing output calls. OSSL_trace_begin() locks tracing and + * returns the trace channel associated with the given category, or NULL if no + * channel is associated with the category. OSSL_trace_end() unlocks tracing. + * + * Usage: + * + * BIO *out; + * if ((out = OSSL_trace_begin(category)) != NULL) { + * ... + * BIO_fprintf(out, ...); + * ... + * OSSL_trace_end(category, out); + * } + * + * See also the convenience macros OSSL_TRACE_BEGIN and OSSL_TRACE_END below. + */ +BIO *OSSL_trace_begin(int category); +void OSSL_trace_end(int category, BIO *channel); + +/* + * OSSL_TRACE* Convenience Macros + */ + +/* + * When the tracing feature is disabled, these macros are defined to + * produce dead code, which a good compiler should eliminate. + */ + +/* + * OSSL_TRACE_BEGIN, OSSL_TRACE_END - Define a Trace Group + * + * These two macros can be used to create a block which is executed only + * if the corresponding trace category is enabled. Inside this block, a + * local variable named |trc_out| is defined, which points to the channel + * associated with the given trace category. + * + * Usage: (using 'TLS' as an example category) + * + * OSSL_TRACE_BEGIN(TLS) { + * + * BIO_fprintf(trc_out, ... ); + * + * } OSSL_TRACE_END(TLS); + * + * + * This expands to the following code + * + * do { + * BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_TLS); + * if (trc_out != NULL) { + * ... + * BIO_fprintf(trc_out, ...); + * } + * OSSL_trace_end(OSSL_TRACE_CATEGORY_TLS, trc_out); + * } while (0); + * + * The use of the inner '{...}' group and the trailing ';' is enforced + * by the definition of the macros in order to make the code look as much + * like C code as possible. + * + * Before returning from inside the trace block, it is necessary to + * call OSSL_TRACE_CANCEL(category). + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_##category); \ + \ + if (trc_out != NULL) + +# define OSSL_TRACE_END(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out); \ + } while (0) + +# define OSSL_TRACE_CANCEL(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out) \ + +# else + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = NULL; \ + if (0) + +# define OSSL_TRACE_END(category) \ + } while(0) + +# define OSSL_TRACE_CANCEL(category) \ + ((void)0) + +# endif + +/* + * OSSL_TRACE_ENABLED() - Check whether tracing is enabled for |category| + * + * Usage: + * + * if (OSSL_TRACE_ENABLED(TLS)) { + * ... + * } + */ +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_ENABLED(category) \ + OSSL_trace_enabled(OSSL_TRACE_CATEGORY_##category) + +# else + +# define OSSL_TRACE_ENABLED(category) (0) + +# endif + +/* + * OSSL_TRACE*() - OneShot Trace Macros + * + * These macros are intended to produce a simple printf-style trace output. + * Unfortunately, C90 macros don't support variable arguments, so the + * "vararg" OSSL_TRACEV() macro has a rather weird usage pattern: + * + * OSSL_TRACEV(category, (trc_out, "format string", ...args...)); + * + * Where 'channel' is the literal symbol of this name, not a variable. + * For that reason, it is currently not intended to be used directly, + * but only as helper macro for the other oneshot trace macros + * OSSL_TRACE(), OSSL_TRACE1(), OSSL_TRACE2(), ... + * + * Usage: + * + * OSSL_TRACE(INIT, "Hello world!\n"); + * OSSL_TRACE1(TLS, "The answer is %d\n", 42); + * OSSL_TRACE2(TLS, "The ultimate question to answer %d is '%s'\n", + * 42, "What do you get when you multiply six by nine?"); + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACEV(category, args) \ + OSSL_TRACE_BEGIN(category) \ + BIO_printf args; \ + OSSL_TRACE_END(category) + +# else + +# define OSSL_TRACEV(category, args) ((void)0) + +# endif + +# define OSSL_TRACE(category, text) \ + OSSL_TRACEV(category, (trc_out, "%s", text)) + +# define OSSL_TRACE1(category, format, arg1) \ + OSSL_TRACEV(category, (trc_out, format, arg1)) +# define OSSL_TRACE2(category, format, arg1, arg2) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2)) +# define OSSL_TRACE3(category, format, arg1, arg2, arg3) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3)) +# define OSSL_TRACE4(category, format, arg1, arg2, arg3, arg4) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4)) +# define OSSL_TRACE5(category, format, arg1, arg2, arg3, arg4, arg5) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5)) +# define OSSL_TRACE6(category, format, arg1, arg2, arg3, arg4, arg5, arg6) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6)) +# define OSSL_TRACE7(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7)) +# define OSSL_TRACE8(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)) +# define OSSL_TRACE9(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) + +#define OSSL_TRACE_STRING_MAX 80 +int OSSL_trace_string(BIO *out, int text, int full, + const unsigned char *data, size_t size); +#define OSSL_TRACE_STRING(category, text, full, data, len) \ + OSSL_TRACE_BEGIN(category) { \ + OSSL_trace_string(trc_out, text, full, data, len); \ + } OSSL_TRACE_END(category) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ts.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ts.h new file mode 100644 index 0000000..31c78b5 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ts.h @@ -0,0 +1,522 @@ +/* + * Copyright 2006-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_TS_H +# define OPENSSL_TS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TS_H +# endif + +# include + +# ifndef OPENSSL_NO_TS +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# ifdef __cplusplus +extern "C" { +# endif + +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 TS_resp_st TS_RESP; + +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_REQ) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_REQ, TS_REQ) +DECLARE_ASN1_DUP_FUNCTION(TS_REQ) + +#ifndef OPENSSL_NO_STDIO +TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); +int i2d_TS_REQ_fp(FILE *fp, const TS_REQ *a); +#endif +TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); +int i2d_TS_REQ_bio(BIO *fp, const TS_REQ *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_MSG_IMPRINT) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_MSG_IMPRINT, TS_MSG_IMPRINT) +DECLARE_ASN1_DUP_FUNCTION(TS_MSG_IMPRINT) + +#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, const 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, const TS_MSG_IMPRINT *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_RESP) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_RESP, TS_RESP) +DECLARE_ASN1_DUP_FUNCTION(TS_RESP) + +#ifndef OPENSSL_NO_STDIO +TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); +int i2d_TS_RESP_fp(FILE *fp, const TS_RESP *a); +#endif +TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); +int i2d_TS_RESP_bio(BIO *bio, const TS_RESP *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_STATUS_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_STATUS_INFO, TS_STATUS_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_STATUS_INFO) + +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_TST_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_TST_INFO, TS_TST_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_TST_INFO) +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); + +#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, const 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, const TS_TST_INFO *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_ACCURACY) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_ACCURACY, TS_ACCURACY) +DECLARE_ASN1_DUP_FUNCTION(TS_ACCURACY) + +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; + +/* Creates a response context that can be used for generating responses. */ +TS_RESP_CTX *TS_RESP_CTX_new(void); +TS_RESP_CTX *TS_RESP_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +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); +int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* 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); +# ifndef OPENSSL_NO_DEPRECATED_3_4 +OSSL_DEPRECATEDIN_3_4_FOR("Unclear semantics, replace with TS_VERIFY_CTX_set0_data().") +BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); +# endif +int TS_VERIFY_CTX_set0_data(TS_VERIFY_CTX *ctx, BIO *b); +# ifndef OPENSSL_NO_DEPRECATED_3_4 +OSSL_DEPRECATEDIN_3_4_FOR("Unclear semantics, replace with TS_VERIFY_CTX_set0_imprint().") +unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, + unsigned char *hexstr, long len); +# endif +int TS_VERIFY_CTX_set0_imprint(TS_VERIFY_CTX *ctx, + unsigned char *hexstr, long len); +# ifndef OPENSSL_NO_DEPRECATED_3_4 +OSSL_DEPRECATEDIN_3_4_FOR("Unclear semantics, replace with TS_VERIFY_CTX_set0_store().") +X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); +# endif +int TS_VERIFY_CTX_set0_store(TS_VERIFY_CTX *ctx, X509_STORE *s); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TS_VERIFY_CTS_set_certs(ctx, cert) TS_VERIFY_CTX_set_certs(ctx,cert) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_4 +OSSL_DEPRECATEDIN_3_4_FOR("Unclear semantics, replace with TS_VERIFY_CTX_set0_certs().") +STACK_OF(X509) *TS_VERIFY_CTX_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); +# endif +int TS_VERIFY_CTX_set0_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(const 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); +int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, + TS_RESP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/tserr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/tserr.h new file mode 100644 index 0000000..e1b943e --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/tserr.h @@ -0,0 +1,67 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_TSERR_H +# define OPENSSL_TSERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_TS + + +/* + * TS 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_ADD_SIGNING_CERT_V2_ERROR 139 +# 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 + +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/txt_db.h b/thirdparty/OpenSSL-3.5.3/include/openssl/txt_db.h new file mode 100644 index 0000000..af169a3 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/txt_db.h @@ -0,0 +1,63 @@ +/* + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_TXT_DB_H +# define OPENSSL_TXT_DB_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TXT_DB_H +# endif + +# 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/thirdparty/OpenSSL-3.5.3/include/openssl/types.h b/thirdparty/OpenSSL-3.5.3/include/openssl/types.h new file mode 100644 index 0000000..344d892 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/types.h @@ -0,0 +1,248 @@ +/* + * Copyright 2001-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + */ + +/* + * Unfortunate workaround to avoid symbol conflict with wincrypt.h + * See https://github.com/openssl/openssl/issues/9981 + */ +#ifdef _WIN32 +# define WINCRYPT_USE_SYMBOL_PREFIX +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +#endif + +#ifndef OPENSSL_TYPES_H +# define OPENSSL_TYPES_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include +# include + +# if OPENSSL_VERSION_MAJOR >= 4 +# define OSSL_FUTURE_CONST const +# else +# define OSSL_FUTURE_CONST +# endif + +typedef struct ossl_provider_st OSSL_PROVIDER; /* Provider Object */ + +# 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_type_st ASN1_TYPE; +typedef struct asn1_object_st ASN1_OBJECT; +typedef struct asn1_string_table_st ASN1_STRING_TABLE; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef BIGNUM +# undef BIGNUM +# endif + +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; + +STACK_OF(BIGNUM); +STACK_OF(BIGNUM_const); + +typedef struct err_state_st ERR_STATE; + +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_mac_st EVP_MAC; +typedef struct evp_mac_ctx_st EVP_MAC_CTX; +typedef struct evp_pkey_st EVP_PKEY; +typedef struct evp_skey_st EVP_SKEY; + +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_keymgmt_st EVP_KEYMGMT; + +typedef struct evp_kdf_st EVP_KDF; +typedef struct evp_kdf_ctx_st EVP_KDF_CTX; + +typedef struct evp_rand_st EVP_RAND; +typedef struct evp_rand_ctx_st EVP_RAND_CTX; + +typedef struct evp_keyexch_st EVP_KEYEXCH; + +typedef struct evp_signature_st EVP_SIGNATURE; + +typedef struct evp_skeymgmt_st EVP_SKEYMGMT; + +typedef struct evp_asym_cipher_st EVP_ASYM_CIPHER; + +typedef struct evp_kem_st EVP_KEM; + +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; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# endif +typedef struct rsa_pss_params_st RSA_PSS_PARAMS; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif + +typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; + +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 x509_sig_info_st X509_SIG_INFO; + +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 ossl_http_req_ctx_st OSSL_HTTP_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; + +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + +typedef struct ossl_lib_ctx_st OSSL_LIB_CTX; + +typedef struct ossl_dispatch_st OSSL_DISPATCH; +typedef struct ossl_item_st OSSL_ITEM; +typedef struct ossl_algorithm_st OSSL_ALGORITHM; +typedef struct ossl_param_st OSSL_PARAM; +typedef struct ossl_param_bld_st OSSL_PARAM_BLD; + +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +typedef struct ossl_encoder_st OSSL_ENCODER; +typedef struct ossl_encoder_ctx_st OSSL_ENCODER_CTX; +typedef struct ossl_decoder_st OSSL_DECODER; +typedef struct ossl_decoder_ctx_st OSSL_DECODER_CTX; + +typedef struct ossl_self_test_st OSSL_SELF_TEST; + +#ifdef __cplusplus +} +#endif + +#endif /* OPENSSL_TYPES_H */ diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/ui.h b/thirdparty/OpenSSL-3.5.3/include/openssl/ui.h new file mode 100644 index 0000000..835b0eb --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/ui.h @@ -0,0 +1,407 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\ui.h.in + * + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif + +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# include +# include +# include + +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI +# endif +# endif + +# 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. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. + * 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 {phrase_desc} for {object_name}:" + * + * So, if phrase_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 *phrase_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); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_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); +int UI_get_result_length(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parameterised 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(const 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); + +# ifndef OPENSSL_NO_UI_CONSOLE + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(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; + +SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING) +#define sk_UI_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_value(sk, idx) ((UI_STRING *)OPENSSL_sk_value(ossl_check_const_UI_STRING_sk_type(sk), (idx))) +#define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp))) +#define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_null()) +#define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n))) +#define sk_UI_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_UI_STRING_sk_type(sk), (n)) +#define sk_UI_STRING_free(sk) OPENSSL_sk_free(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_delete(sk, i) ((UI_STRING *)OPENSSL_sk_delete(ossl_check_UI_STRING_sk_type(sk), (i))) +#define sk_UI_STRING_delete_ptr(sk, ptr) ((UI_STRING *)OPENSSL_sk_delete_ptr(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_pop(sk) ((UI_STRING *)OPENSSL_sk_pop(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_shift(sk) ((UI_STRING *)OPENSSL_sk_shift(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk),ossl_check_UI_STRING_freefunc_type(freefunc)) +#define sk_UI_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), (idx)) +#define sk_UI_STRING_set(sk, idx, ptr) ((UI_STRING *)OPENSSL_sk_set(ossl_check_UI_STRING_sk_type(sk), (idx), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), pnum) +#define sk_UI_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_dup(sk) ((STACK_OF(UI_STRING) *)OPENSSL_sk_dup(ossl_check_const_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(UI_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_UI_STRING_sk_type(sk), ossl_check_UI_STRING_copyfunc_type(copyfunc), ossl_check_UI_STRING_freefunc_type(freefunc))) +#define sk_UI_STRING_set_cmp_func(sk, cmp) ((sk_UI_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_compfunc_type(cmp))) + + +/* + * 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_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *phrase_desc, + const char + *object_name)); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); + +/* + * 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); +int UI_get_result_string_length(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); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); + +/* 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); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/uierr.h b/thirdparty/OpenSSL-3.5.3/include/openssl/uierr.h new file mode 100644 index 0000000..473b04e --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/uierr.h @@ -0,0 +1,38 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_UIERR_H +# define OPENSSL_UIERR_H +# pragma once + +# include +# include +# include + + + +/* + * UI 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_PROCESSING_ERROR 107 +# define UI_R_RESULT_TOO_LARGE 100 +# define UI_R_RESULT_TOO_SMALL 101 +# define UI_R_SYSASSIGN_ERROR 109 +# define UI_R_SYSDASSGN_ERROR 110 +# define UI_R_SYSQIOW_ERROR 111 +# define UI_R_UNKNOWN_CONTROL_COMMAND 106 +# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 +# define UI_R_USER_DATA_DUPLICATION_UNSUPPORTED 112 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/whrlpool.h b/thirdparty/OpenSSL-3.5.3/include/openssl/whrlpool.h new file mode 100644 index 0000000..05ba463 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/whrlpool.h @@ -0,0 +1,62 @@ +/* + * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_WHRLPOOL_H +# define OPENSSL_WHRLPOOL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_WHRLPOOL_H +# endif + +# include + +# ifndef OPENSSL_NO_WHIRLPOOL +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# 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; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, + const void *inp, size_t bytes); +OSSL_DEPRECATEDIN_3_0 void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, + const void *inp, size_t bits); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *WHIRLPOOL(const void *inp, size_t bytes, + unsigned char *md); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/x509.h b/thirdparty/OpenSSL-3.5.3/include/openssl/x509.h new file mode 100644 index 0000000..af821ee --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/x509.h @@ -0,0 +1,1303 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\x509.h.in + * + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (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 OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Needed stacks for types defined in other headers */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) +#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx))) +#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp))) +#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n))) +#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n)) +#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i))) +#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc)) +#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx)) +#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum) +#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc))) +#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) +#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx))) +#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp))) +#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null()) +#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n))) +#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n)) +#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk)) +#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk)) +#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i))) +#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))) +#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk))) +#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk))) +#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc)) +#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx)) +#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr))) +#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum) +#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk)) +#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk))) +#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc))) +#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) +#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx))) +#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp))) +#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null()) +#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n))) +#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n)) +#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i))) +#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc)) +#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx)) +#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum) +#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc))) +#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL) +#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx))) +#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp))) +#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null()) +#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n))) +#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n)) +#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i))) +#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc)) +#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx)) +#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum) +#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc))) +#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp))) + + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +/*- + * : + * The KeyUsage BITSTRING is treated as a little-endian integer, hence bit `0` + * is 0x80, while bit `7` is 0x01 (the LSB of the integer value), bit `8` is + * then the MSB of the second octet, or 0x8000. + */ +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 /* (0) */ +# define X509v3_KU_NON_REPUDIATION 0x0040 /* (1) */ +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 /* (2) */ +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 /* (3) */ +# define X509v3_KU_KEY_AGREEMENT 0x0008 /* (4) */ +# define X509v3_KU_KEY_CERT_SIGN 0x0004 /* (5) */ +# define X509v3_KU_CRL_SIGN 0x0002 /* (6) */ +# define X509v3_KU_ENCIPHER_ONLY 0x0001 /* (7) */ +# define X509v3_KU_DECIPHER_ONLY 0x8000 /* (8) */ +# ifndef OPENSSL_NO_DEPRECATED_3_4 +# define X509v3_KU_UNDEF 0xffff /* vestigial, not used */ +# endif + +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; + +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY) +#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx))) +#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) +#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n))) +#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n)) +#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i))) +#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)) +#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx)) +#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum) +#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))) +#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) + + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; +SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION) +#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx))) +#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp))) +#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null()) +#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n))) +#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n)) +#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i))) +#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc)) +#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx)) +#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum) +#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc))) +#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp))) + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; +typedef struct x509_attributes_st X509_ATTRIBUTE; +SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE) +#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx))) +#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) +#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null()) +#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n))) +#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n)) +#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i))) +#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)) +#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx)) +#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum) +#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))) +#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) + +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; + +/* 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) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) + +/* 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) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +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; +SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO) +#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx))) +#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp))) +#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null()) +#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n))) +#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n)) +#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i))) +#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc)) +#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx)) +#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum) +#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc))) +#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp))) + + +/* + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * 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; + +typedef struct { + X509_ALGOR *keyDerivationFunc; + X509_ALGOR *messageAuthScheme; +} PBMAC1PARAM; + +# ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +# endif + +#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, + const + ASN1_INTEGER *serial, + const + 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_self_signed(X509 *cert, int verify_signature); + +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); +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); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +int 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); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); +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); + +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + +# ifndef OPENSSL_NO_STDIO +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); +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, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +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, const X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); +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, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); + +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) +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); +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); + +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); +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) + +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif +# 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) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +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, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) +DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +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(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *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); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, const 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); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); +OSSL_DEPRECATEDIN_3_0 +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); +#endif +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, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 + +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, const X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, const 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); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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_PUBKEY(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); + +#define X509_REQ_VERSION_1 0 + +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, const X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); +int X509_REQ_set1_signature_algo(X509_REQ *req, 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(const 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(OSSL_FUTURE_CONST X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); +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); + +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, const 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); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif +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(const X509_REQ *req, EVP_PKEY *pkey); + +int X509_check_private_key(const X509 *cert, 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); +void OSSL_STACK_OF_X509_free(STACK_OF(X509) *certs); +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 + +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const 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_ex(BIO *out, X509_CRL *x, unsigned long nmflag); +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(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const 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(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const 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(const 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); +STACK_OF(X509_EXTENSION) *X509v3_add_extensions(STACK_OF(X509_EXTENSION) **target, + const STACK_OF(X509_EXTENSION) *exts); + +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(const 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); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +DECLARE_ASN1_FUNCTIONS(PBMAC1PARAM) +# ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +# endif + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); + +#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); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); + +PBKDF2PARAM *PBMAC1_get1_pbkdf2_param(const X509_ALGOR *macalg); +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const 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(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + + +void X509_PUBKEY_set0_public_key(X509_PUBKEY *pub, + unsigned char *penc, int penclen); +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, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/x509_acert.h b/thirdparty/OpenSSL-3.5.3/include/openssl/x509_acert.h new file mode 100644 index 0000000..b30bd10 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/x509_acert.h @@ -0,0 +1,294 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\x509_acert.h.in + * + * Copyright 2022-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_X509_ACERT_H +# define OPENSSL_X509_ACERT_H +# pragma once + +# include +# include +# include + +typedef struct X509_acert_st X509_ACERT; +typedef struct X509_acert_info_st X509_ACERT_INFO; +typedef struct ossl_object_digest_info_st OSSL_OBJECT_DIGEST_INFO; +typedef struct ossl_issuer_serial_st OSSL_ISSUER_SERIAL; +typedef struct X509_acert_issuer_v2form_st X509_ACERT_ISSUER_V2FORM; + +DECLARE_ASN1_FUNCTIONS(X509_ACERT) +DECLARE_ASN1_DUP_FUNCTION(X509_ACERT) +DECLARE_ASN1_ITEM(X509_ACERT_INFO) +DECLARE_ASN1_ALLOC_FUNCTIONS(X509_ACERT_INFO) +DECLARE_ASN1_ALLOC_FUNCTIONS(OSSL_OBJECT_DIGEST_INFO) +DECLARE_ASN1_ALLOC_FUNCTIONS(OSSL_ISSUER_SERIAL) +DECLARE_ASN1_ALLOC_FUNCTIONS(X509_ACERT_ISSUER_V2FORM) + +# ifndef OPENSSL_NO_STDIO +X509_ACERT *d2i_X509_ACERT_fp(FILE *fp, X509_ACERT **acert); +int i2d_X509_ACERT_fp(FILE *fp, const X509_ACERT *acert); +# endif + +DECLARE_PEM_rw(X509_ACERT, X509_ACERT) + +X509_ACERT *d2i_X509_ACERT_bio(BIO *bp, X509_ACERT **acert); +int i2d_X509_ACERT_bio(BIO *bp, const X509_ACERT *acert); + +int X509_ACERT_sign(X509_ACERT *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_ACERT_sign_ctx(X509_ACERT *x, EVP_MD_CTX *ctx); +int X509_ACERT_verify(X509_ACERT *a, EVP_PKEY *r); + +# define X509_ACERT_VERSION_2 1 + +const GENERAL_NAMES *X509_ACERT_get0_holder_entityName(const X509_ACERT *x); +const OSSL_ISSUER_SERIAL *X509_ACERT_get0_holder_baseCertId(const X509_ACERT *x); +const OSSL_OBJECT_DIGEST_INFO * X509_ACERT_get0_holder_digest(const X509_ACERT *x); +const X509_NAME *X509_ACERT_get0_issuerName(const X509_ACERT *x); +long X509_ACERT_get_version(const X509_ACERT *x); +void X509_ACERT_get0_signature(const X509_ACERT *x, + const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_ACERT_get_signature_nid(const X509_ACERT *x); +const X509_ALGOR *X509_ACERT_get0_info_sigalg(const X509_ACERT *x); +const ASN1_INTEGER *X509_ACERT_get0_serialNumber(const X509_ACERT *x); +const ASN1_TIME *X509_ACERT_get0_notBefore(const X509_ACERT *x); +const ASN1_TIME *X509_ACERT_get0_notAfter(const X509_ACERT *x); +const ASN1_BIT_STRING *X509_ACERT_get0_issuerUID(const X509_ACERT *x); + +int X509_ACERT_print(BIO *bp, X509_ACERT *x); +int X509_ACERT_print_ex(BIO *bp, X509_ACERT *x, unsigned long nmflags, + unsigned long cflag); + +int X509_ACERT_get_attr_count(const X509_ACERT *x); +int X509_ACERT_get_attr_by_NID(const X509_ACERT *x, int nid, int lastpos); +int X509_ACERT_get_attr_by_OBJ(const X509_ACERT *x, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_ACERT_get_attr(const X509_ACERT *x, int loc); +X509_ATTRIBUTE *X509_ACERT_delete_attr(X509_ACERT *x, int loc); + +void *X509_ACERT_get_ext_d2i(const X509_ACERT *x, int nid, int *crit, int *idx); +int X509_ACERT_add1_ext_i2d(X509_ACERT *x, int nid, void *value, int crit, + unsigned long flags); +const STACK_OF(X509_EXTENSION) *X509_ACERT_get0_extensions(const X509_ACERT *x); + +# define OSSL_OBJECT_DIGEST_INFO_PUBLIC_KEY 0 +# define OSSL_OBJECT_DIGEST_INFO_PUBLIC_KEY_CERT 1 +# define OSSL_OBJECT_DIGEST_INFO_OTHER 2 /* must not be used in RFC 5755 profile */ +int X509_ACERT_set_version(X509_ACERT *x, long version); +void X509_ACERT_set0_holder_entityName(X509_ACERT *x, GENERAL_NAMES *name); +void X509_ACERT_set0_holder_baseCertId(X509_ACERT *x, OSSL_ISSUER_SERIAL *isss); +void X509_ACERT_set0_holder_digest(X509_ACERT *x, + OSSL_OBJECT_DIGEST_INFO *dinfo); + +int X509_ACERT_add1_attr(X509_ACERT *x, X509_ATTRIBUTE *attr); +int X509_ACERT_add1_attr_by_OBJ(X509_ACERT *x, const ASN1_OBJECT *obj, + int type, const void *bytes, int len); +int X509_ACERT_add1_attr_by_NID(X509_ACERT *x, int nid, int type, + const void *bytes, int len); +int X509_ACERT_add1_attr_by_txt(X509_ACERT *x, const char *attrname, int type, + const unsigned char *bytes, int len); +int X509_ACERT_add_attr_nconf(CONF *conf, const char *section, + X509_ACERT *acert); + +int X509_ACERT_set1_issuerName(X509_ACERT *x, const X509_NAME *name); +int X509_ACERT_set1_serialNumber(X509_ACERT *x, const ASN1_INTEGER *serial); +int X509_ACERT_set1_notBefore(X509_ACERT *x, const ASN1_GENERALIZEDTIME *time); +int X509_ACERT_set1_notAfter(X509_ACERT *x, const ASN1_GENERALIZEDTIME *time); + +void OSSL_OBJECT_DIGEST_INFO_get0_digest(const OSSL_OBJECT_DIGEST_INFO *o, + int *digestedObjectType, + const X509_ALGOR **digestAlgorithm, + const ASN1_BIT_STRING **digest); + +int OSSL_OBJECT_DIGEST_INFO_set1_digest(OSSL_OBJECT_DIGEST_INFO *o, + int digestedObjectType, + X509_ALGOR *digestAlgorithm, + ASN1_BIT_STRING *digest); + +const X509_NAME *OSSL_ISSUER_SERIAL_get0_issuer(const OSSL_ISSUER_SERIAL *isss); +const ASN1_INTEGER *OSSL_ISSUER_SERIAL_get0_serial(const OSSL_ISSUER_SERIAL *isss); +const ASN1_BIT_STRING *OSSL_ISSUER_SERIAL_get0_issuerUID(const OSSL_ISSUER_SERIAL *isss); + +int OSSL_ISSUER_SERIAL_set1_issuer(OSSL_ISSUER_SERIAL *isss, + const X509_NAME *issuer); +int OSSL_ISSUER_SERIAL_set1_serial(OSSL_ISSUER_SERIAL *isss, + const ASN1_INTEGER *serial); +int OSSL_ISSUER_SERIAL_set1_issuerUID(OSSL_ISSUER_SERIAL *isss, + const ASN1_BIT_STRING *uid); + +# define OSSL_IETFAS_OCTETS 0 +# define OSSL_IETFAS_OID 1 +# define OSSL_IETFAS_STRING 2 + +typedef struct OSSL_IETF_ATTR_SYNTAX_VALUE_st OSSL_IETF_ATTR_SYNTAX_VALUE; +typedef struct OSSL_IETF_ATTR_SYNTAX_st OSSL_IETF_ATTR_SYNTAX; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_IETF_ATTR_SYNTAX_VALUE, OSSL_IETF_ATTR_SYNTAX_VALUE, OSSL_IETF_ATTR_SYNTAX_VALUE) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_value(sk, idx) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_value(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (idx))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new(cmp) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_new(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new_null() ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_new_reserve(cmp, n) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp), (n))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (n)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_delete(sk, i) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_delete(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (i))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_delete_ptr(sk, ptr) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_pop(sk) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_pop(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_shift(sk) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_shift(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk),ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_freefunc_type(freefunc)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr), (idx)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_set(sk, idx, ptr) ((OSSL_IETF_ATTR_SYNTAX_VALUE *)OPENSSL_sk_set(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), (idx), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_type(ptr), pnum) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk)) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_dup(sk) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_IETF_ATTR_SYNTAX_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_copyfunc_type(copyfunc), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_freefunc_type(freefunc))) +#define sk_OSSL_IETF_ATTR_SYNTAX_VALUE_set_cmp_func(sk, cmp) ((sk_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_sk_type(sk), ossl_check_OSSL_IETF_ATTR_SYNTAX_VALUE_compfunc_type(cmp))) + + +DECLARE_ASN1_ITEM(OSSL_IETF_ATTR_SYNTAX_VALUE) +DECLARE_ASN1_ALLOC_FUNCTIONS(OSSL_IETF_ATTR_SYNTAX_VALUE) +DECLARE_ASN1_FUNCTIONS(OSSL_IETF_ATTR_SYNTAX) + +const GENERAL_NAMES * +OSSL_IETF_ATTR_SYNTAX_get0_policyAuthority(const OSSL_IETF_ATTR_SYNTAX *a); +void OSSL_IETF_ATTR_SYNTAX_set0_policyAuthority(OSSL_IETF_ATTR_SYNTAX *a, + GENERAL_NAMES *names); + +int OSSL_IETF_ATTR_SYNTAX_get_value_num(const OSSL_IETF_ATTR_SYNTAX *a); +void *OSSL_IETF_ATTR_SYNTAX_get0_value(const OSSL_IETF_ATTR_SYNTAX *a, + int ind, int *type); +int OSSL_IETF_ATTR_SYNTAX_add1_value(OSSL_IETF_ATTR_SYNTAX *a, int type, + void *data); +int OSSL_IETF_ATTR_SYNTAX_print(BIO *bp, OSSL_IETF_ATTR_SYNTAX *a, int indent); + +struct TARGET_CERT_st { + OSSL_ISSUER_SERIAL *targetCertificate; + GENERAL_NAME *targetName; + OSSL_OBJECT_DIGEST_INFO *certDigestInfo; +}; + +typedef struct TARGET_CERT_st OSSL_TARGET_CERT; + +# define OSSL_TGT_TARGET_NAME 0 +# define OSSL_TGT_TARGET_GROUP 1 +# define OSSL_TGT_TARGET_CERT 2 + +typedef struct TARGET_st { + int type; + union { + GENERAL_NAME *targetName; + GENERAL_NAME *targetGroup; + OSSL_TARGET_CERT *targetCert; + } choice; +} OSSL_TARGET; + +typedef STACK_OF(OSSL_TARGET) OSSL_TARGETS; +typedef STACK_OF(OSSL_TARGETS) OSSL_TARGETING_INFORMATION; + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TARGET, OSSL_TARGET, OSSL_TARGET) +#define sk_OSSL_TARGET_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_TARGET_sk_type(sk)) +#define sk_OSSL_TARGET_value(sk, idx) ((OSSL_TARGET *)OPENSSL_sk_value(ossl_check_const_OSSL_TARGET_sk_type(sk), (idx))) +#define sk_OSSL_TARGET_new(cmp) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_new(ossl_check_OSSL_TARGET_compfunc_type(cmp))) +#define sk_OSSL_TARGET_new_null() ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_new_null()) +#define sk_OSSL_TARGET_new_reserve(cmp, n) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_TARGET_compfunc_type(cmp), (n))) +#define sk_OSSL_TARGET_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_TARGET_sk_type(sk), (n)) +#define sk_OSSL_TARGET_free(sk) OPENSSL_sk_free(ossl_check_OSSL_TARGET_sk_type(sk)) +#define sk_OSSL_TARGET_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_TARGET_sk_type(sk)) +#define sk_OSSL_TARGET_delete(sk, i) ((OSSL_TARGET *)OPENSSL_sk_delete(ossl_check_OSSL_TARGET_sk_type(sk), (i))) +#define sk_OSSL_TARGET_delete_ptr(sk, ptr) ((OSSL_TARGET *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr))) +#define sk_OSSL_TARGET_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr)) +#define sk_OSSL_TARGET_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr)) +#define sk_OSSL_TARGET_pop(sk) ((OSSL_TARGET *)OPENSSL_sk_pop(ossl_check_OSSL_TARGET_sk_type(sk))) +#define sk_OSSL_TARGET_shift(sk) ((OSSL_TARGET *)OPENSSL_sk_shift(ossl_check_OSSL_TARGET_sk_type(sk))) +#define sk_OSSL_TARGET_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TARGET_sk_type(sk),ossl_check_OSSL_TARGET_freefunc_type(freefunc)) +#define sk_OSSL_TARGET_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr), (idx)) +#define sk_OSSL_TARGET_set(sk, idx, ptr) ((OSSL_TARGET *)OPENSSL_sk_set(ossl_check_OSSL_TARGET_sk_type(sk), (idx), ossl_check_OSSL_TARGET_type(ptr))) +#define sk_OSSL_TARGET_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr)) +#define sk_OSSL_TARGET_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr)) +#define sk_OSSL_TARGET_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_type(ptr), pnum) +#define sk_OSSL_TARGET_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_TARGET_sk_type(sk)) +#define sk_OSSL_TARGET_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_TARGET_sk_type(sk)) +#define sk_OSSL_TARGET_dup(sk) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_dup(ossl_check_const_OSSL_TARGET_sk_type(sk))) +#define sk_OSSL_TARGET_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_TARGET) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_copyfunc_type(copyfunc), ossl_check_OSSL_TARGET_freefunc_type(freefunc))) +#define sk_OSSL_TARGET_set_cmp_func(sk, cmp) ((sk_OSSL_TARGET_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_TARGET_sk_type(sk), ossl_check_OSSL_TARGET_compfunc_type(cmp))) + + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TARGETS, OSSL_TARGETS, OSSL_TARGETS) +#define sk_OSSL_TARGETS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_TARGETS_sk_type(sk)) +#define sk_OSSL_TARGETS_value(sk, idx) ((OSSL_TARGETS *)OPENSSL_sk_value(ossl_check_const_OSSL_TARGETS_sk_type(sk), (idx))) +#define sk_OSSL_TARGETS_new(cmp) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_new(ossl_check_OSSL_TARGETS_compfunc_type(cmp))) +#define sk_OSSL_TARGETS_new_null() ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_new_null()) +#define sk_OSSL_TARGETS_new_reserve(cmp, n) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_TARGETS_compfunc_type(cmp), (n))) +#define sk_OSSL_TARGETS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_TARGETS_sk_type(sk), (n)) +#define sk_OSSL_TARGETS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_TARGETS_sk_type(sk)) +#define sk_OSSL_TARGETS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_TARGETS_sk_type(sk)) +#define sk_OSSL_TARGETS_delete(sk, i) ((OSSL_TARGETS *)OPENSSL_sk_delete(ossl_check_OSSL_TARGETS_sk_type(sk), (i))) +#define sk_OSSL_TARGETS_delete_ptr(sk, ptr) ((OSSL_TARGETS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr))) +#define sk_OSSL_TARGETS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr)) +#define sk_OSSL_TARGETS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr)) +#define sk_OSSL_TARGETS_pop(sk) ((OSSL_TARGETS *)OPENSSL_sk_pop(ossl_check_OSSL_TARGETS_sk_type(sk))) +#define sk_OSSL_TARGETS_shift(sk) ((OSSL_TARGETS *)OPENSSL_sk_shift(ossl_check_OSSL_TARGETS_sk_type(sk))) +#define sk_OSSL_TARGETS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TARGETS_sk_type(sk),ossl_check_OSSL_TARGETS_freefunc_type(freefunc)) +#define sk_OSSL_TARGETS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr), (idx)) +#define sk_OSSL_TARGETS_set(sk, idx, ptr) ((OSSL_TARGETS *)OPENSSL_sk_set(ossl_check_OSSL_TARGETS_sk_type(sk), (idx), ossl_check_OSSL_TARGETS_type(ptr))) +#define sk_OSSL_TARGETS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr)) +#define sk_OSSL_TARGETS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr)) +#define sk_OSSL_TARGETS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_type(ptr), pnum) +#define sk_OSSL_TARGETS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_TARGETS_sk_type(sk)) +#define sk_OSSL_TARGETS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_TARGETS_sk_type(sk)) +#define sk_OSSL_TARGETS_dup(sk) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_TARGETS_sk_type(sk))) +#define sk_OSSL_TARGETS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_TARGETS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_copyfunc_type(copyfunc), ossl_check_OSSL_TARGETS_freefunc_type(freefunc))) +#define sk_OSSL_TARGETS_set_cmp_func(sk, cmp) ((sk_OSSL_TARGETS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_TARGETS_sk_type(sk), ossl_check_OSSL_TARGETS_compfunc_type(cmp))) + + +DECLARE_ASN1_FUNCTIONS(OSSL_TARGET) +DECLARE_ASN1_FUNCTIONS(OSSL_TARGETS) +DECLARE_ASN1_FUNCTIONS(OSSL_TARGETING_INFORMATION) + +typedef STACK_OF(OSSL_ISSUER_SERIAL) OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX; +DECLARE_ASN1_FUNCTIONS(OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX) + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ISSUER_SERIAL, OSSL_ISSUER_SERIAL, OSSL_ISSUER_SERIAL) +#define sk_OSSL_ISSUER_SERIAL_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk)) +#define sk_OSSL_ISSUER_SERIAL_value(sk, idx) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_value(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk), (idx))) +#define sk_OSSL_ISSUER_SERIAL_new(cmp) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_new(ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp))) +#define sk_OSSL_ISSUER_SERIAL_new_null() ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_new_null()) +#define sk_OSSL_ISSUER_SERIAL_new_reserve(cmp, n) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp), (n))) +#define sk_OSSL_ISSUER_SERIAL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), (n)) +#define sk_OSSL_ISSUER_SERIAL_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk)) +#define sk_OSSL_ISSUER_SERIAL_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk)) +#define sk_OSSL_ISSUER_SERIAL_delete(sk, i) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_delete(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), (i))) +#define sk_OSSL_ISSUER_SERIAL_delete_ptr(sk, ptr) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr))) +#define sk_OSSL_ISSUER_SERIAL_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr)) +#define sk_OSSL_ISSUER_SERIAL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr)) +#define sk_OSSL_ISSUER_SERIAL_pop(sk) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_pop(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk))) +#define sk_OSSL_ISSUER_SERIAL_shift(sk) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_shift(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk))) +#define sk_OSSL_ISSUER_SERIAL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk),ossl_check_OSSL_ISSUER_SERIAL_freefunc_type(freefunc)) +#define sk_OSSL_ISSUER_SERIAL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr), (idx)) +#define sk_OSSL_ISSUER_SERIAL_set(sk, idx, ptr) ((OSSL_ISSUER_SERIAL *)OPENSSL_sk_set(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), (idx), ossl_check_OSSL_ISSUER_SERIAL_type(ptr))) +#define sk_OSSL_ISSUER_SERIAL_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr)) +#define sk_OSSL_ISSUER_SERIAL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr)) +#define sk_OSSL_ISSUER_SERIAL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_type(ptr), pnum) +#define sk_OSSL_ISSUER_SERIAL_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk)) +#define sk_OSSL_ISSUER_SERIAL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk)) +#define sk_OSSL_ISSUER_SERIAL_dup(sk) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_dup(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk))) +#define sk_OSSL_ISSUER_SERIAL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_ISSUER_SERIAL) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_copyfunc_type(copyfunc), ossl_check_OSSL_ISSUER_SERIAL_freefunc_type(freefunc))) +#define sk_OSSL_ISSUER_SERIAL_set_cmp_func(sk, cmp) ((sk_OSSL_ISSUER_SERIAL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_ISSUER_SERIAL_sk_type(sk), ossl_check_OSSL_ISSUER_SERIAL_compfunc_type(cmp))) + + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/x509_vfy.h b/thirdparty/OpenSSL-3.5.3/include/openssl/x509_vfy.h new file mode 100644 index 0000000..6b45ec5 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/x509_vfy.h @@ -0,0 +1,903 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\x509_vfy.h.in + * + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef OPENSSL_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; + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) +#define sk_X509_LOOKUP_num(sk) OPENSSL_sk_num(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_value(sk, idx) ((X509_LOOKUP *)OPENSSL_sk_value(ossl_check_const_X509_LOOKUP_sk_type(sk), (idx))) +#define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp))) +#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_null()) +#define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n))) +#define sk_X509_LOOKUP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_LOOKUP_sk_type(sk), (n)) +#define sk_X509_LOOKUP_free(sk) OPENSSL_sk_free(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_zero(sk) OPENSSL_sk_zero(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_delete(sk, i) ((X509_LOOKUP *)OPENSSL_sk_delete(ossl_check_X509_LOOKUP_sk_type(sk), (i))) +#define sk_X509_LOOKUP_delete_ptr(sk, ptr) ((X509_LOOKUP *)OPENSSL_sk_delete_ptr(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_pop(sk) ((X509_LOOKUP *)OPENSSL_sk_pop(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_shift(sk) ((X509_LOOKUP *)OPENSSL_sk_shift(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk),ossl_check_X509_LOOKUP_freefunc_type(freefunc)) +#define sk_X509_LOOKUP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), (idx)) +#define sk_X509_LOOKUP_set(sk, idx, ptr) ((X509_LOOKUP *)OPENSSL_sk_set(ossl_check_X509_LOOKUP_sk_type(sk), (idx), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), pnum) +#define sk_X509_LOOKUP_sort(sk) OPENSSL_sk_sort(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_dup(sk) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_dup(ossl_check_const_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_copyfunc_type(copyfunc), ossl_check_X509_LOOKUP_freefunc_type(freefunc))) +#define sk_X509_LOOKUP_set_cmp_func(sk, cmp) ((sk_X509_LOOKUP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) +#define sk_X509_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_value(sk, idx) ((X509_OBJECT *)OPENSSL_sk_value(ossl_check_const_X509_OBJECT_sk_type(sk), (idx))) +#define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp))) +#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n))) +#define sk_X509_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_OBJECT_sk_type(sk), (n)) +#define sk_X509_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_delete(sk, i) ((X509_OBJECT *)OPENSSL_sk_delete(ossl_check_X509_OBJECT_sk_type(sk), (i))) +#define sk_X509_OBJECT_delete_ptr(sk, ptr) ((X509_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_pop(sk) ((X509_OBJECT *)OPENSSL_sk_pop(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_shift(sk) ((X509_OBJECT *)OPENSSL_sk_shift(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk),ossl_check_X509_OBJECT_freefunc_type(freefunc)) +#define sk_X509_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), (idx)) +#define sk_X509_OBJECT_set(sk, idx, ptr) ((X509_OBJECT *)OPENSSL_sk_set(ossl_check_X509_OBJECT_sk_type(sk), (idx), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), pnum) +#define sk_X509_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_dup(sk) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_copyfunc_type(copyfunc), ossl_check_X509_OBJECT_freefunc_type(freefunc))) +#define sk_X509_OBJECT_set_cmp_func(sk, cmp) ((sk_X509_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_PARAM) +#define sk_X509_VERIFY_PARAM_num(sk) OPENSSL_sk_num(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_value(sk, idx) ((X509_VERIFY_PARAM *)OPENSSL_sk_value(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), (idx))) +#define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) +#define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_null()) +#define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n))) +#define sk_X509_VERIFY_PARAM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (n)) +#define sk_X509_VERIFY_PARAM_free(sk) OPENSSL_sk_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_zero(sk) OPENSSL_sk_zero(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_delete(sk, i) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (i))) +#define sk_X509_VERIFY_PARAM_delete_ptr(sk, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete_ptr(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_pop(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_pop(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_shift(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_shift(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk),ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) +#define sk_X509_VERIFY_PARAM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), (idx)) +#define sk_X509_VERIFY_PARAM_set(sk, idx, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_set(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (idx), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), pnum) +#define sk_X509_VERIFY_PARAM_sort(sk) OPENSSL_sk_sort(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_dup(sk) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_dup(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_copyfunc_type(copyfunc), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc))) +#define sk_X509_VERIFY_PARAM_set_cmp_func(sk, cmp) ((sk_X509_VERIFY_PARAM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) + + +/* 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; +SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) +#define sk_X509_TRUST_num(sk) OPENSSL_sk_num(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_value(sk, idx) ((X509_TRUST *)OPENSSL_sk_value(ossl_check_const_X509_TRUST_sk_type(sk), (idx))) +#define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp))) +#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_null()) +#define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n))) +#define sk_X509_TRUST_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_TRUST_sk_type(sk), (n)) +#define sk_X509_TRUST_free(sk) OPENSSL_sk_free(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_zero(sk) OPENSSL_sk_zero(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_delete(sk, i) ((X509_TRUST *)OPENSSL_sk_delete(ossl_check_X509_TRUST_sk_type(sk), (i))) +#define sk_X509_TRUST_delete_ptr(sk, ptr) ((X509_TRUST *)OPENSSL_sk_delete_ptr(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_pop(sk) ((X509_TRUST *)OPENSSL_sk_pop(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_shift(sk) ((X509_TRUST *)OPENSSL_sk_shift(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk),ossl_check_X509_TRUST_freefunc_type(freefunc)) +#define sk_X509_TRUST_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), (idx)) +#define sk_X509_TRUST_set(sk, idx, ptr) ((X509_TRUST *)OPENSSL_sk_set(ossl_check_X509_TRUST_sk_type(sk), (idx), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), pnum) +#define sk_X509_TRUST_sort(sk) OPENSSL_sk_sort(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_dup(sk) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_dup(ossl_check_const_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_copyfunc_type(copyfunc), ossl_check_X509_TRUST_freefunc_type(freefunc))) +#define sk_X509_TRUST_set_cmp_func(sk, cmp) ((sk_X509_TRUST_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_compfunc_type(cmp))) + + +/* 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 rejection OID and 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 + +int X509_TRUST_set(int *t, int trust); +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); + +int X509_trusted(const X509 *x); +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); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *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, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const 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_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 + +# 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_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# 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_NO_ISSUER_PUBLIC_KEY 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 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 +# define X509_V_ERR_RPK_UNTRUSTED 95 + +/* Certificate verify flags */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + const 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); +int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); +int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *xs); +int X509_STORE_lock(X509_STORE *xs); +int X509_STORE_unlock(X509_STORE *xs); +int X509_STORE_up_ref(X509_STORE *xs); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs); +STACK_OF(X509_OBJECT) *X509_STORE_get1_objects(X509_STORE *xs); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *xs); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *xs, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *xs, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *xs, int purpose); +int X509_STORE_set_trust(X509_STORE *xs, int trust); +int X509_STORE_set1_param(X509_STORE *xs, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *xs); + +void X509_STORE_set_verify(X509_STORE *xs, 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(const X509_STORE *xs); +void X509_STORE_set_verify_cb(X509_STORE *xs, + 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(const X509_STORE *xs); +void X509_STORE_set_get_issuer(X509_STORE *xs, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *xs); +void X509_STORE_set_check_issued(X509_STORE *xs, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *s); +void X509_STORE_set_check_revocation(X509_STORE *xs, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *xs); +void X509_STORE_set_get_crl(X509_STORE *xs, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *xs); +void X509_STORE_set_check_crl(X509_STORE *xs, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *xs); +void X509_STORE_set_cert_crl(X509_STORE *xs, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *xs); +void X509_STORE_set_check_policy(X509_STORE *xs, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *s); +void X509_STORE_set_lookup_certs(X509_STORE *xs, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *s); +void X509_STORE_set_lookup_crls(X509_STORE *xs, + 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(const X509_STORE *xs); +void X509_STORE_set_cleanup(X509_STORE *xs, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *xs); + +#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 *xs, int idx, void *data); +void *X509_STORE_get_ex_data(const X509_STORE *xs, int idx); + +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +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 *trust_store, + X509 *target, STACK_OF(X509) *untrusted); +int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store, + EVP_PKEY* rpk); +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(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +EVP_PKEY *X509_STORE_CTX_get0_rpk(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const 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(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# 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_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *xs, X509_LOOKUP_METHOD *m); +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); + +typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + +typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); +typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const unsigned char* bytes, + int len, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const char *str, + int len, + X509_OBJECT *ret); + +X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, + int (*new_item) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, + void (*free_fn) (X509_LOOKUP *ctx)); +void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, + int (*init) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, + int (*shutdown) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, + X509_LOOKUP_ctrl_fn ctrl_fn); +X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_subject_fn fn); +X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_issuer_serial_fn fn); +X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_fingerprint_fn fn); +X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_alias_fn fn); +X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( + const X509_LOOKUP_METHOD *method); + + +int X509_STORE_add_cert(X509_STORE *xs, X509 *x); +int X509_STORE_add_crl(X509_STORE *xs, X509_CRL *x); + +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); + +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); +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); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); + +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, + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, + const 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_set_method_data(X509_LOOKUP *ctx, void *data); +void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_file(X509_STORE *xs, const char *file); +int X509_STORE_load_path(X509_STORE *xs, const char *path); +int X509_STORE_load_store(X509_STORE *xs, const char *store); +int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *xs); + +int X509_STORE_load_file_ex(X509_STORE *xs, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *xs, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *xs, + const char *file, const char *dir, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *xs, + OSSL_LIB_CTX *libctx, const char *propq); + +#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(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); +void X509_STORE_CTX_set0_rpk(X509_STORE_CTX *ctx, EVP_PKEY *target); +void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); +void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx, + unsigned int current_reasons); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const 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(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_get_purpose(const X509_VERIFY_PARAM *param); +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); +time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +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_set_inh_flags(X509_VERIFY_PARAM *param, + uint32_t flags); +uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); + +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); +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); +unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); +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(const 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/thirdparty/OpenSSL-3.5.3/include/openssl/x509err.h b/thirdparty/OpenSSL-3.5.3/include/openssl/x509err.h new file mode 100644 index 0000000..77b91c8 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/x509err.h @@ -0,0 +1,70 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_X509ERR_H +# define OPENSSL_X509ERR_H +# pragma once + +# include +# include +# include + + + +/* + * X509 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_CERTIFICATE_VERIFICATION_FAILED 139 +# 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_DUPLICATE_ATTRIBUTE 140 +# define X509_R_ERROR_GETTING_MD_BY_NID 141 +# define X509_R_ERROR_USING_SIGINF_SET 142 +# define X509_R_IDP_MISMATCH 128 +# define X509_R_INVALID_ATTRIBUTES 138 +# define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_DISTPOINT 143 +# 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_CERTIFICATE_FOUND 135 +# define X509_R_NO_CERTIFICATE_OR_CRL_FOUND 136 +# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +# define X509_R_NO_CRL_FOUND 137 +# 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_SIGID_ALGS 144 +# define X509_R_UNKNOWN_TRUST_ID 120 +# define X509_R_UNSUPPORTED_ALGORITHM 111 +# define X509_R_UNSUPPORTED_VERSION 145 +# define X509_R_WRONG_LOOKUP_TYPE 112 +# define X509_R_WRONG_TYPE 122 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/x509v3.h b/thirdparty/OpenSSL-3.5.3/include/openssl/x509v3.h new file mode 100644 index 0000000..66e4281 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/x509v3.h @@ -0,0 +1,1968 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\x509v3.h.in + * + * Copyright 1999-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#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) (const 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 for producing X509 v3 extensions*/ +struct v3_ext_ctx { +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif +# 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; + EVP_PKEY *issuer_pkey; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD) +#define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx))) +#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) +#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null()) +#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n))) +#define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n)) +#define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_delete(sk, i) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (i))) +#define sk_X509V3_EXT_METHOD_delete_ptr(sk, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete_ptr(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)) +#define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx)) +#define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), pnum) +#define sk_X509V3_EXT_METHOD_sort(sk) OPENSSL_sk_sort(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_dup(sk) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_dup(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_deep_copy(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_copyfunc_type(copyfunc), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc))) +#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, cmp) ((sk_X509V3_EXT_METHOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) + + +/* 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 OSSL_BASIC_ATTR_CONSTRAINTS_st { + int authority; + ASN1_INTEGER *pathlen; +} OSSL_BASIC_ATTR_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_STRING *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; + +int GENERAL_NAME_set1_X509_NAME(GENERAL_NAME **tgt, const X509_NAME *src); + +SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION) +#define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx))) +#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null()) +#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n))) +#define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n)) +#define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_delete(sk, i) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (i))) +#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete_ptr(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_push(sk, ptr) OPENSSL_sk_push(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)) +#define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx)) +#define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), pnum) +#define sk_ACCESS_DESCRIPTION_sort(sk) OPENSSL_sk_sort(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_dup(sk) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_dup(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_deep_copy(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_copyfunc_type(copyfunc), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc))) +#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, cmp) ((sk_ACCESS_DESCRIPTION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME) +#define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx))) +#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp))) +#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n)) +#define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_delete(sk, i) ((GENERAL_NAME *)OPENSSL_sk_delete(ossl_check_GENERAL_NAME_sk_type(sk), (i))) +#define sk_GENERAL_NAME_delete_ptr(sk, ptr) ((GENERAL_NAME *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc)) +#define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx)) +#define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), pnum) +#define sk_GENERAL_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_dup(sk) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_copyfunc_type(copyfunc), ossl_check_GENERAL_NAME_freefunc_type(freefunc))) +#define sk_GENERAL_NAME_set_cmp_func(sk, cmp) ((sk_GENERAL_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_compfunc_type(cmp))) + + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; + +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES) +#define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx))) +#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp))) +#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n)) +#define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_delete(sk, i) ((GENERAL_NAMES *)OPENSSL_sk_delete(ossl_check_GENERAL_NAMES_sk_type(sk), (i))) +#define sk_GENERAL_NAMES_delete_ptr(sk, ptr) ((GENERAL_NAMES *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc)) +#define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx)) +#define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), pnum) +#define sk_GENERAL_NAMES_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_dup(sk) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_copyfunc_type(copyfunc), ossl_check_GENERAL_NAMES_freefunc_type(freefunc))) +#define sk_GENERAL_NAMES_set_cmp_func(sk, cmp) ((sk_GENERAL_NAMES_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_compfunc_type(cmp))) + + +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; +DECLARE_ASN1_DUP_FUNCTION(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; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT) +#define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx))) +#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp))) +#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null()) +#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n))) +#define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n)) +#define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_delete(sk, i) ((DIST_POINT *)OPENSSL_sk_delete(ossl_check_DIST_POINT_sk_type(sk), (i))) +#define sk_DIST_POINT_delete_ptr(sk, ptr) ((DIST_POINT *)OPENSSL_sk_delete_ptr(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_push(sk, ptr) OPENSSL_sk_push(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc)) +#define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx)) +#define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), pnum) +#define sk_DIST_POINT_sort(sk) OPENSSL_sk_sort(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_dup(sk) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_dup(ossl_check_const_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_deep_copy(ossl_check_const_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_copyfunc_type(copyfunc), ossl_check_DIST_POINT_freefunc_type(freefunc))) +#define sk_DIST_POINT_set_cmp_func(sk, cmp) ((sk_DIST_POINT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_compfunc_type(cmp))) + + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +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; + +SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID) +#define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx))) +#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp))) +#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null()) +#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n))) +#define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n)) +#define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_delete(sk, i) ((SXNETID *)OPENSSL_sk_delete(ossl_check_SXNETID_sk_type(sk), (i))) +#define sk_SXNETID_delete_ptr(sk, ptr) ((SXNETID *)OPENSSL_sk_delete_ptr(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_push(sk, ptr) OPENSSL_sk_push(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc)) +#define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx)) +#define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), pnum) +#define sk_SXNETID_sort(sk) OPENSSL_sk_sort(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_dup(sk) ((STACK_OF(SXNETID) *)OPENSSL_sk_dup(ossl_check_const_SXNETID_sk_type(sk))) +#define sk_SXNETID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SXNETID) *)OPENSSL_sk_deep_copy(ossl_check_const_SXNETID_sk_type(sk), ossl_check_SXNETID_copyfunc_type(copyfunc), ossl_check_SXNETID_freefunc_type(freefunc))) +#define sk_SXNETID_set_cmp_func(sk, cmp) ((sk_SXNETID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_compfunc_type(cmp))) + + + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + +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; + +SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO) +#define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx))) +#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp))) +#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n))) +#define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n)) +#define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_delete(sk, i) ((POLICYQUALINFO *)OPENSSL_sk_delete(ossl_check_POLICYQUALINFO_sk_type(sk), (i))) +#define sk_POLICYQUALINFO_delete_ptr(sk, ptr) ((POLICYQUALINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc)) +#define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx)) +#define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), pnum) +#define sk_POLICYQUALINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_dup(sk) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_copyfunc_type(copyfunc), ossl_check_POLICYQUALINFO_freefunc_type(freefunc))) +#define sk_POLICYQUALINFO_set_cmp_func(sk, cmp) ((sk_POLICYQUALINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_compfunc_type(cmp))) + + + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO) +#define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx))) +#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp))) +#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n))) +#define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n)) +#define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_delete(sk, i) ((POLICYINFO *)OPENSSL_sk_delete(ossl_check_POLICYINFO_sk_type(sk), (i))) +#define sk_POLICYINFO_delete_ptr(sk, ptr) ((POLICYINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc)) +#define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx)) +#define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), pnum) +#define sk_POLICYINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_dup(sk) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_copyfunc_type(copyfunc), ossl_check_POLICYINFO_freefunc_type(freefunc))) +#define sk_POLICYINFO_set_cmp_func(sk, cmp) ((sk_POLICYINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_compfunc_type(cmp))) + + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING) +#define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx))) +#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp))) +#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null()) +#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n))) +#define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n)) +#define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_delete(sk, i) ((POLICY_MAPPING *)OPENSSL_sk_delete(ossl_check_POLICY_MAPPING_sk_type(sk), (i))) +#define sk_POLICY_MAPPING_delete_ptr(sk, ptr) ((POLICY_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc)) +#define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx)) +#define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), pnum) +#define sk_POLICY_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_dup(sk) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_copyfunc_type(copyfunc), ossl_check_POLICY_MAPPING_freefunc_type(freefunc))) +#define sk_POLICY_MAPPING_set_cmp_func(sk, cmp) ((sk_POLICY_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_compfunc_type(cmp))) + + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE) +#define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx))) +#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) +#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n))) +#define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n)) +#define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_delete(sk, i) ((GENERAL_SUBTREE *)OPENSSL_sk_delete(ossl_check_GENERAL_SUBTREE_sk_type(sk), (i))) +#define sk_GENERAL_SUBTREE_delete_ptr(sk, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)) +#define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx)) +#define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), pnum) +#define sk_GENERAL_SUBTREE_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_dup(sk) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_copyfunc_type(copyfunc), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc))) +#define sk_GENERAL_SUBTREE_set_cmp_func(sk, cmp) ((sk_GENERAL_SUBTREE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) + + +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, X509V3_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_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 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 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +/* EXFLAG_SET is set to indicate that some values have been precomputed */ +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +# define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ + +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 +# define EXFLAG_NO_FINGERPRINT 0x100000 + +/* https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.3 */ +# define KU_DIGITAL_SIGNATURE X509v3_KU_DIGITAL_SIGNATURE +# define KU_NON_REPUDIATION X509v3_KU_NON_REPUDIATION +# define KU_KEY_ENCIPHERMENT X509v3_KU_KEY_ENCIPHERMENT +# define KU_DATA_ENCIPHERMENT X509v3_KU_DATA_ENCIPHERMENT +# define KU_KEY_AGREEMENT X509v3_KU_KEY_AGREEMENT +# define KU_KEY_CERT_SIGN X509v3_KU_KEY_CERT_SIGN +# define KU_CRL_SIGN X509v3_KU_CRL_SIGN +# define KU_ENCIPHER_ONLY X509v3_KU_ENCIPHER_ONLY +# define KU_DECIPHER_ONLY X509v3_KU_DECIPHER_ONLY + +# 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 /* Netscape or MS Server-Gated Crypto */ +# 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; + +SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) +#define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx))) +#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp))) +#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null()) +#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n))) +#define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n)) +#define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_delete(sk, i) ((X509_PURPOSE *)OPENSSL_sk_delete(ossl_check_X509_PURPOSE_sk_type(sk), (i))) +#define sk_X509_PURPOSE_delete_ptr(sk, ptr) ((X509_PURPOSE *)OPENSSL_sk_delete_ptr(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc)) +#define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx)) +#define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), pnum) +#define sk_X509_PURPOSE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_dup(sk) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_dup(ossl_check_const_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_copyfunc_type(copyfunc), ossl_check_X509_PURPOSE_freefunc_type(freefunc))) +#define sk_X509_PURPOSE_set_cmp_func(sk, cmp) ((sk_X509_PURPOSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_compfunc_type(cmp))) + + +# define X509_PURPOSE_DEFAULT_ANY 0 +# 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_CODE_SIGN 10 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 10 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) +DECLARE_ASN1_FUNCTIONS(OSSL_BASIC_ATTR_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + +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) +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) +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); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(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(const GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(const 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, const 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 OPENSSL_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); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); + +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); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* 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_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(const X509 *issuer, const 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); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); + +int X509_PURPOSE_get_count(void); +int X509_PURPOSE_get_unused_id(OSSL_LIB_CTX *libctx); +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); +void X509_PURPOSE_cleanup(void); + +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_id(const X509_PURPOSE *); +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); +int X509_PURPOSE_set(int *p, int 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); +SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE) +#define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx))) +#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) +#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null()) +#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n))) +#define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n)) +#define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_delete(sk, i) ((X509_POLICY_NODE *)OPENSSL_sk_delete(ossl_check_X509_POLICY_NODE_sk_type(sk), (i))) +#define sk_X509_POLICY_NODE_delete_ptr(sk, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_delete_ptr(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)) +#define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx)) +#define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), pnum) +#define sk_X509_POLICY_NODE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_dup(sk) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_dup(ossl_check_const_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_copyfunc_type(copyfunc), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc))) +#define sk_X509_POLICY_NODE_set_cmp_func(sk, cmp) ((sk_X509_POLICY_NODE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) + + + +#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; + +SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange) +#define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx))) +#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp))) +#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null()) +#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n))) +#define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n)) +#define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_delete(sk, i) ((ASIdOrRange *)OPENSSL_sk_delete(ossl_check_ASIdOrRange_sk_type(sk), (i))) +#define sk_ASIdOrRange_delete_ptr(sk, ptr) ((ASIdOrRange *)OPENSSL_sk_delete_ptr(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc)) +#define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx)) +#define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), pnum) +#define sk_ASIdOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_dup(sk) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_dup(ossl_check_const_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_copyfunc_type(copyfunc), ossl_check_ASIdOrRange_freefunc_type(freefunc))) +#define sk_ASIdOrRange_set_cmp_func(sk, cmp) ((sk_ASIdOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_compfunc_type(cmp))) + + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; + +# 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; + +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange) +#define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx))) +#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp))) +#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null()) +#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n))) +#define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n)) +#define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_delete(sk, i) ((IPAddressOrRange *)OPENSSL_sk_delete(ossl_check_IPAddressOrRange_sk_type(sk), (i))) +#define sk_IPAddressOrRange_delete_ptr(sk, ptr) ((IPAddressOrRange *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc)) +#define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx)) +#define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), pnum) +#define sk_IPAddressOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_dup(sk) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_dup(ossl_check_const_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_copyfunc_type(copyfunc), ossl_check_IPAddressOrRange_freefunc_type(freefunc))) +#define sk_IPAddressOrRange_set_cmp_func(sk, cmp) ((sk_IPAddressOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_compfunc_type(cmp))) + + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; + +# 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; + +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily) +#define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx))) +#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp))) +#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null()) +#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n))) +#define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n)) +#define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_delete(sk, i) ((IPAddressFamily *)OPENSSL_sk_delete(ossl_check_IPAddressFamily_sk_type(sk), (i))) +#define sk_IPAddressFamily_delete_ptr(sk, ptr) ((IPAddressFamily *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc)) +#define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx)) +#define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), pnum) +#define sk_IPAddressFamily_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_dup(sk) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_dup(ossl_check_const_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_copyfunc_type(copyfunc), ossl_check_IPAddressFamily_freefunc_type(freefunc))) +#define sk_IPAddressFamily_set_cmp_func(sk, cmp) ((sk_IPAddressFamily_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_compfunc_type(cmp))) + + + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; + +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 */ + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING) +#define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx))) +#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp))) +#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n)) +#define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_delete(sk, i) ((ASN1_STRING *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_sk_type(sk), (i))) +#define sk_ASN1_STRING_delete_ptr(sk, ptr) ((ASN1_STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc)) +#define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx)) +#define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), pnum) +#define sk_ASN1_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_dup(sk) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_freefunc_type(freefunc))) +#define sk_ASN1_STRING_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_compfunc_type(cmp))) + + +/* + * Admission Syntax + */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) +#define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx))) +#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null()) +#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n))) +#define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n)) +#define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_delete(sk, i) ((PROFESSION_INFO *)OPENSSL_sk_delete(ossl_check_PROFESSION_INFO_sk_type(sk), (i))) +#define sk_PROFESSION_INFO_delete_ptr(sk, ptr) ((PROFESSION_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc)) +#define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx)) +#define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), pnum) +#define sk_PROFESSION_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_dup(sk) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_dup(ossl_check_const_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_copyfunc_type(copyfunc), ossl_check_PROFESSION_INFO_freefunc_type(freefunc))) +#define sk_PROFESSION_INFO_set_cmp_func(sk, cmp) ((sk_PROFESSION_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS) +#define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx))) +#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp))) +#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null()) +#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n))) +#define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n)) +#define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_delete(sk, i) ((ADMISSIONS *)OPENSSL_sk_delete(ossl_check_ADMISSIONS_sk_type(sk), (i))) +#define sk_ADMISSIONS_delete_ptr(sk, ptr) ((ADMISSIONS *)OPENSSL_sk_delete_ptr(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_push(sk, ptr) OPENSSL_sk_push(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc)) +#define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx)) +#define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), pnum) +#define sk_ADMISSIONS_sort(sk) OPENSSL_sk_sort(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_dup(sk) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_dup(ossl_check_const_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_deep_copy(ossl_check_const_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_copyfunc_type(copyfunc), ossl_check_ADMISSIONS_freefunc_type(freefunc))) +#define sk_ADMISSIONS_set_cmp_func(sk, cmp) ((sk_ADMISSIONS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_compfunc_type(cmp))) + +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); + +int OSSL_GENERAL_NAMES_print(BIO *out, GENERAL_NAMES *gens, int indent); + +typedef STACK_OF(X509_ATTRIBUTE) OSSL_ATTRIBUTES_SYNTAX; +DECLARE_ASN1_FUNCTIONS(OSSL_ATTRIBUTES_SYNTAX) + +typedef STACK_OF(USERNOTICE) OSSL_USER_NOTICE_SYNTAX; +DECLARE_ASN1_FUNCTIONS(OSSL_USER_NOTICE_SYNTAX) + +SKM_DEFINE_STACK_OF_INTERNAL(USERNOTICE, USERNOTICE, USERNOTICE) +#define sk_USERNOTICE_num(sk) OPENSSL_sk_num(ossl_check_const_USERNOTICE_sk_type(sk)) +#define sk_USERNOTICE_value(sk, idx) ((USERNOTICE *)OPENSSL_sk_value(ossl_check_const_USERNOTICE_sk_type(sk), (idx))) +#define sk_USERNOTICE_new(cmp) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_new(ossl_check_USERNOTICE_compfunc_type(cmp))) +#define sk_USERNOTICE_new_null() ((STACK_OF(USERNOTICE) *)OPENSSL_sk_new_null()) +#define sk_USERNOTICE_new_reserve(cmp, n) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_new_reserve(ossl_check_USERNOTICE_compfunc_type(cmp), (n))) +#define sk_USERNOTICE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_USERNOTICE_sk_type(sk), (n)) +#define sk_USERNOTICE_free(sk) OPENSSL_sk_free(ossl_check_USERNOTICE_sk_type(sk)) +#define sk_USERNOTICE_zero(sk) OPENSSL_sk_zero(ossl_check_USERNOTICE_sk_type(sk)) +#define sk_USERNOTICE_delete(sk, i) ((USERNOTICE *)OPENSSL_sk_delete(ossl_check_USERNOTICE_sk_type(sk), (i))) +#define sk_USERNOTICE_delete_ptr(sk, ptr) ((USERNOTICE *)OPENSSL_sk_delete_ptr(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr))) +#define sk_USERNOTICE_push(sk, ptr) OPENSSL_sk_push(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr)) +#define sk_USERNOTICE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr)) +#define sk_USERNOTICE_pop(sk) ((USERNOTICE *)OPENSSL_sk_pop(ossl_check_USERNOTICE_sk_type(sk))) +#define sk_USERNOTICE_shift(sk) ((USERNOTICE *)OPENSSL_sk_shift(ossl_check_USERNOTICE_sk_type(sk))) +#define sk_USERNOTICE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_USERNOTICE_sk_type(sk),ossl_check_USERNOTICE_freefunc_type(freefunc)) +#define sk_USERNOTICE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr), (idx)) +#define sk_USERNOTICE_set(sk, idx, ptr) ((USERNOTICE *)OPENSSL_sk_set(ossl_check_USERNOTICE_sk_type(sk), (idx), ossl_check_USERNOTICE_type(ptr))) +#define sk_USERNOTICE_find(sk, ptr) OPENSSL_sk_find(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr)) +#define sk_USERNOTICE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr)) +#define sk_USERNOTICE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_type(ptr), pnum) +#define sk_USERNOTICE_sort(sk) OPENSSL_sk_sort(ossl_check_USERNOTICE_sk_type(sk)) +#define sk_USERNOTICE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_USERNOTICE_sk_type(sk)) +#define sk_USERNOTICE_dup(sk) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_dup(ossl_check_const_USERNOTICE_sk_type(sk))) +#define sk_USERNOTICE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(USERNOTICE) *)OPENSSL_sk_deep_copy(ossl_check_const_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_copyfunc_type(copyfunc), ossl_check_USERNOTICE_freefunc_type(freefunc))) +#define sk_USERNOTICE_set_cmp_func(sk, cmp) ((sk_USERNOTICE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_USERNOTICE_sk_type(sk), ossl_check_USERNOTICE_compfunc_type(cmp))) + + +typedef struct OSSL_ROLE_SPEC_CERT_ID_st { + GENERAL_NAME *roleName; + GENERAL_NAME *roleCertIssuer; + ASN1_INTEGER *roleCertSerialNumber; + GENERAL_NAMES *roleCertLocator; +} OSSL_ROLE_SPEC_CERT_ID; + +DECLARE_ASN1_FUNCTIONS(OSSL_ROLE_SPEC_CERT_ID) + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ROLE_SPEC_CERT_ID, OSSL_ROLE_SPEC_CERT_ID, OSSL_ROLE_SPEC_CERT_ID) +#define sk_OSSL_ROLE_SPEC_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_value(sk, idx) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_value(ossl_check_const_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), (idx))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_new(cmp) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_new(ossl_check_OSSL_ROLE_SPEC_CERT_ID_compfunc_type(cmp))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_new_null() ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_new_null()) +#define sk_OSSL_ROLE_SPEC_CERT_ID_new_reserve(cmp, n) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ROLE_SPEC_CERT_ID_compfunc_type(cmp), (n))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), (n)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_delete(sk, i) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_delete(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), (i))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_delete_ptr(sk, ptr) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_pop(sk) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_pop(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_shift(sk) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_shift(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk),ossl_check_OSSL_ROLE_SPEC_CERT_ID_freefunc_type(freefunc)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr), (idx)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_set(sk, idx, ptr) ((OSSL_ROLE_SPEC_CERT_ID *)OPENSSL_sk_set(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), (idx), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_type(ptr), pnum) +#define sk_OSSL_ROLE_SPEC_CERT_ID_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk)) +#define sk_OSSL_ROLE_SPEC_CERT_ID_dup(sk) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_dup(ossl_check_const_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_ROLE_SPEC_CERT_ID) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_copyfunc_type(copyfunc), ossl_check_OSSL_ROLE_SPEC_CERT_ID_freefunc_type(freefunc))) +#define sk_OSSL_ROLE_SPEC_CERT_ID_set_cmp_func(sk, cmp) ((sk_OSSL_ROLE_SPEC_CERT_ID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_ROLE_SPEC_CERT_ID_sk_type(sk), ossl_check_OSSL_ROLE_SPEC_CERT_ID_compfunc_type(cmp))) + + +typedef STACK_OF(OSSL_ROLE_SPEC_CERT_ID) OSSL_ROLE_SPEC_CERT_ID_SYNTAX; + +DECLARE_ASN1_FUNCTIONS(OSSL_ROLE_SPEC_CERT_ID_SYNTAX) +typedef struct OSSL_HASH_st { + X509_ALGOR *algorithmIdentifier; + ASN1_BIT_STRING *hashValue; +} OSSL_HASH; + +typedef struct OSSL_INFO_SYNTAX_POINTER_st { + GENERAL_NAMES *name; + OSSL_HASH *hash; +} OSSL_INFO_SYNTAX_POINTER; + +# define OSSL_INFO_SYNTAX_TYPE_CONTENT 0 +# define OSSL_INFO_SYNTAX_TYPE_POINTER 1 + +typedef struct OSSL_INFO_SYNTAX_st { + int type; + union { + ASN1_STRING *content; + OSSL_INFO_SYNTAX_POINTER *pointer; + } choice; +} OSSL_INFO_SYNTAX; + +typedef struct OSSL_PRIVILEGE_POLICY_ID_st { + ASN1_OBJECT *privilegePolicy; + OSSL_INFO_SYNTAX *privPolSyntax; +} OSSL_PRIVILEGE_POLICY_ID; + +typedef struct OSSL_ATTRIBUTE_DESCRIPTOR_st { + ASN1_OBJECT *identifier; + ASN1_STRING *attributeSyntax; + ASN1_UTF8STRING *name; + ASN1_UTF8STRING *description; + OSSL_PRIVILEGE_POLICY_ID *dominationRule; +} OSSL_ATTRIBUTE_DESCRIPTOR; + +DECLARE_ASN1_FUNCTIONS(OSSL_HASH) +DECLARE_ASN1_FUNCTIONS(OSSL_INFO_SYNTAX) +DECLARE_ASN1_FUNCTIONS(OSSL_INFO_SYNTAX_POINTER) +DECLARE_ASN1_FUNCTIONS(OSSL_PRIVILEGE_POLICY_ID) +DECLARE_ASN1_FUNCTIONS(OSSL_ATTRIBUTE_DESCRIPTOR) + +typedef struct OSSL_TIME_SPEC_ABSOLUTE_st { + ASN1_GENERALIZEDTIME *startTime; + ASN1_GENERALIZEDTIME *endTime; +} OSSL_TIME_SPEC_ABSOLUTE; + +typedef struct OSSL_DAY_TIME_st { + ASN1_INTEGER *hour; + ASN1_INTEGER *minute; + ASN1_INTEGER *second; +} OSSL_DAY_TIME; + +typedef struct OSSL_DAY_TIME_BAND_st { + OSSL_DAY_TIME *startDayTime; + OSSL_DAY_TIME *endDayTime; +} OSSL_DAY_TIME_BAND; + +# define OSSL_NAMED_DAY_TYPE_INT 0 +# define OSSL_NAMED_DAY_TYPE_BIT 1 +# define OSSL_NAMED_DAY_INT_SUN 1 +# define OSSL_NAMED_DAY_INT_MON 2 +# define OSSL_NAMED_DAY_INT_TUE 3 +# define OSSL_NAMED_DAY_INT_WED 4 +# define OSSL_NAMED_DAY_INT_THU 5 +# define OSSL_NAMED_DAY_INT_FRI 6 +# define OSSL_NAMED_DAY_INT_SAT 7 +# define OSSL_NAMED_DAY_BIT_SUN 0 +# define OSSL_NAMED_DAY_BIT_MON 1 +# define OSSL_NAMED_DAY_BIT_TUE 2 +# define OSSL_NAMED_DAY_BIT_WED 3 +# define OSSL_NAMED_DAY_BIT_THU 4 +# define OSSL_NAMED_DAY_BIT_FRI 5 +# define OSSL_NAMED_DAY_BIT_SAT 6 + +typedef struct OSSL_NAMED_DAY_st { + int type; + union { + ASN1_INTEGER *intNamedDays; + ASN1_BIT_STRING *bitNamedDays; + } choice; +} OSSL_NAMED_DAY; + +# define OSSL_TIME_SPEC_X_DAY_OF_FIRST 0 +# define OSSL_TIME_SPEC_X_DAY_OF_SECOND 1 +# define OSSL_TIME_SPEC_X_DAY_OF_THIRD 2 +# define OSSL_TIME_SPEC_X_DAY_OF_FOURTH 3 +# define OSSL_TIME_SPEC_X_DAY_OF_FIFTH 4 + +typedef struct OSSL_TIME_SPEC_X_DAY_OF_st { + int type; + union { + OSSL_NAMED_DAY *first; + OSSL_NAMED_DAY *second; + OSSL_NAMED_DAY *third; + OSSL_NAMED_DAY *fourth; + OSSL_NAMED_DAY *fifth; + } choice; +} OSSL_TIME_SPEC_X_DAY_OF; + +# define OSSL_TIME_SPEC_DAY_TYPE_INT 0 +# define OSSL_TIME_SPEC_DAY_TYPE_BIT 1 +# define OSSL_TIME_SPEC_DAY_TYPE_DAY_OF 2 +# define OSSL_TIME_SPEC_DAY_BIT_SUN 0 +# define OSSL_TIME_SPEC_DAY_BIT_MON 1 +# define OSSL_TIME_SPEC_DAY_BIT_TUE 2 +# define OSSL_TIME_SPEC_DAY_BIT_WED 3 +# define OSSL_TIME_SPEC_DAY_BIT_THU 4 +# define OSSL_TIME_SPEC_DAY_BIT_FRI 5 +# define OSSL_TIME_SPEC_DAY_BIT_SAT 6 +# define OSSL_TIME_SPEC_DAY_INT_SUN 1 +# define OSSL_TIME_SPEC_DAY_INT_MON 2 +# define OSSL_TIME_SPEC_DAY_INT_TUE 3 +# define OSSL_TIME_SPEC_DAY_INT_WED 4 +# define OSSL_TIME_SPEC_DAY_INT_THU 5 +# define OSSL_TIME_SPEC_DAY_INT_FRI 6 +# define OSSL_TIME_SPEC_DAY_INT_SAT 7 + +typedef struct OSSL_TIME_SPEC_DAY_st { + int type; + union { + STACK_OF(ASN1_INTEGER) *intDay; + ASN1_BIT_STRING *bitDay; + OSSL_TIME_SPEC_X_DAY_OF *dayOf; + } choice; +} OSSL_TIME_SPEC_DAY; + +# define OSSL_TIME_SPEC_WEEKS_TYPE_ALL 0 +# define OSSL_TIME_SPEC_WEEKS_TYPE_INT 1 +# define OSSL_TIME_SPEC_WEEKS_TYPE_BIT 2 +# define OSSL_TIME_SPEC_BIT_WEEKS_1 0 +# define OSSL_TIME_SPEC_BIT_WEEKS_2 1 +# define OSSL_TIME_SPEC_BIT_WEEKS_3 2 +# define OSSL_TIME_SPEC_BIT_WEEKS_4 3 +# define OSSL_TIME_SPEC_BIT_WEEKS_5 4 + +typedef struct OSSL_TIME_SPEC_WEEKS_st { + int type; + union { + ASN1_NULL *allWeeks; + STACK_OF(ASN1_INTEGER) *intWeek; + ASN1_BIT_STRING *bitWeek; + } choice; +} OSSL_TIME_SPEC_WEEKS; + +# define OSSL_TIME_SPEC_MONTH_TYPE_ALL 0 +# define OSSL_TIME_SPEC_MONTH_TYPE_INT 1 +# define OSSL_TIME_SPEC_MONTH_TYPE_BIT 2 +# define OSSL_TIME_SPEC_INT_MONTH_JAN 1 +# define OSSL_TIME_SPEC_INT_MONTH_FEB 2 +# define OSSL_TIME_SPEC_INT_MONTH_MAR 3 +# define OSSL_TIME_SPEC_INT_MONTH_APR 4 +# define OSSL_TIME_SPEC_INT_MONTH_MAY 5 +# define OSSL_TIME_SPEC_INT_MONTH_JUN 6 +# define OSSL_TIME_SPEC_INT_MONTH_JUL 7 +# define OSSL_TIME_SPEC_INT_MONTH_AUG 8 +# define OSSL_TIME_SPEC_INT_MONTH_SEP 9 +# define OSSL_TIME_SPEC_INT_MONTH_OCT 10 +# define OSSL_TIME_SPEC_INT_MONTH_NOV 11 +# define OSSL_TIME_SPEC_INT_MONTH_DEC 12 +# define OSSL_TIME_SPEC_BIT_MONTH_JAN 0 +# define OSSL_TIME_SPEC_BIT_MONTH_FEB 1 +# define OSSL_TIME_SPEC_BIT_MONTH_MAR 2 +# define OSSL_TIME_SPEC_BIT_MONTH_APR 3 +# define OSSL_TIME_SPEC_BIT_MONTH_MAY 4 +# define OSSL_TIME_SPEC_BIT_MONTH_JUN 5 +# define OSSL_TIME_SPEC_BIT_MONTH_JUL 6 +# define OSSL_TIME_SPEC_BIT_MONTH_AUG 7 +# define OSSL_TIME_SPEC_BIT_MONTH_SEP 8 +# define OSSL_TIME_SPEC_BIT_MONTH_OCT 9 +# define OSSL_TIME_SPEC_BIT_MONTH_NOV 10 +# define OSSL_TIME_SPEC_BIT_MONTH_DEC 11 + +typedef struct OSSL_TIME_SPEC_MONTH_st { + int type; + union { + ASN1_NULL *allMonths; + STACK_OF(ASN1_INTEGER) *intMonth; + ASN1_BIT_STRING *bitMonth; + } choice; +} OSSL_TIME_SPEC_MONTH; + +typedef struct OSSL_TIME_PERIOD_st { + STACK_OF(OSSL_DAY_TIME_BAND) *timesOfDay; + OSSL_TIME_SPEC_DAY *days; + OSSL_TIME_SPEC_WEEKS *weeks; + OSSL_TIME_SPEC_MONTH *months; + STACK_OF(ASN1_INTEGER) *years; +} OSSL_TIME_PERIOD; + +# define OSSL_TIME_SPEC_TIME_TYPE_ABSOLUTE 0 +# define OSSL_TIME_SPEC_TIME_TYPE_PERIODIC 1 + +typedef struct OSSL_TIME_SPEC_TIME_st { + int type; + union { + OSSL_TIME_SPEC_ABSOLUTE *absolute; + STACK_OF(OSSL_TIME_PERIOD) *periodic; + } choice; +} OSSL_TIME_SPEC_TIME; + +typedef struct OSSL_TIME_SPEC_st { + OSSL_TIME_SPEC_TIME *time; + ASN1_BOOLEAN notThisTime; + ASN1_INTEGER *timeZone; +} OSSL_TIME_SPEC; + +DECLARE_ASN1_FUNCTIONS(OSSL_DAY_TIME) +DECLARE_ASN1_FUNCTIONS(OSSL_DAY_TIME_BAND) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_SPEC_DAY) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_SPEC_WEEKS) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_SPEC_MONTH) +DECLARE_ASN1_FUNCTIONS(OSSL_NAMED_DAY) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_SPEC_X_DAY_OF) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_SPEC_ABSOLUTE) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_SPEC_TIME) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_SPEC) +DECLARE_ASN1_FUNCTIONS(OSSL_TIME_PERIOD) + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_TIME_PERIOD, OSSL_TIME_PERIOD, OSSL_TIME_PERIOD) +#define sk_OSSL_TIME_PERIOD_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_TIME_PERIOD_sk_type(sk)) +#define sk_OSSL_TIME_PERIOD_value(sk, idx) ((OSSL_TIME_PERIOD *)OPENSSL_sk_value(ossl_check_const_OSSL_TIME_PERIOD_sk_type(sk), (idx))) +#define sk_OSSL_TIME_PERIOD_new(cmp) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_new(ossl_check_OSSL_TIME_PERIOD_compfunc_type(cmp))) +#define sk_OSSL_TIME_PERIOD_new_null() ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_new_null()) +#define sk_OSSL_TIME_PERIOD_new_reserve(cmp, n) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_TIME_PERIOD_compfunc_type(cmp), (n))) +#define sk_OSSL_TIME_PERIOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), (n)) +#define sk_OSSL_TIME_PERIOD_free(sk) OPENSSL_sk_free(ossl_check_OSSL_TIME_PERIOD_sk_type(sk)) +#define sk_OSSL_TIME_PERIOD_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_TIME_PERIOD_sk_type(sk)) +#define sk_OSSL_TIME_PERIOD_delete(sk, i) ((OSSL_TIME_PERIOD *)OPENSSL_sk_delete(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), (i))) +#define sk_OSSL_TIME_PERIOD_delete_ptr(sk, ptr) ((OSSL_TIME_PERIOD *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr))) +#define sk_OSSL_TIME_PERIOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr)) +#define sk_OSSL_TIME_PERIOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr)) +#define sk_OSSL_TIME_PERIOD_pop(sk) ((OSSL_TIME_PERIOD *)OPENSSL_sk_pop(ossl_check_OSSL_TIME_PERIOD_sk_type(sk))) +#define sk_OSSL_TIME_PERIOD_shift(sk) ((OSSL_TIME_PERIOD *)OPENSSL_sk_shift(ossl_check_OSSL_TIME_PERIOD_sk_type(sk))) +#define sk_OSSL_TIME_PERIOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_TIME_PERIOD_sk_type(sk),ossl_check_OSSL_TIME_PERIOD_freefunc_type(freefunc)) +#define sk_OSSL_TIME_PERIOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr), (idx)) +#define sk_OSSL_TIME_PERIOD_set(sk, idx, ptr) ((OSSL_TIME_PERIOD *)OPENSSL_sk_set(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), (idx), ossl_check_OSSL_TIME_PERIOD_type(ptr))) +#define sk_OSSL_TIME_PERIOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr)) +#define sk_OSSL_TIME_PERIOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr)) +#define sk_OSSL_TIME_PERIOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_type(ptr), pnum) +#define sk_OSSL_TIME_PERIOD_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_TIME_PERIOD_sk_type(sk)) +#define sk_OSSL_TIME_PERIOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_TIME_PERIOD_sk_type(sk)) +#define sk_OSSL_TIME_PERIOD_dup(sk) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_dup(ossl_check_const_OSSL_TIME_PERIOD_sk_type(sk))) +#define sk_OSSL_TIME_PERIOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_TIME_PERIOD) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_copyfunc_type(copyfunc), ossl_check_OSSL_TIME_PERIOD_freefunc_type(freefunc))) +#define sk_OSSL_TIME_PERIOD_set_cmp_func(sk, cmp) ((sk_OSSL_TIME_PERIOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_TIME_PERIOD_sk_type(sk), ossl_check_OSSL_TIME_PERIOD_compfunc_type(cmp))) + + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_DAY_TIME_BAND, OSSL_DAY_TIME_BAND, OSSL_DAY_TIME_BAND) +#define sk_OSSL_DAY_TIME_BAND_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_DAY_TIME_BAND_sk_type(sk)) +#define sk_OSSL_DAY_TIME_BAND_value(sk, idx) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_value(ossl_check_const_OSSL_DAY_TIME_BAND_sk_type(sk), (idx))) +#define sk_OSSL_DAY_TIME_BAND_new(cmp) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_new(ossl_check_OSSL_DAY_TIME_BAND_compfunc_type(cmp))) +#define sk_OSSL_DAY_TIME_BAND_new_null() ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_new_null()) +#define sk_OSSL_DAY_TIME_BAND_new_reserve(cmp, n) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_DAY_TIME_BAND_compfunc_type(cmp), (n))) +#define sk_OSSL_DAY_TIME_BAND_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), (n)) +#define sk_OSSL_DAY_TIME_BAND_free(sk) OPENSSL_sk_free(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk)) +#define sk_OSSL_DAY_TIME_BAND_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk)) +#define sk_OSSL_DAY_TIME_BAND_delete(sk, i) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_delete(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), (i))) +#define sk_OSSL_DAY_TIME_BAND_delete_ptr(sk, ptr) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr))) +#define sk_OSSL_DAY_TIME_BAND_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr)) +#define sk_OSSL_DAY_TIME_BAND_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr)) +#define sk_OSSL_DAY_TIME_BAND_pop(sk) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_pop(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk))) +#define sk_OSSL_DAY_TIME_BAND_shift(sk) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_shift(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk))) +#define sk_OSSL_DAY_TIME_BAND_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk),ossl_check_OSSL_DAY_TIME_BAND_freefunc_type(freefunc)) +#define sk_OSSL_DAY_TIME_BAND_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr), (idx)) +#define sk_OSSL_DAY_TIME_BAND_set(sk, idx, ptr) ((OSSL_DAY_TIME_BAND *)OPENSSL_sk_set(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), (idx), ossl_check_OSSL_DAY_TIME_BAND_type(ptr))) +#define sk_OSSL_DAY_TIME_BAND_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr)) +#define sk_OSSL_DAY_TIME_BAND_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr)) +#define sk_OSSL_DAY_TIME_BAND_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_type(ptr), pnum) +#define sk_OSSL_DAY_TIME_BAND_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk)) +#define sk_OSSL_DAY_TIME_BAND_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_DAY_TIME_BAND_sk_type(sk)) +#define sk_OSSL_DAY_TIME_BAND_dup(sk) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_dup(ossl_check_const_OSSL_DAY_TIME_BAND_sk_type(sk))) +#define sk_OSSL_DAY_TIME_BAND_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_DAY_TIME_BAND) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_copyfunc_type(copyfunc), ossl_check_OSSL_DAY_TIME_BAND_freefunc_type(freefunc))) +#define sk_OSSL_DAY_TIME_BAND_set_cmp_func(sk, cmp) ((sk_OSSL_DAY_TIME_BAND_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_DAY_TIME_BAND_sk_type(sk), ossl_check_OSSL_DAY_TIME_BAND_compfunc_type(cmp))) + + +/* Attribute Type and Value */ +typedef struct atav_st { + ASN1_OBJECT *type; + ASN1_TYPE *value; +} OSSL_ATAV; + +typedef struct ATTRIBUTE_TYPE_MAPPING_st { + ASN1_OBJECT *local; + ASN1_OBJECT *remote; +} OSSL_ATTRIBUTE_TYPE_MAPPING; + +typedef struct ATTRIBUTE_VALUE_MAPPING_st { + OSSL_ATAV *local; + OSSL_ATAV *remote; +} OSSL_ATTRIBUTE_VALUE_MAPPING; + +# define OSSL_ATTR_MAP_TYPE 0 +# define OSSL_ATTR_MAP_VALUE 1 + +typedef struct ATTRIBUTE_MAPPING_st { + int type; + union { + OSSL_ATTRIBUTE_TYPE_MAPPING *typeMappings; + OSSL_ATTRIBUTE_VALUE_MAPPING *typeValueMappings; + } choice; +} OSSL_ATTRIBUTE_MAPPING; + +typedef STACK_OF(OSSL_ATTRIBUTE_MAPPING) OSSL_ATTRIBUTE_MAPPINGS; +DECLARE_ASN1_FUNCTIONS(OSSL_ATAV) +DECLARE_ASN1_FUNCTIONS(OSSL_ATTRIBUTE_TYPE_MAPPING) +DECLARE_ASN1_FUNCTIONS(OSSL_ATTRIBUTE_VALUE_MAPPING) +DECLARE_ASN1_FUNCTIONS(OSSL_ATTRIBUTE_MAPPING) +DECLARE_ASN1_FUNCTIONS(OSSL_ATTRIBUTE_MAPPINGS) + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ATTRIBUTE_MAPPING, OSSL_ATTRIBUTE_MAPPING, OSSL_ATTRIBUTE_MAPPING) +#define sk_OSSL_ATTRIBUTE_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) +#define sk_OSSL_ATTRIBUTE_MAPPING_value(sk, idx) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_value(ossl_check_const_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), (idx))) +#define sk_OSSL_ATTRIBUTE_MAPPING_new(cmp) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_new(ossl_check_OSSL_ATTRIBUTE_MAPPING_compfunc_type(cmp))) +#define sk_OSSL_ATTRIBUTE_MAPPING_new_null() ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_new_null()) +#define sk_OSSL_ATTRIBUTE_MAPPING_new_reserve(cmp, n) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ATTRIBUTE_MAPPING_compfunc_type(cmp), (n))) +#define sk_OSSL_ATTRIBUTE_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), (n)) +#define sk_OSSL_ATTRIBUTE_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) +#define sk_OSSL_ATTRIBUTE_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) +#define sk_OSSL_ATTRIBUTE_MAPPING_delete(sk, i) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_delete(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), (i))) +#define sk_OSSL_ATTRIBUTE_MAPPING_delete_ptr(sk, ptr) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr))) +#define sk_OSSL_ATTRIBUTE_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr)) +#define sk_OSSL_ATTRIBUTE_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr)) +#define sk_OSSL_ATTRIBUTE_MAPPING_pop(sk) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_pop(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk))) +#define sk_OSSL_ATTRIBUTE_MAPPING_shift(sk) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_shift(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk))) +#define sk_OSSL_ATTRIBUTE_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk),ossl_check_OSSL_ATTRIBUTE_MAPPING_freefunc_type(freefunc)) +#define sk_OSSL_ATTRIBUTE_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr), (idx)) +#define sk_OSSL_ATTRIBUTE_MAPPING_set(sk, idx, ptr) ((OSSL_ATTRIBUTE_MAPPING *)OPENSSL_sk_set(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), (idx), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr))) +#define sk_OSSL_ATTRIBUTE_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr)) +#define sk_OSSL_ATTRIBUTE_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr)) +#define sk_OSSL_ATTRIBUTE_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_type(ptr), pnum) +#define sk_OSSL_ATTRIBUTE_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) +#define sk_OSSL_ATTRIBUTE_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_ATTRIBUTE_MAPPING_sk_type(sk)) +#define sk_OSSL_ATTRIBUTE_MAPPING_dup(sk) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_OSSL_ATTRIBUTE_MAPPING_sk_type(sk))) +#define sk_OSSL_ATTRIBUTE_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_ATTRIBUTE_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_copyfunc_type(copyfunc), ossl_check_OSSL_ATTRIBUTE_MAPPING_freefunc_type(freefunc))) +#define sk_OSSL_ATTRIBUTE_MAPPING_set_cmp_func(sk, cmp) ((sk_OSSL_ATTRIBUTE_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_ATTRIBUTE_MAPPING_sk_type(sk), ossl_check_OSSL_ATTRIBUTE_MAPPING_compfunc_type(cmp))) + + +# define OSSL_AAA_ATTRIBUTE_TYPE 0 +# define OSSL_AAA_ATTRIBUTE_VALUES 1 + +typedef struct ALLOWED_ATTRIBUTES_CHOICE_st { + int type; + union { + ASN1_OBJECT *attributeType; + X509_ATTRIBUTE *attributeTypeandValues; + } choice; +} OSSL_ALLOWED_ATTRIBUTES_CHOICE; + +typedef struct ALLOWED_ATTRIBUTES_ITEM_st { + STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *attributes; + GENERAL_NAME *holderDomain; +} OSSL_ALLOWED_ATTRIBUTES_ITEM; + +typedef STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) OSSL_ALLOWED_ATTRIBUTES_SYNTAX; + +DECLARE_ASN1_FUNCTIONS(OSSL_ALLOWED_ATTRIBUTES_CHOICE) +DECLARE_ASN1_FUNCTIONS(OSSL_ALLOWED_ATTRIBUTES_ITEM) +DECLARE_ASN1_FUNCTIONS(OSSL_ALLOWED_ATTRIBUTES_SYNTAX) + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ALLOWED_ATTRIBUTES_CHOICE, OSSL_ALLOWED_ATTRIBUTES_CHOICE, OSSL_ALLOWED_ATTRIBUTES_CHOICE) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_value(sk, idx) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_value(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), (idx))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new(cmp) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_new(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc_type(cmp))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new_null() ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_new_reserve(cmp, n) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc_type(cmp), (n))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), (n)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_delete(sk, i) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_delete(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), (i))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_delete_ptr(sk, ptr) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_pop(sk) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_pop(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_shift(sk) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_shift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk),ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_freefunc_type(freefunc)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr), (idx)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_set(sk, idx, ptr) ((OSSL_ALLOWED_ATTRIBUTES_CHOICE *)OPENSSL_sk_set(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), (idx), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_type(ptr), pnum) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_dup(sk) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_CHOICE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_copyfunc_type(copyfunc), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_freefunc_type(freefunc))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_set_cmp_func(sk, cmp) ((sk_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_CHOICE_compfunc_type(cmp))) + + +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_ALLOWED_ATTRIBUTES_ITEM, OSSL_ALLOWED_ATTRIBUTES_ITEM, OSSL_ALLOWED_ATTRIBUTES_ITEM) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_value(sk, idx) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_value(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), (idx))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new(cmp) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_new(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc_type(cmp))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new_null() ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_new_null()) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_new_reserve(cmp, n) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc_type(cmp), (n))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), (n)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_free(sk) OPENSSL_sk_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_delete(sk, i) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_delete(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), (i))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_delete_ptr(sk, ptr) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_pop(sk) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_pop(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_shift(sk) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_shift(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk),ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_freefunc_type(freefunc)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr), (idx)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_set(sk, idx, ptr) ((OSSL_ALLOWED_ATTRIBUTES_ITEM *)OPENSSL_sk_set(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), (idx), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_type(ptr), pnum) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk)) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_dup(sk) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_dup(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_ALLOWED_ATTRIBUTES_ITEM) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_copyfunc_type(copyfunc), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_freefunc_type(freefunc))) +#define sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_set_cmp_func(sk, cmp) ((sk_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_sk_type(sk), ossl_check_OSSL_ALLOWED_ATTRIBUTES_ITEM_compfunc_type(cmp))) + + +typedef struct AA_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + int dp_reasons; + ASN1_BOOLEAN indirectCRL; + ASN1_BOOLEAN containsUserAttributeCerts; + ASN1_BOOLEAN containsAACerts; + ASN1_BOOLEAN containsSOAPublicKeyCerts; +} OSSL_AA_DIST_POINT; + +DECLARE_ASN1_FUNCTIONS(OSSL_AA_DIST_POINT) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/thirdparty/OpenSSL-3.5.3/include/openssl/x509v3err.h b/thirdparty/OpenSSL-3.5.3/include/openssl/x509v3err.h new file mode 100644 index 0000000..4bbcfc2 --- /dev/null +++ b/thirdparty/OpenSSL-3.5.3/include/openssl/x509v3err.h @@ -0,0 +1,97 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 OPENSSL_X509V3ERR_H +# define OPENSSL_X509V3ERR_H +# pragma once + +# include +# include +# include + + + +/* + * X509V3 reason codes. + */ +# define X509V3_R_BAD_IP_ADDRESS 118 +# define X509V3_R_BAD_OBJECT 119 +# define X509V3_R_BAD_OPTION 170 +# define X509V3_R_BAD_VALUE 171 +# 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_EMPTY_KEY_USAGE 169 +# 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_CERTIFICATE 158 +# define X509V3_R_INVALID_EMPTY_NAME 108 +# 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_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_NEGATIVE_PATHLEN 168 +# 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_PURPOSE_NOT_UNIQUE 173 +# 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_UNKNOWN_VALUE 172 +# define X509V3_R_UNSUPPORTED_OPTION 117 +# define X509V3_R_UNSUPPORTED_TYPE 167 +# define X509V3_R_USER_TOO_LONG 132 + +#endif diff --git a/thirdparty/OpenSSL-3.5.3/lib/VC/x64/MD/libcrypto.lib b/thirdparty/OpenSSL-3.5.3/lib/VC/x64/MD/libcrypto.lib new file mode 100644 index 0000000000000000000000000000000000000000..4539ba363a8ddf44ee970d588788e7bef6edb983 GIT binary patch literal 1377216 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
    _Zi2yPDraCp?NJ@2AX`zqv8Aw~ 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�Rc+#^tz?EjzK{gtE_?;8P-2=GHvP;P^ke2N! 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

  • HF+z=(|NuNh<#P`O@(VgP*RpK{>$tl_h$c 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