From 8f53d867a2ec8a429114dd94d9f2d51e7c90fc26 Mon Sep 17 00:00:00 2001 From: NanamiAdmin Date: Wed, 7 Jan 2026 21:21:28 +0800 Subject: [PATCH] upload all files --- Modules/.vscode/c_cpp_properties.json | 18 + Modules/.vscode/launch.json | 24 + Modules/.vscode/settings.json | 59 + Modules/Logger.cpp | 59 + Modules/Logger.h | 9 + Modules/dbActions.cpp | 237 + Modules/dbActions.h | 15 + Modules/example/getAddr/app.js | 38 + Modules/example/getAddr/package.json | 12 + Modules/globalLinkTransfer/app.js | 297 + Modules/globalLinkTransfer/logger.js | 9 + Modules/globalLinkTransfer/package.json | 11 + Modules/inicpp.hpp | 960 + .../openssl/__DECC_INCLUDE_EPILOGUE.H | 22 + .../openssl/__DECC_INCLUDE_PROLOGUE.H | 26 + Modules/openssl.include/openssl/aes.h | 111 + Modules/openssl.include/openssl/applink.c | 153 + Modules/openssl.include/openssl/asn1.h | 1134 + Modules/openssl.include/openssl/asn1err.h | 142 + Modules/openssl.include/openssl/asn1t.h | 946 + Modules/openssl.include/openssl/async.h | 104 + Modules/openssl.include/openssl/asyncerr.h | 29 + Modules/openssl.include/openssl/bio.h | 1022 + Modules/openssl.include/openssl/bioerr.h | 72 + Modules/openssl.include/openssl/blowfish.h | 78 + Modules/openssl.include/openssl/bn.h | 590 + Modules/openssl.include/openssl/bnerr.h | 47 + Modules/openssl.include/openssl/buffer.h | 62 + Modules/openssl.include/openssl/buffererr.h | 25 + Modules/openssl.include/openssl/byteorder.h | 339 + Modules/openssl.include/openssl/camellia.h | 117 + Modules/openssl.include/openssl/cast.h | 71 + Modules/openssl.include/openssl/cmac.h | 52 + Modules/openssl.include/openssl/cmp.h | 727 + Modules/openssl.include/openssl/cmp_util.h | 56 + Modules/openssl.include/openssl/cmperr.h | 134 + Modules/openssl.include/openssl/cms.h | 520 + Modules/openssl.include/openssl/cmserr.h | 129 + Modules/openssl.include/openssl/comp.h | 98 + Modules/openssl.include/openssl/comperr.h | 38 + Modules/openssl.include/openssl/conf.h | 214 + Modules/openssl.include/openssl/conf_api.h | 46 + Modules/openssl.include/openssl/conferr.h | 52 + .../openssl.include/openssl/configuration.h | 191 + Modules/openssl.include/openssl/conftypes.h | 44 + Modules/openssl.include/openssl/core.h | 236 + .../openssl.include/openssl/core_dispatch.h | 1156 + Modules/openssl.include/openssl/core_names.h | 584 + Modules/openssl.include/openssl/core_object.h | 41 + Modules/openssl.include/openssl/crmf.h | 278 + Modules/openssl.include/openssl/crmferr.h | 57 + Modules/openssl.include/openssl/crypto.h | 614 + Modules/openssl.include/openssl/cryptoerr.h | 56 + .../openssl/cryptoerr_legacy.h | 1466 + Modules/openssl.include/openssl/ct.h | 573 + Modules/openssl.include/openssl/cterr.h | 45 + Modules/openssl.include/openssl/decoder.h | 133 + Modules/openssl.include/openssl/decodererr.h | 28 + Modules/openssl.include/openssl/des.h | 211 + Modules/openssl.include/openssl/dh.h | 339 + Modules/openssl.include/openssl/dherr.h | 59 + Modules/openssl.include/openssl/dsa.h | 280 + Modules/openssl.include/openssl/dsaerr.h | 44 + Modules/openssl.include/openssl/dtls1.h | 57 + Modules/openssl.include/openssl/e_os2.h | 310 + Modules/openssl.include/openssl/e_ostime.h | 38 + Modules/openssl.include/openssl/ebcdic.h | 39 + Modules/openssl.include/openssl/ec.h | 1588 + Modules/openssl.include/openssl/ecdh.h | 10 + Modules/openssl.include/openssl/ecdsa.h | 10 + Modules/openssl.include/openssl/ecerr.h | 104 + Modules/openssl.include/openssl/encoder.h | 124 + Modules/openssl.include/openssl/encodererr.h | 28 + Modules/openssl.include/openssl/engine.h | 833 + Modules/openssl.include/openssl/engineerr.h | 63 + Modules/openssl.include/openssl/err.h | 512 + Modules/openssl.include/openssl/ess.h | 128 + Modules/openssl.include/openssl/esserr.h | 32 + Modules/openssl.include/openssl/evp.h | 2345 + Modules/openssl.include/openssl/evperr.h | 148 + Modules/openssl.include/openssl/fips_names.h | 50 + Modules/openssl.include/openssl/fipskey.h | 41 + Modules/openssl.include/openssl/hmac.h | 62 + Modules/openssl.include/openssl/hpke.h | 169 + Modules/openssl.include/openssl/http.h | 119 + Modules/openssl.include/openssl/httperr.h | 56 + Modules/openssl.include/openssl/idea.h | 82 + Modules/openssl.include/openssl/indicator.h | 31 + Modules/openssl.include/openssl/kdf.h | 142 + Modules/openssl.include/openssl/kdferr.h | 16 + Modules/openssl.include/openssl/lhash.h | 398 + Modules/openssl.include/openssl/macros.h | 361 + Modules/openssl.include/openssl/md2.h | 56 + Modules/openssl.include/openssl/md4.h | 63 + Modules/openssl.include/openssl/md5.h | 62 + Modules/openssl.include/openssl/mdc2.h | 55 + Modules/openssl.include/openssl/ml_kem.h | 31 + Modules/openssl.include/openssl/modes.h | 219 + Modules/openssl.include/openssl/obj_mac.h | 6695 + Modules/openssl.include/openssl/objects.h | 184 + Modules/openssl.include/openssl/objectserr.h | 28 + Modules/openssl.include/openssl/ocsp.h | 483 + Modules/openssl.include/openssl/ocsperr.h | 53 + Modules/openssl.include/openssl/opensslconf.h | 17 + Modules/openssl.include/openssl/opensslv.h | 109 + Modules/openssl.include/openssl/ossl_typ.h | 16 + Modules/openssl.include/openssl/param_build.h | 63 + Modules/openssl.include/openssl/params.h | 166 + Modules/openssl.include/openssl/pem.h | 548 + Modules/openssl.include/openssl/pem2.h | 19 + Modules/openssl.include/openssl/pemerr.h | 59 + Modules/openssl.include/openssl/pkcs12.h | 372 + Modules/openssl.include/openssl/pkcs12err.h | 46 + Modules/openssl.include/openssl/pkcs7.h | 430 + Modules/openssl.include/openssl/pkcs7err.h | 63 + Modules/openssl.include/openssl/prov_ssl.h | 38 + Modules/openssl.include/openssl/proverr.h | 171 + Modules/openssl.include/openssl/provider.h | 94 + Modules/openssl.include/openssl/quic.h | 75 + Modules/openssl.include/openssl/rand.h | 131 + Modules/openssl.include/openssl/randerr.h | 70 + Modules/openssl.include/openssl/rc2.h | 68 + Modules/openssl.include/openssl/rc4.h | 47 + Modules/openssl.include/openssl/rc5.h | 79 + Modules/openssl.include/openssl/ripemd.h | 59 + Modules/openssl.include/openssl/rsa.h | 615 + Modules/openssl.include/openssl/rsaerr.h | 107 + Modules/openssl.include/openssl/safestack.h | 320 + Modules/openssl.include/openssl/seed.h | 113 + Modules/openssl.include/openssl/self_test.h | 116 + Modules/openssl.include/openssl/sha.h | 139 + Modules/openssl.include/openssl/srp.h | 285 + Modules/openssl.include/openssl/srtp.h | 68 + Modules/openssl.include/openssl/ssl.h | 2940 + Modules/openssl.include/openssl/ssl2.h | 30 + Modules/openssl.include/openssl/ssl3.h | 358 + Modules/openssl.include/openssl/sslerr.h | 382 + .../openssl.include/openssl/sslerr_legacy.h | 467 + Modules/openssl.include/openssl/stack.h | 92 + Modules/openssl.include/openssl/store.h | 379 + Modules/openssl.include/openssl/storeerr.h | 49 + Modules/openssl.include/openssl/symhacks.h | 39 + Modules/openssl.include/openssl/thread.h | 31 + Modules/openssl.include/openssl/tls1.h | 1226 + Modules/openssl.include/openssl/trace.h | 321 + Modules/openssl.include/openssl/ts.h | 522 + Modules/openssl.include/openssl/tserr.h | 67 + Modules/openssl.include/openssl/txt_db.h | 63 + Modules/openssl.include/openssl/types.h | 248 + Modules/openssl.include/openssl/ui.h | 407 + Modules/openssl.include/openssl/uierr.h | 38 + Modules/openssl.include/openssl/whrlpool.h | 62 + Modules/openssl.include/openssl/x509.h | 1304 + Modules/openssl.include/openssl/x509_acert.h | 294 + Modules/openssl.include/openssl/x509_vfy.h | 921 + Modules/openssl.include/openssl/x509err.h | 70 + Modules/openssl.include/openssl/x509v3.h | 1968 + Modules/openssl.include/openssl/x509v3err.h | 97 + Modules/openssl.lib/libcrypto.def | 5902 + Modules/openssl.lib/libcrypto.lib | Bin 0 -> 1383240 bytes Modules/openssl.lib/libssl.def | 610 + Modules/openssl.lib/libssl.lib | Bin 0 -> 147386 bytes Modules/openssl.lib/libssl_static.lib | Bin 0 -> 13076120 bytes Modules/sqlite.include/Makefile.fallback | 19 + Modules/sqlite.include/Makefile.in | 301 + Modules/sqlite.include/Makefile.msc | 1105 + Modules/sqlite.include/README.txt | 101 + Modules/sqlite.include/Replace.cs | 223 + Modules/sqlite.include/VERSION | 1 + Modules/sqlite.include/auto.def | 25 + Modules/sqlite.include/autosetup/LICENSE | 35 + .../sqlite.include/autosetup/README.autosetup | 11 + Modules/sqlite.include/autosetup/README.md | 454 + Modules/sqlite.include/autosetup/autosetup | 2544 + .../autosetup/autosetup-config.guess | 1815 + .../autosetup/autosetup-config.sub | 2354 + .../autosetup/autosetup-find-tclsh | 16 + .../autosetup/autosetup-test-tclsh | 20 + Modules/sqlite.include/autosetup/cc-db.tcl | 15 + Modules/sqlite.include/autosetup/cc-lib.tcl | 187 + .../sqlite.include/autosetup/cc-shared.tcl | 115 + Modules/sqlite.include/autosetup/cc.tcl | 758 + .../autosetup/find_tclconfig.tcl | 24 + Modules/sqlite.include/autosetup/jimsh0.c | 24506 ++ .../sqlite.include/autosetup/pkg-config.tcl | 168 + Modules/sqlite.include/autosetup/proj.tcl | 2549 + .../autosetup/sqlite-config.tcl | 2237 + Modules/sqlite.include/autosetup/system.tcl | 420 + .../autosetup/teaish/README.txt | 4 + .../sqlite.include/autosetup/teaish/core.tcl | 2560 + .../autosetup/teaish/feature.tcl | 214 + .../autosetup/teaish/tester.tcl | 293 + Modules/sqlite.include/configure | 4 + Modules/sqlite.include/shell.c | 33867 ++ Modules/sqlite.include/sqlite3.1 | 181 + Modules/sqlite.include/sqlite3.c | 265861 +++++++++++++++ Modules/sqlite.include/sqlite3.h | 13968 + Modules/sqlite.include/sqlite3.pc.in | 13 + Modules/sqlite.include/sqlite3.rc | 83 + Modules/sqlite.include/sqlite3ext.h | 730 + Modules/sqlite.include/sqlite3rc.h | 3 + Modules/sqlite.include/tea/Makefile.in | 558 + Modules/sqlite.include/tea/README.txt | 94 + .../sqlite.include/tea/_teaish.tester.tcl.in | 50 + Modules/sqlite.include/tea/auto.def | 8 + Modules/sqlite.include/tea/configure | 20 + .../sqlite.include/tea/generic/tclsqlite3.c | 4221 + Modules/sqlite.include/tea/license.terms | 6 + Modules/sqlite.include/tea/pkgIndex.tcl.in | 40 + Modules/sqlite.include/tea/teaish.tcl | 569 + Modules/sqlite.include/tea/teaish.test.tcl | 14 + Modules/sqlite.lib/sqlite3.def | 363 + Modules/sqlite.lib/sqlite3.dll | Bin 0 -> 3232256 bytes Modules/sqlite.lib/sqlite3.exp | Bin 0 -> 51315 bytes Modules/sqlite.lib/sqlite3.lib | Bin 0 -> 84680 bytes TeacherSalaryMgmt.cpp | 742 + TeacherSalaryMgmt.slnx | 7 + TeacherSalaryMgmt.vcxproj | 146 + TeacherSalaryMgmt.vcxproj.filters | 42 + database.db | Bin 0 -> 28672 bytes 220 files changed, 419218 insertions(+) create mode 100644 Modules/.vscode/c_cpp_properties.json create mode 100644 Modules/.vscode/launch.json create mode 100644 Modules/.vscode/settings.json create mode 100644 Modules/Logger.cpp create mode 100644 Modules/Logger.h create mode 100644 Modules/dbActions.cpp create mode 100644 Modules/dbActions.h create mode 100644 Modules/example/getAddr/app.js create mode 100644 Modules/example/getAddr/package.json create mode 100644 Modules/globalLinkTransfer/app.js create mode 100644 Modules/globalLinkTransfer/logger.js create mode 100644 Modules/globalLinkTransfer/package.json create mode 100644 Modules/inicpp.hpp create mode 100644 Modules/openssl.include/openssl/__DECC_INCLUDE_EPILOGUE.H create mode 100644 Modules/openssl.include/openssl/__DECC_INCLUDE_PROLOGUE.H create mode 100644 Modules/openssl.include/openssl/aes.h create mode 100644 Modules/openssl.include/openssl/applink.c create mode 100644 Modules/openssl.include/openssl/asn1.h create mode 100644 Modules/openssl.include/openssl/asn1err.h create mode 100644 Modules/openssl.include/openssl/asn1t.h create mode 100644 Modules/openssl.include/openssl/async.h create mode 100644 Modules/openssl.include/openssl/asyncerr.h create mode 100644 Modules/openssl.include/openssl/bio.h create mode 100644 Modules/openssl.include/openssl/bioerr.h create mode 100644 Modules/openssl.include/openssl/blowfish.h create mode 100644 Modules/openssl.include/openssl/bn.h create mode 100644 Modules/openssl.include/openssl/bnerr.h create mode 100644 Modules/openssl.include/openssl/buffer.h create mode 100644 Modules/openssl.include/openssl/buffererr.h create mode 100644 Modules/openssl.include/openssl/byteorder.h create mode 100644 Modules/openssl.include/openssl/camellia.h create mode 100644 Modules/openssl.include/openssl/cast.h create mode 100644 Modules/openssl.include/openssl/cmac.h create mode 100644 Modules/openssl.include/openssl/cmp.h create mode 100644 Modules/openssl.include/openssl/cmp_util.h create mode 100644 Modules/openssl.include/openssl/cmperr.h create mode 100644 Modules/openssl.include/openssl/cms.h create mode 100644 Modules/openssl.include/openssl/cmserr.h create mode 100644 Modules/openssl.include/openssl/comp.h create mode 100644 Modules/openssl.include/openssl/comperr.h create mode 100644 Modules/openssl.include/openssl/conf.h create mode 100644 Modules/openssl.include/openssl/conf_api.h create mode 100644 Modules/openssl.include/openssl/conferr.h create mode 100644 Modules/openssl.include/openssl/configuration.h create mode 100644 Modules/openssl.include/openssl/conftypes.h create mode 100644 Modules/openssl.include/openssl/core.h create mode 100644 Modules/openssl.include/openssl/core_dispatch.h create mode 100644 Modules/openssl.include/openssl/core_names.h create mode 100644 Modules/openssl.include/openssl/core_object.h create mode 100644 Modules/openssl.include/openssl/crmf.h create mode 100644 Modules/openssl.include/openssl/crmferr.h create mode 100644 Modules/openssl.include/openssl/crypto.h create mode 100644 Modules/openssl.include/openssl/cryptoerr.h create mode 100644 Modules/openssl.include/openssl/cryptoerr_legacy.h create mode 100644 Modules/openssl.include/openssl/ct.h create mode 100644 Modules/openssl.include/openssl/cterr.h create mode 100644 Modules/openssl.include/openssl/decoder.h create mode 100644 Modules/openssl.include/openssl/decodererr.h create mode 100644 Modules/openssl.include/openssl/des.h create mode 100644 Modules/openssl.include/openssl/dh.h create mode 100644 Modules/openssl.include/openssl/dherr.h create mode 100644 Modules/openssl.include/openssl/dsa.h create mode 100644 Modules/openssl.include/openssl/dsaerr.h create mode 100644 Modules/openssl.include/openssl/dtls1.h create mode 100644 Modules/openssl.include/openssl/e_os2.h create mode 100644 Modules/openssl.include/openssl/e_ostime.h create mode 100644 Modules/openssl.include/openssl/ebcdic.h create mode 100644 Modules/openssl.include/openssl/ec.h create mode 100644 Modules/openssl.include/openssl/ecdh.h create mode 100644 Modules/openssl.include/openssl/ecdsa.h create mode 100644 Modules/openssl.include/openssl/ecerr.h create mode 100644 Modules/openssl.include/openssl/encoder.h create mode 100644 Modules/openssl.include/openssl/encodererr.h create mode 100644 Modules/openssl.include/openssl/engine.h create mode 100644 Modules/openssl.include/openssl/engineerr.h create mode 100644 Modules/openssl.include/openssl/err.h create mode 100644 Modules/openssl.include/openssl/ess.h create mode 100644 Modules/openssl.include/openssl/esserr.h create mode 100644 Modules/openssl.include/openssl/evp.h create mode 100644 Modules/openssl.include/openssl/evperr.h create mode 100644 Modules/openssl.include/openssl/fips_names.h create mode 100644 Modules/openssl.include/openssl/fipskey.h create mode 100644 Modules/openssl.include/openssl/hmac.h create mode 100644 Modules/openssl.include/openssl/hpke.h create mode 100644 Modules/openssl.include/openssl/http.h create mode 100644 Modules/openssl.include/openssl/httperr.h create mode 100644 Modules/openssl.include/openssl/idea.h create mode 100644 Modules/openssl.include/openssl/indicator.h create mode 100644 Modules/openssl.include/openssl/kdf.h create mode 100644 Modules/openssl.include/openssl/kdferr.h create mode 100644 Modules/openssl.include/openssl/lhash.h create mode 100644 Modules/openssl.include/openssl/macros.h create mode 100644 Modules/openssl.include/openssl/md2.h create mode 100644 Modules/openssl.include/openssl/md4.h create mode 100644 Modules/openssl.include/openssl/md5.h create mode 100644 Modules/openssl.include/openssl/mdc2.h create mode 100644 Modules/openssl.include/openssl/ml_kem.h create mode 100644 Modules/openssl.include/openssl/modes.h create mode 100644 Modules/openssl.include/openssl/obj_mac.h create mode 100644 Modules/openssl.include/openssl/objects.h create mode 100644 Modules/openssl.include/openssl/objectserr.h create mode 100644 Modules/openssl.include/openssl/ocsp.h create mode 100644 Modules/openssl.include/openssl/ocsperr.h create mode 100644 Modules/openssl.include/openssl/opensslconf.h create mode 100644 Modules/openssl.include/openssl/opensslv.h create mode 100644 Modules/openssl.include/openssl/ossl_typ.h create mode 100644 Modules/openssl.include/openssl/param_build.h create mode 100644 Modules/openssl.include/openssl/params.h create mode 100644 Modules/openssl.include/openssl/pem.h create mode 100644 Modules/openssl.include/openssl/pem2.h create mode 100644 Modules/openssl.include/openssl/pemerr.h create mode 100644 Modules/openssl.include/openssl/pkcs12.h create mode 100644 Modules/openssl.include/openssl/pkcs12err.h create mode 100644 Modules/openssl.include/openssl/pkcs7.h create mode 100644 Modules/openssl.include/openssl/pkcs7err.h create mode 100644 Modules/openssl.include/openssl/prov_ssl.h create mode 100644 Modules/openssl.include/openssl/proverr.h create mode 100644 Modules/openssl.include/openssl/provider.h create mode 100644 Modules/openssl.include/openssl/quic.h create mode 100644 Modules/openssl.include/openssl/rand.h create mode 100644 Modules/openssl.include/openssl/randerr.h create mode 100644 Modules/openssl.include/openssl/rc2.h create mode 100644 Modules/openssl.include/openssl/rc4.h create mode 100644 Modules/openssl.include/openssl/rc5.h create mode 100644 Modules/openssl.include/openssl/ripemd.h create mode 100644 Modules/openssl.include/openssl/rsa.h create mode 100644 Modules/openssl.include/openssl/rsaerr.h create mode 100644 Modules/openssl.include/openssl/safestack.h create mode 100644 Modules/openssl.include/openssl/seed.h create mode 100644 Modules/openssl.include/openssl/self_test.h create mode 100644 Modules/openssl.include/openssl/sha.h create mode 100644 Modules/openssl.include/openssl/srp.h create mode 100644 Modules/openssl.include/openssl/srtp.h create mode 100644 Modules/openssl.include/openssl/ssl.h create mode 100644 Modules/openssl.include/openssl/ssl2.h create mode 100644 Modules/openssl.include/openssl/ssl3.h create mode 100644 Modules/openssl.include/openssl/sslerr.h create mode 100644 Modules/openssl.include/openssl/sslerr_legacy.h create mode 100644 Modules/openssl.include/openssl/stack.h create mode 100644 Modules/openssl.include/openssl/store.h create mode 100644 Modules/openssl.include/openssl/storeerr.h create mode 100644 Modules/openssl.include/openssl/symhacks.h create mode 100644 Modules/openssl.include/openssl/thread.h create mode 100644 Modules/openssl.include/openssl/tls1.h create mode 100644 Modules/openssl.include/openssl/trace.h create mode 100644 Modules/openssl.include/openssl/ts.h create mode 100644 Modules/openssl.include/openssl/tserr.h create mode 100644 Modules/openssl.include/openssl/txt_db.h create mode 100644 Modules/openssl.include/openssl/types.h create mode 100644 Modules/openssl.include/openssl/ui.h create mode 100644 Modules/openssl.include/openssl/uierr.h create mode 100644 Modules/openssl.include/openssl/whrlpool.h create mode 100644 Modules/openssl.include/openssl/x509.h create mode 100644 Modules/openssl.include/openssl/x509_acert.h create mode 100644 Modules/openssl.include/openssl/x509_vfy.h create mode 100644 Modules/openssl.include/openssl/x509err.h create mode 100644 Modules/openssl.include/openssl/x509v3.h create mode 100644 Modules/openssl.include/openssl/x509v3err.h create mode 100644 Modules/openssl.lib/libcrypto.def create mode 100644 Modules/openssl.lib/libcrypto.lib create mode 100644 Modules/openssl.lib/libssl.def create mode 100644 Modules/openssl.lib/libssl.lib create mode 100644 Modules/openssl.lib/libssl_static.lib create mode 100644 Modules/sqlite.include/Makefile.fallback create mode 100644 Modules/sqlite.include/Makefile.in create mode 100644 Modules/sqlite.include/Makefile.msc create mode 100644 Modules/sqlite.include/README.txt create mode 100644 Modules/sqlite.include/Replace.cs create mode 100644 Modules/sqlite.include/VERSION create mode 100644 Modules/sqlite.include/auto.def create mode 100644 Modules/sqlite.include/autosetup/LICENSE create mode 100644 Modules/sqlite.include/autosetup/README.autosetup create mode 100644 Modules/sqlite.include/autosetup/README.md create mode 100644 Modules/sqlite.include/autosetup/autosetup create mode 100644 Modules/sqlite.include/autosetup/autosetup-config.guess create mode 100644 Modules/sqlite.include/autosetup/autosetup-config.sub create mode 100644 Modules/sqlite.include/autosetup/autosetup-find-tclsh create mode 100644 Modules/sqlite.include/autosetup/autosetup-test-tclsh create mode 100644 Modules/sqlite.include/autosetup/cc-db.tcl create mode 100644 Modules/sqlite.include/autosetup/cc-lib.tcl create mode 100644 Modules/sqlite.include/autosetup/cc-shared.tcl create mode 100644 Modules/sqlite.include/autosetup/cc.tcl create mode 100644 Modules/sqlite.include/autosetup/find_tclconfig.tcl create mode 100644 Modules/sqlite.include/autosetup/jimsh0.c create mode 100644 Modules/sqlite.include/autosetup/pkg-config.tcl create mode 100644 Modules/sqlite.include/autosetup/proj.tcl create mode 100644 Modules/sqlite.include/autosetup/sqlite-config.tcl create mode 100644 Modules/sqlite.include/autosetup/system.tcl create mode 100644 Modules/sqlite.include/autosetup/teaish/README.txt create mode 100644 Modules/sqlite.include/autosetup/teaish/core.tcl create mode 100644 Modules/sqlite.include/autosetup/teaish/feature.tcl create mode 100644 Modules/sqlite.include/autosetup/teaish/tester.tcl create mode 100644 Modules/sqlite.include/configure create mode 100644 Modules/sqlite.include/shell.c create mode 100644 Modules/sqlite.include/sqlite3.1 create mode 100644 Modules/sqlite.include/sqlite3.c create mode 100644 Modules/sqlite.include/sqlite3.h create mode 100644 Modules/sqlite.include/sqlite3.pc.in create mode 100644 Modules/sqlite.include/sqlite3.rc create mode 100644 Modules/sqlite.include/sqlite3ext.h create mode 100644 Modules/sqlite.include/sqlite3rc.h create mode 100644 Modules/sqlite.include/tea/Makefile.in create mode 100644 Modules/sqlite.include/tea/README.txt create mode 100644 Modules/sqlite.include/tea/_teaish.tester.tcl.in create mode 100644 Modules/sqlite.include/tea/auto.def create mode 100644 Modules/sqlite.include/tea/configure create mode 100644 Modules/sqlite.include/tea/generic/tclsqlite3.c create mode 100644 Modules/sqlite.include/tea/license.terms create mode 100644 Modules/sqlite.include/tea/pkgIndex.tcl.in create mode 100644 Modules/sqlite.include/tea/teaish.tcl create mode 100644 Modules/sqlite.include/tea/teaish.test.tcl create mode 100644 Modules/sqlite.lib/sqlite3.def create mode 100644 Modules/sqlite.lib/sqlite3.dll create mode 100644 Modules/sqlite.lib/sqlite3.exp create mode 100644 Modules/sqlite.lib/sqlite3.lib create mode 100644 TeacherSalaryMgmt.cpp create mode 100644 TeacherSalaryMgmt.slnx create mode 100644 TeacherSalaryMgmt.vcxproj create mode 100644 TeacherSalaryMgmt.vcxproj.filters create mode 100644 database.db diff --git a/Modules/.vscode/c_cpp_properties.json b/Modules/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..a3d4300 --- /dev/null +++ b/Modules/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "C:/msys64/ucrt64/bin/gcc.exe", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Modules/.vscode/launch.json b/Modules/.vscode/launch.json new file mode 100644 index 0000000..94c17ab --- /dev/null +++ b/Modules/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": true, + "cwd": "c:/Users/Nanami114/Desktop/Sources/Project-SoulSim/Desktop/Windows/Server/main/Modules", + "program": "c:/Users/Nanami114/Desktop/Sources/Project-SoulSim/Desktop/Windows/Server/main/Modules/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/Modules/.vscode/settings.json b/Modules/.vscode/settings.json new file mode 100644 index 0000000..c9e66f1 --- /dev/null +++ b/Modules/.vscode/settings.json @@ -0,0 +1,59 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/Modules/Logger.cpp b/Modules/Logger.cpp new file mode 100644 index 0000000..7bd3b62 --- /dev/null +++ b/Modules/Logger.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern int isDebug; // 0 = OFF, 1 = ON + +std::string colorOut_256(std::string_view s, int ForeColor = 7) +{ + std::ostringstream oss; + oss << "\033[38;5;" << ForeColor << "m" << s << "\033[m"; + return oss.str(); +} + +std::string getSystemTime() { + using namespace std::chrono; + const auto now = system_clock::now(); + const auto now_time_t = system_clock::to_time_t(now); + const auto ms = duration_cast(now.time_since_epoch()).count() % 1000; + + std::tm ltm{}; + localtime_s(<m, &now_time_t); + std::ostringstream oss; + oss << std::put_time(<m, "%Y-%m-%d %H:%M:%S") + << '.' << std::setw(3) << std::setfill('0') << ms; + return oss.str(); +} + +// Logger mutex to ensure whole log lines are emitted atomically +static std::mutex loggerMutex; + +void postLog(const std::string& message, int level) { + const auto timeNow = getSystemTime(); + + constexpr std::array levelNames = {"DEBUG", "INFO", "WARNING", "ERROR", "FATAL"}; + constexpr std::array levelColors = {34, 27, 220, 196, 124}; + + const int idx = (level >= 0 && level < static_cast(levelNames.size())) ? level : 1; // default to INFO + + // Lock to make reading isDebug and all output atomic across threads + std::scoped_lock lock(loggerMutex); + + if (isDebug == 0) { + if (idx == 0) return; // skip DEBUG when debug is off + std::cout << "[" << timeNow << " - " << levelNames[idx] << "] " << message << "\n"; + return; + } + + // isDebug == 1 -> colored output + const std::string levelDisplay = colorOut_256(levelNames[idx], levelColors[idx]); + std::ostream& out = (idx >= 3) ? static_cast(std::cerr) : static_cast(std::cout); + out << "[" << timeNow << " - " << levelDisplay << "] " << message << "\n"; +} \ No newline at end of file diff --git a/Modules/Logger.h b/Modules/Logger.h new file mode 100644 index 0000000..e12ce69 --- /dev/null +++ b/Modules/Logger.h @@ -0,0 +1,9 @@ +#ifndef LOGGER_H +#define LOGGER_H + +#include + +void getSystemTime(); +void postLog(const std::string& message, int level); + +#endif \ No newline at end of file diff --git a/Modules/dbActions.cpp b/Modules/dbActions.cpp new file mode 100644 index 0000000..ab0878c --- /dev/null +++ b/Modules/dbActions.cpp @@ -0,0 +1,237 @@ +#include +#include +#include +#include "Logger.h" +#include + +bool db_exec(sqlite3* targetDB, const char* command) { + char* errMsg = nullptr; + int rc = sqlite3_exec(targetDB, command, 0, 0, &errMsg); + if (rc != SQLITE_OK) { + postLog("[SQLite] SQL error: " + std::string(errMsg), 4); + sqlite3_free(errMsg); + return false; + } + return true; +} + +bool db_addItem(sqlite3* targetDB, std::string targetTable, int id, std::string sector, std::string value) { + if (!targetDB) { + postLog("[SQLite] targetDB is null.", 3); + return false; + } + char* sql = nullptr; + if (targetTable == "users") { + sql = sqlite3_mprintf( + "INSERT INTO users (userId, %Q) VALUES (%d, %Q);", + sector.c_str(), + id, + value.c_str() + ); + } + else if (targetTable == "salaryForm") { + sql = sqlite3_mprintf( + "INSERT INTO salaryForm (teacherId, %Q) VALUES (%d, %Q);", + sector.c_str(), + id, + value.c_str() + ); + } + else if (targetTable == "teacherInfo") { + sql = sqlite3_mprintf( + "INSERT INTO teacherInfo (teacherId, %Q) VALUES (%d, %Q);", + sector.c_str(), + id, + value.c_str() + ); + } + else { + postLog("[SQLite] Unknown target table.", 3); + return false; + } + + + if (!sql) { + postLog("[SQLite] Failed to allocate SQL string.", 3); + return false; + } + + char* errMsg = nullptr; + int rc = sqlite3_exec(targetDB, sql, 0, 0, &errMsg); + + sqlite3_free(sql); + + if (rc != SQLITE_OK) { + postLog(std::string("[SQLite] Failed to add item: ") + (errMsg ? errMsg : "unknown error"), 3); + if (errMsg) sqlite3_free(errMsg); + return false; + } + + return true; +} + +bool db_updateItem(sqlite3* targetDB, std::string targetTable, int id, std::string sector, std::string value) { + if (!targetDB) { + postLog("[SQLite] targetDB is null.", 3); + return false; + } + char* sql = nullptr; + if (targetTable == "users"){ + sql = sqlite3_mprintf( + "UPDATE users SET %s=\'%s\' WHERE userId=%d;", + sector.c_str(), + value.c_str(), + id + ); + } + else if (targetTable == "salaryForm") { + sql = sqlite3_mprintf( + "UPDATE salaryForm SET %s=\'%s\' WHERE teacherId=%d;", + sector.c_str(), + value.c_str(), + id + ); + } + else if (targetTable == "teacherInfo") { + sql = sqlite3_mprintf( + "UPDATE teacherInfo SET %s=\'%s\' WHERE teacherId=%d;", + sector.c_str(), + value.c_str(), + id + ); + } + else { + postLog("[SQLite] Unknown target table.", 3); + return false; + } + + + if (!sql) { + postLog("[SQLite] Failed to allocate SQL string.", 3); + return false; + } + + char* errMsg = nullptr; + int rc = sqlite3_exec(targetDB, sql, 0, 0, &errMsg); + + sqlite3_free(sql); + + if (rc != SQLITE_OK) { + postLog(std::string("[SQLite] Failed to add item: ") + (errMsg ? errMsg : "unknown error"), 3); + if (errMsg) sqlite3_free(errMsg); + return false; + } + + return true; +} + +bool db_rmItem(sqlite3* targetDB, std::string targetTable, int id) { + if (!targetDB) { + postLog("[SQLite] targetDB is null.", 3); + return false; + } + char* sql = sqlite3_mprintf( + "DELETE FROM %s WHERE teacherId = %d;", + targetTable.c_str(), + id + ); + if (!sql) { + postLog("[SQLite] Failed to allocate SQL string.", 3); + return false; + } + char* errMsg = nullptr; + int rc = sqlite3_exec(targetDB, sql, 0, 0, &errMsg); + + sqlite3_free(sql); + if (rc != SQLITE_OK) { + postLog(std::string("[SQLite] Failed to remove item: ") + (errMsg ? errMsg : "unknown error"), 3); + if (errMsg) sqlite3_free(errMsg); + return false; + } + return true; +} + +std::string db_getItem(sqlite3* sourceDB, std::string sourceTable, std::string itemType, int itemID) { + if (!sourceDB) { + postLog("[SQLite] sourceDB is null.", 3); + return ""; + } + + std::string command; + if (sourceTable == "users") { + command = "SELECT " + itemType + " FROM users WHERE userId = " + std::to_string(itemID) + ";"; + } else if (sourceTable == "salaryForm") { + command = "SELECT " + itemType + " FROM salaryForm WHERE teacherId = " + std::to_string(itemID) + ";"; + } + else if (sourceTable == "teacherInfo") { + command = "SELECT " + itemType + " FROM teacherInfo WHERE teacherId = " + std::to_string(itemID) + ";"; + } + else { + postLog("[SQLite] Unknown table in db_getItem.", 3); + return ""; + } + + sqlite3_stmt* stmt = nullptr; + int rc = sqlite3_prepare_v2(sourceDB, command.c_str(), -1, &stmt, nullptr); + if (rc != SQLITE_OK) { + postLog(std::string("[SQLite] Precompiling failed: ") + sqlite3_errmsg(sourceDB), 3); + if (stmt) sqlite3_finalize(stmt); + return ""; + } + + std::string result; + rc = sqlite3_step(stmt); + if (rc == SQLITE_ROW) { + const unsigned char* txt = sqlite3_column_text(stmt, 0); + if (txt) result = reinterpret_cast(txt); + } else if (rc == SQLITE_DONE) { + postLog("[SQLite] Failed to find specific ID [" + std::to_string(itemID) + "]", 3); + result = "err: no specific id"; + } else { + postLog(std::string("[SQLite] Step error: ") + sqlite3_errmsg(sourceDB), 4); + } + + sqlite3_finalize(stmt); + return result; +} + +std::string db_findIdBy(sqlite3* sourceDB, std::string sourceTable, std::string itemType, std::string value) { + if (!sourceDB) { + postLog("[SQLite] sourceDB is null.", 3); + return "0"; + } + + const std::string idCol = (sourceTable == "users") ? "userId" : "teacherId"; + std::string sql = "SELECT " + idCol + " FROM " + sourceTable + " WHERE " + itemType + " = ?;"; + + sqlite3_stmt* stmt = nullptr; + if (sqlite3_prepare_v2(sourceDB, sql.c_str(), -1, &stmt, nullptr) != SQLITE_OK) { + postLog(std::string("[SQLite] Precompiling failed: ") + sqlite3_errmsg(sourceDB), 3); + return "0"; + } + + // Bind the value: numeric vs text + bool isNumber = !value.empty() && std::all_of(value.begin(), value.end(), [](unsigned char ch){ + return std::isdigit(ch) != 0; + }); + if (isNumber) { + sqlite3_bind_int(stmt, 1, std::stoi(value)); + } else { + sqlite3_bind_text(stmt, 1, value.c_str(), -1, SQLITE_TRANSIENT); + } + + std::string result; + int rc = sqlite3_step(stmt); + if (rc == SQLITE_ROW) { + const unsigned char* txt = sqlite3_column_text(stmt, 0); + if (txt) result = reinterpret_cast(txt); + } else if (rc == SQLITE_DONE) { + postLog("[SQLite] Failed to find specific ID by content [" + itemType + ":" + value + "]", 3); + result = "0"; + } else { + postLog(std::string("[SQLite] Step error: ") + sqlite3_errmsg(sourceDB), 4); + } + + sqlite3_finalize(stmt); + return result; +} \ No newline at end of file diff --git a/Modules/dbActions.h b/Modules/dbActions.h new file mode 100644 index 0000000..1f4627d --- /dev/null +++ b/Modules/dbActions.h @@ -0,0 +1,15 @@ +#ifndef DBACTIONS_H +#define DBACTIONS_H +#include +#include +#include +#include "Logger.h" + +bool db_exec(sqlite3* targetDB, const char* command); +bool db_updateItem(sqlite3* targetDB, std::string targetTable, int id, std::string sector, std::string value); +bool db_rmItem(sqlite3* targetDB, std::string targetTable, int id); +bool db_addItem(sqlite3* targetDB, std::string targetTable, int id, std::string sector, std::string value); +std::string db_findIdBy(sqlite3* sourceDB, std::string sourceTable, std::string itemType, std::string value); +std::string db_getItem(sqlite3* sourceDB, std::string sourceTable, std::string itemType, int itemID); + +#endif \ No newline at end of file diff --git a/Modules/example/getAddr/app.js b/Modules/example/getAddr/app.js new file mode 100644 index 0000000..40e5160 --- /dev/null +++ b/Modules/example/getAddr/app.js @@ -0,0 +1,38 @@ +const http = require('http'); +const httpPort = 8766; + +const data = JSON.stringify({ + cmdType: 'getAddr', + addrType: 'server.main' +}); + +const options ={ + hostname: 'localhost', + port: httpPort, + path: '/', + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': Buffer.byteLength(data) + } +} + +const req = http.request(options, (res) => { + console.log(`Status code: ${res.statusCode}`); + + let responseData = ''; + res.on('data', (chunk) => { + responseData += chunk; + }); + + res.on('end', () => { + console.log(`Response data: ${responseData}`); + }); +}); + +req.on('error', (error) => { + console.error(`Error: ${error.message}`); +}); + +req.write(data); +req.end(); \ No newline at end of file diff --git a/Modules/example/getAddr/package.json b/Modules/example/getAddr/package.json new file mode 100644 index 0000000..926b663 --- /dev/null +++ b/Modules/example/getAddr/package.json @@ -0,0 +1,12 @@ +{ + "name": "getaddr", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/Modules/globalLinkTransfer/app.js b/Modules/globalLinkTransfer/app.js new file mode 100644 index 0000000..679ee54 --- /dev/null +++ b/Modules/globalLinkTransfer/app.js @@ -0,0 +1,297 @@ +const http = require('http'); +const net = require('net'); +const { postLog } = require('./logger.js'); + +const server_main_addr = 'localhost'; +const tcpPort = 50011; +const httpPort = 8766; +let ipAddr_server_main = ""; +let ipAddr_service_fileTransfer = ""; +let port_server_main = 0; +let port_service_fileTransfer = 0; +let openlist_host = ''; +let openlist_host_port = 0; +let openlist_username = ''; +let openlist_passwd_hash = ''; +let openlist_token = ''; +let tcpServ_connected = false; +let appinfo_version = '0.0.0.1'; +let appinfo_name = 'globalLinkTransfer Module'; +let appinfo_buildType = 'debug'; +let appinfo_developer = 'MadobiNanami'; +let appinfo_buildDate = '2025-11-18'; + +postLog.info(`${appinfo_name} Ver.${appinfo_version}.${appinfo_buildType}`); +postLog.info(`Developed by ${appinfo_developer} on ${appinfo_buildDate}`); +postLog.info(`Attempting TCP connect to ${server_main_addr}:${tcpPort}`); +const tcpClient = net.createConnection({ // 创建 TCP 客户端 + port: tcpPort, + host: `${server_main_addr}`, + family: 4 + }, () => { + postLog.info('Connected to TCP server'); + postLog.info('Try to verify connection...'); + tcpClient.write('[Dial] Are you really a SoulSim Main Server?'); // 发送验证请求 +}); + +tcpClient.on('data', (data) => { // 监听来自服务器的数据 + postLog.debug('Received from TCP server: ' + data.toString(), 1); + if(tcpServ_connected == false){ // 如果尚未验证连接 + if(data.toString().includes('Yes, I am SoulSim Main Server.')) { // 验证成功 + postLog.info('Connection verified successfully.'); + tcpServ_connected = true; + + // 发送配置 Openlist 请求 + tcpClient.write('[getConfig] openlist'); + return; + } else { + postLog.error('Connection verification failed. Closing connection.'); // 验证失败,关闭连接 + tcpClient.end(); + return; + } +} + + let content = JSON.parse(data.toString()); + if(content.cmdType=='getOneDriveLink'){ // 处理获取 OneDrive 链接请求 + postLog.debug(`Get OneDrive link converte request: ${content.link}`); + processOneDriveLink(`${content.link}`) + .then(link => { + postLog.debug('Processed OneDrive link: ' + link); + tcpClient.write(JSON.stringify({ + cmdType: 'oneDriveLinkResult', + link: link + })); + }) + .catch(err => { + postLog.error('Error processing OneDrive link: ' + err); + tcpClient.write(`[userSet] userGetLink onedrive error ${err}`); + }); + } + if(content.cmdType=='configOpenlist'){ // 处理配置 Openlist 请求 + openlist_host = content.openlist_host; + openlist_host_port = content.openlist_host_port; + openlist_username = content.openlist_username; + openlist_passwd_hash = content.openlist_passwd_hash; + postLog.info('Configured Openlist with host: ' + openlist_host + ', port: ' + openlist_host_port + ', username: ' + openlist_username+', passwd_hash: '+openlist_passwd_hash); + } +}); + +tcpClient.on('end', () => { // 监听 TCP 连接关闭事件 + postLog.warn('Disconnected from TCP server'); +}); + +tcpClient.on('error', (err) => { // 监听错误事件 + postLog.fatal('TCP Client Error: ' + err); +}); + +const server = http.createServer((req, res) => { // 创建 HTTP 服务器 + if (req.method === 'PUT') { // 处理 PUT 请求 + let body = ''; + + req.on('data', chunk => { // 接收数据块 + body += chunk.toString(); + }); + + req.on('end', () => { // 数据接收完毕 + try { + const data = JSON.parse(body); + postLog.debug('Recev Data: ' + JSON.stringify(data)); + if(data.cmdType=='modifyAddr'){ + if(data.token!=='mM2aF1aQ5dW3hA1cE5jL6hM4tN9jA0'){ // 简单的令牌验证 + res.writeHead(403, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ + errorType: '1', + message: 'Invalid token' + })); + return; + } + if(data.serverType=='server.main'&&data.ruleName!=='service_SoulSim-Server'){ // 验证规则名称 + res.writeHead(403, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ + errorType: '2', + message: 'Invalid rule name' + })); + return; + } + if(data.serverType=='service.fileTransfer'&&data.ruleName!=='service_SoulSim-FileTransfer'){ // 验证规则名称 + res.writeHead(403, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ + errorType: '3', + message: 'Invalid rule name' + })); + return; + } + if(data.serverType=='server.main'){ // 更新主服务器地址 + ipAddr_server_main = data.ipAddr; + port_server_main = data.port; + postLog.info('Updated main server address to ' + data.ipAddr + ':' + data.port); + } else if(data.serverType=='service.fileTransfer'){ // 更新文件传输服务地址 + ipAddr_service_fileTransfer = data.ipAddr; + port_service_fileTransfer = data.port; + postLog.info('Updated file transfer server address to ' + data.ipAddr + ':' + data.port); + } + try { + tcpClient.write('[modifyAddr] ' + data.ipAddr + '' + data.port + '' + data.serverType + '' + data.ruleName + ''); // 发送地址修改请求 + res.writeHead(200, { 'Content-Type': 'application/json' }); // 返回成功响应 + res.end(JSON.stringify({ + errorType: '0', + message: 'NicePush!' + })); + } catch (tcpErr) { // 处理 TCP 写入错误 + postLog.error('Failed to write to TCP server: ' + tcpErr); + res.writeHead(500, { 'Content-Type': 'application/json' }); // 返回错误响应 + res.end(JSON.stringify({ + errorType: '4', + message: 'Failed to write to TCP server' + })); + } + } + if(data.cmdType=='getAddr'){ // 处理获取地址请求 + if(data.addrType=='server.main'){ + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ + addrType: 'server.main', + ipAddr: ipAddr_server_main, + port: port_server_main + })); + } else if(data.addrType=='service.fileTransfer'){ + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ + addrType: 'service.fileTransfer', + ipAddr: ipAddr_service_fileTransfer, + port: port_service_fileTransfer + })); + } + } + } catch (error) { + res.writeHead(400, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Invalid JSON data' })); + } + }); + + req.on('error', () => { + res.writeHead(500, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Internal Server Error' })); + }); + } else { + res.writeHead(405, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Method not allowed' })); + } +}); + +server.listen(httpPort, () => { + postLog.info(`Server is running at http://localhost:${httpPort}`); +}); + +function processOneDriveLink(filePath) { + return new Promise((resolve, reject) => { + const body = { + username: `${openlist_username}`, + password: `${openlist_passwd_hash}`, + otp_code: '' + }; + const bodyString = JSON.stringify(body); + + const options = { + hostname: openlist_host, + port: openlist_host_port, + path: '/api/auth/login/hash', + method: 'POST', + headers: { + 'Host': openlist_host + ":" + openlist_host_port, + 'Accept': 'application/json, text/plain, */*', + 'Accept-Language': 'en-US,en;q=0.9', + 'Sec-Ch-Ua-Platform': '"Windows.Server"', + 'Sec-Ch-Ua-Mobile': '?0', + 'User-Agent': 'SoulSim-Server/1.0', + 'Content-Type': 'application/json' + } + }; + + const req = http.request(options, (res) => { + const chunks = []; + res.on('data', (chunk) => { + chunks.push(chunk); + }); + res.on('end', () => { + const data = Buffer.concat(chunks); + let parsed; + try{ + parsed = JSON.parse(data); + // postLog.info('Response data: ' + data.toString()); + } catch (e){ + postLog.error('Failed to convert response to JSON: ' + e); + tcpClient.write(`[userSet] userGetLink onedrive error Failed to convert response to JSON: ${e}`); + postLog.info('Response data: ' + data.toString()); + reject(e); + return; + } + openlist_token = parsed.data.token; + postLog.info('Got token: ' + openlist_token); + const options2 = { + hostname: openlist_host, + port: openlist_host_port, + path: '/api/fs/get', + method: 'POST', + headers: { + 'Host': openlist_host + ":" + openlist_host_port, + 'Accept': 'application/json, text/plain, */*', + 'Accept-Language': 'en-US,en;q=0.9', + 'Sec-Ch-Ua-Platform': '"Windows"', + 'Sec-Ch-Ua-Mobile': '?0', + 'User-Agent': 'SoulSim-Server/1.0', + 'Content-Type': 'application/json', + 'Authorization': `${openlist_token}` + } + } + + const body2 = { + path: `${filePath}`, + password: '' + }; + const body2String = JSON.stringify(body2); + + const req2 = http.request(options2, (res2) => { + const chunks2 = []; + res2.on('data', (chunk2) => { + chunks2.push(chunk2); + }); + res2.on('end', () => { + const data2 = Buffer.concat(chunks2); + try{ + const parsed = JSON.parse(data2); + postLog.debug('Response data: ' + data2.toString()); + const openlist_getAddr = parsed.data.raw_url; + tcpClient.write(`[userSet] userGetLink onedrive success ${openlist_getAddr}`); + // postLog.info(`Get Onedrive Link: ${openlist_getAddr}`); + resolve(openlist_getAddr); + } catch(e) { + postLog.error('Failed to convert response to JSON: ' + e); + tcpClient.write(`[userSet] userGetLink onedrive error Failed to convert response to JSON: ${e}`); + postLog.info('Response data: ' + data2.toString()); + reject(e); + } + }); + }); + + req2.on('error',(err) =>{ + postLog.error('HTTP request error: ' + err); + tcpClient.write(`[userSet] userGetLink onedrive error ${err}`); + reject(err); + }); + + req2.write(body2String); + req2.end(); + }); +}); + + req.on('error', (err) => { + postLog.error('HTTP request error: ' + err); + tcpClient.write(`[userSet] userGetLink onedrive error ${err}`); + reject(err); + }); + + req.write(bodyString); + req.end(); + }); +} \ No newline at end of file diff --git a/Modules/globalLinkTransfer/logger.js b/Modules/globalLinkTransfer/logger.js new file mode 100644 index 0000000..d53d69c --- /dev/null +++ b/Modules/globalLinkTransfer/logger.js @@ -0,0 +1,9 @@ +const postLog={ + debug: (msg) => console.log(`[${new Date().toISOString()} - \x1b[34mDEBUG\x1b[0m] ${msg}`), + info: (msg) => console.log(`[${new Date().toISOString()} - \x1b[32mINFO\x1b[0m] ${msg}`), + warn: (msg) => console.warn(`[${new Date().toISOString()} - \x1b[33mWARN\x1b[0m] ${msg}`), + error: (msg) => console.error(`[${new Date().toISOString()} - \x1b[35mERROR\x1b[0m] ${msg}`), + fatal: (msg) => console.error(`[${new Date().toISOString()} - \x1b[31mFATAL\x1b[0m] ${msg}`) +} + +module.exports = { postLog }; \ No newline at end of file diff --git a/Modules/globalLinkTransfer/package.json b/Modules/globalLinkTransfer/package.json new file mode 100644 index 0000000..e13f962 --- /dev/null +++ b/Modules/globalLinkTransfer/package.json @@ -0,0 +1,11 @@ +{ + "name": "globallinktransfer", + "version": "0.0.1", + "description": "A middleware for parsing http actions", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Team SoulSim", + "license": "ISC" +} diff --git a/Modules/inicpp.hpp b/Modules/inicpp.hpp new file mode 100644 index 0000000..25598d7 --- /dev/null +++ b/Modules/inicpp.hpp @@ -0,0 +1,960 @@ +/* + * MIT License + * + * Copyright (c) 2023 dujingning + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef __JN_INICPP_H__ +#define __JN_INICPP_H__ + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#ifdef _ENBABLE_INICPP_STD_WSTRING_ // Not all of C++ 11 support +// for std::string <==> std::wstring convert +#include +#include +#endif + +#ifdef INICPP_DEBUG + +#include +#include +#include + +class TimeFormatter +{ +public: + static std::string format(const std::string &format = "%Y-%m-%d %H:%M:%S") + { + std::time_t t = std::time(nullptr); + std::tm tm = *std::localtime(&t); + std::array buffer; + std::strftime(buffer.data(), buffer.size(), format.c_str(), &tm); + return buffer.data(); + } +}; + +#define CODE_INFO std::string(" \t``````|") + std::string(__FILE__) + ":" + std::to_string(__LINE__) + " fun:" + std::string(__FUNCTION__) +#define INI_DEBUG(x) std::cout << "INICPP " << TimeFormatter::format() << " : " << x << CODE_INFO << std::endl + +#else // #ifdef INICPP_DEBUG +#define INI_DEBUG(x) +#endif // #ifdef INICPP_DEBUG + +namespace inicpp +{ + + typedef struct ValueNode + { + std::string Value = ""; + int lineNumber = -1; // text line start with 1 + } ValueNode; + + class parentHelper + { + public: + virtual parentHelper *parent() + { + INI_DEBUG("called parentHelper virtual impl: need to impl parent"); + return nullptr; + } + virtual void setParent(parentHelper *parent) + { + INI_DEBUG("called parentHelper virtual impl: need to impl setParent"); + } + virtual bool set(const std::string &Section, const std::string &Key, const std::string &Value, const std::string &comment = "") + { + INI_DEBUG("called parentHelper virtual impl: need to impl set"); + return true; + } + }; + + class ValueProxy + { + public: + ValueProxy(std::string &value) : _value(value) {} + ~ValueProxy() {} + + template + ValueProxy(const T &value) : _value(to_string(value)) {} + + template + static std::string to_string(const T &value) + { + std::ostringstream oss; + oss << value; + return oss.str(); + } + + template + T get() const + { + static_assert(!std::is_pointer::value, "Pointer types are not supported for conversion."); + std::istringstream iss(_value); + T result; + if (!(iss >> result)) + { + throw std::runtime_error("Type mismatch or invalid conversion. with(section-key-value): " +_sectionName +"-"+ _keyName +"-"+ _value); // error notify + } + return result; + } + + operator char() const { return this->get(); } + operator short() const { return this->get(); } + operator int() const { return this->get(); } + operator long() const { return this->get(); } + operator long long() const { return this->get(); } + operator float() const { return this->get(); } + operator double() const { return this->get(); } + + operator unsigned char() const { return this->get(); } + operator unsigned short() const { return this->get(); } + operator unsigned int() const { return this->get(); } + operator unsigned long() const { return this->get(); } + operator unsigned long long() const { return this->get(); } + + // false:'0' or 'false', true : others + operator bool() const + { + if (_value == "0" || _value == "false" || _value == "no") + { + return false; + } + return true; + } + + operator std::string() const + { + return _value; + } + + friend std::ostream &operator<<(std::ostream &os, const ValueProxy &proxy) + { + os << proxy._value; + return os; + } + + // assignment + template + ValueProxy &operator=(const T &other) + { + std::string value = this->to_string(other); + + if (_value != value) + { + set(value); + } + + _value = value; + return *this; + } + + ValueProxy &operator=(const std::string &other) + { + if (_value != other) + { + INI_DEBUG("Value Proxy Wanna Set Value: " << other); + set(other); + } + + _value = other; + return *this; + } + + // specify std::string + const std::string &String() noexcept + { + return _value; + } + + inline void setWriteCB(parentHelper *sectionObj, const std::string §ionName, const std::string &keyName) + { + _section = sectionObj; + _sectionName = sectionName; + _keyName = keyName; + } + + private: + void set(const std::string &value) + { + if (value.empty() || _keyName.empty()) + { + return; + } + if (_section && _section->parent() && _section->parent()->parent()) + { + _section->parent()->parent()->set(_sectionName, _keyName, value); + } + } + + private: + std::string &_value; + + std::string _sectionName, _keyName; + parentHelper *_section = nullptr; + }; +} // namespace inicpp + +namespace inicpp +{ + + class section : parentHelper + { + public: + section() : _sectionName() + { + } + + explicit section(const std::string §ionName) : _sectionName(sectionName) + { + } + + const std::string &name() + { + return _sectionName; + } + + const std::string getValue(const std::string &Key) + { + if (!_sectionMap.count(Key)) + { + return ""; + } + return _sectionMap[Key].Value; + } + + void setName(const std::string &name, const int &lineNumber) + { + _sectionName = name; + _lineNumber = lineNumber; + } + + void setValue(const std::string &Key, const std::string &Value, const int line) + { + _sectionMap[Key].Value = Value; + _sectionMap[Key].lineNumber = line; + } + + void append(section &sec) + { + _sectionMap.insert(sec._sectionMap.begin(), sec._sectionMap.end()); + } + + bool isKeyExist(const std::string &Key) + { + return !_sectionMap.count(Key) ? false : true; + } + + int getEndSection() + { + int line = -1; + + if (_sectionMap.empty() && _sectionName != "") + { + return _lineNumber; + } + + for (const auto &data : _sectionMap) + { + if (data.second.lineNumber > line) + { + line = data.second.lineNumber; + } + } + return line; + } + + int getLine(const std::string &Key) + { + if (!_sectionMap.count(Key)) + { + return -1; + } + return _sectionMap[Key].lineNumber; + } + + void clear() + { + _lineNumber = -1; + _sectionName.clear(); + _sectionMap.clear(); + } + + bool isEmpty() const + { + return _sectionMap.empty(); + } + + int toInt(const std::string &Key) noexcept + { + if (!_sectionMap.count(Key)) + { + return 0; + } + + int result = 0; + + try + { + result = std::stoi(_sectionMap[Key].Value); + } + catch (const std::invalid_argument &e) + { + INI_DEBUG("Invalid argument: " << e.what() << ",input:\'" << _sectionMap[Key].Value << "\'"); + } + catch (const std::out_of_range &e) + { + INI_DEBUG("Out of range: " << e.what() << ",input:\'" << _sectionMap[Key].Value << "\'"); + } + + return result; + } + + std::string toString(const std::string &Key) noexcept + { + if (!_sectionMap.count(Key)) + { + return ""; + } + return _sectionMap[Key].Value; + } + +#ifdef _ENBABLE_INICPP_STD_WSTRING_ + std::wstring toWString(const std::string &Key) + { + std::wstring_convert> converter; + return converter.from_bytes(toString(Key)); + } +#endif + + double toDouble(const std::string &Key) noexcept + { + if (!_sectionMap.count(Key)) + { + return 0.0; + } + + double result = 0.0; + + try + { + result = std::stod(_sectionMap[Key].Value); + } + catch (const std::invalid_argument &e) + { + INI_DEBUG("Invalid argument: " << e.what() << ",input:\'" << _sectionMap[Key].Value << "\'"); + } + catch (const std::out_of_range &e) + { + INI_DEBUG("Out of range: " << e.what() << ",input:\'" << _sectionMap[Key].Value << "\'"); + } + + return result; + } + + std::map getSectionMap() + { + std::map sectionKVMap; + + for (auto &iter : _sectionMap) + { + sectionKVMap[iter.first] = iter.second.Value; + } + + return sectionKVMap; + } + + // Automatically converts to any type; throws std::runtime_error if not found or conversion fails + ValueProxy operator[](const std::string &Key) + { + ValueProxy vp(_sectionMap[Key].Value); + + vp.setWriteCB(this, _sectionName, Key); + + return vp; + } + + inline parentHelper *parent() override { return _parent; }; + inline void setParent(parentHelper *parent) override { _parent = parent; }; + + private: + std::string _sectionName; + std::map _sectionMap; + int _lineNumber = -1; // text line start with 1 + + parentHelper *_parent = nullptr; + }; + + class ini : parentHelper + { + public: + void addSection(section &sec) + { + if (_iniInfoMap.count(sec.name())) // if exist,need to merge + { + _iniInfoMap[sec.name()].append(sec); + return; + } + _iniInfoMap.emplace(sec.name(), sec); + return; + } + + void removeSection(const std::string §ionName) + { + if (!_iniInfoMap.count(sectionName)) + { + return; + } + _iniInfoMap.erase(sectionName); + return; + } + + bool isSectionExists(const std::string §ionName) + { + return !_iniInfoMap.count(sectionName) ? false : true; + } + + // may contains default of Unnamed section with "" + std::list getSectionsList() + { + std::list sectionList; + for (const auto &data : _iniInfoMap) + { + if (data.first == "" && data.second.isEmpty()) // default section: no section name,if empty,not count it. + { + continue; + } + sectionList.emplace_back(data.first); + } + return sectionList; + } + + std::map getSectionMap(const std::string §ionName) + { + std::map kvMap; + if (_iniInfoMap.count(sectionName) == 0) + { + return kvMap; + } + return _iniInfoMap[sectionName].getSectionMap(); + } + + const section &operator[](const std::string §ionName) + { + _iniInfoMap[sectionName].setParent(this); + + if (_iniInfoMap[sectionName].name().empty()) + { + _iniInfoMap[sectionName].setName(sectionName, -1); + } + + return _iniInfoMap[sectionName]; + } + + inline std::size_t getSectionSize() + { + return _iniInfoMap.size(); + } + + std::string getValue(const std::string §ionName, const std::string &Key) + { + if (!_iniInfoMap.count(sectionName)) + { + return ""; + } + return _iniInfoMap[sectionName][Key]; + } + + // for none section + int getLine(const std::string &Key) + { + if (!_iniInfoMap.count("")) + { + return -1; + } + return _iniInfoMap[""].getLine(Key); + } + + // for section-key + int getLine(const std::string §ionName, const std::string &Key) + { + if (!_iniInfoMap.count(sectionName)) + { + return -1; + } + return _iniInfoMap[sectionName].getLine(Key); + } + + inline void clear() { _iniInfoMap.clear(); } + inline bool empty() { return _iniInfoMap.empty(); } + + parentHelper *parent() override { return _parent; } + void setParent(parentHelper *parent) override { _parent = parent; } + + protected: + std::map _iniInfoMap; + + private: + parentHelper *_parent = nullptr; + }; + + class IniManager : parentHelper + { + public: +#ifdef _ENBABLE_INICPP_STD_WSTRING_ + explicit IniManager(const std::wstring &configFileName = L"") + { + std::wstring_convert> converter; + std::string stringValue = converter.to_bytes(configFileName); + _configFileName = stringValue; + + _iniData.setParent(this); + parse(); + } +#else + explicit IniManager(const std::string &configFileName = "") : _configFileName(configFileName) + { + _iniData.setParent(this); + + parse(); + } +#endif + ~IniManager() + { + _iniFile.close(); + } + + section operator[](const std::string §ionName) + { + return _iniData[sectionName]; + } + + void parse() + { + if (_configFileName.empty()) + { + return; + } + + if (!_iniFile.is_open()) + { + _iniFile.clear(); + _iniFile.open(_configFileName, std::ifstream::in | std::ifstream::out | std::fstream::app); + } + + if (!_iniFile.is_open()) + { + INI_DEBUG("Failed to open(WR),try to open with readonly(R)."); + _iniFile.clear(); + _iniFile.open(_configFileName, std::ifstream::in); + } + + if (!_iniFile.is_open()) + { + INI_DEBUG("Failed to open the input INI file for parsing! file:" << _configFileName); + return; + } + + _iniData.clear(); + + _iniFile.seekg(0, _iniFile.beg); + std::string data, sectionName; + int sectionLine = -1; + + section sectionRecord; + + _SumOfLines = 1; + do + { + std::getline(_iniFile, data); + + if (!filterData(data)) + { + ++_SumOfLines; + continue; + } + + if (data.find('[') == 0) // section + { + if (!sectionRecord.isEmpty() || sectionRecord.name() != "") + { + _iniData.addSection(sectionRecord); + } + + size_t first = data.find('['); + size_t last = data.find(']'); + + if (last == std::string::npos) + { + ++_SumOfLines; + continue; + } + + sectionName = data.substr(first + 1, last - first - 1); + sectionLine = _SumOfLines; + + sectionRecord.clear(); + sectionRecord.setName(sectionName, sectionLine); + } + + size_t pos = data.find('='); + if (pos != std::string::npos) + { // k=v + std::string key = data.substr(0, pos); + std::string value = data.substr(pos + 1); + + trimEdges(key); + trimEdges(value); + + sectionRecord.setValue(key, value, _SumOfLines); + } + + ++_SumOfLines; + + } while (!_iniFile.eof()); + + if (!sectionRecord.isEmpty()) + { + sectionRecord.setName(sectionName, -1); + _iniData.addSection(sectionRecord); + } + + if (_iniFile.is_open()) + { + _iniFile.close(); + } + } + + bool set(const std::string &Section, const std::string &Key, const std::string &Value, const std::string &comment = "") override + { + parse(); + + std::string key = Key, value = Value; + + trimEdges(key); + trimEdges(key); + + if (key == "" || value == "") + { + INI_DEBUG("Invalid parameter input: key[" << key << "],value[" << value << "]"); + return false; + } + + std::string keyValueData = key + "=" + value + "\n"; + if (comment.length() > 0) + { + keyValueData = comment + "\n" + keyValueData; + if (comment[0] != ';') + { + keyValueData = ";" + keyValueData; + } + } + + const std::string &tempFile = ".temp.ini"; + std::fstream input(_configFileName, std::ifstream::in); + std::ofstream output(tempFile); + + if (!input.is_open()) + { + INI_DEBUG("Failed to open the input INI file for modification! File name:" << _configFileName); + return false; + } + + if (!output.is_open()) + { + INI_DEBUG("Failed to open the output INI file for modification!"); + return false; + } + + int line_number_mark = -1; + bool isInputDataWited = false; + + do + { + // exist key at one section replace it, or need to create it + if (_iniData.isSectionExists(Section)) + { + line_number_mark = (*this)[Section].getLine(key); + + if (line_number_mark == -1) + { // section exist, key not exist + line_number_mark = (*this)[Section].getEndSection(); + + std::string lineData; + int input_line_number = 0; + while (std::getline(input, lineData)) + { + ++input_line_number; + + if (input_line_number == (line_number_mark + 1)) + { // new line,append to next line + isInputDataWited = true; + output << keyValueData; + } + + output << lineData << "\n"; + } + + if (input.eof() && !isInputDataWited) + { + isInputDataWited = true; + output << keyValueData; + } + + break; + } + } + + if (line_number_mark <= 0) // not found key at config file + { + input.seekg(0, input.beg); + + bool isHoldSection = false; + std::string newLine = "\n\n"; + if (Section != "" && Section.find("[") == std::string::npos && Section.find("]") == std::string::npos && Section.find("=") == std::string::npos) + { + if (_iniData.empty() || _iniData.getSectionSize() <= 0) + { + newLine.clear(); + } + + isHoldSection = true; + } + + // 1.section is exist or empty section + if (_iniData.isSectionExists(Section) || Section == "") + { + // write key/value to head + if (isHoldSection) + { + output << newLine << "[" << Section << "]" << "\n"; + } + output << keyValueData; + // write others + std::string lineData; + while (std::getline(input, lineData)) + { + output << lineData << "\n"; + } + } + // 2.section is not exist + else + { + // write others + std::string lineData; + while (std::getline(input, lineData)) + { + output << lineData << "\n"; + } + // write key/value to end + if (isHoldSection) + { + output << newLine << "[" << Section << "]" << "\n"; + } + output << keyValueData; + } + + break; + } + else + { // found, replace it + + std::string lineData; + int input_line_number = 0; + + while (std::getline(input, lineData)) + { + ++input_line_number; + + // delete old comment if new comment is set + if (input_line_number == (line_number_mark - 1) && lineData.length() > 0 && lineData[0] == ';' && comment != "") + { + continue; + } + + if (input_line_number == line_number_mark) + { // replace to this line + output << keyValueData; + } + else + { + output << lineData << "\n"; + } + } + break; + } + + INI_DEBUG("error! inicpp lost process of set function"); + return false; + + } while (false); + + // clear work + input.close(); + output.close(); + + std::remove(_configFileName.c_str()); + std::rename(tempFile.c_str(), _configFileName.c_str()); + + // reload + parse(); + + return true; + } + + bool set(const std::string &Section, const std::string &Key, const int Value, const std::string &comment = "") + { + std::string stringValue = std::to_string(Value); + return set(Section, Key, stringValue, comment); + } + + bool set(const std::string &Section, const std::string &Key, const double &Value, const std::string &comment = "") + { + std::string stringValue = std::to_string(Value); + return set(Section, Key, stringValue, comment); + } + + bool set(const std::string &Section, const std::string &Key, const char &Value, const std::string &comment = "") + { + std::string stringValue = ValueProxy::to_string(Value); + return set(Section, Key, stringValue, comment); + } + + // no sections: head of config file + bool set(const std::string &Key, const std::string &Value) + { + return set("", Key, Value, ""); + } + bool set(const std::string &Key, const char *Value) + { + return set("", Key, Value, ""); + } + template + bool set(const std::string &Key, const T &Value) + { + std::string stringValue = std::to_string(Value); + return set("", Key, stringValue, ""); + } + +#ifdef _ENBABLE_INICPP_STD_WSTRING_ + bool set(const std::string &Section, const std::string &Key, const std::wstring &Value, const std::string &comment = "") + { + std::wstring_convert> converter; + std::string stringValue = converter.to_bytes(Value); + + return set(Section, Key, stringValue, comment); + } +#endif + // comment for section name of key + bool setComment(const std::string &Section, const std::string &Key, const std::string &comment) + { + return set(Section, Key, (*this)[Section].toString(Key), comment); + } + // comment for no section name of key + bool setComment(const std::string &Key, const std::string &comment) + { + return set("", Key, (*this)[""].toString(Key), comment); + } + + bool isSectionExists(const std::string §ionName) + { + return _iniData.isSectionExists(sectionName); + } + + inline std::list sectionsList() + { + return _iniData.getSectionsList(); + } + + inline std::map sectionMap(const std::string §ionName) + { + return _iniData.getSectionMap(sectionName); + } + +#ifdef _ENBABLE_INICPP_STD_WSTRING_ + void setFileName(const std::wstring &fileName) + { + std::wstring_convert> converter; + std::string name = converter.to_bytes(fileName); + + _configFileName = name; + } +#else + void setFileName(const std::string &fileName) + { + _configFileName = fileName; + } +#endif + + private: + bool filterData(std::string &data) + { + if (data.length() == 0) + { + return false; + } + + if (data[0] == ';') + { + return false; + } + + if (data[0] == '#') + { + return false; + } + + return true; + } + + void trimEdges(std::string &data) + { + // remove left ' ' and '\t' + data.erase(data.begin(), std::find_if(data.begin(), data.end(), [](unsigned char c) + { return !std::isspace(c); })); + // remove right ' ' and '\t' + data.erase(std::find_if(data.rbegin(), data.rend(), [](unsigned char c) + { return !std::isspace(c); }) + .base(), + data.end()); + + // INI_DEBUG("trimEdges data:|" << data << "|"); + } + + private: + ini _iniData; + int _SumOfLines; + std::fstream _iniFile; + std::string _configFileName; + }; + +} // namespace inicpp + +#endif diff --git a/Modules/openssl.include/openssl/__DECC_INCLUDE_EPILOGUE.H b/Modules/openssl.include/openssl/__DECC_INCLUDE_EPILOGUE.H new file mode 100644 index 0000000..d251d0a --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/__DECC_INCLUDE_PROLOGUE.H b/Modules/openssl.include/openssl/__DECC_INCLUDE_PROLOGUE.H new file mode 100644 index 0000000..91ac6b3 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/aes.h b/Modules/openssl.include/openssl/aes.h new file mode 100644 index 0000000..d0f9dfc --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/applink.c b/Modules/openssl.include/openssl/applink.c new file mode 100644 index 0000000..601d016 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/asn1.h b/Modules/openssl.include/openssl/asn1.h new file mode 100644 index 0000000..ff2f297 --- /dev/null +++ b/Modules/openssl.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 RFC 5280 */ + +# 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/Modules/openssl.include/openssl/asn1err.h b/Modules/openssl.include/openssl/asn1err.h new file mode 100644 index 0000000..8fd85ed --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/asn1t.h b/Modules/openssl.include/openssl/asn1t.h new file mode 100644 index 0000000..06628b5 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/async.h b/Modules/openssl.include/openssl/async.h new file mode 100644 index 0000000..826ffb9 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/asyncerr.h b/Modules/openssl.include/openssl/asyncerr.h new file mode 100644 index 0000000..c093f7b --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/bio.h b/Modules/openssl.include/openssl/bio.h new file mode 100644 index 0000000..3b0547c --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/bioerr.h b/Modules/openssl.include/openssl/bioerr.h new file mode 100644 index 0000000..e4fdb64 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/blowfish.h b/Modules/openssl.include/openssl/blowfish.h new file mode 100644 index 0000000..667d642 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/bn.h b/Modules/openssl.include/openssl/bn.h new file mode 100644 index 0000000..ea706dc --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/bnerr.h b/Modules/openssl.include/openssl/bnerr.h new file mode 100644 index 0000000..7c3f6ef --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/buffer.h b/Modules/openssl.include/openssl/buffer.h new file mode 100644 index 0000000..5773b98 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/buffererr.h b/Modules/openssl.include/openssl/buffererr.h new file mode 100644 index 0000000..d18b1f8 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/byteorder.h b/Modules/openssl.include/openssl/byteorder.h new file mode 100644 index 0000000..3c8f34b --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/camellia.h b/Modules/openssl.include/openssl/camellia.h new file mode 100644 index 0000000..88c2279 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cast.h b/Modules/openssl.include/openssl/cast.h new file mode 100644 index 0000000..0bf217b --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cmac.h b/Modules/openssl.include/openssl/cmac.h new file mode 100644 index 0000000..f508618 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cmp.h b/Modules/openssl.include/openssl/cmp.h new file mode 100644 index 0000000..003329f --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cmp_util.h b/Modules/openssl.include/openssl/cmp_util.h new file mode 100644 index 0000000..9a16892 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cmperr.h b/Modules/openssl.include/openssl/cmperr.h new file mode 100644 index 0000000..62137aa --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cms.h b/Modules/openssl.include/openssl/cms.h new file mode 100644 index 0000000..da7b482 --- /dev/null +++ b/Modules/openssl.include/openssl/cms.h @@ -0,0 +1,520 @@ +/* + * 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 +# define CMS_RECIPINFO_KEM 5 + +/* 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); + +int CMS_RecipientInfo_kemri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_kemri_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +EVP_CIPHER_CTX *CMS_RecipientInfo_kemri_get0_ctx(CMS_RecipientInfo *ri); +X509_ALGOR *CMS_RecipientInfo_kemri_get0_kdf_alg(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kemri_set_ukm(CMS_RecipientInfo *ri, + const unsigned char *ukm, + int ukmLength); + +/* 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/Modules/openssl.include/openssl/cmserr.h b/Modules/openssl.include/openssl/cmserr.h new file mode 100644 index 0000000..606cc11 --- /dev/null +++ b/Modules/openssl.include/openssl/cmserr.h @@ -0,0 +1,129 @@ +/* + * 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_KEM 197 +# 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_UNKNOWN_KDF_ALGORITHM 198 +# 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_KDF_ALGORITHM 199 +# 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/Modules/openssl.include/openssl/comp.h b/Modules/openssl.include/openssl/comp.h new file mode 100644 index 0000000..e3cb300 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/comperr.h b/Modules/openssl.include/openssl/comperr.h new file mode 100644 index 0000000..1948d37 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/conf.h b/Modules/openssl.include/openssl/conf.h new file mode 100644 index 0000000..d6edd2e --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/conf_api.h b/Modules/openssl.include/openssl/conf_api.h new file mode 100644 index 0000000..ed67d57 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/conferr.h b/Modules/openssl.include/openssl/conferr.h new file mode 100644 index 0000000..a8798e7 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/configuration.h b/Modules/openssl.include/openssl/configuration.h new file mode 100644 index 0000000..56d0385 --- /dev/null +++ b/Modules/openssl.include/openssl/configuration.h @@ -0,0 +1,191 @@ +/* + * 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 30600 +# 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_ALLOCFAIL_TESTS +# define OPENSSL_NO_ALLOCFAIL_TESTS +# 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_LMS +# define OPENSSL_NO_LMS +# 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/Modules/openssl.include/openssl/conftypes.h b/Modules/openssl.include/openssl/conftypes.h new file mode 100644 index 0000000..17cefaa --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/core.h b/Modules/openssl.include/openssl/core.h new file mode 100644 index 0000000..18c1991 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/core_dispatch.h b/Modules/openssl.include/openssl/core_dispatch.h new file mode 100644 index 0000000..e435c08 --- /dev/null +++ b/Modules/openssl.include/openssl/core_dispatch.h @@ -0,0 +1,1156 @@ +/* + * 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[])) + +/*- + * 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)) + +/* 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 +# define OSSL_FUNC_KDF_SET_SKEY 12 +# define OSSL_FUNC_KDF_DERIVE_SKEY 13 + +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[])) +OSSL_CORE_MAKE_FUNC(int, kdf_set_skey, + (void *kctx, void *skeydata, const char *paramname)) +OSSL_CORE_MAKE_FUNC(void *, kdf_derive_skey, (void *ctx, const char *key_type, void *provctx, + OSSL_FUNC_skeymgmt_import_fn *import, + size_t keylen, 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 +# define OSSL_FUNC_KEYEXCH_DERIVE_SKEY 11 + +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)) +OSSL_CORE_MAKE_FUNC(void *, keyexch_derive_skey, (void *ctx, const char *key_type, void *provctx, + OSSL_FUNC_skeymgmt_import_fn *import, + size_t keylen, const OSSL_PARAM params[])) + +/* 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)) + +/* 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/Modules/openssl.include/openssl/core_names.h b/Modules/openssl.include/openssl/core_names.h new file mode 100644 index 0000000..322939c --- /dev/null +++ b/Modules/openssl.include/openssl/core_names.h @@ -0,0 +1,584 @@ +/* + * 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_HKDF_SHA256 "HKDF-SHA256" +# define OSSL_KDF_NAME_HKDF_SHA384 "HKDF-SHA384" +# define OSSL_KDF_NAME_HKDF_SHA512 "HKDF-SHA512" +# 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_ALG_PARAM_SECURITY_CATEGORY "security-category" +# 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_HMAC_PARAM_MAC OSSL_CIPHER_PARAM_AEAD_TAG +# 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_ENCRYPT_THEN_MAC "encrypt-then-mac" +# 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_CMS_KEMRI_KDF_ALGORITHM "kemri-kdf-alg" +# define OSSL_PKEY_PARAM_CMS_RI_TYPE "ri-type" +# 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_SECURITY_CATEGORY OSSL_ALG_PARAM_SECURITY_CATEGORY +# 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/Modules/openssl.include/openssl/core_object.h b/Modules/openssl.include/openssl/core_object.h new file mode 100644 index 0000000..62ccf39 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/crmf.h b/Modules/openssl.include/openssl/crmf.h new file mode 100644 index 0000000..85d2ef1 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/crmferr.h b/Modules/openssl.include/openssl/crmferr.h new file mode 100644 index 0000000..a9b04e0 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/crypto.h b/Modules/openssl.include/openssl/crypto.h new file mode 100644 index 0000000..38c861e --- /dev/null +++ b/Modules/openssl.include/openssl/crypto.h @@ -0,0 +1,614 @@ +/* + * 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_malloc_array(num, size) \ + CRYPTO_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_calloc(num, size) \ + CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_aligned_alloc(num, alignment, freeptr) \ + CRYPTO_aligned_alloc(num, alignment, freeptr, \ + OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_aligned_alloc_array(num, size, alignment, freeptr) \ + CRYPTO_aligned_alloc_array(num, size, 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_realloc_array(addr, num, size) \ + CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc_array(addr, old_num, num, size) \ + CRYPTO_clear_realloc_array(addr, old_num, num, size, \ + 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_malloc_array(num, size) \ + CRYPTO_secure_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_calloc(num, size) \ + CRYPTO_secure_calloc(num, size, 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_malloc_array(size_t num, size_t size, + const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_calloc(size_t num, size_t size, + 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); +OSSL_CRYPTO_ALLOC void *CRYPTO_aligned_alloc_array(size_t num, size_t size, + 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); +void *CRYPTO_realloc_array(void *addr, size_t num, size_t size, + const char *file, int line); +void *CRYPTO_clear_realloc_array(void *addr, size_t old_num, size_t num, + size_t size, 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); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc_array(size_t num, size_t size, + const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_calloc(size_t num, size_t size, + 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/Modules/openssl.include/openssl/cryptoerr.h b/Modules/openssl.include/openssl/cryptoerr.h new file mode 100644 index 0000000..7fa79cf --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cryptoerr_legacy.h b/Modules/openssl.include/openssl/cryptoerr_legacy.h new file mode 100644 index 0000000..ccab33a --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ct.h b/Modules/openssl.include/openssl/ct.h new file mode 100644 index 0000000..3d18237 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/cterr.h b/Modules/openssl.include/openssl/cterr.h new file mode 100644 index 0000000..935d32d --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/decoder.h b/Modules/openssl.include/openssl/decoder.h new file mode 100644 index 0000000..d4ee2cf --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/decodererr.h b/Modules/openssl.include/openssl/decodererr.h new file mode 100644 index 0000000..4212a38 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/des.h b/Modules/openssl.include/openssl/des.h new file mode 100644 index 0000000..09798a6 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/dh.h b/Modules/openssl.include/openssl/dh.h new file mode 100644 index 0000000..9702492 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/dherr.h b/Modules/openssl.include/openssl/dherr.h new file mode 100644 index 0000000..2997d7d --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/dsa.h b/Modules/openssl.include/openssl/dsa.h new file mode 100644 index 0000000..109878e --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/dsaerr.h b/Modules/openssl.include/openssl/dsaerr.h new file mode 100644 index 0000000..26ada57 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/dtls1.h b/Modules/openssl.include/openssl/dtls1.h new file mode 100644 index 0000000..5dc6b54 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/e_os2.h b/Modules/openssl.include/openssl/e_os2.h new file mode 100644 index 0000000..b8c6107 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/e_ostime.h b/Modules/openssl.include/openssl/e_ostime.h new file mode 100644 index 0000000..0e17487 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ebcdic.h b/Modules/openssl.include/openssl/ebcdic.h new file mode 100644 index 0000000..e0ae1aa --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ec.h b/Modules/openssl.include/openssl/ec.h new file mode 100644 index 0000000..e1cbe98 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ecdh.h b/Modules/openssl.include/openssl/ecdh.h new file mode 100644 index 0000000..56bd4cc --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ecdsa.h b/Modules/openssl.include/openssl/ecdsa.h new file mode 100644 index 0000000..56bd4cc --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ecerr.h b/Modules/openssl.include/openssl/ecerr.h new file mode 100644 index 0000000..f15f91f --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/encoder.h b/Modules/openssl.include/openssl/encoder.h new file mode 100644 index 0000000..c37a6f1 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/encodererr.h b/Modules/openssl.include/openssl/encodererr.h new file mode 100644 index 0000000..5e318b1 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/engine.h b/Modules/openssl.include/openssl/engine.h new file mode 100644 index 0000000..5b4b504 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/engineerr.h b/Modules/openssl.include/openssl/engineerr.h new file mode 100644 index 0000000..d439b68 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/err.h b/Modules/openssl.include/openssl/err.h new file mode 100644 index 0000000..daca18e --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ess.h b/Modules/openssl.include/openssl/ess.h new file mode 100644 index 0000000..ac49883 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/esserr.h b/Modules/openssl.include/openssl/esserr.h new file mode 100644 index 0000000..165ce7c --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/evp.h b/Modules/openssl.include/openssl/evp.h new file mode 100644 index 0000000..61e50b2 --- /dev/null +++ b/Modules/openssl.include/openssl/evp.h @@ -0,0 +1,2345 @@ +/* + * 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 +# define EVP_CIPH_FLAG_ENC_THEN_MAC 0x10000000 + +/* + * 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_DEPRECATED_3_6 +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_assign_DSA(pkey, dsa) EVP_PKEY_assign((pkey), EVP_PKEY_DSA, \ + (dsa)) +# endif +# 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_DEPRECATED_3_6 +# 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 +# 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_security_category(const EVP_PKEY *pkey); +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_PKCS8PrivateKey(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 + +# ifndef OPENSSL_NO_DEPRECATED_3_6 +OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_get_count(void); +OSSL_DEPRECATEDIN_3_6 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); +OSSL_DEPRECATEDIN_3_6 +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); +OSSL_DEPRECATEDIN_3_6 +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, + const char *str, int len); +OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); +OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_add_alias(int to, int from); +OSSL_DEPRECATEDIN_3_6 +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); + +OSSL_DEPRECATEDIN_3_6 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_6 EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, + const char *pem_str, + const char *info); +OSSL_DEPRECATEDIN_3_6 void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, + const EVP_PKEY_ASN1_METHOD *src); +OSSL_DEPRECATEDIN_3_6 void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); +OSSL_DEPRECATEDIN_3_6 +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)); +OSSL_DEPRECATEDIN_3_6 +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)); +OSSL_DEPRECATEDIN_3_6 +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)); + +OSSL_DEPRECATEDIN_3_6 +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_6 +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, + long arg1, void *arg2)); +OSSL_DEPRECATEDIN_3_6 +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)); + +OSSL_DEPRECATEDIN_3_6 +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)); + +OSSL_DEPRECATEDIN_3_6 +void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_check) (const EVP_PKEY *pk)); + +OSSL_DEPRECATEDIN_3_6 +void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_pub_check) (const EVP_PKEY *pk)); + +OSSL_DEPRECATEDIN_3_6 +void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_param_check) (const EVP_PKEY *pk)); + +OSSL_DEPRECATEDIN_3_6 +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)); +OSSL_DEPRECATEDIN_3_6 +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)); +OSSL_DEPRECATEDIN_3_6 +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)); +OSSL_DEPRECATEDIN_3_6 +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)); + +OSSL_DEPRECATEDIN_3_6 +void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_security_bits) (const EVP_PKEY + *pk)); +# endif /* OPENSSL_NO_DEPRECATED_3_6 */ + +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); +EVP_SKEY *EVP_PKEY_derive_SKEY(EVP_PKEY_CTX *ctx, EVP_SKEYMGMT *mgmt, + const char *key_type, const char *propquery, + size_t keylen, const OSSL_PARAM params[]); + +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); +EVP_SKEY *EVP_SKEY_import_SKEYMGMT(OSSL_LIB_CTX *libctx, EVP_SKEYMGMT *skeymgmt, + int selection, const OSSL_PARAM *params); +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/Modules/openssl.include/openssl/evperr.h b/Modules/openssl.include/openssl/evperr.h new file mode 100644 index 0000000..6dc846a --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/fips_names.h b/Modules/openssl.include/openssl/fips_names.h new file mode 100644 index 0000000..fa481fc --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/fipskey.h b/Modules/openssl.include/openssl/fipskey.h new file mode 100644 index 0000000..536bb70 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/hmac.h b/Modules/openssl.include/openssl/hmac.h new file mode 100644 index 0000000..f9e1bff --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/hpke.h b/Modules/openssl.include/openssl/hpke.h new file mode 100644 index 0000000..482acd2 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/http.h b/Modules/openssl.include/openssl/http.h new file mode 100644 index 0000000..d7aa570 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/httperr.h b/Modules/openssl.include/openssl/httperr.h new file mode 100644 index 0000000..ae7f00c --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/idea.h b/Modules/openssl.include/openssl/idea.h new file mode 100644 index 0000000..1f9bb3b --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/indicator.h b/Modules/openssl.include/openssl/indicator.h new file mode 100644 index 0000000..3ea0122 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/kdf.h b/Modules/openssl.include/openssl/kdf.h new file mode 100644 index 0000000..42d68f7 --- /dev/null +++ b/Modules/openssl.include/openssl/kdf.h @@ -0,0 +1,142 @@ +/* + * Copyright 2016-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_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_CTX_set_SKEY(EVP_KDF_CTX *ctx, EVP_SKEY *key, const char *paramname); +EVP_SKEY *EVP_KDF_derive_SKEY(EVP_KDF_CTX *ctx, EVP_SKEYMGMT *mgmt, + const char *key_type, const char *propquery, + 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/Modules/openssl.include/openssl/kdferr.h b/Modules/openssl.include/openssl/kdferr.h new file mode 100644 index 0000000..963d766 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/lhash.h b/Modules/openssl.include/openssl/lhash.h new file mode 100644 index 0000000..62c55b2 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/macros.h b/Modules/openssl.include/openssl/macros.h new file mode 100644 index 0000000..1598053 --- /dev/null +++ b/Modules/openssl.include/openssl/macros.h @@ -0,0 +1,361 @@ +/* + * 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_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_6 +# 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 >= 30600 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_6 OSSL_DEPRECATED(3.6) +# define OSSL_DEPRECATEDIN_3_6_FOR(msg) OSSL_DEPRECATED_FOR(3.6, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_6 +# endif +# else +# define OSSL_DEPRECATEDIN_3_6 +# define OSSL_DEPRECATEDIN_3_6_FOR(msg) +# endif +# 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/Modules/openssl.include/openssl/md2.h b/Modules/openssl.include/openssl/md2.h new file mode 100644 index 0000000..5d4cb77 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/md4.h b/Modules/openssl.include/openssl/md4.h new file mode 100644 index 0000000..6c150a6 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/md5.h b/Modules/openssl.include/openssl/md5.h new file mode 100644 index 0000000..77a5773 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/mdc2.h b/Modules/openssl.include/openssl/mdc2.h new file mode 100644 index 0000000..5a7ee28 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ml_kem.h b/Modules/openssl.include/openssl/ml_kem.h new file mode 100644 index 0000000..1c90163 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/modes.h b/Modules/openssl.include/openssl/modes.h new file mode 100644 index 0000000..e190799 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/obj_mac.h b/Modules/openssl.include/openssl/obj_mac.h new file mode 100644 index 0000000..440ec10 --- /dev/null +++ b/Modules/openssl.include/openssl/obj_mac.h @@ -0,0 +1,6695 @@ +/* + * 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_ori "id-smime-ori" +#define NID_id_smime_ori 1499 +#define OBJ_id_smime_ori OBJ_SMIME,13L + +#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_HKDF_SHA256 "id-alg-hkdf-with-sha256" +#define LN_HKDF_SHA256 "HKDF-SHA256" +#define NID_HKDF_SHA256 1496 +#define OBJ_HKDF_SHA256 OBJ_id_smime_alg,28L + +#define SN_HKDF_SHA384 "id-alg-hkdf-with-sha384" +#define LN_HKDF_SHA384 "HKDF-SHA384" +#define NID_HKDF_SHA384 1497 +#define OBJ_HKDF_SHA384 OBJ_id_smime_alg,29L + +#define SN_HKDF_SHA512 "id-alg-hkdf-with-sha512" +#define LN_HKDF_SHA512 "HKDF-SHA512" +#define NID_HKDF_SHA512 1498 +#define OBJ_HKDF_SHA512 OBJ_id_smime_alg,30L + +#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 SN_id_smime_ori_kem "id-smime-ori-kem" +#define NID_id_smime_ori_kem 1500 +#define OBJ_id_smime_ori_kem OBJ_id_smime_ori,3L + +#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_aes_128_cbc_hmac_sha1_etm "AES-128-CBC-HMAC-SHA1-ETM" +#define LN_aes_128_cbc_hmac_sha1_etm "aes-128-cbc-hmac-sha1-etm" +#define NID_aes_128_cbc_hmac_sha1_etm 1487 + +#define SN_aes_192_cbc_hmac_sha1_etm "AES-192-CBC-HMAC-SHA1-ETM" +#define LN_aes_192_cbc_hmac_sha1_etm "aes-192-cbc-hmac-sha1-etm" +#define NID_aes_192_cbc_hmac_sha1_etm 1488 + +#define SN_aes_256_cbc_hmac_sha1_etm "AES-256-CBC-HMAC-SHA1-ETM" +#define LN_aes_256_cbc_hmac_sha1_etm "aes-256-cbc-hmac-sha1-etm" +#define NID_aes_256_cbc_hmac_sha1_etm 1489 + +#define SN_aes_128_cbc_hmac_sha256_etm "AES-128-CBC-HMAC-SHA256-ETM" +#define LN_aes_128_cbc_hmac_sha256_etm "aes-128-cbc-hmac-sha256-etm" +#define NID_aes_128_cbc_hmac_sha256_etm 1490 + +#define SN_aes_192_cbc_hmac_sha256_etm "AES-192-CBC-HMAC-SHA256-ETM" +#define LN_aes_192_cbc_hmac_sha256_etm "aes-192-cbc-hmac-sha256-etm" +#define NID_aes_192_cbc_hmac_sha256_etm 1491 + +#define SN_aes_256_cbc_hmac_sha256_etm "AES-256-CBC-HMAC-SHA256-ETM" +#define LN_aes_256_cbc_hmac_sha256_etm "aes-256-cbc-hmac-sha256-etm" +#define NID_aes_256_cbc_hmac_sha256_etm 1492 + +#define SN_aes_128_cbc_hmac_sha512_etm "AES-128-CBC-HMAC-SHA512-ETM" +#define LN_aes_128_cbc_hmac_sha512_etm "aes-128-cbc-hmac-sha512-etm" +#define NID_aes_128_cbc_hmac_sha512_etm 1493 + +#define SN_aes_192_cbc_hmac_sha512_etm "AES-192-CBC-HMAC-SHA512-ETM" +#define LN_aes_192_cbc_hmac_sha512_etm "aes-192-cbc-hmac-sha512-etm" +#define NID_aes_192_cbc_hmac_sha512_etm 1494 + +#define SN_aes_256_cbc_hmac_sha512_etm "AES-256-CBC-HMAC-SHA512-ETM" +#define LN_aes_256_cbc_hmac_sha512_etm "aes-256-cbc-hmac-sha512-etm" +#define NID_aes_256_cbc_hmac_sha512_etm 1495 + +#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/Modules/openssl.include/openssl/objects.h b/Modules/openssl.include/openssl/objects.h new file mode 100644 index 0000000..cc9f3c5 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/objectserr.h b/Modules/openssl.include/openssl/objectserr.h new file mode 100644 index 0000000..585217f --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ocsp.h b/Modules/openssl.include/openssl/ocsp.h new file mode 100644 index 0000000..cd31658 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ocsperr.h b/Modules/openssl.include/openssl/ocsperr.h new file mode 100644 index 0000000..46a0523 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/opensslconf.h b/Modules/openssl.include/openssl/opensslconf.h new file mode 100644 index 0000000..1e83371 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/opensslv.h b/Modules/openssl.include/openssl/opensslv.h new file mode 100644 index 0000000..c516592 --- /dev/null +++ b/Modules/openssl.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 6 +# define OPENSSL_VERSION_PATCH 0 + +/* + * 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.6.0" +# define OPENSSL_FULL_VERSION_STR "3.6.0" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "1 Oct 2025" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL 3.6.0 1 Oct 2025" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PP0L */ +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |0x0L ) + +# ifdef __cplusplus +} +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/Modules/openssl.include/openssl/ossl_typ.h b/Modules/openssl.include/openssl/ossl_typ.h new file mode 100644 index 0000000..82a5898 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/param_build.h b/Modules/openssl.include/openssl/param_build.h new file mode 100644 index 0000000..f29fdb2 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/params.h b/Modules/openssl.include/openssl/params.h new file mode 100644 index 0000000..eae67b1 --- /dev/null +++ b/Modules/openssl.include/openssl/params.h @@ -0,0 +1,166 @@ +/* + * Copyright 2019-2025 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); + +int OSSL_PARAM_set_octet_string_or_ptr(OSSL_PARAM *p, const void *val, + size_t len); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/Modules/openssl.include/openssl/pem.h b/Modules/openssl.include/openssl/pem.h new file mode 100644 index 0000000..de1b658 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/pem2.h b/Modules/openssl.include/openssl/pem2.h new file mode 100644 index 0000000..a8a5325 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/pemerr.h b/Modules/openssl.include/openssl/pemerr.h new file mode 100644 index 0000000..3530775 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/pkcs12.h b/Modules/openssl.include/openssl/pkcs12.h new file mode 100644 index 0000000..b9096fe --- /dev/null +++ b/Modules/openssl.include/openssl/pkcs12.h @@ -0,0 +1,372 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\pkcs12.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_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. NIST requires 16, previous value was + * 8. Allow to override this at compile time. + */ +# ifndef PKCS12_SALT_LEN +# define PKCS12_SALT_LEN 16 +# endif + +/* 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/Modules/openssl.include/openssl/pkcs12err.h b/Modules/openssl.include/openssl/pkcs12err.h new file mode 100644 index 0000000..abce373 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/pkcs7.h b/Modules/openssl.include/openssl/pkcs7.h new file mode 100644 index 0000000..8ad43b3 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/pkcs7err.h b/Modules/openssl.include/openssl/pkcs7err.h new file mode 100644 index 0000000..ceb1a50 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/prov_ssl.h b/Modules/openssl.include/openssl/prov_ssl.h new file mode 100644 index 0000000..76d01e1 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/proverr.h b/Modules/openssl.include/openssl/proverr.h new file mode 100644 index 0000000..04134ae --- /dev/null +++ b/Modules/openssl.include/openssl/proverr.h @@ -0,0 +1,171 @@ +/* + * 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_REPEATED_PARAMETER 252 +# 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/Modules/openssl.include/openssl/provider.h b/Modules/openssl.include/openssl/provider.h new file mode 100644 index 0000000..5144357 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/quic.h b/Modules/openssl.include/openssl/quic.h new file mode 100644 index 0000000..8eacc63 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/rand.h b/Modules/openssl.include/openssl/rand.h new file mode 100644 index 0000000..4e59e50 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/randerr.h b/Modules/openssl.include/openssl/randerr.h new file mode 100644 index 0000000..5e1e6d7 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/rc2.h b/Modules/openssl.include/openssl/rc2.h new file mode 100644 index 0000000..ff633fd --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/rc4.h b/Modules/openssl.include/openssl/rc4.h new file mode 100644 index 0000000..600b288 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/rc5.h b/Modules/openssl.include/openssl/rc5.h new file mode 100644 index 0000000..de83352 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ripemd.h b/Modules/openssl.include/openssl/ripemd.h new file mode 100644 index 0000000..900ee31 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/rsa.h b/Modules/openssl.include/openssl/rsa.h new file mode 100644 index 0000000..167427d --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/rsaerr.h b/Modules/openssl.include/openssl/rsaerr.h new file mode 100644 index 0000000..c58463c --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/safestack.h b/Modules/openssl.include/openssl/safestack.h new file mode 100644 index 0000000..6d1f8db --- /dev/null +++ b/Modules/openssl.include/openssl/safestack.h @@ -0,0 +1,320 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\safestack.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_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_inline void sk_##t1##_freefunc_thunk(OPENSSL_sk_freefunc freefunc_arg, void *ptr) \ + { \ + sk_##t1##_freefunc freefunc = (sk_##t1##_freefunc) freefunc_arg; \ + freefunc((t3 *)ptr); \ + } \ + 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_inline void sk_##t1##_freefunc_thunk(OPENSSL_sk_freefunc freefunc_arg, void *ptr) \ + { \ + sk_##t1##_freefunc freefunc = (sk_##t1##_freefunc) freefunc_arg;\ + freefunc((t3 *)ptr);\ + } \ + 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) \ + { \ + OPENSSL_STACK *ret = OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + OPENSSL_sk_freefunc_thunk f_thunk; \ + \ + f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk; \ + return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk); \ + } \ + 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) \ + { \ + OPENSSL_STACK *ret = OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + OPENSSL_sk_freefunc_thunk f_thunk; \ + \ + f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk; \ + return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk); \ + } \ + 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_freefunc_thunk f_thunk; \ + \ + f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk; \ + sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk); \ + \ + 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/Modules/openssl.include/openssl/seed.h b/Modules/openssl.include/openssl/seed.h new file mode 100644 index 0000000..edb218a --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/self_test.h b/Modules/openssl.include/openssl/self_test.h new file mode 100644 index 0000000..292d61d --- /dev/null +++ b/Modules/openssl.include/openssl/self_test.h @@ -0,0 +1,116 @@ +/* + * 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_DetECDSA "DetECDSA" +# define OSSL_SELF_TEST_DESC_SIGN_EDDSA "EDDSA" +# define OSSL_SELF_TEST_DESC_SIGN_LMS "LMS" +# 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/Modules/openssl.include/openssl/sha.h b/Modules/openssl.include/openssl/sha.h new file mode 100644 index 0000000..163a7d5 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/srp.h b/Modules/openssl.include/openssl/srp.h new file mode 100644 index 0000000..45df7eb --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/srtp.h b/Modules/openssl.include/openssl/srtp.h new file mode 100644 index 0000000..2c2c334 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ssl.h b/Modules/openssl.include/openssl/ssl.h new file mode 100644 index 0000000..821f354 --- /dev/null +++ b/Modules/openssl.include/openssl/ssl.h @@ -0,0 +1,2940 @@ +/* + * 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_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose cipher, curve or group according to server's + * preferences. + */ +# define SSL_OP_SERVER_PREFERENCE SSL_OP_BIT(22) + /* Equivalent definition for backwards compatibility: */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_SERVER_PREFERENCE + /* + * 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) +# define SSL_OP_LEGACY_EC_POINT_FORMATS SSL_OP_BIT(36) + +/* + * 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 *server, unsigned int server_len, + 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_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP_EX 142 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP_EX 143 +# 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) +#define SSL_ACCEPT_STREAM_UNI (1U << 1) +#define SSL_ACCEPT_STREAM_BIDI (1U << 2) +__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/Modules/openssl.include/openssl/ssl2.h b/Modules/openssl.include/openssl/ssl2.h new file mode 100644 index 0000000..428ead0 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ssl3.h b/Modules/openssl.include/openssl/ssl3.h new file mode 100644 index 0000000..b8dada1 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/sslerr.h b/Modules/openssl.include/openssl/sslerr.h new file mode 100644 index 0000000..53e0dec --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/sslerr_legacy.h b/Modules/openssl.include/openssl/sslerr_legacy.h new file mode 100644 index 0000000..4c35367 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/stack.h b/Modules/openssl.include/openssl/stack.h new file mode 100644 index 0000000..419f561 --- /dev/null +++ b/Modules/openssl.include/openssl/stack.h @@ -0,0 +1,92 @@ +/* + * 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_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_freefunc_thunk)(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); +OPENSSL_STACK *OPENSSL_sk_set_thunks(OPENSSL_STACK *st, OPENSSL_sk_freefunc_thunk f_thunk); +int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); +void OPENSSL_sk_free(OPENSSL_STACK *); +void OPENSSL_sk_pop_free(OPENSSL_STACK *st, OPENSSL_sk_freefunc func); +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/Modules/openssl.include/openssl/store.h b/Modules/openssl.include/openssl/store.h new file mode 100644 index 0000000..a137f59 --- /dev/null +++ b/Modules/openssl.include/openssl/store.h @@ -0,0 +1,379 @@ +/* + * Copyright 2016-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_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); +const OSSL_PARAM * +OSSL_STORE_LOADER_settable_ctx_params(const OSSL_STORE_LOADER *loader); + +/*- + * 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/Modules/openssl.include/openssl/storeerr.h b/Modules/openssl.include/openssl/storeerr.h new file mode 100644 index 0000000..00529c8 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/symhacks.h b/Modules/openssl.include/openssl/symhacks.h new file mode 100644 index 0000000..816f8f9 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/thread.h b/Modules/openssl.include/openssl/thread.h new file mode 100644 index 0000000..3926ce5 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/tls1.h b/Modules/openssl.include/openssl/tls1.h new file mode 100644 index 0000000..50910d0 --- /dev/null +++ b/Modules/openssl.include/openssl/tls1.h @@ -0,0 +1,1226 @@ +/* + * 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_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_get0_tlsext_status_ocsp_resp_ex(ssl, arg) \ + SSL_ctrl(ssl, SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP_EX, 0, arg) + +# define SSL_set0_tlsext_status_ocsp_resp_ex(ssl, arg) \ + SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP_EX, 0, 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/Modules/openssl.include/openssl/trace.h b/Modules/openssl.include/openssl/trace.h new file mode 100644 index 0000000..2ca07f7 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ts.h b/Modules/openssl.include/openssl/ts.h new file mode 100644 index 0000000..31c78b5 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/tserr.h b/Modules/openssl.include/openssl/tserr.h new file mode 100644 index 0000000..e1b943e --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/txt_db.h b/Modules/openssl.include/openssl/txt_db.h new file mode 100644 index 0000000..af169a3 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/types.h b/Modules/openssl.include/openssl/types.h new file mode 100644 index 0000000..344d892 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/ui.h b/Modules/openssl.include/openssl/ui.h new file mode 100644 index 0000000..6cd0179 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/uierr.h b/Modules/openssl.include/openssl/uierr.h new file mode 100644 index 0000000..473b04e --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/whrlpool.h b/Modules/openssl.include/openssl/whrlpool.h new file mode 100644 index 0000000..05ba463 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/x509.h b/Modules/openssl.include/openssl/x509.h new file mode 100644 index 0000000..1ace9b4 --- /dev/null +++ b/Modules/openssl.include/openssl/x509.h @@ -0,0 +1,1304 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\x509.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_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); +const X509_ALGOR *X509_CRL_get0_tbs_sigalg(const 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/Modules/openssl.include/openssl/x509_acert.h b/Modules/openssl.include/openssl/x509_acert.h new file mode 100644 index 0000000..81d1abf --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/x509_vfy.h b/Modules/openssl.include/openssl/x509_vfy.h new file mode 100644 index 0000000..de51bfa --- /dev/null +++ b/Modules/openssl.include/openssl/x509_vfy.h @@ -0,0 +1,921 @@ +/* + * 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 + +DEFINE_STACK_OF(OCSP_RESPONSE) + +/*- +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 + +/* additional OCSP status errors */ +# define X509_V_ERR_OCSP_RESP_INVALID 96 +# define X509_V_ERR_OCSP_SIGNATURE_FAILURE 97 +# define X509_V_ERR_OCSP_NOT_YET_VALID 98 +# define X509_V_ERR_OCSP_HAS_EXPIRED 99 +# define X509_V_ERR_OCSP_NO_RESPONSE 100 +# define X509_V_ERR_CRL_VERIFY_FAILED 101 + +/* 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 + +/* Verify OCSP stapling response for server certificate */ +# define X509_V_FLAG_OCSP_RESP_CHECK 0x400000 +/* Verify OCSP stapling responses for whole chain */ +# define X509_V_FLAG_OCSP_RESP_CHECK_ALL 0x800000 + +# 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); +# ifndef OPENSSL_NO_OCSP +void X509_STORE_CTX_set_ocsp_resp(X509_STORE_CTX *ctx, STACK_OF(OCSP_RESPONSE) *sk); +# endif +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/Modules/openssl.include/openssl/x509err.h b/Modules/openssl.include/openssl/x509err.h new file mode 100644 index 0000000..77b91c8 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/x509v3.h b/Modules/openssl.include/openssl/x509v3.h new file mode 100644 index 0000000..9168af2 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.include/openssl/x509v3err.h b/Modules/openssl.include/openssl/x509v3err.h new file mode 100644 index 0000000..4bbcfc2 --- /dev/null +++ b/Modules/openssl.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/Modules/openssl.lib/libcrypto.def b/Modules/openssl.lib/libcrypto.def new file mode 100644 index 0000000..224bae0 --- /dev/null +++ b/Modules/openssl.lib/libcrypto.def @@ -0,0 +1,5902 @@ +; +; Definition file for the DLL version of the libcrypto-3-x64 library from OpenSSL +; + +LIBRARY "libcrypto-3-x64" + +EXPORTS + ACCESS_DESCRIPTION_free + ACCESS_DESCRIPTION_it + ACCESS_DESCRIPTION_new + ADMISSIONS_free + ADMISSIONS_get0_admissionAuthority + ADMISSIONS_get0_namingAuthority + ADMISSIONS_get0_professionInfos + ADMISSIONS_it + ADMISSIONS_new + ADMISSIONS_set0_admissionAuthority + ADMISSIONS_set0_namingAuthority + ADMISSIONS_set0_professionInfos + ADMISSION_SYNTAX_free + ADMISSION_SYNTAX_get0_admissionAuthority + ADMISSION_SYNTAX_get0_contentsOfAdmissions + ADMISSION_SYNTAX_it + ADMISSION_SYNTAX_new + ADMISSION_SYNTAX_set0_admissionAuthority + ADMISSION_SYNTAX_set0_contentsOfAdmissions + AES_bi_ige_encrypt + AES_cbc_encrypt + AES_cfb128_encrypt + AES_cfb1_encrypt + AES_cfb8_encrypt + AES_decrypt + AES_ecb_encrypt + AES_encrypt + AES_ige_encrypt + AES_ofb128_encrypt + AES_options + AES_set_decrypt_key + AES_set_encrypt_key + AES_unwrap_key + AES_wrap_key + ASIdOrRange_free + ASIdOrRange_it + ASIdOrRange_new + ASIdentifierChoice_free + ASIdentifierChoice_it + ASIdentifierChoice_new + ASIdentifiers_free + ASIdentifiers_it + ASIdentifiers_new + ASN1_ANY_it + ASN1_BIT_STRING_check + ASN1_BIT_STRING_free + ASN1_BIT_STRING_get_bit + ASN1_BIT_STRING_it + ASN1_BIT_STRING_name_print + ASN1_BIT_STRING_new + ASN1_BIT_STRING_num_asc + ASN1_BIT_STRING_set + ASN1_BIT_STRING_set_asc + ASN1_BIT_STRING_set_bit + ASN1_BMPSTRING_free + ASN1_BMPSTRING_it + ASN1_BMPSTRING_new + ASN1_BOOLEAN_it + ASN1_ENUMERATED_free + ASN1_ENUMERATED_get + ASN1_ENUMERATED_get_int64 + ASN1_ENUMERATED_it + ASN1_ENUMERATED_new + ASN1_ENUMERATED_set + ASN1_ENUMERATED_set_int64 + ASN1_ENUMERATED_to_BN + ASN1_FBOOLEAN_it + ASN1_GENERALIZEDTIME_adj + ASN1_GENERALIZEDTIME_check + ASN1_GENERALIZEDTIME_dup + ASN1_GENERALIZEDTIME_free + ASN1_GENERALIZEDTIME_it + ASN1_GENERALIZEDTIME_new + ASN1_GENERALIZEDTIME_print + ASN1_GENERALIZEDTIME_set + ASN1_GENERALIZEDTIME_set_string + ASN1_GENERALSTRING_free + ASN1_GENERALSTRING_it + ASN1_GENERALSTRING_new + ASN1_IA5STRING_free + ASN1_IA5STRING_it + ASN1_IA5STRING_new + ASN1_INTEGER_cmp + ASN1_INTEGER_dup + ASN1_INTEGER_free + ASN1_INTEGER_get + ASN1_INTEGER_get_int64 + ASN1_INTEGER_get_uint64 + ASN1_INTEGER_it + ASN1_INTEGER_new + ASN1_INTEGER_set + ASN1_INTEGER_set_int64 + ASN1_INTEGER_set_uint64 + ASN1_INTEGER_to_BN + ASN1_ITEM_get + ASN1_ITEM_lookup + ASN1_NULL_free + ASN1_NULL_it + ASN1_NULL_new + ASN1_OBJECT_create + ASN1_OBJECT_free + ASN1_OBJECT_it + ASN1_OBJECT_new + ASN1_OCTET_STRING_NDEF_it + ASN1_OCTET_STRING_cmp + ASN1_OCTET_STRING_dup + ASN1_OCTET_STRING_free + ASN1_OCTET_STRING_it + ASN1_OCTET_STRING_new + ASN1_OCTET_STRING_set + ASN1_PCTX_free + ASN1_PCTX_get_cert_flags + ASN1_PCTX_get_flags + ASN1_PCTX_get_nm_flags + ASN1_PCTX_get_oid_flags + ASN1_PCTX_get_str_flags + ASN1_PCTX_new + ASN1_PCTX_set_cert_flags + ASN1_PCTX_set_flags + ASN1_PCTX_set_nm_flags + ASN1_PCTX_set_oid_flags + ASN1_PCTX_set_str_flags + ASN1_PRINTABLESTRING_free + ASN1_PRINTABLESTRING_it + ASN1_PRINTABLESTRING_new + ASN1_PRINTABLE_free + ASN1_PRINTABLE_it + ASN1_PRINTABLE_new + ASN1_PRINTABLE_type + ASN1_SCTX_free + ASN1_SCTX_get_app_data + ASN1_SCTX_get_flags + ASN1_SCTX_get_item + ASN1_SCTX_get_template + ASN1_SCTX_new + ASN1_SCTX_set_app_data + ASN1_SEQUENCE_ANY_it + ASN1_SEQUENCE_it + ASN1_SET_ANY_it + ASN1_STRING_TABLE_add + ASN1_STRING_TABLE_cleanup + ASN1_STRING_TABLE_get + ASN1_STRING_clear_free + ASN1_STRING_cmp + ASN1_STRING_copy + ASN1_STRING_data + ASN1_STRING_dup + ASN1_STRING_free + ASN1_STRING_get0_data + ASN1_STRING_get_default_mask + ASN1_STRING_length + ASN1_STRING_length_set + ASN1_STRING_new + ASN1_STRING_print + ASN1_STRING_print_ex + ASN1_STRING_print_ex_fp + ASN1_STRING_set + ASN1_STRING_set0 + ASN1_STRING_set_by_NID + ASN1_STRING_set_default_mask + ASN1_STRING_set_default_mask_asc + ASN1_STRING_to_UTF8 + ASN1_STRING_type + ASN1_STRING_type_new + ASN1_T61STRING_free + ASN1_T61STRING_it + ASN1_T61STRING_new + ASN1_TBOOLEAN_it + ASN1_TIME_adj + ASN1_TIME_check + ASN1_TIME_cmp_time_t + ASN1_TIME_compare + ASN1_TIME_diff + ASN1_TIME_dup + ASN1_TIME_free + ASN1_TIME_it + ASN1_TIME_new + ASN1_TIME_normalize + ASN1_TIME_print + ASN1_TIME_print_ex + ASN1_TIME_set + ASN1_TIME_set_string + ASN1_TIME_set_string_X509 + ASN1_TIME_to_generalizedtime + ASN1_TIME_to_tm + ASN1_TYPE_cmp + ASN1_TYPE_free + ASN1_TYPE_get + ASN1_TYPE_get_int_octetstring + ASN1_TYPE_get_octetstring + ASN1_TYPE_new + ASN1_TYPE_pack_sequence + ASN1_TYPE_set + ASN1_TYPE_set1 + ASN1_TYPE_set_int_octetstring + ASN1_TYPE_set_octetstring + ASN1_TYPE_unpack_sequence + ASN1_UNIVERSALSTRING_free + ASN1_UNIVERSALSTRING_it + ASN1_UNIVERSALSTRING_new + ASN1_UNIVERSALSTRING_to_string + ASN1_UTCTIME_adj + ASN1_UTCTIME_check + ASN1_UTCTIME_cmp_time_t + ASN1_UTCTIME_dup + ASN1_UTCTIME_free + ASN1_UTCTIME_it + ASN1_UTCTIME_new + ASN1_UTCTIME_print + ASN1_UTCTIME_set + ASN1_UTCTIME_set_string + ASN1_UTF8STRING_free + ASN1_UTF8STRING_it + ASN1_UTF8STRING_new + ASN1_VISIBLESTRING_free + ASN1_VISIBLESTRING_it + ASN1_VISIBLESTRING_new + ASN1_add_oid_module + ASN1_add_stable_module + ASN1_bn_print + ASN1_buf_print + ASN1_check_infinite_end + ASN1_const_check_infinite_end + ASN1_d2i_bio + ASN1_d2i_fp + ASN1_digest + ASN1_dup + ASN1_generate_nconf + ASN1_generate_v3 + ASN1_get_object + ASN1_i2d_bio + ASN1_i2d_fp + ASN1_item_d2i + ASN1_item_d2i_bio + ASN1_item_d2i_bio_ex + ASN1_item_d2i_ex + ASN1_item_d2i_fp + ASN1_item_d2i_fp_ex + ASN1_item_digest + ASN1_item_dup + ASN1_item_ex_d2i + ASN1_item_ex_free + ASN1_item_ex_i2d + ASN1_item_ex_new + ASN1_item_free + ASN1_item_i2d + ASN1_item_i2d_bio + ASN1_item_i2d_fp + ASN1_item_i2d_mem_bio + ASN1_item_ndef_i2d + ASN1_item_new + ASN1_item_new_ex + ASN1_item_pack + ASN1_item_print + ASN1_item_sign + ASN1_item_sign_ctx + ASN1_item_sign_ex + ASN1_item_unpack + ASN1_item_unpack_ex + ASN1_item_verify + ASN1_item_verify_ctx + ASN1_item_verify_ex + ASN1_mbstring_copy + ASN1_mbstring_ncopy + ASN1_object_size + ASN1_parse + ASN1_parse_dump + ASN1_put_eoc + ASN1_put_object + ASN1_sign + ASN1_str2mask + ASN1_tag2bit + ASN1_tag2str + ASN1_verify + ASRange_free + ASRange_it + ASRange_new + ASYNC_WAIT_CTX_clear_fd + ASYNC_WAIT_CTX_free + ASYNC_WAIT_CTX_get_all_fds + ASYNC_WAIT_CTX_get_callback + ASYNC_WAIT_CTX_get_changed_fds + ASYNC_WAIT_CTX_get_fd + ASYNC_WAIT_CTX_get_status + ASYNC_WAIT_CTX_new + ASYNC_WAIT_CTX_set_callback + ASYNC_WAIT_CTX_set_status + ASYNC_WAIT_CTX_set_wait_fd + ASYNC_block_pause + ASYNC_cleanup_thread + ASYNC_get_current_job + ASYNC_get_mem_functions + ASYNC_get_wait_ctx + ASYNC_init_thread + ASYNC_is_capable + ASYNC_pause_job + ASYNC_set_mem_functions + ASYNC_start_job + ASYNC_unblock_pause + AUTHORITY_INFO_ACCESS_free + AUTHORITY_INFO_ACCESS_it + AUTHORITY_INFO_ACCESS_new + AUTHORITY_KEYID_free + AUTHORITY_KEYID_it + AUTHORITY_KEYID_new + BASIC_CONSTRAINTS_free + BASIC_CONSTRAINTS_it + BASIC_CONSTRAINTS_new + BF_cbc_encrypt + BF_cfb64_encrypt + BF_decrypt + BF_ecb_encrypt + BF_encrypt + BF_ofb64_encrypt + BF_options + BF_set_key + BIGNUM_it + BIO_ADDRINFO_address + BIO_ADDRINFO_family + BIO_ADDRINFO_free + BIO_ADDRINFO_next + BIO_ADDRINFO_protocol + BIO_ADDRINFO_socktype + BIO_ADDR_clear + BIO_ADDR_copy + BIO_ADDR_dup + BIO_ADDR_family + BIO_ADDR_free + BIO_ADDR_hostname_string + BIO_ADDR_new + BIO_ADDR_path_string + BIO_ADDR_rawaddress + BIO_ADDR_rawmake + BIO_ADDR_rawport + BIO_ADDR_service_string + BIO_accept + BIO_accept_ex + BIO_asn1_get_prefix + BIO_asn1_get_suffix + BIO_asn1_set_prefix + BIO_asn1_set_suffix + BIO_bind + BIO_callback_ctrl + BIO_clear_flags + BIO_closesocket + BIO_connect + BIO_copy_next_retry + BIO_ctrl + BIO_ctrl_get_read_request + BIO_ctrl_get_write_guarantee + BIO_ctrl_pending + BIO_ctrl_reset_read_request + BIO_ctrl_wpending + BIO_debug_callback + BIO_debug_callback_ex + BIO_dgram_non_fatal_error + BIO_do_connect_retry + BIO_dump + BIO_dump_cb + BIO_dump_fp + BIO_dump_indent + BIO_dump_indent_cb + BIO_dump_indent_fp + BIO_dup_chain + BIO_err_is_non_fatal + BIO_f_asn1 + BIO_f_base64 + BIO_f_brotli + BIO_f_buffer + BIO_f_cipher + BIO_f_linebuffer + BIO_f_md + BIO_f_nbio_test + BIO_f_null + BIO_f_prefix + BIO_f_readbuffer + BIO_f_reliable + BIO_f_zlib + BIO_f_zstd + BIO_fd_non_fatal_error + BIO_fd_should_retry + BIO_find_type + BIO_free + BIO_free_all + BIO_get_accept_socket + BIO_get_callback + BIO_get_callback_arg + BIO_get_callback_ex + BIO_get_data + BIO_get_ex_data + BIO_get_host_ip + BIO_get_init + BIO_get_line + BIO_get_new_index + BIO_get_port + BIO_get_retry_BIO + BIO_get_retry_reason + BIO_get_rpoll_descriptor + BIO_get_shutdown + BIO_get_wpoll_descriptor + BIO_gethostbyname + BIO_gets + BIO_hex_string + BIO_indent + BIO_int_ctrl + BIO_listen + BIO_lookup + BIO_lookup_ex + BIO_meth_free + BIO_meth_get_callback_ctrl + BIO_meth_get_create + BIO_meth_get_ctrl + BIO_meth_get_destroy + BIO_meth_get_gets + BIO_meth_get_puts + BIO_meth_get_read + BIO_meth_get_read_ex + BIO_meth_get_recvmmsg + BIO_meth_get_sendmmsg + BIO_meth_get_write + BIO_meth_get_write_ex + BIO_meth_new + BIO_meth_set_callback_ctrl + BIO_meth_set_create + BIO_meth_set_ctrl + BIO_meth_set_destroy + BIO_meth_set_gets + BIO_meth_set_puts + BIO_meth_set_read + BIO_meth_set_read_ex + BIO_meth_set_recvmmsg + BIO_meth_set_sendmmsg + BIO_meth_set_write + BIO_meth_set_write_ex + BIO_method_name + BIO_method_type + BIO_new + BIO_new_CMS + BIO_new_NDEF + BIO_new_PKCS7 + BIO_new_accept + BIO_new_bio_dgram_pair + BIO_new_bio_pair + BIO_new_connect + BIO_new_dgram + BIO_new_ex + BIO_new_fd + BIO_new_file + BIO_new_fp + BIO_new_from_core_bio + BIO_new_mem_buf + BIO_new_socket + BIO_next + BIO_nread + BIO_nread0 + BIO_number_read + BIO_number_written + BIO_nwrite + BIO_nwrite0 + BIO_parse_hostserv + BIO_pop + BIO_printf + BIO_ptr_ctrl + BIO_push + BIO_puts + BIO_read + BIO_read_ex + BIO_recvmmsg + BIO_s_accept + BIO_s_bio + BIO_s_connect + BIO_s_core + BIO_s_datagram + BIO_s_dgram_mem + BIO_s_dgram_pair + BIO_s_fd + BIO_s_file + BIO_s_log + BIO_s_mem + BIO_s_null + BIO_s_secmem + BIO_s_socket + BIO_sendmmsg + BIO_set_callback + BIO_set_callback_arg + BIO_set_callback_ex + BIO_set_cipher + BIO_set_data + BIO_set_ex_data + BIO_set_flags + BIO_set_init + BIO_set_next + BIO_set_retry_reason + BIO_set_shutdown + BIO_set_tcp_ndelay + BIO_snprintf + BIO_sock_error + BIO_sock_info + BIO_sock_init + BIO_sock_non_fatal_error + BIO_sock_should_retry + BIO_socket + BIO_socket_ioctl + BIO_socket_nbio + BIO_socket_wait + BIO_test_flags + BIO_up_ref + BIO_vfree + BIO_vprintf + BIO_vsnprintf + BIO_wait + BIO_write + BIO_write_ex + BN_BLINDING_convert + BN_BLINDING_convert_ex + BN_BLINDING_create_param + BN_BLINDING_free + BN_BLINDING_get_flags + BN_BLINDING_invert + BN_BLINDING_invert_ex + BN_BLINDING_is_current_thread + BN_BLINDING_lock + BN_BLINDING_new + BN_BLINDING_set_current_thread + BN_BLINDING_set_flags + BN_BLINDING_unlock + BN_BLINDING_update + BN_CTX_end + BN_CTX_free + BN_CTX_get + BN_CTX_new + BN_CTX_new_ex + BN_CTX_secure_new + BN_CTX_secure_new_ex + BN_CTX_start + BN_GENCB_call + BN_GENCB_free + BN_GENCB_get_arg + BN_GENCB_new + BN_GENCB_set + BN_GENCB_set_old + BN_GF2m_add + BN_GF2m_arr2poly + BN_GF2m_mod + BN_GF2m_mod_arr + BN_GF2m_mod_div + BN_GF2m_mod_div_arr + BN_GF2m_mod_exp + BN_GF2m_mod_exp_arr + BN_GF2m_mod_inv + BN_GF2m_mod_inv_arr + BN_GF2m_mod_mul + BN_GF2m_mod_mul_arr + BN_GF2m_mod_solve_quad + BN_GF2m_mod_solve_quad_arr + BN_GF2m_mod_sqr + BN_GF2m_mod_sqr_arr + BN_GF2m_mod_sqrt + BN_GF2m_mod_sqrt_arr + BN_GF2m_poly2arr + BN_MONT_CTX_copy + BN_MONT_CTX_free + BN_MONT_CTX_new + BN_MONT_CTX_set + BN_MONT_CTX_set_locked + BN_RECP_CTX_free + BN_RECP_CTX_new + BN_RECP_CTX_set + BN_X931_derive_prime_ex + BN_X931_generate_Xpq + BN_X931_generate_prime_ex + BN_abs_is_word + BN_add + BN_add_word + BN_are_coprime + BN_asc2bn + BN_bin2bn + BN_bn2bin + BN_bn2binpad + BN_bn2dec + BN_bn2hex + BN_bn2lebinpad + BN_bn2mpi + BN_bn2nativepad + BN_bntest_rand + BN_check_prime + BN_clear + BN_clear_bit + BN_clear_free + BN_cmp + BN_consttime_swap + BN_copy + BN_dec2bn + BN_div + BN_div_recp + BN_div_word + BN_dup + BN_exp + BN_free + BN_from_montgomery + BN_gcd + BN_generate_dsa_nonce + BN_generate_prime + BN_generate_prime_ex + BN_generate_prime_ex2 + BN_get0_nist_prime_192 + BN_get0_nist_prime_224 + BN_get0_nist_prime_256 + BN_get0_nist_prime_384 + BN_get0_nist_prime_521 + BN_get_flags + BN_get_params + BN_get_rfc2409_prime_1024 + BN_get_rfc2409_prime_768 + BN_get_rfc3526_prime_1536 + BN_get_rfc3526_prime_2048 + BN_get_rfc3526_prime_3072 + BN_get_rfc3526_prime_4096 + BN_get_rfc3526_prime_6144 + BN_get_rfc3526_prime_8192 + BN_get_word + BN_hex2bn + BN_is_bit_set + BN_is_negative + BN_is_odd + BN_is_one + BN_is_prime + BN_is_prime_ex + BN_is_prime_fasttest + BN_is_prime_fasttest_ex + BN_is_word + BN_is_zero + BN_kronecker + BN_lebin2bn + BN_lshift + BN_lshift1 + BN_mask_bits + BN_mod_add + BN_mod_add_quick + BN_mod_exp + BN_mod_exp2_mont + BN_mod_exp_mont + BN_mod_exp_mont_consttime + BN_mod_exp_mont_consttime_x2 + BN_mod_exp_mont_word + BN_mod_exp_recp + BN_mod_exp_simple + BN_mod_inverse + BN_mod_lshift + BN_mod_lshift1 + BN_mod_lshift1_quick + BN_mod_lshift_quick + BN_mod_mul + BN_mod_mul_montgomery + BN_mod_mul_reciprocal + BN_mod_sqr + BN_mod_sqrt + BN_mod_sub + BN_mod_sub_quick + BN_mod_word + BN_mpi2bn + BN_mul + BN_mul_word + BN_native2bn + BN_new + BN_nist_mod_192 + BN_nist_mod_224 + BN_nist_mod_256 + BN_nist_mod_384 + BN_nist_mod_521 + BN_nist_mod_func + BN_nnmod + BN_num_bits + BN_num_bits_word + BN_options + BN_print + BN_print_fp + BN_priv_rand + BN_priv_rand_ex + BN_priv_rand_range + BN_priv_rand_range_ex + BN_pseudo_rand + BN_pseudo_rand_range + BN_rand + BN_rand_ex + BN_rand_range + BN_rand_range_ex + BN_reciprocal + BN_rshift + BN_rshift1 + BN_secure_new + BN_security_bits + BN_set_bit + BN_set_flags + BN_set_negative + BN_set_params + BN_set_word + BN_signed_bin2bn + BN_signed_bn2bin + BN_signed_bn2lebin + BN_signed_bn2native + BN_signed_lebin2bn + BN_signed_native2bn + BN_sqr + BN_sub + BN_sub_word + BN_swap + BN_to_ASN1_ENUMERATED + BN_to_ASN1_INTEGER + BN_to_montgomery + BN_uadd + BN_ucmp + BN_usub + BN_value_one + BN_with_flags + BN_zero_ex + BUF_MEM_free + BUF_MEM_grow + BUF_MEM_grow_clean + BUF_MEM_new + BUF_MEM_new_ex + BUF_reverse + CAST_cbc_encrypt + CAST_cfb64_encrypt + CAST_decrypt + CAST_ecb_encrypt + CAST_encrypt + CAST_ofb64_encrypt + CAST_set_key + CBIGNUM_it + CERTIFICATEPOLICIES_free + CERTIFICATEPOLICIES_it + CERTIFICATEPOLICIES_new + CMAC_CTX_cleanup + CMAC_CTX_copy + CMAC_CTX_free + CMAC_CTX_get0_cipher_ctx + CMAC_CTX_new + CMAC_Final + CMAC_Init + CMAC_Update + CMAC_resume + CMS_AuthEnvelopedData_create + CMS_AuthEnvelopedData_create_ex + CMS_ContentInfo_free + CMS_ContentInfo_it + CMS_ContentInfo_new + CMS_ContentInfo_new_ex + CMS_ContentInfo_print_ctx + CMS_EncryptedData_decrypt + CMS_EncryptedData_encrypt + CMS_EncryptedData_encrypt_ex + CMS_EncryptedData_set1_key + CMS_EnvelopedData_create + CMS_EnvelopedData_create_ex + CMS_EnvelopedData_decrypt + CMS_EnvelopedData_dup + CMS_EnvelopedData_it + CMS_ReceiptRequest_create0 + CMS_ReceiptRequest_create0_ex + CMS_ReceiptRequest_free + CMS_ReceiptRequest_get0_values + CMS_ReceiptRequest_it + CMS_ReceiptRequest_new + CMS_RecipientEncryptedKey_cert_cmp + CMS_RecipientEncryptedKey_get0_id + CMS_RecipientInfo_decrypt + CMS_RecipientInfo_encrypt + CMS_RecipientInfo_get0_pkey_ctx + CMS_RecipientInfo_kari_decrypt + CMS_RecipientInfo_kari_get0_alg + CMS_RecipientInfo_kari_get0_ctx + CMS_RecipientInfo_kari_get0_orig_id + CMS_RecipientInfo_kari_get0_reks + CMS_RecipientInfo_kari_orig_id_cmp + CMS_RecipientInfo_kari_set0_pkey + CMS_RecipientInfo_kari_set0_pkey_and_peer + CMS_RecipientInfo_kekri_get0_id + CMS_RecipientInfo_kekri_id_cmp + CMS_RecipientInfo_kemri_cert_cmp + CMS_RecipientInfo_kemri_get0_ctx + CMS_RecipientInfo_kemri_get0_kdf_alg + CMS_RecipientInfo_kemri_set0_pkey + CMS_RecipientInfo_kemri_set_ukm + CMS_RecipientInfo_ktri_cert_cmp + CMS_RecipientInfo_ktri_get0_algs + CMS_RecipientInfo_ktri_get0_signer_id + CMS_RecipientInfo_set0_key + CMS_RecipientInfo_set0_password + CMS_RecipientInfo_set0_pkey + CMS_RecipientInfo_type + CMS_SharedInfo_encode + CMS_SignedData_free + CMS_SignedData_init + CMS_SignedData_new + CMS_SignedData_verify + CMS_SignerInfo_cert_cmp + CMS_SignerInfo_get0_algs + CMS_SignerInfo_get0_md_ctx + CMS_SignerInfo_get0_pkey_ctx + CMS_SignerInfo_get0_signature + CMS_SignerInfo_get0_signer_id + CMS_SignerInfo_set1_signer_cert + CMS_SignerInfo_sign + CMS_SignerInfo_verify + CMS_SignerInfo_verify_content + CMS_add0_CertificateChoices + CMS_add0_RevocationInfoChoice + CMS_add0_cert + CMS_add0_crl + CMS_add0_recipient_key + CMS_add0_recipient_password + CMS_add1_ReceiptRequest + CMS_add1_cert + CMS_add1_crl + CMS_add1_recipient + CMS_add1_recipient_cert + CMS_add1_signer + CMS_add_simple_smimecap + CMS_add_smimecap + CMS_add_standard_smimecap + CMS_compress + CMS_data + CMS_dataFinal + CMS_dataInit + CMS_data_create + CMS_data_create_ex + CMS_decrypt + CMS_decrypt_set1_key + CMS_decrypt_set1_password + CMS_decrypt_set1_pkey + CMS_decrypt_set1_pkey_and_peer + CMS_digest_create + CMS_digest_create_ex + CMS_digest_verify + CMS_encrypt + CMS_encrypt_ex + CMS_final + CMS_final_digest + CMS_get0_RecipientInfos + CMS_get0_SignerInfos + CMS_get0_content + CMS_get0_eContentType + CMS_get0_signers + CMS_get0_type + CMS_get1_ReceiptRequest + CMS_get1_certs + CMS_get1_crls + CMS_is_detached + CMS_set1_eContentType + CMS_set1_signers_certs + CMS_set_detached + CMS_sign + CMS_sign_ex + CMS_sign_receipt + CMS_signed_add1_attr + CMS_signed_add1_attr_by_NID + CMS_signed_add1_attr_by_OBJ + CMS_signed_add1_attr_by_txt + CMS_signed_delete_attr + CMS_signed_get0_data_by_OBJ + CMS_signed_get_attr + CMS_signed_get_attr_by_NID + CMS_signed_get_attr_by_OBJ + CMS_signed_get_attr_count + CMS_stream + CMS_uncompress + CMS_unsigned_add1_attr + CMS_unsigned_add1_attr_by_NID + CMS_unsigned_add1_attr_by_OBJ + CMS_unsigned_add1_attr_by_txt + CMS_unsigned_delete_attr + CMS_unsigned_get0_data_by_OBJ + CMS_unsigned_get_attr + CMS_unsigned_get_attr_by_NID + CMS_unsigned_get_attr_by_OBJ + CMS_unsigned_get_attr_count + CMS_verify + CMS_verify_receipt + COMP_CTX_free + COMP_CTX_get_method + COMP_CTX_get_type + COMP_CTX_new + COMP_brotli + COMP_brotli_oneshot + COMP_compress_block + COMP_expand_block + COMP_get_name + COMP_get_type + COMP_zlib + COMP_zlib_oneshot + COMP_zstd + COMP_zstd_oneshot + CONF_dump_bio + CONF_dump_fp + CONF_free + CONF_get1_default_config_file + CONF_get_number + CONF_get_section + CONF_get_string + CONF_imodule_get_flags + CONF_imodule_get_module + CONF_imodule_get_name + CONF_imodule_get_usr_data + CONF_imodule_get_value + CONF_imodule_set_flags + CONF_imodule_set_usr_data + CONF_load + CONF_load_bio + CONF_load_fp + CONF_module_add + CONF_module_get_usr_data + CONF_module_set_usr_data + CONF_modules_finish + CONF_modules_load + CONF_modules_load_file + CONF_modules_load_file_ex + CONF_modules_unload + CONF_parse_list + CONF_set_default_method + CONF_set_nconf + CRL_DIST_POINTS_free + CRL_DIST_POINTS_it + CRL_DIST_POINTS_new + CRYPTO_128_unwrap + CRYPTO_128_unwrap_pad + CRYPTO_128_wrap + CRYPTO_128_wrap_pad + CRYPTO_THREAD_cleanup_local + CRYPTO_THREAD_compare_id + CRYPTO_THREAD_get_current_id + CRYPTO_THREAD_get_local + CRYPTO_THREAD_init_local + CRYPTO_THREAD_lock_free + CRYPTO_THREAD_lock_new + CRYPTO_THREAD_read_lock + CRYPTO_THREAD_run_once + CRYPTO_THREAD_set_local + CRYPTO_THREAD_unlock + CRYPTO_THREAD_write_lock + CRYPTO_aligned_alloc + CRYPTO_aligned_alloc_array + CRYPTO_alloc_ex_data + CRYPTO_atomic_add + CRYPTO_atomic_add64 + CRYPTO_atomic_and + CRYPTO_atomic_load + CRYPTO_atomic_load_int + CRYPTO_atomic_or + CRYPTO_atomic_store + CRYPTO_calloc + CRYPTO_cbc128_decrypt + CRYPTO_cbc128_encrypt + CRYPTO_ccm128_aad + CRYPTO_ccm128_decrypt + CRYPTO_ccm128_decrypt_ccm64 + CRYPTO_ccm128_encrypt + CRYPTO_ccm128_encrypt_ccm64 + CRYPTO_ccm128_init + CRYPTO_ccm128_setiv + CRYPTO_ccm128_tag + CRYPTO_cfb128_1_encrypt + CRYPTO_cfb128_8_encrypt + CRYPTO_cfb128_encrypt + CRYPTO_clear_free + CRYPTO_clear_realloc + CRYPTO_clear_realloc_array + CRYPTO_ctr128_encrypt + CRYPTO_ctr128_encrypt_ctr32 + CRYPTO_cts128_decrypt + CRYPTO_cts128_decrypt_block + CRYPTO_cts128_encrypt + CRYPTO_cts128_encrypt_block + CRYPTO_dup_ex_data + CRYPTO_free + CRYPTO_free_ex_data + CRYPTO_free_ex_index + CRYPTO_gcm128_aad + CRYPTO_gcm128_decrypt + CRYPTO_gcm128_decrypt_ctr32 + CRYPTO_gcm128_encrypt + CRYPTO_gcm128_encrypt_ctr32 + CRYPTO_gcm128_finish + CRYPTO_gcm128_init + CRYPTO_gcm128_new + CRYPTO_gcm128_release + CRYPTO_gcm128_setiv + CRYPTO_gcm128_tag + CRYPTO_get_ex_data + CRYPTO_get_ex_new_index + CRYPTO_get_mem_functions + CRYPTO_malloc + CRYPTO_malloc_array + CRYPTO_memcmp + CRYPTO_memdup + CRYPTO_new_ex_data + CRYPTO_nistcts128_decrypt + CRYPTO_nistcts128_decrypt_block + CRYPTO_nistcts128_encrypt + CRYPTO_nistcts128_encrypt_block + CRYPTO_ocb128_aad + CRYPTO_ocb128_cleanup + CRYPTO_ocb128_copy_ctx + CRYPTO_ocb128_decrypt + CRYPTO_ocb128_encrypt + CRYPTO_ocb128_finish + CRYPTO_ocb128_init + CRYPTO_ocb128_new + CRYPTO_ocb128_setiv + CRYPTO_ocb128_tag + CRYPTO_ofb128_encrypt + CRYPTO_realloc + CRYPTO_realloc_array + CRYPTO_secure_actual_size + CRYPTO_secure_allocated + CRYPTO_secure_calloc + CRYPTO_secure_clear_free + CRYPTO_secure_free + CRYPTO_secure_malloc + CRYPTO_secure_malloc_array + CRYPTO_secure_malloc_done + CRYPTO_secure_malloc_init + CRYPTO_secure_malloc_initialized + CRYPTO_secure_used + CRYPTO_secure_zalloc + CRYPTO_set_ex_data + CRYPTO_set_mem_functions + CRYPTO_strdup + CRYPTO_strndup + CRYPTO_xts128_encrypt + CRYPTO_zalloc + CTLOG_STORE_free + CTLOG_STORE_get0_log_by_id + CTLOG_STORE_load_default_file + CTLOG_STORE_load_file + CTLOG_STORE_new + CTLOG_STORE_new_ex + CTLOG_free + CTLOG_get0_log_id + CTLOG_get0_name + CTLOG_get0_public_key + CTLOG_new + CTLOG_new_ex + CTLOG_new_from_base64 + CTLOG_new_from_base64_ex + CT_POLICY_EVAL_CTX_free + CT_POLICY_EVAL_CTX_get0_cert + CT_POLICY_EVAL_CTX_get0_issuer + CT_POLICY_EVAL_CTX_get0_log_store + CT_POLICY_EVAL_CTX_get_time + CT_POLICY_EVAL_CTX_new + CT_POLICY_EVAL_CTX_new_ex + CT_POLICY_EVAL_CTX_set1_cert + CT_POLICY_EVAL_CTX_set1_issuer + CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE + CT_POLICY_EVAL_CTX_set_time + Camellia_cbc_encrypt + Camellia_cfb128_encrypt + Camellia_cfb1_encrypt + Camellia_cfb8_encrypt + Camellia_ctr128_encrypt + Camellia_decrypt + Camellia_ecb_encrypt + Camellia_encrypt + Camellia_ofb128_encrypt + Camellia_set_key + DES_cbc_cksum + DES_cbc_encrypt + DES_cfb64_encrypt + DES_cfb_encrypt + DES_check_key_parity + DES_crypt + DES_decrypt3 + DES_ecb3_encrypt + DES_ecb_encrypt + DES_ede3_cbc_encrypt + DES_ede3_cfb64_encrypt + DES_ede3_cfb_encrypt + DES_ede3_ofb64_encrypt + DES_encrypt1 + DES_encrypt2 + DES_encrypt3 + DES_fcrypt + DES_is_weak_key + DES_key_sched + DES_ncbc_encrypt + DES_ofb64_encrypt + DES_ofb_encrypt + DES_options + DES_pcbc_encrypt + DES_quad_cksum + DES_random_key + DES_set_key + DES_set_key_checked + DES_set_key_unchecked + DES_set_odd_parity + DES_string_to_2keys + DES_string_to_key + DES_xcbc_encrypt + DH_KDF_X9_42 + DH_OpenSSL + DH_bits + DH_check + DH_check_ex + DH_check_params + DH_check_params_ex + DH_check_pub_key + DH_check_pub_key_ex + DH_clear_flags + DH_compute_key + DH_compute_key_padded + DH_free + DH_generate_key + DH_generate_parameters + DH_generate_parameters_ex + DH_get0_engine + DH_get0_g + DH_get0_key + DH_get0_p + DH_get0_pqg + DH_get0_priv_key + DH_get0_pub_key + DH_get0_q + DH_get_1024_160 + DH_get_2048_224 + DH_get_2048_256 + DH_get_default_method + DH_get_ex_data + DH_get_length + DH_get_nid + DH_meth_dup + DH_meth_free + DH_meth_get0_app_data + DH_meth_get0_name + DH_meth_get_bn_mod_exp + DH_meth_get_compute_key + DH_meth_get_finish + DH_meth_get_flags + DH_meth_get_generate_key + DH_meth_get_generate_params + DH_meth_get_init + DH_meth_new + DH_meth_set0_app_data + DH_meth_set1_name + DH_meth_set_bn_mod_exp + DH_meth_set_compute_key + DH_meth_set_finish + DH_meth_set_flags + DH_meth_set_generate_key + DH_meth_set_generate_params + DH_meth_set_init + DH_new + DH_new_by_nid + DH_new_method + DH_security_bits + DH_set0_key + DH_set0_pqg + DH_set_default_method + DH_set_ex_data + DH_set_flags + DH_set_length + DH_set_method + DH_size + DH_test_flags + DH_up_ref + DHparams_dup + DHparams_it + DHparams_print + DHparams_print_fp + DIRECTORYSTRING_free + DIRECTORYSTRING_it + DIRECTORYSTRING_new + DISPLAYTEXT_free + DISPLAYTEXT_it + DISPLAYTEXT_new + DIST_POINT_NAME_dup + DIST_POINT_NAME_free + DIST_POINT_NAME_it + DIST_POINT_NAME_new + DIST_POINT_free + DIST_POINT_it + DIST_POINT_new + DIST_POINT_set_dpname + DSA_OpenSSL + DSA_SIG_free + DSA_SIG_get0 + DSA_SIG_new + DSA_SIG_set0 + DSA_bits + DSA_clear_flags + DSA_do_sign + DSA_do_verify + DSA_dup_DH + DSA_free + DSA_generate_key + DSA_generate_parameters + DSA_generate_parameters_ex + DSA_get0_engine + DSA_get0_g + DSA_get0_key + DSA_get0_p + DSA_get0_pqg + DSA_get0_priv_key + DSA_get0_pub_key + DSA_get0_q + DSA_get_default_method + DSA_get_ex_data + DSA_get_method + DSA_meth_dup + DSA_meth_free + DSA_meth_get0_app_data + DSA_meth_get0_name + DSA_meth_get_bn_mod_exp + DSA_meth_get_finish + DSA_meth_get_flags + DSA_meth_get_init + DSA_meth_get_keygen + DSA_meth_get_mod_exp + DSA_meth_get_paramgen + DSA_meth_get_sign + DSA_meth_get_sign_setup + DSA_meth_get_verify + DSA_meth_new + DSA_meth_set0_app_data + DSA_meth_set1_name + DSA_meth_set_bn_mod_exp + DSA_meth_set_finish + DSA_meth_set_flags + DSA_meth_set_init + DSA_meth_set_keygen + DSA_meth_set_mod_exp + DSA_meth_set_paramgen + DSA_meth_set_sign + DSA_meth_set_sign_setup + DSA_meth_set_verify + DSA_new + DSA_new_method + DSA_print + DSA_print_fp + DSA_security_bits + DSA_set0_key + DSA_set0_pqg + DSA_set_default_method + DSA_set_ex_data + DSA_set_flags + DSA_set_method + DSA_sign + DSA_sign_setup + DSA_size + DSA_test_flags + DSA_up_ref + DSA_verify + DSAparams_dup + DSAparams_print + DSAparams_print_fp + DSO_METHOD_openssl + DSO_bind_func + DSO_convert_filename + DSO_ctrl + DSO_dsobyaddr + DSO_flags + DSO_free + DSO_get_filename + DSO_global_lookup + DSO_load + DSO_merge + DSO_new + DSO_pathbyaddr + DSO_set_filename + DSO_up_ref + ECDH_KDF_X9_62 + ECDH_compute_key + ECDSA_SIG_free + ECDSA_SIG_get0 + ECDSA_SIG_get0_r + ECDSA_SIG_get0_s + ECDSA_SIG_new + ECDSA_SIG_set0 + ECDSA_do_sign + ECDSA_do_sign_ex + ECDSA_do_verify + ECDSA_sign + ECDSA_sign_ex + ECDSA_sign_setup + ECDSA_size + ECDSA_verify + ECPARAMETERS_free + ECPARAMETERS_it + ECPARAMETERS_new + ECPKPARAMETERS_free + ECPKPARAMETERS_it + ECPKPARAMETERS_new + ECPKParameters_print + ECPKParameters_print_fp + ECParameters_print + ECParameters_print_fp + EC_GF2m_simple_method + EC_GFp_mont_method + EC_GFp_nist_method + EC_GFp_simple_method + EC_GROUP_check + EC_GROUP_check_discriminant + EC_GROUP_check_named_curve + EC_GROUP_clear_free + EC_GROUP_cmp + EC_GROUP_copy + EC_GROUP_dup + EC_GROUP_free + EC_GROUP_get0_cofactor + EC_GROUP_get0_field + EC_GROUP_get0_generator + EC_GROUP_get0_order + EC_GROUP_get0_seed + EC_GROUP_get_asn1_flag + EC_GROUP_get_basis_type + EC_GROUP_get_cofactor + EC_GROUP_get_curve + EC_GROUP_get_curve_GF2m + EC_GROUP_get_curve_GFp + EC_GROUP_get_curve_name + EC_GROUP_get_degree + EC_GROUP_get_ecparameters + EC_GROUP_get_ecpkparameters + EC_GROUP_get_field_type + EC_GROUP_get_mont_data + EC_GROUP_get_order + EC_GROUP_get_pentanomial_basis + EC_GROUP_get_point_conversion_form + EC_GROUP_get_seed_len + EC_GROUP_get_trinomial_basis + EC_GROUP_have_precompute_mult + EC_GROUP_method_of + EC_GROUP_new + EC_GROUP_new_by_curve_name + EC_GROUP_new_by_curve_name_ex + EC_GROUP_new_curve_GF2m + EC_GROUP_new_curve_GFp + EC_GROUP_new_from_ecparameters + EC_GROUP_new_from_ecpkparameters + EC_GROUP_new_from_params + EC_GROUP_order_bits + EC_GROUP_precompute_mult + EC_GROUP_set_asn1_flag + EC_GROUP_set_curve + EC_GROUP_set_curve_GF2m + EC_GROUP_set_curve_GFp + EC_GROUP_set_curve_name + EC_GROUP_set_generator + EC_GROUP_set_point_conversion_form + EC_GROUP_set_seed + EC_GROUP_to_params + EC_KEY_METHOD_free + EC_KEY_METHOD_get_compute_key + EC_KEY_METHOD_get_init + EC_KEY_METHOD_get_keygen + EC_KEY_METHOD_get_sign + EC_KEY_METHOD_get_verify + EC_KEY_METHOD_new + EC_KEY_METHOD_set_compute_key + EC_KEY_METHOD_set_init + EC_KEY_METHOD_set_keygen + EC_KEY_METHOD_set_sign + EC_KEY_METHOD_set_verify + EC_KEY_OpenSSL + EC_KEY_can_sign + EC_KEY_check_key + EC_KEY_clear_flags + EC_KEY_copy + EC_KEY_decoded_from_explicit_params + EC_KEY_dup + EC_KEY_free + EC_KEY_generate_key + EC_KEY_get0_engine + EC_KEY_get0_group + EC_KEY_get0_private_key + EC_KEY_get0_public_key + EC_KEY_get_conv_form + EC_KEY_get_default_method + EC_KEY_get_enc_flags + EC_KEY_get_ex_data + EC_KEY_get_flags + EC_KEY_get_method + EC_KEY_key2buf + EC_KEY_new + EC_KEY_new_by_curve_name + EC_KEY_new_by_curve_name_ex + EC_KEY_new_ex + EC_KEY_new_method + EC_KEY_oct2key + EC_KEY_oct2priv + EC_KEY_precompute_mult + EC_KEY_print + EC_KEY_print_fp + EC_KEY_priv2buf + EC_KEY_priv2oct + EC_KEY_set_asn1_flag + EC_KEY_set_conv_form + EC_KEY_set_default_method + EC_KEY_set_enc_flags + EC_KEY_set_ex_data + EC_KEY_set_flags + EC_KEY_set_group + EC_KEY_set_method + EC_KEY_set_private_key + EC_KEY_set_public_key + EC_KEY_set_public_key_affine_coordinates + EC_KEY_up_ref + EC_METHOD_get_field_type + EC_POINT_add + EC_POINT_bn2point + EC_POINT_clear_free + EC_POINT_cmp + EC_POINT_copy + EC_POINT_dbl + EC_POINT_dup + EC_POINT_free + EC_POINT_get_Jprojective_coordinates_GFp + EC_POINT_get_affine_coordinates + EC_POINT_get_affine_coordinates_GF2m + EC_POINT_get_affine_coordinates_GFp + EC_POINT_hex2point + EC_POINT_invert + EC_POINT_is_at_infinity + EC_POINT_is_on_curve + EC_POINT_make_affine + EC_POINT_method_of + EC_POINT_mul + EC_POINT_new + EC_POINT_oct2point + EC_POINT_point2bn + EC_POINT_point2buf + EC_POINT_point2hex + EC_POINT_point2oct + EC_POINT_set_Jprojective_coordinates_GFp + EC_POINT_set_affine_coordinates + EC_POINT_set_affine_coordinates_GF2m + EC_POINT_set_affine_coordinates_GFp + EC_POINT_set_compressed_coordinates + EC_POINT_set_compressed_coordinates_GF2m + EC_POINT_set_compressed_coordinates_GFp + EC_POINT_set_to_infinity + EC_POINTs_make_affine + EC_POINTs_mul + EC_curve_nid2nist + EC_curve_nist2nid + EC_get_builtin_curves + EDIPARTYNAME_free + EDIPARTYNAME_it + EDIPARTYNAME_new + ENGINE_add + ENGINE_add_conf_module + ENGINE_by_id + ENGINE_cmd_is_executable + ENGINE_ctrl + ENGINE_ctrl_cmd + ENGINE_ctrl_cmd_string + ENGINE_finish + ENGINE_free + ENGINE_get_DH + ENGINE_get_DSA + ENGINE_get_EC + ENGINE_get_RAND + ENGINE_get_RSA + ENGINE_get_cipher + ENGINE_get_cipher_engine + ENGINE_get_ciphers + ENGINE_get_cmd_defns + ENGINE_get_ctrl_function + ENGINE_get_default_DH + ENGINE_get_default_DSA + ENGINE_get_default_EC + ENGINE_get_default_RAND + ENGINE_get_default_RSA + ENGINE_get_destroy_function + ENGINE_get_digest + ENGINE_get_digest_engine + ENGINE_get_digests + ENGINE_get_ex_data + ENGINE_get_finish_function + ENGINE_get_first + ENGINE_get_flags + ENGINE_get_id + ENGINE_get_init_function + ENGINE_get_last + ENGINE_get_load_privkey_function + ENGINE_get_load_pubkey_function + ENGINE_get_name + ENGINE_get_next + ENGINE_get_pkey_asn1_meth + ENGINE_get_pkey_asn1_meth_engine + ENGINE_get_pkey_asn1_meth_str + ENGINE_get_pkey_asn1_meths + ENGINE_get_pkey_meth + ENGINE_get_pkey_meth_engine + ENGINE_get_pkey_meths + ENGINE_get_prev + ENGINE_get_ssl_client_cert_function + ENGINE_get_static_state + ENGINE_get_table_flags + ENGINE_init + ENGINE_load_builtin_engines + ENGINE_load_private_key + ENGINE_load_public_key + ENGINE_load_ssl_client_cert + ENGINE_new + ENGINE_pkey_asn1_find_str + ENGINE_register_DH + ENGINE_register_DSA + ENGINE_register_EC + ENGINE_register_RAND + ENGINE_register_RSA + ENGINE_register_all_DH + ENGINE_register_all_DSA + ENGINE_register_all_EC + ENGINE_register_all_RAND + ENGINE_register_all_RSA + ENGINE_register_all_ciphers + ENGINE_register_all_complete + ENGINE_register_all_digests + ENGINE_register_all_pkey_asn1_meths + ENGINE_register_all_pkey_meths + ENGINE_register_ciphers + ENGINE_register_complete + ENGINE_register_digests + ENGINE_register_pkey_asn1_meths + ENGINE_register_pkey_meths + ENGINE_remove + ENGINE_set_DH + ENGINE_set_DSA + ENGINE_set_EC + ENGINE_set_RAND + ENGINE_set_RSA + ENGINE_set_ciphers + ENGINE_set_cmd_defns + ENGINE_set_ctrl_function + ENGINE_set_default + ENGINE_set_default_DH + ENGINE_set_default_DSA + ENGINE_set_default_EC + ENGINE_set_default_RAND + ENGINE_set_default_RSA + ENGINE_set_default_ciphers + ENGINE_set_default_digests + ENGINE_set_default_pkey_asn1_meths + ENGINE_set_default_pkey_meths + ENGINE_set_default_string + ENGINE_set_destroy_function + ENGINE_set_digests + ENGINE_set_ex_data + ENGINE_set_finish_function + ENGINE_set_flags + ENGINE_set_id + ENGINE_set_init_function + ENGINE_set_load_privkey_function + ENGINE_set_load_pubkey_function + ENGINE_set_load_ssl_client_cert_function + ENGINE_set_name + ENGINE_set_pkey_asn1_meths + ENGINE_set_pkey_meths + ENGINE_set_table_flags + ENGINE_unregister_DH + ENGINE_unregister_DSA + ENGINE_unregister_EC + ENGINE_unregister_RAND + ENGINE_unregister_RSA + ENGINE_unregister_ciphers + ENGINE_unregister_digests + ENGINE_unregister_pkey_asn1_meths + ENGINE_unregister_pkey_meths + ENGINE_up_ref + ERR_add_error_data + ERR_add_error_mem_bio + ERR_add_error_txt + ERR_add_error_vdata + ERR_clear_error + ERR_clear_last_mark + ERR_count_to_mark + ERR_error_string + ERR_error_string_n + ERR_func_error_string + ERR_get_error + ERR_get_error_all + ERR_get_error_line + ERR_get_error_line_data + ERR_get_next_error_library + ERR_get_state + ERR_lib_error_string + ERR_load_ASN1_strings + ERR_load_ASYNC_strings + ERR_load_BIO_strings + ERR_load_BN_strings + ERR_load_BUF_strings + ERR_load_CMS_strings + ERR_load_COMP_strings + ERR_load_CONF_strings + ERR_load_CRYPTO_strings + ERR_load_CT_strings + ERR_load_DH_strings + ERR_load_DSA_strings + ERR_load_EC_strings + ERR_load_ENGINE_strings + ERR_load_ERR_strings + ERR_load_EVP_strings + ERR_load_KDF_strings + ERR_load_OBJ_strings + ERR_load_OCSP_strings + ERR_load_OSSL_STORE_strings + ERR_load_PEM_strings + ERR_load_PKCS12_strings + ERR_load_PKCS7_strings + ERR_load_RAND_strings + ERR_load_RSA_strings + ERR_load_TS_strings + ERR_load_UI_strings + ERR_load_X509V3_strings + ERR_load_X509_strings + ERR_load_strings + ERR_load_strings_const + ERR_new + ERR_peek_error + ERR_peek_error_all + ERR_peek_error_data + ERR_peek_error_func + ERR_peek_error_line + ERR_peek_error_line_data + ERR_peek_last_error + ERR_peek_last_error_all + ERR_peek_last_error_data + ERR_peek_last_error_func + ERR_peek_last_error_line + ERR_peek_last_error_line_data + ERR_pop + ERR_pop_to_mark + ERR_print_errors + ERR_print_errors_cb + ERR_print_errors_fp + ERR_reason_error_string + ERR_remove_state + ERR_remove_thread_state + ERR_set_debug + ERR_set_error + ERR_set_error_data + ERR_set_mark + ERR_unload_strings + ERR_vset_error + ESS_CERT_ID_V2_dup + ESS_CERT_ID_V2_free + ESS_CERT_ID_V2_new + ESS_CERT_ID_dup + ESS_CERT_ID_free + ESS_CERT_ID_new + ESS_ISSUER_SERIAL_dup + ESS_ISSUER_SERIAL_free + ESS_ISSUER_SERIAL_new + ESS_SIGNING_CERT_V2_dup + ESS_SIGNING_CERT_V2_free + ESS_SIGNING_CERT_V2_it + ESS_SIGNING_CERT_V2_new + ESS_SIGNING_CERT_dup + ESS_SIGNING_CERT_free + ESS_SIGNING_CERT_it + ESS_SIGNING_CERT_new + EVP_ASYM_CIPHER_do_all_provided + EVP_ASYM_CIPHER_fetch + EVP_ASYM_CIPHER_free + EVP_ASYM_CIPHER_get0_description + EVP_ASYM_CIPHER_get0_name + EVP_ASYM_CIPHER_get0_provider + EVP_ASYM_CIPHER_gettable_ctx_params + EVP_ASYM_CIPHER_is_a + EVP_ASYM_CIPHER_names_do_all + EVP_ASYM_CIPHER_settable_ctx_params + EVP_ASYM_CIPHER_up_ref + EVP_BytesToKey + EVP_CIPHER_CTX_buf_noconst + EVP_CIPHER_CTX_cipher + EVP_CIPHER_CTX_clear_flags + EVP_CIPHER_CTX_copy + EVP_CIPHER_CTX_ctrl + EVP_CIPHER_CTX_dup + EVP_CIPHER_CTX_free + EVP_CIPHER_CTX_get0_cipher + EVP_CIPHER_CTX_get1_cipher + EVP_CIPHER_CTX_get_algor + EVP_CIPHER_CTX_get_algor_params + EVP_CIPHER_CTX_get_app_data + EVP_CIPHER_CTX_get_block_size + EVP_CIPHER_CTX_get_cipher_data + EVP_CIPHER_CTX_get_iv_length + EVP_CIPHER_CTX_get_key_length + EVP_CIPHER_CTX_get_nid + EVP_CIPHER_CTX_get_num + EVP_CIPHER_CTX_get_original_iv + EVP_CIPHER_CTX_get_params + EVP_CIPHER_CTX_get_tag_length + EVP_CIPHER_CTX_get_updated_iv + EVP_CIPHER_CTX_gettable_params + EVP_CIPHER_CTX_is_encrypting + EVP_CIPHER_CTX_iv + EVP_CIPHER_CTX_iv_noconst + EVP_CIPHER_CTX_new + EVP_CIPHER_CTX_original_iv + EVP_CIPHER_CTX_rand_key + EVP_CIPHER_CTX_reset + EVP_CIPHER_CTX_set_algor_params + EVP_CIPHER_CTX_set_app_data + EVP_CIPHER_CTX_set_cipher_data + EVP_CIPHER_CTX_set_flags + EVP_CIPHER_CTX_set_key_length + EVP_CIPHER_CTX_set_num + EVP_CIPHER_CTX_set_padding + EVP_CIPHER_CTX_set_params + EVP_CIPHER_CTX_settable_params + EVP_CIPHER_CTX_test_flags + EVP_CIPHER_asn1_to_param + EVP_CIPHER_can_pipeline + EVP_CIPHER_do_all + EVP_CIPHER_do_all_provided + EVP_CIPHER_do_all_sorted + EVP_CIPHER_fetch + EVP_CIPHER_free + EVP_CIPHER_get0_description + EVP_CIPHER_get0_name + EVP_CIPHER_get0_provider + EVP_CIPHER_get_asn1_iv + EVP_CIPHER_get_block_size + EVP_CIPHER_get_flags + EVP_CIPHER_get_iv_length + EVP_CIPHER_get_key_length + EVP_CIPHER_get_mode + EVP_CIPHER_get_nid + EVP_CIPHER_get_params + EVP_CIPHER_get_type + EVP_CIPHER_gettable_ctx_params + EVP_CIPHER_gettable_params + EVP_CIPHER_impl_ctx_size + EVP_CIPHER_is_a + EVP_CIPHER_meth_dup + EVP_CIPHER_meth_free + EVP_CIPHER_meth_get_cleanup + EVP_CIPHER_meth_get_ctrl + EVP_CIPHER_meth_get_do_cipher + EVP_CIPHER_meth_get_get_asn1_params + EVP_CIPHER_meth_get_init + EVP_CIPHER_meth_get_set_asn1_params + EVP_CIPHER_meth_new + EVP_CIPHER_meth_set_cleanup + EVP_CIPHER_meth_set_ctrl + EVP_CIPHER_meth_set_do_cipher + EVP_CIPHER_meth_set_flags + EVP_CIPHER_meth_set_get_asn1_params + EVP_CIPHER_meth_set_impl_ctx_size + EVP_CIPHER_meth_set_init + EVP_CIPHER_meth_set_iv_length + EVP_CIPHER_meth_set_set_asn1_params + EVP_CIPHER_names_do_all + EVP_CIPHER_param_to_asn1 + EVP_CIPHER_set_asn1_iv + EVP_CIPHER_settable_ctx_params + EVP_CIPHER_up_ref + EVP_Cipher + EVP_CipherFinal + EVP_CipherFinal_ex + EVP_CipherInit + EVP_CipherInit_SKEY + EVP_CipherInit_ex + EVP_CipherInit_ex2 + EVP_CipherPipelineDecryptInit + EVP_CipherPipelineEncryptInit + EVP_CipherPipelineFinal + EVP_CipherPipelineUpdate + EVP_CipherUpdate + EVP_DecodeBlock + EVP_DecodeFinal + EVP_DecodeInit + EVP_DecodeUpdate + EVP_DecryptFinal + EVP_DecryptFinal_ex + EVP_DecryptInit + EVP_DecryptInit_ex + EVP_DecryptInit_ex2 + EVP_DecryptUpdate + EVP_Digest + EVP_DigestFinal + EVP_DigestFinalXOF + EVP_DigestFinal_ex + EVP_DigestInit + EVP_DigestInit_ex + EVP_DigestInit_ex2 + EVP_DigestSign + EVP_DigestSignFinal + EVP_DigestSignInit + EVP_DigestSignInit_ex + EVP_DigestSignUpdate + EVP_DigestSqueeze + EVP_DigestUpdate + EVP_DigestVerify + EVP_DigestVerifyFinal + EVP_DigestVerifyInit + EVP_DigestVerifyInit_ex + EVP_DigestVerifyUpdate + EVP_ENCODE_CTX_copy + EVP_ENCODE_CTX_free + EVP_ENCODE_CTX_new + EVP_ENCODE_CTX_num + EVP_EncodeBlock + EVP_EncodeFinal + EVP_EncodeInit + EVP_EncodeUpdate + EVP_EncryptFinal + EVP_EncryptFinal_ex + EVP_EncryptInit + EVP_EncryptInit_ex + EVP_EncryptInit_ex2 + EVP_EncryptUpdate + EVP_KDF_CTX_dup + EVP_KDF_CTX_free + EVP_KDF_CTX_get_kdf_size + EVP_KDF_CTX_get_params + EVP_KDF_CTX_gettable_params + EVP_KDF_CTX_kdf + EVP_KDF_CTX_new + EVP_KDF_CTX_reset + EVP_KDF_CTX_set_SKEY + EVP_KDF_CTX_set_params + EVP_KDF_CTX_settable_params + EVP_KDF_derive + EVP_KDF_derive_SKEY + EVP_KDF_do_all_provided + EVP_KDF_fetch + EVP_KDF_free + EVP_KDF_get0_description + EVP_KDF_get0_name + EVP_KDF_get0_provider + EVP_KDF_get_params + EVP_KDF_gettable_ctx_params + EVP_KDF_gettable_params + EVP_KDF_is_a + EVP_KDF_names_do_all + EVP_KDF_settable_ctx_params + EVP_KDF_up_ref + EVP_KEM_do_all_provided + EVP_KEM_fetch + EVP_KEM_free + EVP_KEM_get0_description + EVP_KEM_get0_name + EVP_KEM_get0_provider + EVP_KEM_gettable_ctx_params + EVP_KEM_is_a + EVP_KEM_names_do_all + EVP_KEM_settable_ctx_params + EVP_KEM_up_ref + EVP_KEYEXCH_do_all_provided + EVP_KEYEXCH_fetch + EVP_KEYEXCH_free + EVP_KEYEXCH_get0_description + EVP_KEYEXCH_get0_name + EVP_KEYEXCH_get0_provider + EVP_KEYEXCH_gettable_ctx_params + EVP_KEYEXCH_is_a + EVP_KEYEXCH_names_do_all + EVP_KEYEXCH_settable_ctx_params + EVP_KEYEXCH_up_ref + EVP_KEYMGMT_do_all_provided + EVP_KEYMGMT_fetch + EVP_KEYMGMT_free + EVP_KEYMGMT_gen_gettable_params + EVP_KEYMGMT_gen_settable_params + EVP_KEYMGMT_get0_description + EVP_KEYMGMT_get0_name + EVP_KEYMGMT_get0_provider + EVP_KEYMGMT_gettable_params + EVP_KEYMGMT_is_a + EVP_KEYMGMT_names_do_all + EVP_KEYMGMT_settable_params + EVP_KEYMGMT_up_ref + EVP_MAC_CTX_dup + EVP_MAC_CTX_free + EVP_MAC_CTX_get0_mac + EVP_MAC_CTX_get_block_size + EVP_MAC_CTX_get_mac_size + EVP_MAC_CTX_get_params + EVP_MAC_CTX_gettable_params + EVP_MAC_CTX_new + EVP_MAC_CTX_set_params + EVP_MAC_CTX_settable_params + EVP_MAC_do_all_provided + EVP_MAC_fetch + EVP_MAC_final + EVP_MAC_finalXOF + EVP_MAC_free + EVP_MAC_get0_description + EVP_MAC_get0_name + EVP_MAC_get0_provider + EVP_MAC_get_params + EVP_MAC_gettable_ctx_params + EVP_MAC_gettable_params + EVP_MAC_init + EVP_MAC_init_SKEY + EVP_MAC_is_a + EVP_MAC_names_do_all + EVP_MAC_settable_ctx_params + EVP_MAC_up_ref + EVP_MAC_update + EVP_MD_CTX_clear_flags + EVP_MD_CTX_copy + EVP_MD_CTX_copy_ex + EVP_MD_CTX_ctrl + EVP_MD_CTX_dup + EVP_MD_CTX_free + EVP_MD_CTX_get0_md + EVP_MD_CTX_get0_md_data + EVP_MD_CTX_get1_md + EVP_MD_CTX_get_params + EVP_MD_CTX_get_pkey_ctx + EVP_MD_CTX_get_size_ex + EVP_MD_CTX_gettable_params + EVP_MD_CTX_md + EVP_MD_CTX_new + EVP_MD_CTX_reset + EVP_MD_CTX_set_flags + EVP_MD_CTX_set_params + EVP_MD_CTX_set_pkey_ctx + EVP_MD_CTX_set_update_fn + EVP_MD_CTX_settable_params + EVP_MD_CTX_test_flags + EVP_MD_CTX_update_fn + EVP_MD_do_all + EVP_MD_do_all_provided + EVP_MD_do_all_sorted + EVP_MD_fetch + EVP_MD_free + EVP_MD_get0_description + EVP_MD_get0_name + EVP_MD_get0_provider + EVP_MD_get_block_size + EVP_MD_get_flags + EVP_MD_get_params + EVP_MD_get_pkey_type + EVP_MD_get_size + EVP_MD_get_type + EVP_MD_gettable_ctx_params + EVP_MD_gettable_params + EVP_MD_is_a + EVP_MD_meth_dup + EVP_MD_meth_free + EVP_MD_meth_get_app_datasize + EVP_MD_meth_get_cleanup + EVP_MD_meth_get_copy + EVP_MD_meth_get_ctrl + EVP_MD_meth_get_final + EVP_MD_meth_get_flags + EVP_MD_meth_get_init + EVP_MD_meth_get_input_blocksize + EVP_MD_meth_get_result_size + EVP_MD_meth_get_update + EVP_MD_meth_new + EVP_MD_meth_set_app_datasize + EVP_MD_meth_set_cleanup + EVP_MD_meth_set_copy + EVP_MD_meth_set_ctrl + EVP_MD_meth_set_final + EVP_MD_meth_set_flags + EVP_MD_meth_set_init + EVP_MD_meth_set_input_blocksize + EVP_MD_meth_set_result_size + EVP_MD_meth_set_update + EVP_MD_names_do_all + EVP_MD_settable_ctx_params + EVP_MD_up_ref + EVP_MD_xof + EVP_OpenFinal + EVP_OpenInit + EVP_PBE_CipherInit + EVP_PBE_CipherInit_ex + EVP_PBE_alg_add + EVP_PBE_alg_add_type + EVP_PBE_cleanup + EVP_PBE_find + EVP_PBE_find_ex + EVP_PBE_get + EVP_PBE_scrypt + EVP_PBE_scrypt_ex + EVP_PKCS82PKEY + EVP_PKCS82PKEY_ex + EVP_PKEY2PKCS8 + EVP_PKEY_CTX_add1_hkdf_info + EVP_PKEY_CTX_add1_tls1_prf_seed + EVP_PKEY_CTX_ctrl + EVP_PKEY_CTX_ctrl_str + EVP_PKEY_CTX_ctrl_uint64 + EVP_PKEY_CTX_dup + EVP_PKEY_CTX_free + EVP_PKEY_CTX_get0_dh_kdf_oid + EVP_PKEY_CTX_get0_dh_kdf_ukm + EVP_PKEY_CTX_get0_ecdh_kdf_ukm + EVP_PKEY_CTX_get0_libctx + EVP_PKEY_CTX_get0_peerkey + EVP_PKEY_CTX_get0_pkey + EVP_PKEY_CTX_get0_propq + EVP_PKEY_CTX_get0_provider + EVP_PKEY_CTX_get0_rsa_oaep_label + EVP_PKEY_CTX_get1_id + EVP_PKEY_CTX_get1_id_len + EVP_PKEY_CTX_get_algor + EVP_PKEY_CTX_get_algor_params + EVP_PKEY_CTX_get_app_data + EVP_PKEY_CTX_get_cb + EVP_PKEY_CTX_get_data + EVP_PKEY_CTX_get_dh_kdf_md + EVP_PKEY_CTX_get_dh_kdf_outlen + EVP_PKEY_CTX_get_dh_kdf_type + EVP_PKEY_CTX_get_ecdh_cofactor_mode + EVP_PKEY_CTX_get_ecdh_kdf_md + EVP_PKEY_CTX_get_ecdh_kdf_outlen + EVP_PKEY_CTX_get_ecdh_kdf_type + EVP_PKEY_CTX_get_group_name + EVP_PKEY_CTX_get_keygen_info + EVP_PKEY_CTX_get_operation + EVP_PKEY_CTX_get_params + EVP_PKEY_CTX_get_rsa_mgf1_md + EVP_PKEY_CTX_get_rsa_mgf1_md_name + EVP_PKEY_CTX_get_rsa_oaep_md + EVP_PKEY_CTX_get_rsa_oaep_md_name + EVP_PKEY_CTX_get_rsa_padding + EVP_PKEY_CTX_get_rsa_pss_saltlen + EVP_PKEY_CTX_get_signature_md + EVP_PKEY_CTX_gettable_params + EVP_PKEY_CTX_hex2ctrl + EVP_PKEY_CTX_is_a + EVP_PKEY_CTX_md + EVP_PKEY_CTX_new + EVP_PKEY_CTX_new_from_name + EVP_PKEY_CTX_new_from_pkey + EVP_PKEY_CTX_new_id + EVP_PKEY_CTX_set0_dh_kdf_oid + EVP_PKEY_CTX_set0_dh_kdf_ukm + EVP_PKEY_CTX_set0_ecdh_kdf_ukm + EVP_PKEY_CTX_set0_keygen_info + EVP_PKEY_CTX_set0_rsa_oaep_label + EVP_PKEY_CTX_set1_hkdf_key + EVP_PKEY_CTX_set1_hkdf_salt + EVP_PKEY_CTX_set1_id + EVP_PKEY_CTX_set1_pbe_pass + EVP_PKEY_CTX_set1_rsa_keygen_pubexp + EVP_PKEY_CTX_set1_scrypt_salt + EVP_PKEY_CTX_set1_tls1_prf_secret + EVP_PKEY_CTX_set_algor_params + EVP_PKEY_CTX_set_app_data + EVP_PKEY_CTX_set_cb + EVP_PKEY_CTX_set_data + EVP_PKEY_CTX_set_dh_kdf_md + EVP_PKEY_CTX_set_dh_kdf_outlen + EVP_PKEY_CTX_set_dh_kdf_type + EVP_PKEY_CTX_set_dh_nid + EVP_PKEY_CTX_set_dh_pad + EVP_PKEY_CTX_set_dh_paramgen_generator + EVP_PKEY_CTX_set_dh_paramgen_gindex + EVP_PKEY_CTX_set_dh_paramgen_prime_len + EVP_PKEY_CTX_set_dh_paramgen_seed + EVP_PKEY_CTX_set_dh_paramgen_subprime_len + EVP_PKEY_CTX_set_dh_paramgen_type + EVP_PKEY_CTX_set_dh_rfc5114 + EVP_PKEY_CTX_set_dhx_rfc5114 + EVP_PKEY_CTX_set_dsa_paramgen_bits + EVP_PKEY_CTX_set_dsa_paramgen_gindex + EVP_PKEY_CTX_set_dsa_paramgen_md + EVP_PKEY_CTX_set_dsa_paramgen_md_props + EVP_PKEY_CTX_set_dsa_paramgen_q_bits + EVP_PKEY_CTX_set_dsa_paramgen_seed + EVP_PKEY_CTX_set_dsa_paramgen_type + EVP_PKEY_CTX_set_ec_param_enc + EVP_PKEY_CTX_set_ec_paramgen_curve_nid + EVP_PKEY_CTX_set_ecdh_cofactor_mode + EVP_PKEY_CTX_set_ecdh_kdf_md + EVP_PKEY_CTX_set_ecdh_kdf_outlen + EVP_PKEY_CTX_set_ecdh_kdf_type + EVP_PKEY_CTX_set_group_name + EVP_PKEY_CTX_set_hkdf_md + EVP_PKEY_CTX_set_hkdf_mode + EVP_PKEY_CTX_set_kem_op + EVP_PKEY_CTX_set_mac_key + EVP_PKEY_CTX_set_params + EVP_PKEY_CTX_set_rsa_keygen_bits + EVP_PKEY_CTX_set_rsa_keygen_primes + EVP_PKEY_CTX_set_rsa_keygen_pubexp + EVP_PKEY_CTX_set_rsa_mgf1_md + EVP_PKEY_CTX_set_rsa_mgf1_md_name + EVP_PKEY_CTX_set_rsa_oaep_md + EVP_PKEY_CTX_set_rsa_oaep_md_name + EVP_PKEY_CTX_set_rsa_padding + EVP_PKEY_CTX_set_rsa_pss_keygen_md + EVP_PKEY_CTX_set_rsa_pss_keygen_md_name + EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md + EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name + EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen + EVP_PKEY_CTX_set_rsa_pss_saltlen + EVP_PKEY_CTX_set_scrypt_N + EVP_PKEY_CTX_set_scrypt_maxmem_bytes + EVP_PKEY_CTX_set_scrypt_p + EVP_PKEY_CTX_set_scrypt_r + EVP_PKEY_CTX_set_signature + EVP_PKEY_CTX_set_signature_md + EVP_PKEY_CTX_set_tls1_prf_md + EVP_PKEY_CTX_settable_params + EVP_PKEY_CTX_str2ctrl + EVP_PKEY_Q_keygen + EVP_PKEY_add1_attr + EVP_PKEY_add1_attr_by_NID + EVP_PKEY_add1_attr_by_OBJ + EVP_PKEY_add1_attr_by_txt + EVP_PKEY_asn1_add0 + EVP_PKEY_asn1_add_alias + EVP_PKEY_asn1_copy + EVP_PKEY_asn1_find + EVP_PKEY_asn1_find_str + EVP_PKEY_asn1_free + EVP_PKEY_asn1_get0 + EVP_PKEY_asn1_get0_info + EVP_PKEY_asn1_get_count + EVP_PKEY_asn1_new + EVP_PKEY_asn1_set_check + EVP_PKEY_asn1_set_ctrl + EVP_PKEY_asn1_set_free + EVP_PKEY_asn1_set_get_priv_key + EVP_PKEY_asn1_set_get_pub_key + EVP_PKEY_asn1_set_item + EVP_PKEY_asn1_set_param + EVP_PKEY_asn1_set_param_check + EVP_PKEY_asn1_set_private + EVP_PKEY_asn1_set_public + EVP_PKEY_asn1_set_public_check + EVP_PKEY_asn1_set_security_bits + EVP_PKEY_asn1_set_set_priv_key + EVP_PKEY_asn1_set_set_pub_key + EVP_PKEY_asn1_set_siginf + EVP_PKEY_assign + EVP_PKEY_auth_decapsulate_init + EVP_PKEY_auth_encapsulate_init + EVP_PKEY_can_sign + EVP_PKEY_check + EVP_PKEY_cmp + EVP_PKEY_cmp_parameters + EVP_PKEY_copy_parameters + EVP_PKEY_decapsulate + EVP_PKEY_decapsulate_init + EVP_PKEY_decrypt + EVP_PKEY_decrypt_init + EVP_PKEY_decrypt_init_ex + EVP_PKEY_decrypt_old + EVP_PKEY_delete_attr + EVP_PKEY_derive + EVP_PKEY_derive_SKEY + EVP_PKEY_derive_init + EVP_PKEY_derive_init_ex + EVP_PKEY_derive_set_peer + EVP_PKEY_derive_set_peer_ex + EVP_PKEY_digestsign_supports_digest + EVP_PKEY_dup + EVP_PKEY_encapsulate + EVP_PKEY_encapsulate_init + EVP_PKEY_encrypt + EVP_PKEY_encrypt_init + EVP_PKEY_encrypt_init_ex + EVP_PKEY_encrypt_old + EVP_PKEY_eq + EVP_PKEY_export + EVP_PKEY_free + EVP_PKEY_fromdata + EVP_PKEY_fromdata_init + EVP_PKEY_fromdata_settable + EVP_PKEY_generate + EVP_PKEY_get0 + EVP_PKEY_get0_DH + EVP_PKEY_get0_DSA + EVP_PKEY_get0_EC_KEY + EVP_PKEY_get0_RSA + EVP_PKEY_get0_asn1 + EVP_PKEY_get0_description + EVP_PKEY_get0_engine + EVP_PKEY_get0_hmac + EVP_PKEY_get0_poly1305 + EVP_PKEY_get0_provider + EVP_PKEY_get0_siphash + EVP_PKEY_get0_type_name + EVP_PKEY_get1_DH + EVP_PKEY_get1_DSA + EVP_PKEY_get1_EC_KEY + EVP_PKEY_get1_RSA + EVP_PKEY_get1_encoded_public_key + EVP_PKEY_get_attr + EVP_PKEY_get_attr_by_NID + EVP_PKEY_get_attr_by_OBJ + EVP_PKEY_get_attr_count + EVP_PKEY_get_base_id + EVP_PKEY_get_bits + EVP_PKEY_get_bn_param + EVP_PKEY_get_default_digest_name + EVP_PKEY_get_default_digest_nid + EVP_PKEY_get_ec_point_conv_form + EVP_PKEY_get_ex_data + EVP_PKEY_get_field_type + EVP_PKEY_get_group_name + EVP_PKEY_get_id + EVP_PKEY_get_int_param + EVP_PKEY_get_octet_string_param + EVP_PKEY_get_params + EVP_PKEY_get_raw_private_key + EVP_PKEY_get_raw_public_key + EVP_PKEY_get_security_bits + EVP_PKEY_get_security_category + EVP_PKEY_get_size + EVP_PKEY_get_size_t_param + EVP_PKEY_get_utf8_string_param + EVP_PKEY_gettable_params + EVP_PKEY_is_a + EVP_PKEY_keygen + EVP_PKEY_keygen_init + EVP_PKEY_meth_add0 + EVP_PKEY_meth_copy + EVP_PKEY_meth_find + EVP_PKEY_meth_free + EVP_PKEY_meth_get0 + EVP_PKEY_meth_get0_info + EVP_PKEY_meth_get_check + EVP_PKEY_meth_get_cleanup + EVP_PKEY_meth_get_copy + EVP_PKEY_meth_get_count + EVP_PKEY_meth_get_ctrl + EVP_PKEY_meth_get_decrypt + EVP_PKEY_meth_get_derive + EVP_PKEY_meth_get_digest_custom + EVP_PKEY_meth_get_digestsign + EVP_PKEY_meth_get_digestverify + EVP_PKEY_meth_get_encrypt + EVP_PKEY_meth_get_init + EVP_PKEY_meth_get_keygen + EVP_PKEY_meth_get_param_check + EVP_PKEY_meth_get_paramgen + EVP_PKEY_meth_get_public_check + EVP_PKEY_meth_get_sign + EVP_PKEY_meth_get_signctx + EVP_PKEY_meth_get_verify + EVP_PKEY_meth_get_verify_recover + EVP_PKEY_meth_get_verifyctx + EVP_PKEY_meth_new + EVP_PKEY_meth_remove + EVP_PKEY_meth_set_check + EVP_PKEY_meth_set_cleanup + EVP_PKEY_meth_set_copy + EVP_PKEY_meth_set_ctrl + EVP_PKEY_meth_set_decrypt + EVP_PKEY_meth_set_derive + EVP_PKEY_meth_set_digest_custom + EVP_PKEY_meth_set_digestsign + EVP_PKEY_meth_set_digestverify + EVP_PKEY_meth_set_encrypt + EVP_PKEY_meth_set_init + EVP_PKEY_meth_set_keygen + EVP_PKEY_meth_set_param_check + EVP_PKEY_meth_set_paramgen + EVP_PKEY_meth_set_public_check + EVP_PKEY_meth_set_sign + EVP_PKEY_meth_set_signctx + EVP_PKEY_meth_set_verify + EVP_PKEY_meth_set_verify_recover + EVP_PKEY_meth_set_verifyctx + EVP_PKEY_missing_parameters + EVP_PKEY_new + EVP_PKEY_new_CMAC_key + EVP_PKEY_new_mac_key + EVP_PKEY_new_raw_private_key + EVP_PKEY_new_raw_private_key_ex + EVP_PKEY_new_raw_public_key + EVP_PKEY_new_raw_public_key_ex + EVP_PKEY_pairwise_check + EVP_PKEY_param_check + EVP_PKEY_param_check_quick + EVP_PKEY_parameters_eq + EVP_PKEY_paramgen + EVP_PKEY_paramgen_init + EVP_PKEY_print_params + EVP_PKEY_print_params_fp + EVP_PKEY_print_private + EVP_PKEY_print_private_fp + EVP_PKEY_print_public + EVP_PKEY_print_public_fp + EVP_PKEY_private_check + EVP_PKEY_public_check + EVP_PKEY_public_check_quick + EVP_PKEY_save_parameters + EVP_PKEY_set1_DH + EVP_PKEY_set1_DSA + EVP_PKEY_set1_EC_KEY + EVP_PKEY_set1_RSA + EVP_PKEY_set1_encoded_public_key + EVP_PKEY_set1_engine + EVP_PKEY_set_bn_param + EVP_PKEY_set_ex_data + EVP_PKEY_set_int_param + EVP_PKEY_set_octet_string_param + EVP_PKEY_set_params + EVP_PKEY_set_size_t_param + EVP_PKEY_set_type + EVP_PKEY_set_type_by_keymgmt + EVP_PKEY_set_type_str + EVP_PKEY_set_utf8_string_param + EVP_PKEY_settable_params + EVP_PKEY_sign + EVP_PKEY_sign_init + EVP_PKEY_sign_init_ex + EVP_PKEY_sign_init_ex2 + EVP_PKEY_sign_message_final + EVP_PKEY_sign_message_init + EVP_PKEY_sign_message_update + EVP_PKEY_todata + EVP_PKEY_type + EVP_PKEY_type_names_do_all + EVP_PKEY_up_ref + EVP_PKEY_verify + EVP_PKEY_verify_init + EVP_PKEY_verify_init_ex + EVP_PKEY_verify_init_ex2 + EVP_PKEY_verify_message_final + EVP_PKEY_verify_message_init + EVP_PKEY_verify_message_update + EVP_PKEY_verify_recover + EVP_PKEY_verify_recover_init + EVP_PKEY_verify_recover_init_ex + EVP_PKEY_verify_recover_init_ex2 + EVP_Q_digest + EVP_Q_mac + EVP_RAND_CTX_free + EVP_RAND_CTX_get0_rand + EVP_RAND_CTX_get_params + EVP_RAND_CTX_gettable_params + EVP_RAND_CTX_new + EVP_RAND_CTX_set_params + EVP_RAND_CTX_settable_params + EVP_RAND_CTX_up_ref + EVP_RAND_do_all_provided + EVP_RAND_enable_locking + EVP_RAND_fetch + EVP_RAND_free + EVP_RAND_generate + EVP_RAND_get0_description + EVP_RAND_get0_name + EVP_RAND_get0_provider + EVP_RAND_get_params + EVP_RAND_get_state + EVP_RAND_get_strength + EVP_RAND_gettable_ctx_params + EVP_RAND_gettable_params + EVP_RAND_instantiate + EVP_RAND_is_a + EVP_RAND_names_do_all + EVP_RAND_nonce + EVP_RAND_reseed + EVP_RAND_settable_ctx_params + EVP_RAND_uninstantiate + EVP_RAND_up_ref + EVP_RAND_verify_zeroization + EVP_SIGNATURE_do_all_provided + EVP_SIGNATURE_fetch + EVP_SIGNATURE_free + EVP_SIGNATURE_get0_description + EVP_SIGNATURE_get0_name + EVP_SIGNATURE_get0_provider + EVP_SIGNATURE_gettable_ctx_params + EVP_SIGNATURE_is_a + EVP_SIGNATURE_names_do_all + EVP_SIGNATURE_settable_ctx_params + EVP_SIGNATURE_up_ref + EVP_SKEYMGMT_do_all_provided + EVP_SKEYMGMT_fetch + EVP_SKEYMGMT_free + EVP_SKEYMGMT_get0_description + EVP_SKEYMGMT_get0_gen_settable_params + EVP_SKEYMGMT_get0_imp_settable_params + EVP_SKEYMGMT_get0_name + EVP_SKEYMGMT_get0_provider + EVP_SKEYMGMT_is_a + EVP_SKEYMGMT_names_do_all + EVP_SKEYMGMT_up_ref + EVP_SKEY_export + EVP_SKEY_free + EVP_SKEY_generate + EVP_SKEY_get0_key_id + EVP_SKEY_get0_provider_name + EVP_SKEY_get0_raw_key + EVP_SKEY_get0_skeymgmt_name + EVP_SKEY_import + EVP_SKEY_import_SKEYMGMT + EVP_SKEY_import_raw_key + EVP_SKEY_is_a + EVP_SKEY_to_provider + EVP_SKEY_up_ref + EVP_SealFinal + EVP_SealInit + EVP_SignFinal + EVP_SignFinal_ex + EVP_VerifyFinal + EVP_VerifyFinal_ex + EVP_add_alg_module + EVP_add_cipher + EVP_add_digest + EVP_aes_128_cbc + EVP_aes_128_cbc_hmac_sha1 + EVP_aes_128_cbc_hmac_sha256 + EVP_aes_128_ccm + EVP_aes_128_cfb1 + EVP_aes_128_cfb128 + EVP_aes_128_cfb8 + EVP_aes_128_ctr + EVP_aes_128_ecb + EVP_aes_128_gcm + EVP_aes_128_ocb + EVP_aes_128_ofb + EVP_aes_128_wrap + EVP_aes_128_wrap_pad + EVP_aes_128_xts + EVP_aes_192_cbc + EVP_aes_192_ccm + EVP_aes_192_cfb1 + EVP_aes_192_cfb128 + EVP_aes_192_cfb8 + EVP_aes_192_ctr + EVP_aes_192_ecb + EVP_aes_192_gcm + EVP_aes_192_ocb + EVP_aes_192_ofb + EVP_aes_192_wrap + EVP_aes_192_wrap_pad + EVP_aes_256_cbc + EVP_aes_256_cbc_hmac_sha1 + EVP_aes_256_cbc_hmac_sha256 + EVP_aes_256_ccm + EVP_aes_256_cfb1 + EVP_aes_256_cfb128 + EVP_aes_256_cfb8 + EVP_aes_256_ctr + EVP_aes_256_ecb + EVP_aes_256_gcm + EVP_aes_256_ocb + EVP_aes_256_ofb + EVP_aes_256_wrap + EVP_aes_256_wrap_pad + EVP_aes_256_xts + EVP_aria_128_cbc + EVP_aria_128_ccm + EVP_aria_128_cfb1 + EVP_aria_128_cfb128 + EVP_aria_128_cfb8 + EVP_aria_128_ctr + EVP_aria_128_ecb + EVP_aria_128_gcm + EVP_aria_128_ofb + EVP_aria_192_cbc + EVP_aria_192_ccm + EVP_aria_192_cfb1 + EVP_aria_192_cfb128 + EVP_aria_192_cfb8 + EVP_aria_192_ctr + EVP_aria_192_ecb + EVP_aria_192_gcm + EVP_aria_192_ofb + EVP_aria_256_cbc + EVP_aria_256_ccm + EVP_aria_256_cfb1 + EVP_aria_256_cfb128 + EVP_aria_256_cfb8 + EVP_aria_256_ctr + EVP_aria_256_ecb + EVP_aria_256_gcm + EVP_aria_256_ofb + EVP_bf_cbc + EVP_bf_cfb64 + EVP_bf_ecb + EVP_bf_ofb + EVP_blake2b512 + EVP_blake2s256 + EVP_camellia_128_cbc + EVP_camellia_128_cfb1 + EVP_camellia_128_cfb128 + EVP_camellia_128_cfb8 + EVP_camellia_128_ctr + EVP_camellia_128_ecb + EVP_camellia_128_ofb + EVP_camellia_192_cbc + EVP_camellia_192_cfb1 + EVP_camellia_192_cfb128 + EVP_camellia_192_cfb8 + EVP_camellia_192_ctr + EVP_camellia_192_ecb + EVP_camellia_192_ofb + EVP_camellia_256_cbc + EVP_camellia_256_cfb1 + EVP_camellia_256_cfb128 + EVP_camellia_256_cfb8 + EVP_camellia_256_ctr + EVP_camellia_256_ecb + EVP_camellia_256_ofb + EVP_cast5_cbc + EVP_cast5_cfb64 + EVP_cast5_ecb + EVP_cast5_ofb + EVP_chacha20 + EVP_chacha20_poly1305 + EVP_default_properties_enable_fips + EVP_default_properties_is_fips_enabled + EVP_des_cbc + EVP_des_cfb1 + EVP_des_cfb64 + EVP_des_cfb8 + EVP_des_ecb + EVP_des_ede + EVP_des_ede3 + EVP_des_ede3_cbc + EVP_des_ede3_cfb1 + EVP_des_ede3_cfb64 + EVP_des_ede3_cfb8 + EVP_des_ede3_ecb + EVP_des_ede3_ofb + EVP_des_ede3_wrap + EVP_des_ede_cbc + EVP_des_ede_cfb64 + EVP_des_ede_ecb + EVP_des_ede_ofb + EVP_des_ofb + EVP_desx_cbc + EVP_enc_null + EVP_get1_default_properties + EVP_get_cipherbyname + EVP_get_digestbyname + EVP_get_pw_prompt + EVP_idea_cbc + EVP_idea_cfb64 + EVP_idea_ecb + EVP_idea_ofb + EVP_md4 + EVP_md5 + EVP_md5_sha1 + EVP_md_null + EVP_mdc2 + EVP_rc2_40_cbc + EVP_rc2_64_cbc + EVP_rc2_cbc + EVP_rc2_cfb64 + EVP_rc2_ecb + EVP_rc2_ofb + EVP_rc4 + EVP_rc4_40 + EVP_rc4_hmac_md5 + EVP_read_pw_string + EVP_read_pw_string_min + EVP_ripemd160 + EVP_seed_cbc + EVP_seed_cfb128 + EVP_seed_ecb + EVP_seed_ofb + EVP_set_default_properties + EVP_set_pw_prompt + EVP_sha1 + EVP_sha224 + EVP_sha256 + EVP_sha384 + EVP_sha3_224 + EVP_sha3_256 + EVP_sha3_384 + EVP_sha3_512 + EVP_sha512 + EVP_sha512_224 + EVP_sha512_256 + EVP_shake128 + EVP_shake256 + EVP_sm3 + EVP_sm4_cbc + EVP_sm4_cfb128 + EVP_sm4_ctr + EVP_sm4_ecb + EVP_sm4_ofb + EVP_whirlpool + EXTENDED_KEY_USAGE_free + EXTENDED_KEY_USAGE_it + EXTENDED_KEY_USAGE_new + GENERAL_NAMES_free + GENERAL_NAMES_it + GENERAL_NAMES_new + GENERAL_NAME_cmp + GENERAL_NAME_dup + GENERAL_NAME_free + GENERAL_NAME_get0_otherName + GENERAL_NAME_get0_value + GENERAL_NAME_it + GENERAL_NAME_new + GENERAL_NAME_print + GENERAL_NAME_set0_othername + GENERAL_NAME_set0_value + GENERAL_NAME_set1_X509_NAME + GENERAL_SUBTREE_free + GENERAL_SUBTREE_it + GENERAL_SUBTREE_new + HMAC + HMAC_CTX_copy + HMAC_CTX_free + HMAC_CTX_get_md + HMAC_CTX_new + HMAC_CTX_reset + HMAC_CTX_set_flags + HMAC_Final + HMAC_Init + HMAC_Init_ex + HMAC_Update + HMAC_size + IDEA_cbc_encrypt + IDEA_cfb64_encrypt + IDEA_ecb_encrypt + IDEA_encrypt + IDEA_ofb64_encrypt + IDEA_options + IDEA_set_decrypt_key + IDEA_set_encrypt_key + INT32_it + INT64_it + IPAddressChoice_free + IPAddressChoice_it + IPAddressChoice_new + IPAddressFamily_free + IPAddressFamily_it + IPAddressFamily_new + IPAddressOrRange_free + IPAddressOrRange_it + IPAddressOrRange_new + IPAddressRange_free + IPAddressRange_it + IPAddressRange_new + ISSUER_SIGN_TOOL_free + ISSUER_SIGN_TOOL_it + ISSUER_SIGN_TOOL_new + ISSUING_DIST_POINT_free + ISSUING_DIST_POINT_it + ISSUING_DIST_POINT_new + LONG_it + MD4 + MD4_Final + MD4_Init + MD4_Transform + MD4_Update + MD5 + MD5_Final + MD5_Init + MD5_Transform + MD5_Update + MDC2 + MDC2_Final + MDC2_Init + MDC2_Update + NAME_CONSTRAINTS_check + NAME_CONSTRAINTS_check_CN + NAME_CONSTRAINTS_free + NAME_CONSTRAINTS_it + NAME_CONSTRAINTS_new + NAMING_AUTHORITY_free + NAMING_AUTHORITY_get0_authorityId + NAMING_AUTHORITY_get0_authorityText + NAMING_AUTHORITY_get0_authorityURL + NAMING_AUTHORITY_it + NAMING_AUTHORITY_new + NAMING_AUTHORITY_set0_authorityId + NAMING_AUTHORITY_set0_authorityText + NAMING_AUTHORITY_set0_authorityURL + NCONF_WIN32 + NCONF_default + NCONF_dump_bio + NCONF_dump_fp + NCONF_free + NCONF_free_data + NCONF_get0_libctx + NCONF_get_number_e + NCONF_get_section + NCONF_get_section_names + NCONF_get_string + NCONF_load + NCONF_load_bio + NCONF_load_fp + NCONF_new + NCONF_new_ex + NETSCAPE_CERT_SEQUENCE_free + NETSCAPE_CERT_SEQUENCE_it + NETSCAPE_CERT_SEQUENCE_new + NETSCAPE_SPKAC_free + NETSCAPE_SPKAC_it + NETSCAPE_SPKAC_new + NETSCAPE_SPKI_b64_decode + NETSCAPE_SPKI_b64_encode + NETSCAPE_SPKI_free + NETSCAPE_SPKI_get_pubkey + NETSCAPE_SPKI_it + NETSCAPE_SPKI_new + NETSCAPE_SPKI_print + NETSCAPE_SPKI_set_pubkey + NETSCAPE_SPKI_sign + NETSCAPE_SPKI_verify + NOTICEREF_free + NOTICEREF_it + NOTICEREF_new + OBJ_NAME_add + OBJ_NAME_cleanup + OBJ_NAME_do_all + OBJ_NAME_do_all_sorted + OBJ_NAME_get + OBJ_NAME_init + OBJ_NAME_new_index + OBJ_NAME_remove + OBJ_add_object + OBJ_add_sigid + OBJ_bsearch_ + OBJ_bsearch_ex_ + OBJ_cmp + OBJ_create + OBJ_create_objects + OBJ_dup + OBJ_find_sigid_algs + OBJ_find_sigid_by_algs + OBJ_get0_data + OBJ_length + OBJ_ln2nid + OBJ_new_nid + OBJ_nid2ln + OBJ_nid2obj + OBJ_nid2sn + OBJ_obj2nid + OBJ_obj2txt + OBJ_sigid_free + OBJ_sn2nid + OBJ_txt2nid + OBJ_txt2obj + OCSP_BASICRESP_add1_ext_i2d + OCSP_BASICRESP_add_ext + OCSP_BASICRESP_delete_ext + OCSP_BASICRESP_free + OCSP_BASICRESP_get1_ext_d2i + OCSP_BASICRESP_get_ext + OCSP_BASICRESP_get_ext_by_NID + OCSP_BASICRESP_get_ext_by_OBJ + OCSP_BASICRESP_get_ext_by_critical + OCSP_BASICRESP_get_ext_count + OCSP_BASICRESP_it + OCSP_BASICRESP_new + OCSP_CERTID_dup + OCSP_CERTID_free + OCSP_CERTID_it + OCSP_CERTID_new + OCSP_CERTSTATUS_free + OCSP_CERTSTATUS_it + OCSP_CERTSTATUS_new + OCSP_CRLID_free + OCSP_CRLID_it + OCSP_CRLID_new + OCSP_ONEREQ_add1_ext_i2d + OCSP_ONEREQ_add_ext + OCSP_ONEREQ_delete_ext + OCSP_ONEREQ_free + OCSP_ONEREQ_get1_ext_d2i + OCSP_ONEREQ_get_ext + OCSP_ONEREQ_get_ext_by_NID + OCSP_ONEREQ_get_ext_by_OBJ + OCSP_ONEREQ_get_ext_by_critical + OCSP_ONEREQ_get_ext_count + OCSP_ONEREQ_it + OCSP_ONEREQ_new + OCSP_REQINFO_free + OCSP_REQINFO_it + OCSP_REQINFO_new + OCSP_REQUEST_add1_ext_i2d + OCSP_REQUEST_add_ext + OCSP_REQUEST_delete_ext + OCSP_REQUEST_free + OCSP_REQUEST_get1_ext_d2i + OCSP_REQUEST_get_ext + OCSP_REQUEST_get_ext_by_NID + OCSP_REQUEST_get_ext_by_OBJ + OCSP_REQUEST_get_ext_by_critical + OCSP_REQUEST_get_ext_count + OCSP_REQUEST_it + OCSP_REQUEST_new + OCSP_REQUEST_print + OCSP_RESPBYTES_free + OCSP_RESPBYTES_it + OCSP_RESPBYTES_new + OCSP_RESPDATA_free + OCSP_RESPDATA_it + OCSP_RESPDATA_new + OCSP_RESPID_free + OCSP_RESPID_it + OCSP_RESPID_match + OCSP_RESPID_match_ex + OCSP_RESPID_new + OCSP_RESPID_set_by_key + OCSP_RESPID_set_by_key_ex + OCSP_RESPID_set_by_name + OCSP_RESPONSE_free + OCSP_RESPONSE_it + OCSP_RESPONSE_new + OCSP_RESPONSE_print + OCSP_REVOKEDINFO_free + OCSP_REVOKEDINFO_it + OCSP_REVOKEDINFO_new + OCSP_SERVICELOC_free + OCSP_SERVICELOC_it + OCSP_SERVICELOC_new + OCSP_SIGNATURE_free + OCSP_SIGNATURE_it + OCSP_SIGNATURE_new + OCSP_SINGLERESP_add1_ext_i2d + OCSP_SINGLERESP_add_ext + OCSP_SINGLERESP_delete_ext + OCSP_SINGLERESP_free + OCSP_SINGLERESP_get0_id + OCSP_SINGLERESP_get1_ext_d2i + OCSP_SINGLERESP_get_ext + OCSP_SINGLERESP_get_ext_by_NID + OCSP_SINGLERESP_get_ext_by_OBJ + OCSP_SINGLERESP_get_ext_by_critical + OCSP_SINGLERESP_get_ext_count + OCSP_SINGLERESP_it + OCSP_SINGLERESP_new + OCSP_accept_responses_new + OCSP_archive_cutoff_new + OCSP_basic_add1_cert + OCSP_basic_add1_nonce + OCSP_basic_add1_status + OCSP_basic_sign + OCSP_basic_sign_ctx + OCSP_basic_verify + OCSP_cert_id_new + OCSP_cert_status_str + OCSP_cert_to_id + OCSP_check_nonce + OCSP_check_validity + OCSP_copy_nonce + OCSP_crlID_new + OCSP_crl_reason_str + OCSP_id_cmp + OCSP_id_get0_info + OCSP_id_issuer_cmp + OCSP_onereq_get0_id + OCSP_request_add0_id + OCSP_request_add1_cert + OCSP_request_add1_nonce + OCSP_request_is_signed + OCSP_request_onereq_count + OCSP_request_onereq_get0 + OCSP_request_set1_name + OCSP_request_sign + OCSP_request_verify + OCSP_resp_count + OCSP_resp_find + OCSP_resp_find_status + OCSP_resp_get0 + OCSP_resp_get0_certs + OCSP_resp_get0_id + OCSP_resp_get0_produced_at + OCSP_resp_get0_respdata + OCSP_resp_get0_signature + OCSP_resp_get0_signer + OCSP_resp_get0_tbs_sigalg + OCSP_resp_get1_id + OCSP_response_create + OCSP_response_get1_basic + OCSP_response_status + OCSP_response_status_str + OCSP_sendreq_bio + OCSP_sendreq_new + OCSP_single_get0_status + OCSP_url_svcloc_new + OPENSSL_DIR_end + OPENSSL_DIR_read + OPENSSL_INIT_free + OPENSSL_INIT_new + OPENSSL_INIT_set_config_appname + OPENSSL_INIT_set_config_file_flags + OPENSSL_INIT_set_config_filename + OPENSSL_LH_delete + OPENSSL_LH_doall + OPENSSL_LH_doall_arg + OPENSSL_LH_doall_arg_thunk + OPENSSL_LH_error + OPENSSL_LH_flush + OPENSSL_LH_free + OPENSSL_LH_get_down_load + OPENSSL_LH_insert + OPENSSL_LH_new + OPENSSL_LH_node_stats + OPENSSL_LH_node_stats_bio + OPENSSL_LH_node_usage_stats + OPENSSL_LH_node_usage_stats_bio + OPENSSL_LH_num_items + OPENSSL_LH_retrieve + OPENSSL_LH_set_down_load + OPENSSL_LH_set_thunks + OPENSSL_LH_stats + OPENSSL_LH_stats_bio + OPENSSL_LH_strhash + OPENSSL_asc2uni + OPENSSL_atexit + OPENSSL_buf2hexstr + OPENSSL_buf2hexstr_ex + OPENSSL_cleanse + OPENSSL_cleanup + OPENSSL_config + OPENSSL_die + OPENSSL_gmtime + OPENSSL_gmtime_adj + OPENSSL_gmtime_diff + OPENSSL_hexchar2int + OPENSSL_hexstr2buf + OPENSSL_hexstr2buf_ex + OPENSSL_info + OPENSSL_init + OPENSSL_init_crypto + OPENSSL_isservice + OPENSSL_issetugid + OPENSSL_load_builtin_modules + OPENSSL_sk_deep_copy + OPENSSL_sk_delete + OPENSSL_sk_delete_ptr + OPENSSL_sk_dup + OPENSSL_sk_find + OPENSSL_sk_find_all + OPENSSL_sk_find_ex + OPENSSL_sk_free + OPENSSL_sk_insert + OPENSSL_sk_is_sorted + OPENSSL_sk_new + OPENSSL_sk_new_null + OPENSSL_sk_new_reserve + OPENSSL_sk_num + OPENSSL_sk_pop + OPENSSL_sk_pop_free + OPENSSL_sk_push + OPENSSL_sk_reserve + OPENSSL_sk_set + OPENSSL_sk_set_cmp_func + OPENSSL_sk_set_thunks + OPENSSL_sk_shift + OPENSSL_sk_sort + OPENSSL_sk_unshift + OPENSSL_sk_value + OPENSSL_sk_zero + OPENSSL_strcasecmp + OPENSSL_strlcat + OPENSSL_strlcpy + OPENSSL_strncasecmp + OPENSSL_strnlen + OPENSSL_strtoul + OPENSSL_thread_stop + OPENSSL_thread_stop_ex + OPENSSL_uni2asc + OPENSSL_uni2utf8 + OPENSSL_utf82uni + OPENSSL_version_build_metadata + OPENSSL_version_major + OPENSSL_version_minor + OPENSSL_version_patch + OPENSSL_version_pre_release + OSSL_AA_DIST_POINT_free + OSSL_AA_DIST_POINT_it + OSSL_AA_DIST_POINT_new + OSSL_ALLOWED_ATTRIBUTES_CHOICE_free + OSSL_ALLOWED_ATTRIBUTES_CHOICE_it + OSSL_ALLOWED_ATTRIBUTES_CHOICE_new + OSSL_ALLOWED_ATTRIBUTES_ITEM_free + OSSL_ALLOWED_ATTRIBUTES_ITEM_it + OSSL_ALLOWED_ATTRIBUTES_ITEM_new + OSSL_ALLOWED_ATTRIBUTES_SYNTAX_free + OSSL_ALLOWED_ATTRIBUTES_SYNTAX_it + OSSL_ALLOWED_ATTRIBUTES_SYNTAX_new + OSSL_ATAV_free + OSSL_ATAV_it + OSSL_ATAV_new + OSSL_ATTRIBUTES_SYNTAX_free + OSSL_ATTRIBUTES_SYNTAX_it + OSSL_ATTRIBUTES_SYNTAX_new + OSSL_ATTRIBUTE_DESCRIPTOR_free + OSSL_ATTRIBUTE_DESCRIPTOR_it + OSSL_ATTRIBUTE_DESCRIPTOR_new + OSSL_ATTRIBUTE_MAPPINGS_free + OSSL_ATTRIBUTE_MAPPINGS_it + OSSL_ATTRIBUTE_MAPPINGS_new + OSSL_ATTRIBUTE_MAPPING_free + OSSL_ATTRIBUTE_MAPPING_it + OSSL_ATTRIBUTE_MAPPING_new + OSSL_ATTRIBUTE_TYPE_MAPPING_free + OSSL_ATTRIBUTE_TYPE_MAPPING_it + OSSL_ATTRIBUTE_TYPE_MAPPING_new + OSSL_ATTRIBUTE_VALUE_MAPPING_free + OSSL_ATTRIBUTE_VALUE_MAPPING_it + OSSL_ATTRIBUTE_VALUE_MAPPING_new + OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX_free + OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX_it + OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX_new + OSSL_BASIC_ATTR_CONSTRAINTS_free + OSSL_BASIC_ATTR_CONSTRAINTS_it + OSSL_BASIC_ATTR_CONSTRAINTS_new + OSSL_CMP_ATAVS_free + OSSL_CMP_ATAVS_it + OSSL_CMP_ATAVS_new + OSSL_CMP_ATAV_create + OSSL_CMP_ATAV_get0_algId + OSSL_CMP_ATAV_get0_type + OSSL_CMP_ATAV_get0_value + OSSL_CMP_ATAV_get_rsaKeyLen + OSSL_CMP_ATAV_new_algId + OSSL_CMP_ATAV_new_rsaKeyLen + OSSL_CMP_ATAV_push1 + OSSL_CMP_ATAV_set0 + OSSL_CMP_CRLSTATUS_create + OSSL_CMP_CRLSTATUS_free + OSSL_CMP_CRLSTATUS_get0 + OSSL_CMP_CRLSTATUS_new1 + OSSL_CMP_CTX_build_cert_chain + OSSL_CMP_CTX_free + OSSL_CMP_CTX_get0_geninfo_ITAVs + OSSL_CMP_CTX_get0_libctx + OSSL_CMP_CTX_get0_newCert + OSSL_CMP_CTX_get0_newPkey + OSSL_CMP_CTX_get0_propq + OSSL_CMP_CTX_get0_statusString + OSSL_CMP_CTX_get0_trustedStore + OSSL_CMP_CTX_get0_untrusted + OSSL_CMP_CTX_get0_validatedSrvCert + OSSL_CMP_CTX_get1_caPubs + OSSL_CMP_CTX_get1_extraCertsIn + OSSL_CMP_CTX_get1_newChain + OSSL_CMP_CTX_get_certConf_cb_arg + OSSL_CMP_CTX_get_failInfoCode + OSSL_CMP_CTX_get_http_cb_arg + OSSL_CMP_CTX_get_option + OSSL_CMP_CTX_get_status + OSSL_CMP_CTX_get_transfer_cb_arg + OSSL_CMP_CTX_new + OSSL_CMP_CTX_print_errors + OSSL_CMP_CTX_push0_geninfo_ITAV + OSSL_CMP_CTX_push0_genm_ITAV + OSSL_CMP_CTX_push0_policy + OSSL_CMP_CTX_push1_subjectAltName + OSSL_CMP_CTX_reinit + OSSL_CMP_CTX_reqExtensions_have_SAN + OSSL_CMP_CTX_reset_geninfo_ITAVs + OSSL_CMP_CTX_server_perform + OSSL_CMP_CTX_set0_newPkey + OSSL_CMP_CTX_set0_reqExtensions + OSSL_CMP_CTX_set0_trustedStore + OSSL_CMP_CTX_set1_cert + OSSL_CMP_CTX_set1_expected_sender + OSSL_CMP_CTX_set1_extraCertsOut + OSSL_CMP_CTX_set1_issuer + OSSL_CMP_CTX_set1_no_proxy + OSSL_CMP_CTX_set1_oldCert + OSSL_CMP_CTX_set1_p10CSR + OSSL_CMP_CTX_set1_pkey + OSSL_CMP_CTX_set1_proxy + OSSL_CMP_CTX_set1_recipient + OSSL_CMP_CTX_set1_referenceValue + OSSL_CMP_CTX_set1_secretValue + OSSL_CMP_CTX_set1_senderNonce + OSSL_CMP_CTX_set1_serialNumber + OSSL_CMP_CTX_set1_server + OSSL_CMP_CTX_set1_serverPath + OSSL_CMP_CTX_set1_srvCert + OSSL_CMP_CTX_set1_subjectName + OSSL_CMP_CTX_set1_transactionID + OSSL_CMP_CTX_set1_untrusted + OSSL_CMP_CTX_set_certConf_cb + OSSL_CMP_CTX_set_certConf_cb_arg + OSSL_CMP_CTX_set_http_cb + OSSL_CMP_CTX_set_http_cb_arg + OSSL_CMP_CTX_set_log_cb + OSSL_CMP_CTX_set_option + OSSL_CMP_CTX_set_serverPort + OSSL_CMP_CTX_set_transfer_cb + OSSL_CMP_CTX_set_transfer_cb_arg + OSSL_CMP_CTX_setup_CRM + OSSL_CMP_CTX_snprint_PKIStatus + OSSL_CMP_HDR_get0_geninfo_ITAVs + OSSL_CMP_HDR_get0_recipNonce + OSSL_CMP_HDR_get0_transactionID + OSSL_CMP_ITAV_create + OSSL_CMP_ITAV_dup + OSSL_CMP_ITAV_free + OSSL_CMP_ITAV_get0_caCerts + OSSL_CMP_ITAV_get0_certProfile + OSSL_CMP_ITAV_get0_crlStatusList + OSSL_CMP_ITAV_get0_crls + OSSL_CMP_ITAV_get0_rootCaCert + OSSL_CMP_ITAV_get0_rootCaKeyUpdate + OSSL_CMP_ITAV_get0_type + OSSL_CMP_ITAV_get0_value + OSSL_CMP_ITAV_get1_certReqTemplate + OSSL_CMP_ITAV_new0_certProfile + OSSL_CMP_ITAV_new0_certReqTemplate + OSSL_CMP_ITAV_new0_crlStatusList + OSSL_CMP_ITAV_new_caCerts + OSSL_CMP_ITAV_new_crls + OSSL_CMP_ITAV_new_rootCaCert + OSSL_CMP_ITAV_new_rootCaKeyUpdate + OSSL_CMP_ITAV_push0_stack_item + OSSL_CMP_ITAV_set0 + OSSL_CMP_MSG_dup + OSSL_CMP_MSG_free + OSSL_CMP_MSG_get0_certreq_publickey + OSSL_CMP_MSG_get0_header + OSSL_CMP_MSG_get_bodytype + OSSL_CMP_MSG_http_perform + OSSL_CMP_MSG_it + OSSL_CMP_MSG_read + OSSL_CMP_MSG_update_recipNonce + OSSL_CMP_MSG_update_transactionID + OSSL_CMP_MSG_write + OSSL_CMP_PKIHEADER_free + OSSL_CMP_PKIHEADER_it + OSSL_CMP_PKIHEADER_new + OSSL_CMP_PKISI_dup + OSSL_CMP_PKISI_free + OSSL_CMP_PKISI_it + OSSL_CMP_PKISI_new + OSSL_CMP_PKISTATUS_it + OSSL_CMP_SRV_CTX_free + OSSL_CMP_SRV_CTX_get0_cmp_ctx + OSSL_CMP_SRV_CTX_get0_custom_ctx + OSSL_CMP_SRV_CTX_init + OSSL_CMP_SRV_CTX_init_trans + OSSL_CMP_SRV_CTX_new + OSSL_CMP_SRV_CTX_set_accept_raverified + OSSL_CMP_SRV_CTX_set_accept_unprotected + OSSL_CMP_SRV_CTX_set_grant_implicit_confirm + OSSL_CMP_SRV_CTX_set_send_unprotected_errors + OSSL_CMP_SRV_process_request + OSSL_CMP_STATUSINFO_new + OSSL_CMP_certConf_cb + OSSL_CMP_exec_GENM_ses + OSSL_CMP_exec_RR_ses + OSSL_CMP_exec_certreq + OSSL_CMP_get1_caCerts + OSSL_CMP_get1_certReqTemplate + OSSL_CMP_get1_crlUpdate + OSSL_CMP_get1_rootCaKeyUpdate + OSSL_CMP_log_close + OSSL_CMP_log_open + OSSL_CMP_print_errors_cb + OSSL_CMP_print_to_bio + OSSL_CMP_snprint_PKIStatusInfo + OSSL_CMP_try_certreq + OSSL_CMP_validate_cert_path + OSSL_CMP_validate_msg + OSSL_CRMF_ATTRIBUTETYPEANDVALUE_dup + OSSL_CRMF_ATTRIBUTETYPEANDVALUE_free + OSSL_CRMF_CERTID_dup + OSSL_CRMF_CERTID_free + OSSL_CRMF_CERTID_gen + OSSL_CRMF_CERTID_get0_issuer + OSSL_CRMF_CERTID_get0_serialNumber + OSSL_CRMF_CERTID_it + OSSL_CRMF_CERTID_new + OSSL_CRMF_CERTTEMPLATE_dup + OSSL_CRMF_CERTTEMPLATE_fill + OSSL_CRMF_CERTTEMPLATE_free + OSSL_CRMF_CERTTEMPLATE_get0_extensions + OSSL_CRMF_CERTTEMPLATE_get0_issuer + OSSL_CRMF_CERTTEMPLATE_get0_publicKey + OSSL_CRMF_CERTTEMPLATE_get0_serialNumber + OSSL_CRMF_CERTTEMPLATE_get0_subject + OSSL_CRMF_CERTTEMPLATE_it + OSSL_CRMF_CERTTEMPLATE_new + OSSL_CRMF_ENCRYPTEDKEY_free + OSSL_CRMF_ENCRYPTEDKEY_get1_encCert + OSSL_CRMF_ENCRYPTEDKEY_get1_pkey + OSSL_CRMF_ENCRYPTEDKEY_init_envdata + OSSL_CRMF_ENCRYPTEDKEY_it + OSSL_CRMF_ENCRYPTEDKEY_new + OSSL_CRMF_ENCRYPTEDVALUE_decrypt + OSSL_CRMF_ENCRYPTEDVALUE_free + OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert + OSSL_CRMF_ENCRYPTEDVALUE_it + OSSL_CRMF_ENCRYPTEDVALUE_new + OSSL_CRMF_MSGS_free + OSSL_CRMF_MSGS_it + OSSL_CRMF_MSGS_new + OSSL_CRMF_MSGS_verify_popo + OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo + OSSL_CRMF_MSG_centralkeygen_requested + OSSL_CRMF_MSG_create_popo + OSSL_CRMF_MSG_dup + OSSL_CRMF_MSG_free + OSSL_CRMF_MSG_get0_regCtrl_authenticator + OSSL_CRMF_MSG_get0_regCtrl_oldCertID + OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo + OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey + OSSL_CRMF_MSG_get0_regCtrl_regToken + OSSL_CRMF_MSG_get0_regInfo_certReq + OSSL_CRMF_MSG_get0_regInfo_utf8Pairs + OSSL_CRMF_MSG_get0_tmpl + OSSL_CRMF_MSG_get_certReqId + OSSL_CRMF_MSG_it + OSSL_CRMF_MSG_new + OSSL_CRMF_MSG_push0_extension + OSSL_CRMF_MSG_set0_SinglePubInfo + OSSL_CRMF_MSG_set0_extensions + OSSL_CRMF_MSG_set0_validity + OSSL_CRMF_MSG_set1_regCtrl_authenticator + OSSL_CRMF_MSG_set1_regCtrl_oldCertID + OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo + OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey + OSSL_CRMF_MSG_set1_regCtrl_regToken + OSSL_CRMF_MSG_set1_regInfo_certReq + OSSL_CRMF_MSG_set1_regInfo_utf8Pairs + OSSL_CRMF_MSG_set_PKIPublicationInfo_action + OSSL_CRMF_MSG_set_certReqId + OSSL_CRMF_PBMPARAMETER_free + OSSL_CRMF_PBMPARAMETER_it + OSSL_CRMF_PBMPARAMETER_new + OSSL_CRMF_PKIPUBLICATIONINFO_free + OSSL_CRMF_PKIPUBLICATIONINFO_it + OSSL_CRMF_PKIPUBLICATIONINFO_new + OSSL_CRMF_SINGLEPUBINFO_free + OSSL_CRMF_SINGLEPUBINFO_it + OSSL_CRMF_SINGLEPUBINFO_new + OSSL_CRMF_pbm_new + OSSL_CRMF_pbmp_new + OSSL_DAY_TIME_BAND_free + OSSL_DAY_TIME_BAND_it + OSSL_DAY_TIME_BAND_new + OSSL_DAY_TIME_free + OSSL_DAY_TIME_it + OSSL_DAY_TIME_new + OSSL_DECODER_CTX_add_decoder + OSSL_DECODER_CTX_add_extra + OSSL_DECODER_CTX_free + OSSL_DECODER_CTX_get_cleanup + OSSL_DECODER_CTX_get_construct + OSSL_DECODER_CTX_get_construct_data + OSSL_DECODER_CTX_get_num_decoders + OSSL_DECODER_CTX_new + OSSL_DECODER_CTX_new_for_pkey + OSSL_DECODER_CTX_set_cleanup + OSSL_DECODER_CTX_set_construct + OSSL_DECODER_CTX_set_construct_data + OSSL_DECODER_CTX_set_input_structure + OSSL_DECODER_CTX_set_input_type + OSSL_DECODER_CTX_set_params + OSSL_DECODER_CTX_set_passphrase + OSSL_DECODER_CTX_set_passphrase_cb + OSSL_DECODER_CTX_set_passphrase_ui + OSSL_DECODER_CTX_set_pem_password_cb + OSSL_DECODER_CTX_set_selection + OSSL_DECODER_INSTANCE_get_decoder + OSSL_DECODER_INSTANCE_get_decoder_ctx + OSSL_DECODER_INSTANCE_get_input_structure + OSSL_DECODER_INSTANCE_get_input_type + OSSL_DECODER_do_all_provided + OSSL_DECODER_export + OSSL_DECODER_fetch + OSSL_DECODER_free + OSSL_DECODER_from_bio + OSSL_DECODER_from_data + OSSL_DECODER_from_fp + OSSL_DECODER_get0_description + OSSL_DECODER_get0_name + OSSL_DECODER_get0_properties + OSSL_DECODER_get0_provider + OSSL_DECODER_get_params + OSSL_DECODER_gettable_params + OSSL_DECODER_is_a + OSSL_DECODER_names_do_all + OSSL_DECODER_settable_ctx_params + OSSL_DECODER_up_ref + OSSL_EC_curve_nid2name + OSSL_ENCODER_CTX_add_encoder + OSSL_ENCODER_CTX_add_extra + OSSL_ENCODER_CTX_free + OSSL_ENCODER_CTX_get_num_encoders + OSSL_ENCODER_CTX_new + OSSL_ENCODER_CTX_new_for_pkey + OSSL_ENCODER_CTX_set_cipher + OSSL_ENCODER_CTX_set_cleanup + OSSL_ENCODER_CTX_set_construct + OSSL_ENCODER_CTX_set_construct_data + OSSL_ENCODER_CTX_set_output_structure + OSSL_ENCODER_CTX_set_output_type + OSSL_ENCODER_CTX_set_params + OSSL_ENCODER_CTX_set_passphrase + OSSL_ENCODER_CTX_set_passphrase_cb + OSSL_ENCODER_CTX_set_passphrase_ui + OSSL_ENCODER_CTX_set_pem_password_cb + OSSL_ENCODER_CTX_set_selection + OSSL_ENCODER_INSTANCE_get_encoder + OSSL_ENCODER_INSTANCE_get_encoder_ctx + OSSL_ENCODER_INSTANCE_get_output_structure + OSSL_ENCODER_INSTANCE_get_output_type + OSSL_ENCODER_do_all_provided + OSSL_ENCODER_fetch + OSSL_ENCODER_free + OSSL_ENCODER_get0_description + OSSL_ENCODER_get0_name + OSSL_ENCODER_get0_properties + OSSL_ENCODER_get0_provider + OSSL_ENCODER_get_params + OSSL_ENCODER_gettable_params + OSSL_ENCODER_is_a + OSSL_ENCODER_names_do_all + OSSL_ENCODER_settable_ctx_params + OSSL_ENCODER_to_bio + OSSL_ENCODER_to_data + OSSL_ENCODER_to_fp + OSSL_ENCODER_up_ref + OSSL_ERR_STATE_free + OSSL_ERR_STATE_new + OSSL_ERR_STATE_restore + OSSL_ERR_STATE_save + OSSL_ERR_STATE_save_to_mark + OSSL_ESS_check_signing_certs + OSSL_ESS_signing_cert_new_init + OSSL_ESS_signing_cert_v2_new_init + OSSL_GENERAL_NAMES_print + OSSL_HASH_free + OSSL_HASH_it + OSSL_HASH_new + OSSL_HPKE_CTX_free + OSSL_HPKE_CTX_get_seq + OSSL_HPKE_CTX_new + OSSL_HPKE_CTX_set1_authpriv + OSSL_HPKE_CTX_set1_authpub + OSSL_HPKE_CTX_set1_ikme + OSSL_HPKE_CTX_set1_psk + OSSL_HPKE_CTX_set_seq + OSSL_HPKE_decap + OSSL_HPKE_encap + OSSL_HPKE_export + OSSL_HPKE_get_ciphertext_size + OSSL_HPKE_get_grease_value + OSSL_HPKE_get_public_encap_size + OSSL_HPKE_get_recommended_ikmelen + OSSL_HPKE_keygen + OSSL_HPKE_open + OSSL_HPKE_seal + OSSL_HPKE_str2suite + OSSL_HPKE_suite_check + OSSL_HTTP_REQ_CTX_add1_header + OSSL_HTTP_REQ_CTX_exchange + OSSL_HTTP_REQ_CTX_free + OSSL_HTTP_REQ_CTX_get0_mem_bio + OSSL_HTTP_REQ_CTX_get_resp_len + OSSL_HTTP_REQ_CTX_nbio + OSSL_HTTP_REQ_CTX_nbio_d2i + OSSL_HTTP_REQ_CTX_new + OSSL_HTTP_REQ_CTX_set1_req + OSSL_HTTP_REQ_CTX_set_expected + OSSL_HTTP_REQ_CTX_set_max_response_hdr_lines + OSSL_HTTP_REQ_CTX_set_max_response_length + OSSL_HTTP_REQ_CTX_set_request_line + OSSL_HTTP_adapt_proxy + OSSL_HTTP_close + OSSL_HTTP_exchange + OSSL_HTTP_get + OSSL_HTTP_is_alive + OSSL_HTTP_open + OSSL_HTTP_parse_url + OSSL_HTTP_proxy_connect + OSSL_HTTP_set1_request + OSSL_HTTP_transfer + OSSL_IETF_ATTR_SYNTAX_VALUE_free + OSSL_IETF_ATTR_SYNTAX_VALUE_it + OSSL_IETF_ATTR_SYNTAX_VALUE_new + OSSL_IETF_ATTR_SYNTAX_add1_value + OSSL_IETF_ATTR_SYNTAX_free + OSSL_IETF_ATTR_SYNTAX_get0_policyAuthority + OSSL_IETF_ATTR_SYNTAX_get0_value + OSSL_IETF_ATTR_SYNTAX_get_value_num + OSSL_IETF_ATTR_SYNTAX_it + OSSL_IETF_ATTR_SYNTAX_new + OSSL_IETF_ATTR_SYNTAX_print + OSSL_IETF_ATTR_SYNTAX_set0_policyAuthority + OSSL_INDICATOR_get_callback + OSSL_INDICATOR_set_callback + OSSL_INFO_SYNTAX_POINTER_free + OSSL_INFO_SYNTAX_POINTER_it + OSSL_INFO_SYNTAX_POINTER_new + OSSL_INFO_SYNTAX_free + OSSL_INFO_SYNTAX_it + OSSL_INFO_SYNTAX_new + OSSL_ISSUER_SERIAL_free + OSSL_ISSUER_SERIAL_get0_issuer + OSSL_ISSUER_SERIAL_get0_issuerUID + OSSL_ISSUER_SERIAL_get0_serial + OSSL_ISSUER_SERIAL_new + OSSL_ISSUER_SERIAL_set1_issuer + OSSL_ISSUER_SERIAL_set1_issuerUID + OSSL_ISSUER_SERIAL_set1_serial + OSSL_LIB_CTX_free + OSSL_LIB_CTX_get0_global_default + OSSL_LIB_CTX_get_conf_diagnostics + OSSL_LIB_CTX_get_data + OSSL_LIB_CTX_load_config + OSSL_LIB_CTX_new + OSSL_LIB_CTX_new_child + OSSL_LIB_CTX_new_from_dispatch + OSSL_LIB_CTX_set0_default + OSSL_LIB_CTX_set_conf_diagnostics + OSSL_NAMED_DAY_free + OSSL_NAMED_DAY_it + OSSL_NAMED_DAY_new + OSSL_OBJECT_DIGEST_INFO_free + OSSL_OBJECT_DIGEST_INFO_get0_digest + OSSL_OBJECT_DIGEST_INFO_new + OSSL_OBJECT_DIGEST_INFO_set1_digest + OSSL_PARAM_BLD_free + OSSL_PARAM_BLD_new + OSSL_PARAM_BLD_push_BN + OSSL_PARAM_BLD_push_BN_pad + OSSL_PARAM_BLD_push_double + OSSL_PARAM_BLD_push_int + OSSL_PARAM_BLD_push_int32 + OSSL_PARAM_BLD_push_int64 + OSSL_PARAM_BLD_push_long + OSSL_PARAM_BLD_push_octet_ptr + OSSL_PARAM_BLD_push_octet_string + OSSL_PARAM_BLD_push_size_t + OSSL_PARAM_BLD_push_time_t + OSSL_PARAM_BLD_push_uint + OSSL_PARAM_BLD_push_uint32 + OSSL_PARAM_BLD_push_uint64 + OSSL_PARAM_BLD_push_ulong + OSSL_PARAM_BLD_push_utf8_ptr + OSSL_PARAM_BLD_push_utf8_string + OSSL_PARAM_BLD_to_param + OSSL_PARAM_allocate_from_text + OSSL_PARAM_construct_BN + OSSL_PARAM_construct_double + OSSL_PARAM_construct_end + OSSL_PARAM_construct_int + OSSL_PARAM_construct_int32 + OSSL_PARAM_construct_int64 + OSSL_PARAM_construct_long + OSSL_PARAM_construct_octet_ptr + OSSL_PARAM_construct_octet_string + OSSL_PARAM_construct_size_t + OSSL_PARAM_construct_time_t + OSSL_PARAM_construct_uint + OSSL_PARAM_construct_uint32 + OSSL_PARAM_construct_uint64 + OSSL_PARAM_construct_ulong + OSSL_PARAM_construct_utf8_ptr + OSSL_PARAM_construct_utf8_string + OSSL_PARAM_dup + OSSL_PARAM_free + OSSL_PARAM_get_BN + OSSL_PARAM_get_double + OSSL_PARAM_get_int + OSSL_PARAM_get_int32 + OSSL_PARAM_get_int64 + OSSL_PARAM_get_long + OSSL_PARAM_get_octet_ptr + OSSL_PARAM_get_octet_string + OSSL_PARAM_get_octet_string_ptr + OSSL_PARAM_get_size_t + OSSL_PARAM_get_time_t + OSSL_PARAM_get_uint + OSSL_PARAM_get_uint32 + OSSL_PARAM_get_uint64 + OSSL_PARAM_get_ulong + OSSL_PARAM_get_utf8_ptr + OSSL_PARAM_get_utf8_string + OSSL_PARAM_get_utf8_string_ptr + OSSL_PARAM_locate + OSSL_PARAM_locate_const + OSSL_PARAM_merge + OSSL_PARAM_modified + OSSL_PARAM_print_to_bio + OSSL_PARAM_set_BN + OSSL_PARAM_set_all_unmodified + OSSL_PARAM_set_double + OSSL_PARAM_set_int + OSSL_PARAM_set_int32 + OSSL_PARAM_set_int64 + OSSL_PARAM_set_long + OSSL_PARAM_set_octet_ptr + OSSL_PARAM_set_octet_string + OSSL_PARAM_set_octet_string_or_ptr + OSSL_PARAM_set_size_t + OSSL_PARAM_set_time_t + OSSL_PARAM_set_uint + OSSL_PARAM_set_uint32 + OSSL_PARAM_set_uint64 + OSSL_PARAM_set_ulong + OSSL_PARAM_set_utf8_ptr + OSSL_PARAM_set_utf8_string + OSSL_PRIVILEGE_POLICY_ID_free + OSSL_PRIVILEGE_POLICY_ID_it + OSSL_PRIVILEGE_POLICY_ID_new + OSSL_PROVIDER_add_builtin + OSSL_PROVIDER_add_conf_parameter + OSSL_PROVIDER_available + OSSL_PROVIDER_conf_get_bool + OSSL_PROVIDER_do_all + OSSL_PROVIDER_get0_default_search_path + OSSL_PROVIDER_get0_dispatch + OSSL_PROVIDER_get0_name + OSSL_PROVIDER_get0_provider_ctx + OSSL_PROVIDER_get_capabilities + OSSL_PROVIDER_get_conf_parameters + OSSL_PROVIDER_get_params + OSSL_PROVIDER_gettable_params + OSSL_PROVIDER_load + OSSL_PROVIDER_load_ex + OSSL_PROVIDER_query_operation + OSSL_PROVIDER_self_test + OSSL_PROVIDER_set_default_search_path + OSSL_PROVIDER_try_load + OSSL_PROVIDER_try_load_ex + OSSL_PROVIDER_unload + OSSL_PROVIDER_unquery_operation + OSSL_ROLE_SPEC_CERT_ID_SYNTAX_free + OSSL_ROLE_SPEC_CERT_ID_SYNTAX_it + OSSL_ROLE_SPEC_CERT_ID_SYNTAX_new + OSSL_ROLE_SPEC_CERT_ID_free + OSSL_ROLE_SPEC_CERT_ID_it + OSSL_ROLE_SPEC_CERT_ID_new + OSSL_SELF_TEST_free + OSSL_SELF_TEST_get_callback + OSSL_SELF_TEST_new + OSSL_SELF_TEST_onbegin + OSSL_SELF_TEST_oncorrupt_byte + OSSL_SELF_TEST_onend + OSSL_SELF_TEST_set_callback + OSSL_STACK_OF_X509_free + OSSL_STORE_INFO_free + OSSL_STORE_INFO_get0_CERT + OSSL_STORE_INFO_get0_CRL + OSSL_STORE_INFO_get0_NAME + OSSL_STORE_INFO_get0_NAME_description + OSSL_STORE_INFO_get0_PARAMS + OSSL_STORE_INFO_get0_PKEY + OSSL_STORE_INFO_get0_PUBKEY + OSSL_STORE_INFO_get0_data + OSSL_STORE_INFO_get1_CERT + OSSL_STORE_INFO_get1_CRL + OSSL_STORE_INFO_get1_NAME + OSSL_STORE_INFO_get1_NAME_description + OSSL_STORE_INFO_get1_PARAMS + OSSL_STORE_INFO_get1_PKEY + OSSL_STORE_INFO_get1_PUBKEY + OSSL_STORE_INFO_get_type + OSSL_STORE_INFO_new + OSSL_STORE_INFO_new_CERT + OSSL_STORE_INFO_new_CRL + OSSL_STORE_INFO_new_NAME + OSSL_STORE_INFO_new_PARAMS + OSSL_STORE_INFO_new_PKEY + OSSL_STORE_INFO_new_PUBKEY + OSSL_STORE_INFO_set0_NAME_description + OSSL_STORE_INFO_type_string + OSSL_STORE_LOADER_do_all_provided + OSSL_STORE_LOADER_fetch + OSSL_STORE_LOADER_free + OSSL_STORE_LOADER_get0_description + OSSL_STORE_LOADER_get0_engine + OSSL_STORE_LOADER_get0_properties + OSSL_STORE_LOADER_get0_provider + OSSL_STORE_LOADER_get0_scheme + OSSL_STORE_LOADER_is_a + OSSL_STORE_LOADER_names_do_all + OSSL_STORE_LOADER_new + OSSL_STORE_LOADER_set_attach + OSSL_STORE_LOADER_set_close + OSSL_STORE_LOADER_set_ctrl + OSSL_STORE_LOADER_set_eof + OSSL_STORE_LOADER_set_error + OSSL_STORE_LOADER_set_expect + OSSL_STORE_LOADER_set_find + OSSL_STORE_LOADER_set_load + OSSL_STORE_LOADER_set_open + OSSL_STORE_LOADER_set_open_ex + OSSL_STORE_LOADER_settable_ctx_params + OSSL_STORE_LOADER_up_ref + OSSL_STORE_SEARCH_by_alias + OSSL_STORE_SEARCH_by_issuer_serial + OSSL_STORE_SEARCH_by_key_fingerprint + OSSL_STORE_SEARCH_by_name + OSSL_STORE_SEARCH_free + OSSL_STORE_SEARCH_get0_bytes + OSSL_STORE_SEARCH_get0_digest + OSSL_STORE_SEARCH_get0_name + OSSL_STORE_SEARCH_get0_serial + OSSL_STORE_SEARCH_get0_string + OSSL_STORE_SEARCH_get_type + OSSL_STORE_attach + OSSL_STORE_close + OSSL_STORE_ctrl + OSSL_STORE_delete + OSSL_STORE_do_all_loaders + OSSL_STORE_eof + OSSL_STORE_error + OSSL_STORE_expect + OSSL_STORE_find + OSSL_STORE_load + OSSL_STORE_open + OSSL_STORE_open_ex + OSSL_STORE_register_loader + OSSL_STORE_supports_search + OSSL_STORE_unregister_loader + OSSL_STORE_vctrl + OSSL_TARGETING_INFORMATION_free + OSSL_TARGETING_INFORMATION_it + OSSL_TARGETING_INFORMATION_new + OSSL_TARGETS_free + OSSL_TARGETS_it + OSSL_TARGETS_new + OSSL_TARGET_free + OSSL_TARGET_it + OSSL_TARGET_new + OSSL_TIME_PERIOD_free + OSSL_TIME_PERIOD_it + OSSL_TIME_PERIOD_new + OSSL_TIME_SPEC_ABSOLUTE_free + OSSL_TIME_SPEC_ABSOLUTE_it + OSSL_TIME_SPEC_ABSOLUTE_new + OSSL_TIME_SPEC_DAY_free + OSSL_TIME_SPEC_DAY_it + OSSL_TIME_SPEC_DAY_new + OSSL_TIME_SPEC_MONTH_free + OSSL_TIME_SPEC_MONTH_it + OSSL_TIME_SPEC_MONTH_new + OSSL_TIME_SPEC_TIME_free + OSSL_TIME_SPEC_TIME_it + OSSL_TIME_SPEC_TIME_new + OSSL_TIME_SPEC_WEEKS_free + OSSL_TIME_SPEC_WEEKS_it + OSSL_TIME_SPEC_WEEKS_new + OSSL_TIME_SPEC_X_DAY_OF_free + OSSL_TIME_SPEC_X_DAY_OF_it + OSSL_TIME_SPEC_X_DAY_OF_new + OSSL_TIME_SPEC_free + OSSL_TIME_SPEC_it + OSSL_TIME_SPEC_new + OSSL_USER_NOTICE_SYNTAX_free + OSSL_USER_NOTICE_SYNTAX_it + OSSL_USER_NOTICE_SYNTAX_new + OSSL_get_max_threads + OSSL_get_thread_support_flags + OSSL_parse_url + OSSL_set_max_threads + OSSL_sleep + OSSL_trace_begin + OSSL_trace_enabled + OSSL_trace_end + OSSL_trace_get_category_name + OSSL_trace_get_category_num + OSSL_trace_set_callback + OSSL_trace_set_channel + OSSL_trace_set_prefix + OSSL_trace_set_suffix + OSSL_trace_string + OTHERNAME_cmp + OTHERNAME_free + OTHERNAME_it + OTHERNAME_new + OpenSSL_version + OpenSSL_version_num + PBE2PARAM_free + PBE2PARAM_it + PBE2PARAM_new + PBEPARAM_free + PBEPARAM_it + PBEPARAM_new + PBKDF2PARAM_free + PBKDF2PARAM_it + PBKDF2PARAM_new + PBMAC1PARAM_free + PBMAC1PARAM_it + PBMAC1PARAM_new + PBMAC1_get1_pbkdf2_param + PEM_ASN1_read + PEM_ASN1_read_bio + PEM_ASN1_write + PEM_ASN1_write_bio + PEM_ASN1_write_bio_ctx + PEM_SignFinal + PEM_SignInit + PEM_SignUpdate + PEM_X509_INFO_read + PEM_X509_INFO_read_bio + PEM_X509_INFO_read_bio_ex + PEM_X509_INFO_read_ex + PEM_X509_INFO_write_bio + PEM_bytes_read_bio + PEM_bytes_read_bio_secmem + PEM_def_callback + PEM_dek_info + PEM_do_header + PEM_get_EVP_CIPHER_INFO + PEM_proc_type + PEM_read + PEM_read_CMS + PEM_read_DHparams + PEM_read_DSAPrivateKey + PEM_read_DSA_PUBKEY + PEM_read_DSAparams + PEM_read_ECPKParameters + PEM_read_ECPrivateKey + PEM_read_EC_PUBKEY + PEM_read_NETSCAPE_CERT_SEQUENCE + PEM_read_PKCS7 + PEM_read_PKCS8 + PEM_read_PKCS8_PRIV_KEY_INFO + PEM_read_PUBKEY + PEM_read_PUBKEY_ex + PEM_read_PrivateKey + PEM_read_PrivateKey_ex + PEM_read_RSAPrivateKey + PEM_read_RSAPublicKey + PEM_read_RSA_PUBKEY + PEM_read_X509 + PEM_read_X509_ACERT + PEM_read_X509_AUX + PEM_read_X509_CRL + PEM_read_X509_PUBKEY + PEM_read_X509_REQ + PEM_read_bio + PEM_read_bio_CMS + PEM_read_bio_DHparams + PEM_read_bio_DSAPrivateKey + PEM_read_bio_DSA_PUBKEY + PEM_read_bio_DSAparams + PEM_read_bio_ECPKParameters + PEM_read_bio_ECPrivateKey + PEM_read_bio_EC_PUBKEY + PEM_read_bio_NETSCAPE_CERT_SEQUENCE + PEM_read_bio_PKCS7 + PEM_read_bio_PKCS8 + PEM_read_bio_PKCS8_PRIV_KEY_INFO + PEM_read_bio_PUBKEY + PEM_read_bio_PUBKEY_ex + PEM_read_bio_Parameters + PEM_read_bio_Parameters_ex + PEM_read_bio_PrivateKey + PEM_read_bio_PrivateKey_ex + PEM_read_bio_RSAPrivateKey + PEM_read_bio_RSAPublicKey + PEM_read_bio_RSA_PUBKEY + PEM_read_bio_X509 + PEM_read_bio_X509_ACERT + PEM_read_bio_X509_AUX + PEM_read_bio_X509_CRL + PEM_read_bio_X509_PUBKEY + PEM_read_bio_X509_REQ + PEM_read_bio_ex + PEM_write + PEM_write_CMS + PEM_write_DHparams + PEM_write_DHxparams + PEM_write_DSAPrivateKey + PEM_write_DSA_PUBKEY + PEM_write_DSAparams + PEM_write_ECPKParameters + PEM_write_ECPrivateKey + PEM_write_EC_PUBKEY + PEM_write_NETSCAPE_CERT_SEQUENCE + PEM_write_PKCS7 + PEM_write_PKCS8 + PEM_write_PKCS8PrivateKey + PEM_write_PKCS8PrivateKey_nid + PEM_write_PKCS8_PRIV_KEY_INFO + PEM_write_PUBKEY + PEM_write_PUBKEY_ex + PEM_write_PrivateKey + PEM_write_PrivateKey_ex + PEM_write_RSAPrivateKey + PEM_write_RSAPublicKey + PEM_write_RSA_PUBKEY + PEM_write_X509 + PEM_write_X509_ACERT + PEM_write_X509_AUX + PEM_write_X509_CRL + PEM_write_X509_PUBKEY + PEM_write_X509_REQ + PEM_write_X509_REQ_NEW + PEM_write_bio + PEM_write_bio_ASN1_stream + PEM_write_bio_CMS + PEM_write_bio_CMS_stream + PEM_write_bio_DHparams + PEM_write_bio_DHxparams + PEM_write_bio_DSAPrivateKey + PEM_write_bio_DSA_PUBKEY + PEM_write_bio_DSAparams + PEM_write_bio_ECPKParameters + PEM_write_bio_ECPrivateKey + PEM_write_bio_EC_PUBKEY + PEM_write_bio_NETSCAPE_CERT_SEQUENCE + PEM_write_bio_PKCS7 + PEM_write_bio_PKCS7_stream + PEM_write_bio_PKCS8 + PEM_write_bio_PKCS8PrivateKey + PEM_write_bio_PKCS8PrivateKey_nid + PEM_write_bio_PKCS8_PRIV_KEY_INFO + PEM_write_bio_PUBKEY + PEM_write_bio_PUBKEY_ex + PEM_write_bio_Parameters + PEM_write_bio_PrivateKey + PEM_write_bio_PrivateKey_ex + PEM_write_bio_PrivateKey_traditional + PEM_write_bio_RSAPrivateKey + PEM_write_bio_RSAPublicKey + PEM_write_bio_RSA_PUBKEY + PEM_write_bio_X509 + PEM_write_bio_X509_ACERT + PEM_write_bio_X509_AUX + PEM_write_bio_X509_CRL + PEM_write_bio_X509_PUBKEY + PEM_write_bio_X509_REQ + PEM_write_bio_X509_REQ_NEW + PKCS12_AUTHSAFES_it + PKCS12_BAGS_free + PKCS12_BAGS_it + PKCS12_BAGS_new + PKCS12_MAC_DATA_free + PKCS12_MAC_DATA_it + PKCS12_MAC_DATA_new + PKCS12_PBE_add + PKCS12_PBE_keyivgen + PKCS12_PBE_keyivgen_ex + PKCS12_SAFEBAGS_it + PKCS12_SAFEBAG_create0_p8inf + PKCS12_SAFEBAG_create0_pkcs8 + PKCS12_SAFEBAG_create_cert + PKCS12_SAFEBAG_create_crl + PKCS12_SAFEBAG_create_pkcs8_encrypt + PKCS12_SAFEBAG_create_pkcs8_encrypt_ex + PKCS12_SAFEBAG_create_secret + PKCS12_SAFEBAG_free + PKCS12_SAFEBAG_get0_attr + PKCS12_SAFEBAG_get0_attrs + PKCS12_SAFEBAG_get0_bag_obj + PKCS12_SAFEBAG_get0_bag_type + PKCS12_SAFEBAG_get0_p8inf + PKCS12_SAFEBAG_get0_pkcs8 + PKCS12_SAFEBAG_get0_safes + PKCS12_SAFEBAG_get0_type + PKCS12_SAFEBAG_get1_cert + PKCS12_SAFEBAG_get1_cert_ex + PKCS12_SAFEBAG_get1_crl + PKCS12_SAFEBAG_get1_crl_ex + PKCS12_SAFEBAG_get_bag_nid + PKCS12_SAFEBAG_get_nid + PKCS12_SAFEBAG_it + PKCS12_SAFEBAG_new + PKCS12_SAFEBAG_set0_attrs + PKCS12_add1_attr_by_NID + PKCS12_add1_attr_by_txt + PKCS12_add_CSPName_asc + PKCS12_add_cert + PKCS12_add_friendlyname_asc + PKCS12_add_friendlyname_uni + PKCS12_add_friendlyname_utf8 + PKCS12_add_key + PKCS12_add_key_ex + PKCS12_add_localkeyid + PKCS12_add_safe + PKCS12_add_safe_ex + PKCS12_add_safes + PKCS12_add_safes_ex + PKCS12_add_secret + PKCS12_create + PKCS12_create_ex + PKCS12_create_ex2 + PKCS12_decrypt_skey + PKCS12_decrypt_skey_ex + PKCS12_free + PKCS12_gen_mac + PKCS12_get0_mac + PKCS12_get_attr + PKCS12_get_attr_gen + PKCS12_get_friendlyname + PKCS12_init + PKCS12_init_ex + PKCS12_it + PKCS12_item_decrypt_d2i + PKCS12_item_decrypt_d2i_ex + PKCS12_item_i2d_encrypt + PKCS12_item_i2d_encrypt_ex + PKCS12_item_pack_safebag + PKCS12_key_gen_asc + PKCS12_key_gen_asc_ex + PKCS12_key_gen_uni + PKCS12_key_gen_uni_ex + PKCS12_key_gen_utf8 + PKCS12_key_gen_utf8_ex + PKCS12_mac_present + PKCS12_new + PKCS12_newpass + PKCS12_pack_authsafes + PKCS12_pack_p7data + PKCS12_pack_p7encdata + PKCS12_pack_p7encdata_ex + PKCS12_parse + PKCS12_pbe_crypt + PKCS12_pbe_crypt_ex + PKCS12_set_mac + PKCS12_set_pbmac1_pbkdf2 + PKCS12_setup_mac + PKCS12_unpack_authsafes + PKCS12_unpack_p7data + PKCS12_unpack_p7encdata + PKCS12_verify_mac + PKCS1_MGF1 + PKCS5_PBE_add + PKCS5_PBE_keyivgen + PKCS5_PBE_keyivgen_ex + PKCS5_PBKDF2_HMAC + PKCS5_PBKDF2_HMAC_SHA1 + PKCS5_pbe2_set + PKCS5_pbe2_set_iv + PKCS5_pbe2_set_iv_ex + PKCS5_pbe2_set_scrypt + PKCS5_pbe_set + PKCS5_pbe_set0_algor + PKCS5_pbe_set0_algor_ex + PKCS5_pbe_set_ex + PKCS5_pbkdf2_set + PKCS5_pbkdf2_set_ex + PKCS5_v2_PBE_keyivgen + PKCS5_v2_PBE_keyivgen_ex + PKCS5_v2_scrypt_keyivgen + PKCS5_v2_scrypt_keyivgen_ex + PKCS7_ATTR_SIGN_it + PKCS7_ATTR_VERIFY_it + PKCS7_DIGEST_free + PKCS7_DIGEST_it + PKCS7_DIGEST_new + PKCS7_ENCRYPT_free + PKCS7_ENCRYPT_it + PKCS7_ENCRYPT_new + PKCS7_ENC_CONTENT_free + PKCS7_ENC_CONTENT_it + PKCS7_ENC_CONTENT_new + PKCS7_ENVELOPE_free + PKCS7_ENVELOPE_it + PKCS7_ENVELOPE_new + PKCS7_ISSUER_AND_SERIAL_digest + PKCS7_ISSUER_AND_SERIAL_free + PKCS7_ISSUER_AND_SERIAL_it + PKCS7_ISSUER_AND_SERIAL_new + PKCS7_RECIP_INFO_free + PKCS7_RECIP_INFO_get0_alg + PKCS7_RECIP_INFO_it + PKCS7_RECIP_INFO_new + PKCS7_RECIP_INFO_set + PKCS7_SIGNED_free + PKCS7_SIGNED_it + PKCS7_SIGNED_new + PKCS7_SIGNER_INFO_free + PKCS7_SIGNER_INFO_get0_algs + PKCS7_SIGNER_INFO_it + PKCS7_SIGNER_INFO_new + PKCS7_SIGNER_INFO_set + PKCS7_SIGNER_INFO_sign + PKCS7_SIGN_ENVELOPE_free + PKCS7_SIGN_ENVELOPE_it + PKCS7_SIGN_ENVELOPE_new + PKCS7_add0_attrib_signing_time + PKCS7_add1_attrib_digest + PKCS7_add_attrib_content_type + PKCS7_add_attrib_smimecap + PKCS7_add_attribute + PKCS7_add_certificate + PKCS7_add_crl + PKCS7_add_recipient + PKCS7_add_recipient_info + PKCS7_add_signature + PKCS7_add_signed_attribute + PKCS7_add_signer + PKCS7_cert_from_signer_info + PKCS7_content_new + PKCS7_ctrl + PKCS7_dataDecode + PKCS7_dataFinal + PKCS7_dataInit + PKCS7_dataVerify + PKCS7_decrypt + PKCS7_digest_from_attributes + PKCS7_dup + PKCS7_encrypt + PKCS7_encrypt_ex + PKCS7_final + PKCS7_free + PKCS7_get0_signers + PKCS7_get_attribute + PKCS7_get_issuer_and_serial + PKCS7_get_octet_string + PKCS7_get_signed_attribute + PKCS7_get_signer_info + PKCS7_get_smimecap + PKCS7_it + PKCS7_new + PKCS7_new_ex + PKCS7_print_ctx + PKCS7_set0_type_other + PKCS7_set_attributes + PKCS7_set_cipher + PKCS7_set_content + PKCS7_set_digest + PKCS7_set_signed_attributes + PKCS7_set_type + PKCS7_sign + PKCS7_sign_add_signer + PKCS7_sign_ex + PKCS7_signatureVerify + PKCS7_simple_smimecap + PKCS7_stream + PKCS7_to_TS_TST_INFO + PKCS7_type_is_other + PKCS7_verify + PKCS8_PRIV_KEY_INFO_free + PKCS8_PRIV_KEY_INFO_it + PKCS8_PRIV_KEY_INFO_new + PKCS8_add_keyusage + PKCS8_decrypt + PKCS8_decrypt_ex + PKCS8_encrypt + PKCS8_encrypt_ex + PKCS8_get_attr + PKCS8_pkey_add1_attr + PKCS8_pkey_add1_attr_by_NID + PKCS8_pkey_add1_attr_by_OBJ + PKCS8_pkey_get0 + PKCS8_pkey_get0_attrs + PKCS8_pkey_set0 + PKCS8_set0_pbe + PKCS8_set0_pbe_ex + PKEY_USAGE_PERIOD_free + PKEY_USAGE_PERIOD_it + PKEY_USAGE_PERIOD_new + POLICYINFO_free + POLICYINFO_it + POLICYINFO_new + POLICYQUALINFO_free + POLICYQUALINFO_it + POLICYQUALINFO_new + POLICY_CONSTRAINTS_free + POLICY_CONSTRAINTS_it + POLICY_CONSTRAINTS_new + POLICY_MAPPINGS_it + POLICY_MAPPING_free + POLICY_MAPPING_it + POLICY_MAPPING_new + PROFESSION_INFO_free + PROFESSION_INFO_get0_addProfessionInfo + PROFESSION_INFO_get0_namingAuthority + PROFESSION_INFO_get0_professionItems + PROFESSION_INFO_get0_professionOIDs + PROFESSION_INFO_get0_registrationNumber + PROFESSION_INFO_it + PROFESSION_INFO_new + PROFESSION_INFO_set0_addProfessionInfo + PROFESSION_INFO_set0_namingAuthority + PROFESSION_INFO_set0_professionItems + PROFESSION_INFO_set0_professionOIDs + PROFESSION_INFO_set0_registrationNumber + PROXY_CERT_INFO_EXTENSION_free + PROXY_CERT_INFO_EXTENSION_it + PROXY_CERT_INFO_EXTENSION_new + PROXY_POLICY_free + PROXY_POLICY_it + PROXY_POLICY_new + RAND_OpenSSL + RAND_add + RAND_bytes + RAND_bytes_ex + RAND_event + RAND_file_name + RAND_get0_primary + RAND_get0_private + RAND_get0_public + RAND_get_rand_method + RAND_keep_random_devices_open + RAND_load_file + RAND_poll + RAND_priv_bytes + RAND_priv_bytes_ex + RAND_pseudo_bytes + RAND_screen + RAND_seed + RAND_set0_private + RAND_set0_public + RAND_set1_random_provider + RAND_set_DRBG_type + RAND_set_rand_engine + RAND_set_rand_method + RAND_set_seed_source_type + RAND_status + RAND_write_file + RC2_cbc_encrypt + RC2_cfb64_encrypt + RC2_decrypt + RC2_ecb_encrypt + RC2_encrypt + RC2_ofb64_encrypt + RC2_set_key + RC4 + RC4_options + RC4_set_key + RIPEMD160 + RIPEMD160_Final + RIPEMD160_Init + RIPEMD160_Transform + RIPEMD160_Update + RSAPrivateKey_dup + RSAPrivateKey_it + RSAPublicKey_dup + RSAPublicKey_it + RSA_OAEP_PARAMS_free + RSA_OAEP_PARAMS_it + RSA_OAEP_PARAMS_new + RSA_PKCS1_OpenSSL + RSA_PSS_PARAMS_dup + RSA_PSS_PARAMS_free + RSA_PSS_PARAMS_it + RSA_PSS_PARAMS_new + RSA_X931_derive_ex + RSA_X931_generate_key_ex + RSA_X931_hash_id + RSA_bits + RSA_blinding_off + RSA_blinding_on + RSA_check_key + RSA_check_key_ex + RSA_clear_flags + RSA_flags + RSA_free + RSA_generate_key + RSA_generate_key_ex + RSA_generate_multi_prime_key + RSA_get0_crt_params + RSA_get0_d + RSA_get0_dmp1 + RSA_get0_dmq1 + RSA_get0_e + RSA_get0_engine + RSA_get0_factors + RSA_get0_iqmp + RSA_get0_key + RSA_get0_multi_prime_crt_params + RSA_get0_multi_prime_factors + RSA_get0_n + RSA_get0_p + RSA_get0_pss_params + RSA_get0_q + RSA_get_default_method + RSA_get_ex_data + RSA_get_method + RSA_get_multi_prime_extra_count + RSA_get_version + RSA_meth_dup + RSA_meth_free + RSA_meth_get0_app_data + RSA_meth_get0_name + RSA_meth_get_bn_mod_exp + RSA_meth_get_finish + RSA_meth_get_flags + RSA_meth_get_init + RSA_meth_get_keygen + RSA_meth_get_mod_exp + RSA_meth_get_multi_prime_keygen + RSA_meth_get_priv_dec + RSA_meth_get_priv_enc + RSA_meth_get_pub_dec + RSA_meth_get_pub_enc + RSA_meth_get_sign + RSA_meth_get_verify + RSA_meth_new + RSA_meth_set0_app_data + RSA_meth_set1_name + RSA_meth_set_bn_mod_exp + RSA_meth_set_finish + RSA_meth_set_flags + RSA_meth_set_init + RSA_meth_set_keygen + RSA_meth_set_mod_exp + RSA_meth_set_multi_prime_keygen + RSA_meth_set_priv_dec + RSA_meth_set_priv_enc + RSA_meth_set_pub_dec + RSA_meth_set_pub_enc + RSA_meth_set_sign + RSA_meth_set_verify + RSA_new + RSA_new_method + RSA_null_method + RSA_padding_add_PKCS1_OAEP + RSA_padding_add_PKCS1_OAEP_mgf1 + RSA_padding_add_PKCS1_PSS + RSA_padding_add_PKCS1_PSS_mgf1 + RSA_padding_add_PKCS1_type_1 + RSA_padding_add_PKCS1_type_2 + RSA_padding_add_X931 + RSA_padding_add_none + RSA_padding_check_PKCS1_OAEP + RSA_padding_check_PKCS1_OAEP_mgf1 + RSA_padding_check_PKCS1_type_1 + RSA_padding_check_PKCS1_type_2 + RSA_padding_check_X931 + RSA_padding_check_none + RSA_pkey_ctx_ctrl + RSA_print + RSA_print_fp + RSA_private_decrypt + RSA_private_encrypt + RSA_public_decrypt + RSA_public_encrypt + RSA_security_bits + RSA_set0_crt_params + RSA_set0_factors + RSA_set0_key + RSA_set0_multi_prime_params + RSA_set_default_method + RSA_set_ex_data + RSA_set_flags + RSA_set_method + RSA_setup_blinding + RSA_sign + RSA_sign_ASN1_OCTET_STRING + RSA_size + RSA_test_flags + RSA_up_ref + RSA_verify + RSA_verify_ASN1_OCTET_STRING + RSA_verify_PKCS1_PSS + RSA_verify_PKCS1_PSS_mgf1 + SCRYPT_PARAMS_free + SCRYPT_PARAMS_it + SCRYPT_PARAMS_new + SCT_LIST_free + SCT_LIST_print + SCT_LIST_validate + SCT_free + SCT_get0_extensions + SCT_get0_log_id + SCT_get0_signature + SCT_get_log_entry_type + SCT_get_signature_nid + SCT_get_source + SCT_get_timestamp + SCT_get_validation_status + SCT_get_version + SCT_new + SCT_new_from_base64 + SCT_print + SCT_set0_extensions + SCT_set0_log_id + SCT_set0_signature + SCT_set1_extensions + SCT_set1_log_id + SCT_set1_signature + SCT_set_log_entry_type + SCT_set_signature_nid + SCT_set_source + SCT_set_timestamp + SCT_set_version + SCT_validate + SCT_validation_status_string + SEED_cbc_encrypt + SEED_cfb128_encrypt + SEED_decrypt + SEED_ecb_encrypt + SEED_encrypt + SEED_ofb128_encrypt + SEED_set_key + SHA1 + SHA1_Final + SHA1_Init + SHA1_Transform + SHA1_Update + SHA224 + SHA224_Final + SHA224_Init + SHA224_Update + SHA256 + SHA256_Final + SHA256_Init + SHA256_Transform + SHA256_Update + SHA384 + SHA384_Final + SHA384_Init + SHA384_Update + SHA512 + SHA512_Final + SHA512_Init + SHA512_Transform + SHA512_Update + SMIME_crlf_copy + SMIME_read_ASN1 + SMIME_read_ASN1_ex + SMIME_read_CMS + SMIME_read_CMS_ex + SMIME_read_PKCS7 + SMIME_read_PKCS7_ex + SMIME_text + SMIME_write_ASN1 + SMIME_write_ASN1_ex + SMIME_write_CMS + SMIME_write_PKCS7 + SRP_Calc_A + SRP_Calc_B + SRP_Calc_B_ex + SRP_Calc_client_key + SRP_Calc_client_key_ex + SRP_Calc_server_key + SRP_Calc_u + SRP_Calc_u_ex + SRP_Calc_x + SRP_Calc_x_ex + SRP_VBASE_add0_user + SRP_VBASE_free + SRP_VBASE_get1_by_user + SRP_VBASE_get_by_user + SRP_VBASE_init + SRP_VBASE_new + SRP_Verify_A_mod_N + SRP_Verify_B_mod_N + SRP_check_known_gN_param + SRP_create_verifier + SRP_create_verifier_BN + SRP_create_verifier_BN_ex + SRP_create_verifier_ex + SRP_get_default_gN + SRP_user_pwd_free + SRP_user_pwd_new + SRP_user_pwd_set0_sv + SRP_user_pwd_set1_ids + SRP_user_pwd_set_gN + SXNETID_free + SXNETID_it + SXNETID_new + SXNET_add_id_INTEGER + SXNET_add_id_asc + SXNET_add_id_ulong + SXNET_free + SXNET_get_id_INTEGER + SXNET_get_id_asc + SXNET_get_id_ulong + SXNET_it + SXNET_new + TLS_FEATURE_free + TLS_FEATURE_new + TS_ACCURACY_dup + TS_ACCURACY_free + TS_ACCURACY_get_micros + TS_ACCURACY_get_millis + TS_ACCURACY_get_seconds + TS_ACCURACY_new + TS_ACCURACY_set_micros + TS_ACCURACY_set_millis + TS_ACCURACY_set_seconds + TS_ASN1_INTEGER_print_bio + TS_CONF_get_tsa_section + TS_CONF_load_cert + TS_CONF_load_certs + TS_CONF_load_key + TS_CONF_set_accuracy + TS_CONF_set_certs + TS_CONF_set_clock_precision_digits + TS_CONF_set_crypto_device + TS_CONF_set_def_policy + TS_CONF_set_default_engine + TS_CONF_set_digests + TS_CONF_set_ess_cert_id_chain + TS_CONF_set_ess_cert_id_digest + TS_CONF_set_ordering + TS_CONF_set_policies + TS_CONF_set_serial + TS_CONF_set_signer_cert + TS_CONF_set_signer_digest + TS_CONF_set_signer_key + TS_CONF_set_tsa_name + TS_MSG_IMPRINT_dup + TS_MSG_IMPRINT_free + TS_MSG_IMPRINT_get_algo + TS_MSG_IMPRINT_get_msg + TS_MSG_IMPRINT_new + TS_MSG_IMPRINT_print_bio + TS_MSG_IMPRINT_set_algo + TS_MSG_IMPRINT_set_msg + TS_OBJ_print_bio + TS_REQ_add_ext + TS_REQ_delete_ext + TS_REQ_dup + TS_REQ_ext_free + TS_REQ_free + TS_REQ_get_cert_req + TS_REQ_get_ext + TS_REQ_get_ext_by_NID + TS_REQ_get_ext_by_OBJ + TS_REQ_get_ext_by_critical + TS_REQ_get_ext_count + TS_REQ_get_ext_d2i + TS_REQ_get_exts + TS_REQ_get_msg_imprint + TS_REQ_get_nonce + TS_REQ_get_policy_id + TS_REQ_get_version + TS_REQ_new + TS_REQ_print_bio + TS_REQ_set_cert_req + TS_REQ_set_msg_imprint + TS_REQ_set_nonce + TS_REQ_set_policy_id + TS_REQ_set_version + TS_REQ_to_TS_VERIFY_CTX + TS_RESP_CTX_add_failure_info + TS_RESP_CTX_add_flags + TS_RESP_CTX_add_md + TS_RESP_CTX_add_policy + TS_RESP_CTX_free + TS_RESP_CTX_get_request + TS_RESP_CTX_get_tst_info + TS_RESP_CTX_new + TS_RESP_CTX_new_ex + TS_RESP_CTX_set_accuracy + TS_RESP_CTX_set_certs + TS_RESP_CTX_set_clock_precision_digits + TS_RESP_CTX_set_def_policy + TS_RESP_CTX_set_ess_cert_id_digest + TS_RESP_CTX_set_extension_cb + TS_RESP_CTX_set_serial_cb + TS_RESP_CTX_set_signer_cert + TS_RESP_CTX_set_signer_digest + TS_RESP_CTX_set_signer_key + TS_RESP_CTX_set_status_info + TS_RESP_CTX_set_status_info_cond + TS_RESP_CTX_set_time_cb + TS_RESP_create_response + TS_RESP_dup + TS_RESP_free + TS_RESP_get_status_info + TS_RESP_get_token + TS_RESP_get_tst_info + TS_RESP_new + TS_RESP_print_bio + TS_RESP_set_status_info + TS_RESP_set_tst_info + TS_RESP_verify_response + TS_RESP_verify_signature + TS_RESP_verify_token + TS_STATUS_INFO_dup + TS_STATUS_INFO_free + TS_STATUS_INFO_get0_failure_info + TS_STATUS_INFO_get0_status + TS_STATUS_INFO_get0_text + TS_STATUS_INFO_new + TS_STATUS_INFO_print_bio + TS_STATUS_INFO_set_status + TS_TST_INFO_add_ext + TS_TST_INFO_delete_ext + TS_TST_INFO_dup + TS_TST_INFO_ext_free + TS_TST_INFO_free + TS_TST_INFO_get_accuracy + TS_TST_INFO_get_ext + TS_TST_INFO_get_ext_by_NID + TS_TST_INFO_get_ext_by_OBJ + TS_TST_INFO_get_ext_by_critical + TS_TST_INFO_get_ext_count + TS_TST_INFO_get_ext_d2i + TS_TST_INFO_get_exts + TS_TST_INFO_get_msg_imprint + TS_TST_INFO_get_nonce + TS_TST_INFO_get_ordering + TS_TST_INFO_get_policy_id + TS_TST_INFO_get_serial + TS_TST_INFO_get_time + TS_TST_INFO_get_tsa + TS_TST_INFO_get_version + TS_TST_INFO_new + TS_TST_INFO_print_bio + TS_TST_INFO_set_accuracy + TS_TST_INFO_set_msg_imprint + TS_TST_INFO_set_nonce + TS_TST_INFO_set_ordering + TS_TST_INFO_set_policy_id + TS_TST_INFO_set_serial + TS_TST_INFO_set_time + TS_TST_INFO_set_tsa + TS_TST_INFO_set_version + TS_VERIFY_CTX_add_flags + TS_VERIFY_CTX_cleanup + TS_VERIFY_CTX_free + TS_VERIFY_CTX_init + TS_VERIFY_CTX_new + TS_VERIFY_CTX_set0_certs + TS_VERIFY_CTX_set0_data + TS_VERIFY_CTX_set0_imprint + TS_VERIFY_CTX_set0_store + TS_VERIFY_CTX_set_certs + TS_VERIFY_CTX_set_data + TS_VERIFY_CTX_set_flags + TS_VERIFY_CTX_set_imprint + TS_VERIFY_CTX_set_store + TS_X509_ALGOR_print_bio + TS_ext_print_bio + TXT_DB_create_index + TXT_DB_free + TXT_DB_get_by_index + TXT_DB_insert + TXT_DB_read + TXT_DB_write + UINT32_it + UINT64_it + UI_OpenSSL + UI_UTIL_read_pw + UI_UTIL_read_pw_string + UI_UTIL_wrap_read_pem_callback + UI_add_error_string + UI_add_info_string + UI_add_input_boolean + UI_add_input_string + UI_add_user_data + UI_add_verify_string + UI_construct_prompt + UI_create_method + UI_ctrl + UI_destroy_method + UI_dup_error_string + UI_dup_info_string + UI_dup_input_boolean + UI_dup_input_string + UI_dup_user_data + UI_dup_verify_string + UI_free + UI_get0_action_string + UI_get0_output_string + UI_get0_result + UI_get0_result_string + UI_get0_test_string + UI_get0_user_data + UI_get_default_method + UI_get_ex_data + UI_get_input_flags + UI_get_method + UI_get_result_length + UI_get_result_maxsize + UI_get_result_minsize + UI_get_result_string_length + UI_get_string_type + UI_method_get_closer + UI_method_get_data_destructor + UI_method_get_data_duplicator + UI_method_get_ex_data + UI_method_get_flusher + UI_method_get_opener + UI_method_get_prompt_constructor + UI_method_get_reader + UI_method_get_writer + UI_method_set_closer + UI_method_set_data_duplicator + UI_method_set_ex_data + UI_method_set_flusher + UI_method_set_opener + UI_method_set_prompt_constructor + UI_method_set_reader + UI_method_set_writer + UI_new + UI_new_method + UI_null + UI_process + UI_set_default_method + UI_set_ex_data + UI_set_method + UI_set_result + UI_set_result_ex + USERNOTICE_free + USERNOTICE_it + USERNOTICE_new + UTF8_getc + UTF8_putc + WHIRLPOOL + WHIRLPOOL_BitUpdate + WHIRLPOOL_Final + WHIRLPOOL_Init + WHIRLPOOL_Update + X509V3_EXT_CRL_add_conf + X509V3_EXT_CRL_add_nconf + X509V3_EXT_REQ_add_conf + X509V3_EXT_REQ_add_nconf + X509V3_EXT_add + X509V3_EXT_add_alias + X509V3_EXT_add_conf + X509V3_EXT_add_list + X509V3_EXT_add_nconf + X509V3_EXT_add_nconf_sk + X509V3_EXT_cleanup + X509V3_EXT_conf + X509V3_EXT_conf_nid + X509V3_EXT_d2i + X509V3_EXT_get + X509V3_EXT_get_nid + X509V3_EXT_i2d + X509V3_EXT_nconf + X509V3_EXT_nconf_nid + X509V3_EXT_print + X509V3_EXT_print_fp + X509V3_EXT_val_prn + X509V3_NAME_from_section + X509V3_add1_i2d + X509V3_add_standard_extensions + X509V3_add_value + X509V3_add_value_bool + X509V3_add_value_bool_nf + X509V3_add_value_int + X509V3_add_value_uchar + X509V3_conf_free + X509V3_extensions_print + X509V3_get_d2i + X509V3_get_section + X509V3_get_string + X509V3_get_value_bool + X509V3_get_value_int + X509V3_parse_list + X509V3_section_free + X509V3_set_conf_lhash + X509V3_set_ctx + X509V3_set_issuer_pkey + X509V3_set_nconf + X509V3_string_free + X509_ACERT_INFO_free + X509_ACERT_INFO_it + X509_ACERT_INFO_new + X509_ACERT_ISSUER_V2FORM_free + X509_ACERT_ISSUER_V2FORM_new + X509_ACERT_add1_attr + X509_ACERT_add1_attr_by_NID + X509_ACERT_add1_attr_by_OBJ + X509_ACERT_add1_attr_by_txt + X509_ACERT_add1_ext_i2d + X509_ACERT_add_attr_nconf + X509_ACERT_delete_attr + X509_ACERT_dup + X509_ACERT_free + X509_ACERT_get0_extensions + X509_ACERT_get0_holder_baseCertId + X509_ACERT_get0_holder_digest + X509_ACERT_get0_holder_entityName + X509_ACERT_get0_info_sigalg + X509_ACERT_get0_issuerName + X509_ACERT_get0_issuerUID + X509_ACERT_get0_notAfter + X509_ACERT_get0_notBefore + X509_ACERT_get0_serialNumber + X509_ACERT_get0_signature + X509_ACERT_get_attr + X509_ACERT_get_attr_by_NID + X509_ACERT_get_attr_by_OBJ + X509_ACERT_get_attr_count + X509_ACERT_get_ext_d2i + X509_ACERT_get_signature_nid + X509_ACERT_get_version + X509_ACERT_it + X509_ACERT_new + X509_ACERT_print + X509_ACERT_print_ex + X509_ACERT_set0_holder_baseCertId + X509_ACERT_set0_holder_digest + X509_ACERT_set0_holder_entityName + X509_ACERT_set1_issuerName + X509_ACERT_set1_notAfter + X509_ACERT_set1_notBefore + X509_ACERT_set1_serialNumber + X509_ACERT_set_version + X509_ACERT_sign + X509_ACERT_sign_ctx + X509_ACERT_verify + X509_ALGORS_it + X509_ALGOR_cmp + X509_ALGOR_copy + X509_ALGOR_dup + X509_ALGOR_free + X509_ALGOR_get0 + X509_ALGOR_it + X509_ALGOR_new + X509_ALGOR_set0 + X509_ALGOR_set_md + X509_ATTRIBUTE_count + X509_ATTRIBUTE_create + X509_ATTRIBUTE_create_by_NID + X509_ATTRIBUTE_create_by_OBJ + X509_ATTRIBUTE_create_by_txt + X509_ATTRIBUTE_dup + X509_ATTRIBUTE_free + X509_ATTRIBUTE_get0_data + X509_ATTRIBUTE_get0_object + X509_ATTRIBUTE_get0_type + X509_ATTRIBUTE_it + X509_ATTRIBUTE_new + X509_ATTRIBUTE_set1_data + X509_ATTRIBUTE_set1_object + X509_CERT_AUX_free + X509_CERT_AUX_it + X509_CERT_AUX_new + X509_CINF_free + X509_CINF_it + X509_CINF_new + X509_CRL_INFO_free + X509_CRL_INFO_it + X509_CRL_INFO_new + X509_CRL_METHOD_free + X509_CRL_METHOD_new + X509_CRL_add0_revoked + X509_CRL_add1_ext_i2d + X509_CRL_add_ext + X509_CRL_check_suiteb + X509_CRL_cmp + X509_CRL_delete_ext + X509_CRL_diff + X509_CRL_digest + X509_CRL_dup + X509_CRL_free + X509_CRL_get0_by_cert + X509_CRL_get0_by_serial + X509_CRL_get0_extensions + X509_CRL_get0_lastUpdate + X509_CRL_get0_nextUpdate + X509_CRL_get0_signature + X509_CRL_get0_tbs_sigalg + X509_CRL_get_REVOKED + X509_CRL_get_ext + X509_CRL_get_ext_by_NID + X509_CRL_get_ext_by_OBJ + X509_CRL_get_ext_by_critical + X509_CRL_get_ext_count + X509_CRL_get_ext_d2i + X509_CRL_get_issuer + X509_CRL_get_lastUpdate + X509_CRL_get_meth_data + X509_CRL_get_nextUpdate + X509_CRL_get_signature_nid + X509_CRL_get_version + X509_CRL_it + X509_CRL_load_http + X509_CRL_match + X509_CRL_new + X509_CRL_new_ex + X509_CRL_print + X509_CRL_print_ex + X509_CRL_print_fp + X509_CRL_set1_lastUpdate + X509_CRL_set1_nextUpdate + X509_CRL_set_default_method + X509_CRL_set_issuer_name + X509_CRL_set_meth_data + X509_CRL_set_version + X509_CRL_sign + X509_CRL_sign_ctx + X509_CRL_sort + X509_CRL_up_ref + X509_CRL_verify + X509_EXTENSIONS_it + X509_EXTENSION_create_by_NID + X509_EXTENSION_create_by_OBJ + X509_EXTENSION_dup + X509_EXTENSION_free + X509_EXTENSION_get_critical + X509_EXTENSION_get_data + X509_EXTENSION_get_object + X509_EXTENSION_it + X509_EXTENSION_new + X509_EXTENSION_set_critical + X509_EXTENSION_set_data + X509_EXTENSION_set_object + X509_INFO_free + X509_INFO_new + X509_LOOKUP_by_alias + X509_LOOKUP_by_fingerprint + X509_LOOKUP_by_issuer_serial + X509_LOOKUP_by_subject + X509_LOOKUP_by_subject_ex + X509_LOOKUP_ctrl + X509_LOOKUP_ctrl_ex + X509_LOOKUP_file + X509_LOOKUP_free + X509_LOOKUP_get_method_data + X509_LOOKUP_get_store + X509_LOOKUP_hash_dir + X509_LOOKUP_init + X509_LOOKUP_meth_free + X509_LOOKUP_meth_get_ctrl + X509_LOOKUP_meth_get_free + X509_LOOKUP_meth_get_get_by_alias + X509_LOOKUP_meth_get_get_by_fingerprint + X509_LOOKUP_meth_get_get_by_issuer_serial + X509_LOOKUP_meth_get_get_by_subject + X509_LOOKUP_meth_get_init + X509_LOOKUP_meth_get_new_item + X509_LOOKUP_meth_get_shutdown + X509_LOOKUP_meth_new + X509_LOOKUP_meth_set_ctrl + X509_LOOKUP_meth_set_free + X509_LOOKUP_meth_set_get_by_alias + X509_LOOKUP_meth_set_get_by_fingerprint + X509_LOOKUP_meth_set_get_by_issuer_serial + X509_LOOKUP_meth_set_get_by_subject + X509_LOOKUP_meth_set_init + X509_LOOKUP_meth_set_new_item + X509_LOOKUP_meth_set_shutdown + X509_LOOKUP_new + X509_LOOKUP_set_method_data + X509_LOOKUP_shutdown + X509_LOOKUP_store + X509_NAME_ENTRY_create_by_NID + X509_NAME_ENTRY_create_by_OBJ + X509_NAME_ENTRY_create_by_txt + X509_NAME_ENTRY_dup + X509_NAME_ENTRY_free + X509_NAME_ENTRY_get_data + X509_NAME_ENTRY_get_object + X509_NAME_ENTRY_it + X509_NAME_ENTRY_new + X509_NAME_ENTRY_set + X509_NAME_ENTRY_set_data + X509_NAME_ENTRY_set_object + X509_NAME_add_entry + X509_NAME_add_entry_by_NID + X509_NAME_add_entry_by_OBJ + X509_NAME_add_entry_by_txt + X509_NAME_cmp + X509_NAME_delete_entry + X509_NAME_digest + X509_NAME_dup + X509_NAME_entry_count + X509_NAME_free + X509_NAME_get0_der + X509_NAME_get_entry + X509_NAME_get_index_by_NID + X509_NAME_get_index_by_OBJ + X509_NAME_get_text_by_NID + X509_NAME_get_text_by_OBJ + X509_NAME_hash_ex + X509_NAME_hash_old + X509_NAME_it + X509_NAME_new + X509_NAME_oneline + X509_NAME_print + X509_NAME_print_ex + X509_NAME_print_ex_fp + X509_NAME_set + X509_OBJECT_free + X509_OBJECT_get0_X509 + X509_OBJECT_get0_X509_CRL + X509_OBJECT_get_type + X509_OBJECT_idx_by_subject + X509_OBJECT_new + X509_OBJECT_retrieve_by_subject + X509_OBJECT_retrieve_match + X509_OBJECT_set1_X509 + X509_OBJECT_set1_X509_CRL + X509_OBJECT_up_ref_count + X509_PKEY_free + X509_PKEY_new + X509_POLICY_NODE_print + X509_PUBKEY_dup + X509_PUBKEY_eq + X509_PUBKEY_free + X509_PUBKEY_get + X509_PUBKEY_get0 + X509_PUBKEY_get0_param + X509_PUBKEY_it + X509_PUBKEY_new + X509_PUBKEY_new_ex + X509_PUBKEY_set + X509_PUBKEY_set0_param + X509_PUBKEY_set0_public_key + X509_PURPOSE_add + X509_PURPOSE_cleanup + X509_PURPOSE_get0 + X509_PURPOSE_get0_name + X509_PURPOSE_get0_sname + X509_PURPOSE_get_by_id + X509_PURPOSE_get_by_sname + X509_PURPOSE_get_count + X509_PURPOSE_get_id + X509_PURPOSE_get_trust + X509_PURPOSE_get_unused_id + X509_PURPOSE_set + X509_REQ_INFO_free + X509_REQ_INFO_it + X509_REQ_INFO_new + X509_REQ_add1_attr + X509_REQ_add1_attr_by_NID + X509_REQ_add1_attr_by_OBJ + X509_REQ_add1_attr_by_txt + X509_REQ_add_extensions + X509_REQ_add_extensions_nid + X509_REQ_check_private_key + X509_REQ_delete_attr + X509_REQ_digest + X509_REQ_dup + X509_REQ_extension_nid + X509_REQ_free + X509_REQ_get0_distinguishing_id + X509_REQ_get0_pubkey + X509_REQ_get0_signature + X509_REQ_get1_email + X509_REQ_get_X509_PUBKEY + X509_REQ_get_attr + X509_REQ_get_attr_by_NID + X509_REQ_get_attr_by_OBJ + X509_REQ_get_attr_count + X509_REQ_get_extension_nids + X509_REQ_get_extensions + X509_REQ_get_pubkey + X509_REQ_get_signature_nid + X509_REQ_get_subject_name + X509_REQ_get_version + X509_REQ_it + X509_REQ_new + X509_REQ_new_ex + X509_REQ_print + X509_REQ_print_ex + X509_REQ_print_fp + X509_REQ_set0_distinguishing_id + X509_REQ_set0_signature + X509_REQ_set1_signature_algo + X509_REQ_set_extension_nids + X509_REQ_set_pubkey + X509_REQ_set_subject_name + X509_REQ_set_version + X509_REQ_sign + X509_REQ_sign_ctx + X509_REQ_to_X509 + X509_REQ_verify + X509_REQ_verify_ex + X509_REVOKED_add1_ext_i2d + X509_REVOKED_add_ext + X509_REVOKED_delete_ext + X509_REVOKED_dup + X509_REVOKED_free + X509_REVOKED_get0_extensions + X509_REVOKED_get0_revocationDate + X509_REVOKED_get0_serialNumber + X509_REVOKED_get_ext + X509_REVOKED_get_ext_by_NID + X509_REVOKED_get_ext_by_OBJ + X509_REVOKED_get_ext_by_critical + X509_REVOKED_get_ext_count + X509_REVOKED_get_ext_d2i + X509_REVOKED_it + X509_REVOKED_new + X509_REVOKED_set_revocationDate + X509_REVOKED_set_serialNumber + X509_SIG_INFO_get + X509_SIG_INFO_set + X509_SIG_free + X509_SIG_get0 + X509_SIG_getm + X509_SIG_it + X509_SIG_new + X509_STORE_CTX_cleanup + X509_STORE_CTX_free + X509_STORE_CTX_get0_cert + X509_STORE_CTX_get0_chain + X509_STORE_CTX_get0_current_crl + X509_STORE_CTX_get0_current_issuer + X509_STORE_CTX_get0_param + X509_STORE_CTX_get0_parent_ctx + X509_STORE_CTX_get0_policy_tree + X509_STORE_CTX_get0_rpk + X509_STORE_CTX_get0_store + X509_STORE_CTX_get0_untrusted + X509_STORE_CTX_get1_certs + X509_STORE_CTX_get1_chain + X509_STORE_CTX_get1_crls + X509_STORE_CTX_get1_issuer + X509_STORE_CTX_get_by_subject + X509_STORE_CTX_get_cert_crl + X509_STORE_CTX_get_check_crl + X509_STORE_CTX_get_check_issued + X509_STORE_CTX_get_check_policy + X509_STORE_CTX_get_check_revocation + X509_STORE_CTX_get_cleanup + X509_STORE_CTX_get_current_cert + X509_STORE_CTX_get_error + X509_STORE_CTX_get_error_depth + X509_STORE_CTX_get_ex_data + X509_STORE_CTX_get_explicit_policy + X509_STORE_CTX_get_get_crl + X509_STORE_CTX_get_get_issuer + X509_STORE_CTX_get_lookup_certs + X509_STORE_CTX_get_lookup_crls + X509_STORE_CTX_get_num_untrusted + X509_STORE_CTX_get_obj_by_subject + X509_STORE_CTX_get_verify + X509_STORE_CTX_get_verify_cb + X509_STORE_CTX_init + X509_STORE_CTX_init_rpk + X509_STORE_CTX_new + X509_STORE_CTX_new_ex + X509_STORE_CTX_print_verify_cb + X509_STORE_CTX_purpose_inherit + X509_STORE_CTX_set0_crls + X509_STORE_CTX_set0_dane + X509_STORE_CTX_set0_param + X509_STORE_CTX_set0_rpk + X509_STORE_CTX_set0_trusted_stack + X509_STORE_CTX_set0_untrusted + X509_STORE_CTX_set0_verified_chain + X509_STORE_CTX_set_cert + X509_STORE_CTX_set_current_cert + X509_STORE_CTX_set_current_reasons + X509_STORE_CTX_set_default + X509_STORE_CTX_set_depth + X509_STORE_CTX_set_error + X509_STORE_CTX_set_error_depth + X509_STORE_CTX_set_ex_data + X509_STORE_CTX_set_flags + X509_STORE_CTX_set_get_crl + X509_STORE_CTX_set_ocsp_resp + X509_STORE_CTX_set_purpose + X509_STORE_CTX_set_time + X509_STORE_CTX_set_trust + X509_STORE_CTX_set_verify + X509_STORE_CTX_set_verify_cb + X509_STORE_CTX_verify + X509_STORE_add_cert + X509_STORE_add_crl + X509_STORE_add_lookup + X509_STORE_free + X509_STORE_get0_objects + X509_STORE_get0_param + X509_STORE_get1_all_certs + X509_STORE_get1_objects + X509_STORE_get_cert_crl + X509_STORE_get_check_crl + X509_STORE_get_check_issued + X509_STORE_get_check_policy + X509_STORE_get_check_revocation + X509_STORE_get_cleanup + X509_STORE_get_ex_data + X509_STORE_get_get_crl + X509_STORE_get_get_issuer + X509_STORE_get_lookup_certs + X509_STORE_get_lookup_crls + X509_STORE_get_verify + X509_STORE_get_verify_cb + X509_STORE_load_file + X509_STORE_load_file_ex + X509_STORE_load_locations + X509_STORE_load_locations_ex + X509_STORE_load_path + X509_STORE_load_store + X509_STORE_load_store_ex + X509_STORE_lock + X509_STORE_new + X509_STORE_set1_param + X509_STORE_set_cert_crl + X509_STORE_set_check_crl + X509_STORE_set_check_issued + X509_STORE_set_check_policy + X509_STORE_set_check_revocation + X509_STORE_set_cleanup + X509_STORE_set_default_paths + X509_STORE_set_default_paths_ex + X509_STORE_set_depth + X509_STORE_set_ex_data + X509_STORE_set_flags + X509_STORE_set_get_crl + X509_STORE_set_get_issuer + X509_STORE_set_lookup_certs + X509_STORE_set_lookup_crls + X509_STORE_set_purpose + X509_STORE_set_trust + X509_STORE_set_verify + X509_STORE_set_verify_cb + X509_STORE_unlock + X509_STORE_up_ref + X509_TRUST_add + X509_TRUST_cleanup + X509_TRUST_get0 + X509_TRUST_get0_name + X509_TRUST_get_by_id + X509_TRUST_get_count + X509_TRUST_get_flags + X509_TRUST_get_trust + X509_TRUST_set + X509_TRUST_set_default + X509_VAL_free + X509_VAL_it + X509_VAL_new + X509_VERIFY_PARAM_add0_policy + X509_VERIFY_PARAM_add0_table + X509_VERIFY_PARAM_add1_host + X509_VERIFY_PARAM_clear_flags + X509_VERIFY_PARAM_free + X509_VERIFY_PARAM_get0 + X509_VERIFY_PARAM_get0_email + X509_VERIFY_PARAM_get0_host + X509_VERIFY_PARAM_get0_name + X509_VERIFY_PARAM_get0_peername + X509_VERIFY_PARAM_get1_ip_asc + X509_VERIFY_PARAM_get_auth_level + X509_VERIFY_PARAM_get_count + X509_VERIFY_PARAM_get_depth + X509_VERIFY_PARAM_get_flags + X509_VERIFY_PARAM_get_hostflags + X509_VERIFY_PARAM_get_inh_flags + X509_VERIFY_PARAM_get_purpose + X509_VERIFY_PARAM_get_time + X509_VERIFY_PARAM_inherit + X509_VERIFY_PARAM_lookup + X509_VERIFY_PARAM_move_peername + X509_VERIFY_PARAM_new + X509_VERIFY_PARAM_set1 + X509_VERIFY_PARAM_set1_email + X509_VERIFY_PARAM_set1_host + X509_VERIFY_PARAM_set1_ip + X509_VERIFY_PARAM_set1_ip_asc + X509_VERIFY_PARAM_set1_name + X509_VERIFY_PARAM_set1_policies + X509_VERIFY_PARAM_set_auth_level + X509_VERIFY_PARAM_set_depth + X509_VERIFY_PARAM_set_flags + X509_VERIFY_PARAM_set_hostflags + X509_VERIFY_PARAM_set_inh_flags + X509_VERIFY_PARAM_set_purpose + X509_VERIFY_PARAM_set_time + X509_VERIFY_PARAM_set_trust + X509_VERIFY_PARAM_table_cleanup + X509_add1_ext_i2d + X509_add1_reject_object + X509_add1_trust_object + X509_add_cert + X509_add_certs + X509_add_ext + X509_alias_get0 + X509_alias_set1 + X509_aux_print + X509_build_chain + X509_certificate_type + X509_chain_check_suiteb + X509_chain_up_ref + X509_check_akid + X509_check_ca + X509_check_email + X509_check_host + X509_check_ip + X509_check_ip_asc + X509_check_issued + X509_check_private_key + X509_check_purpose + X509_check_trust + X509_cmp + X509_cmp_current_time + X509_cmp_time + X509_cmp_timeframe + X509_delete_ext + X509_digest + X509_digest_sig + X509_dup + X509_email_free + X509_find_by_issuer_and_serial + X509_find_by_subject + X509_free + X509_get0_authority_issuer + X509_get0_authority_key_id + X509_get0_authority_serial + X509_get0_distinguishing_id + X509_get0_extensions + X509_get0_notAfter + X509_get0_notBefore + X509_get0_pubkey + X509_get0_pubkey_bitstr + X509_get0_reject_objects + X509_get0_serialNumber + X509_get0_signature + X509_get0_subject_key_id + X509_get0_tbs_sigalg + X509_get0_trust_objects + X509_get0_uids + X509_get1_email + X509_get1_ocsp + X509_get_X509_PUBKEY + X509_get_default_cert_area + X509_get_default_cert_dir + X509_get_default_cert_dir_env + X509_get_default_cert_file + X509_get_default_cert_file_env + X509_get_default_private_dir + X509_get_ex_data + X509_get_ext + X509_get_ext_by_NID + X509_get_ext_by_OBJ + X509_get_ext_by_critical + X509_get_ext_count + X509_get_ext_d2i + X509_get_extended_key_usage + X509_get_extension_flags + X509_get_issuer_name + X509_get_key_usage + X509_get_pathlen + X509_get_proxy_pathlen + X509_get_pubkey + X509_get_pubkey_parameters + X509_get_serialNumber + X509_get_signature_info + X509_get_signature_nid + X509_get_signature_type + X509_get_subject_name + X509_get_version + X509_getm_notAfter + X509_getm_notBefore + X509_gmtime_adj + X509_issuer_and_serial_cmp + X509_issuer_and_serial_hash + X509_issuer_name_cmp + X509_issuer_name_hash + X509_issuer_name_hash_old + X509_it + X509_keyid_get0 + X509_keyid_set1 + X509_load_cert_crl_file + X509_load_cert_crl_file_ex + X509_load_cert_file + X509_load_cert_file_ex + X509_load_crl_file + X509_load_http + X509_new + X509_new_ex + X509_ocspid_print + X509_policy_check + X509_policy_level_get0_node + X509_policy_level_node_count + X509_policy_node_get0_parent + X509_policy_node_get0_policy + X509_policy_node_get0_qualifiers + X509_policy_tree_free + X509_policy_tree_get0_level + X509_policy_tree_get0_policies + X509_policy_tree_get0_user_policies + X509_policy_tree_level_count + X509_print + X509_print_ex + X509_print_ex_fp + X509_print_fp + X509_pubkey_digest + X509_reject_clear + X509_self_signed + X509_set0_distinguishing_id + X509_set1_notAfter + X509_set1_notBefore + X509_set_ex_data + X509_set_issuer_name + X509_set_proxy_flag + X509_set_proxy_pathlen + X509_set_pubkey + X509_set_serialNumber + X509_set_subject_name + X509_set_version + X509_sign + X509_sign_ctx + X509_signature_dump + X509_signature_print + X509_subject_name_cmp + X509_subject_name_hash + X509_subject_name_hash_old + X509_supported_extension + X509_time_adj + X509_time_adj_ex + X509_to_X509_REQ + X509_trust_clear + X509_trusted + X509_up_ref + X509_verify + X509_verify_cert + X509_verify_cert_error_string + X509at_add1_attr + X509at_add1_attr_by_NID + X509at_add1_attr_by_OBJ + X509at_add1_attr_by_txt + X509at_delete_attr + X509at_get0_data_by_OBJ + X509at_get_attr + X509at_get_attr_by_NID + X509at_get_attr_by_OBJ + X509at_get_attr_count + X509v3_add_ext + X509v3_add_extensions + X509v3_addr_add_inherit + X509v3_addr_add_prefix + X509v3_addr_add_range + X509v3_addr_canonize + X509v3_addr_get_afi + X509v3_addr_get_range + X509v3_addr_inherits + X509v3_addr_is_canonical + X509v3_addr_subset + X509v3_addr_validate_path + X509v3_addr_validate_resource_set + X509v3_asid_add_id_or_range + X509v3_asid_add_inherit + X509v3_asid_canonize + X509v3_asid_inherits + X509v3_asid_is_canonical + X509v3_asid_subset + X509v3_asid_validate_path + X509v3_asid_validate_resource_set + X509v3_delete_ext + X509v3_get_ext + X509v3_get_ext_by_NID + X509v3_get_ext_by_OBJ + X509v3_get_ext_by_critical + X509v3_get_ext_count + ZINT32_it + ZINT64_it + ZLONG_it + ZUINT32_it + ZUINT64_it + a2d_ASN1_OBJECT + a2i_ASN1_ENUMERATED + a2i_ASN1_INTEGER + a2i_ASN1_STRING + a2i_GENERAL_NAME + a2i_IPADDRESS + a2i_IPADDRESS_NC + asn1_d2i_read_bio + b2i_PVK_bio + b2i_PVK_bio_ex + b2i_PrivateKey + b2i_PrivateKey_bio + b2i_PublicKey + b2i_PublicKey_bio + conf_ssl_get + conf_ssl_get_cmd + conf_ssl_name_find + d2i_ACCESS_DESCRIPTION + d2i_ADMISSIONS + d2i_ADMISSION_SYNTAX + d2i_ASIdOrRange + d2i_ASIdentifierChoice + d2i_ASIdentifiers + d2i_ASN1_BIT_STRING + d2i_ASN1_BMPSTRING + d2i_ASN1_ENUMERATED + d2i_ASN1_GENERALIZEDTIME + d2i_ASN1_GENERALSTRING + d2i_ASN1_IA5STRING + d2i_ASN1_INTEGER + d2i_ASN1_NULL + d2i_ASN1_OBJECT + d2i_ASN1_OCTET_STRING + d2i_ASN1_PRINTABLE + d2i_ASN1_PRINTABLESTRING + d2i_ASN1_SEQUENCE_ANY + d2i_ASN1_SET_ANY + d2i_ASN1_T61STRING + d2i_ASN1_TIME + d2i_ASN1_TYPE + d2i_ASN1_UINTEGER + d2i_ASN1_UNIVERSALSTRING + d2i_ASN1_UTCTIME + d2i_ASN1_UTF8STRING + d2i_ASN1_VISIBLESTRING + d2i_ASRange + d2i_AUTHORITY_INFO_ACCESS + d2i_AUTHORITY_KEYID + d2i_AutoPrivateKey + d2i_AutoPrivateKey_ex + d2i_BASIC_CONSTRAINTS + d2i_CERTIFICATEPOLICIES + d2i_CMS_ContentInfo + d2i_CMS_ReceiptRequest + d2i_CMS_bio + d2i_CRL_DIST_POINTS + d2i_DHparams + d2i_DHxparams + d2i_DIRECTORYSTRING + d2i_DISPLAYTEXT + d2i_DIST_POINT + d2i_DIST_POINT_NAME + d2i_DSAPrivateKey + d2i_DSAPrivateKey_bio + d2i_DSAPrivateKey_fp + d2i_DSAPublicKey + d2i_DSA_PUBKEY + d2i_DSA_PUBKEY_bio + d2i_DSA_PUBKEY_fp + d2i_DSA_SIG + d2i_DSAparams + d2i_ECDSA_SIG + d2i_ECPKParameters + d2i_ECParameters + d2i_ECPrivateKey + d2i_ECPrivateKey_bio + d2i_ECPrivateKey_fp + d2i_EC_PUBKEY + d2i_EC_PUBKEY_bio + d2i_EC_PUBKEY_fp + d2i_EDIPARTYNAME + d2i_ESS_CERT_ID + d2i_ESS_CERT_ID_V2 + d2i_ESS_ISSUER_SERIAL + d2i_ESS_SIGNING_CERT + d2i_ESS_SIGNING_CERT_V2 + d2i_EXTENDED_KEY_USAGE + d2i_GENERAL_NAME + d2i_GENERAL_NAMES + d2i_IPAddressChoice + d2i_IPAddressFamily + d2i_IPAddressOrRange + d2i_IPAddressRange + d2i_ISSUER_SIGN_TOOL + d2i_ISSUING_DIST_POINT + d2i_KeyParams + d2i_KeyParams_bio + d2i_NAMING_AUTHORITY + d2i_NETSCAPE_CERT_SEQUENCE + d2i_NETSCAPE_SPKAC + d2i_NETSCAPE_SPKI + d2i_NOTICEREF + d2i_OCSP_BASICRESP + d2i_OCSP_CERTID + d2i_OCSP_CERTSTATUS + d2i_OCSP_CRLID + d2i_OCSP_ONEREQ + d2i_OCSP_REQINFO + d2i_OCSP_REQUEST + d2i_OCSP_RESPBYTES + d2i_OCSP_RESPDATA + d2i_OCSP_RESPID + d2i_OCSP_RESPONSE + d2i_OCSP_REVOKEDINFO + d2i_OCSP_SERVICELOC + d2i_OCSP_SIGNATURE + d2i_OCSP_SINGLERESP + d2i_OSSL_AA_DIST_POINT + d2i_OSSL_ALLOWED_ATTRIBUTES_CHOICE + d2i_OSSL_ALLOWED_ATTRIBUTES_ITEM + d2i_OSSL_ALLOWED_ATTRIBUTES_SYNTAX + d2i_OSSL_ATAV + d2i_OSSL_ATTRIBUTES_SYNTAX + d2i_OSSL_ATTRIBUTE_DESCRIPTOR + d2i_OSSL_ATTRIBUTE_MAPPING + d2i_OSSL_ATTRIBUTE_MAPPINGS + d2i_OSSL_ATTRIBUTE_TYPE_MAPPING + d2i_OSSL_ATTRIBUTE_VALUE_MAPPING + d2i_OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX + d2i_OSSL_BASIC_ATTR_CONSTRAINTS + d2i_OSSL_CMP_ATAVS + d2i_OSSL_CMP_MSG + d2i_OSSL_CMP_MSG_bio + d2i_OSSL_CMP_PKIHEADER + d2i_OSSL_CMP_PKISI + d2i_OSSL_CRMF_CERTID + d2i_OSSL_CRMF_CERTTEMPLATE + d2i_OSSL_CRMF_ENCRYPTEDKEY + d2i_OSSL_CRMF_ENCRYPTEDVALUE + d2i_OSSL_CRMF_MSG + d2i_OSSL_CRMF_MSGS + d2i_OSSL_CRMF_PBMPARAMETER + d2i_OSSL_CRMF_PKIPUBLICATIONINFO + d2i_OSSL_CRMF_SINGLEPUBINFO + d2i_OSSL_DAY_TIME + d2i_OSSL_DAY_TIME_BAND + d2i_OSSL_HASH + d2i_OSSL_IETF_ATTR_SYNTAX + d2i_OSSL_INFO_SYNTAX + d2i_OSSL_INFO_SYNTAX_POINTER + d2i_OSSL_NAMED_DAY + d2i_OSSL_PRIVILEGE_POLICY_ID + d2i_OSSL_ROLE_SPEC_CERT_ID + d2i_OSSL_ROLE_SPEC_CERT_ID_SYNTAX + d2i_OSSL_TARGET + d2i_OSSL_TARGETING_INFORMATION + d2i_OSSL_TARGETS + d2i_OSSL_TIME_PERIOD + d2i_OSSL_TIME_SPEC + d2i_OSSL_TIME_SPEC_ABSOLUTE + d2i_OSSL_TIME_SPEC_DAY + d2i_OSSL_TIME_SPEC_MONTH + d2i_OSSL_TIME_SPEC_TIME + d2i_OSSL_TIME_SPEC_WEEKS + d2i_OSSL_TIME_SPEC_X_DAY_OF + d2i_OSSL_USER_NOTICE_SYNTAX + d2i_OTHERNAME + d2i_PBE2PARAM + d2i_PBEPARAM + d2i_PBKDF2PARAM + d2i_PBMAC1PARAM + d2i_PKCS12 + d2i_PKCS12_BAGS + d2i_PKCS12_MAC_DATA + d2i_PKCS12_SAFEBAG + d2i_PKCS12_bio + d2i_PKCS12_fp + d2i_PKCS7 + d2i_PKCS7_DIGEST + d2i_PKCS7_ENCRYPT + d2i_PKCS7_ENC_CONTENT + d2i_PKCS7_ENVELOPE + d2i_PKCS7_ISSUER_AND_SERIAL + d2i_PKCS7_RECIP_INFO + d2i_PKCS7_SIGNED + d2i_PKCS7_SIGNER_INFO + d2i_PKCS7_SIGN_ENVELOPE + d2i_PKCS7_bio + d2i_PKCS7_fp + d2i_PKCS8PrivateKey_bio + d2i_PKCS8PrivateKey_fp + d2i_PKCS8_PRIV_KEY_INFO + d2i_PKCS8_PRIV_KEY_INFO_bio + d2i_PKCS8_PRIV_KEY_INFO_fp + d2i_PKCS8_bio + d2i_PKCS8_fp + d2i_PKEY_USAGE_PERIOD + d2i_POLICYINFO + d2i_POLICYQUALINFO + d2i_PROFESSION_INFO + d2i_PROXY_CERT_INFO_EXTENSION + d2i_PROXY_POLICY + d2i_PUBKEY + d2i_PUBKEY_bio + d2i_PUBKEY_ex + d2i_PUBKEY_ex_bio + d2i_PUBKEY_ex_fp + d2i_PUBKEY_fp + d2i_PrivateKey + d2i_PrivateKey_bio + d2i_PrivateKey_ex + d2i_PrivateKey_ex_bio + d2i_PrivateKey_ex_fp + d2i_PrivateKey_fp + d2i_PublicKey + d2i_RSAPrivateKey + d2i_RSAPrivateKey_bio + d2i_RSAPrivateKey_fp + d2i_RSAPublicKey + d2i_RSAPublicKey_bio + d2i_RSAPublicKey_fp + d2i_RSA_OAEP_PARAMS + d2i_RSA_PSS_PARAMS + d2i_RSA_PUBKEY + d2i_RSA_PUBKEY_bio + d2i_RSA_PUBKEY_fp + d2i_SCRYPT_PARAMS + d2i_SCT_LIST + d2i_SXNET + d2i_SXNETID + d2i_TS_ACCURACY + d2i_TS_MSG_IMPRINT + d2i_TS_MSG_IMPRINT_bio + d2i_TS_MSG_IMPRINT_fp + d2i_TS_REQ + d2i_TS_REQ_bio + d2i_TS_REQ_fp + d2i_TS_RESP + d2i_TS_RESP_bio + d2i_TS_RESP_fp + d2i_TS_STATUS_INFO + d2i_TS_TST_INFO + d2i_TS_TST_INFO_bio + d2i_TS_TST_INFO_fp + d2i_USERNOTICE + d2i_X509 + d2i_X509_ACERT + d2i_X509_ACERT_bio + d2i_X509_ACERT_fp + d2i_X509_ALGOR + d2i_X509_ALGORS + d2i_X509_ATTRIBUTE + d2i_X509_AUX + d2i_X509_CERT_AUX + d2i_X509_CINF + d2i_X509_CRL + d2i_X509_CRL_INFO + d2i_X509_CRL_bio + d2i_X509_CRL_fp + d2i_X509_EXTENSION + d2i_X509_EXTENSIONS + d2i_X509_NAME + d2i_X509_NAME_ENTRY + d2i_X509_PUBKEY + d2i_X509_PUBKEY_bio + d2i_X509_PUBKEY_fp + d2i_X509_REQ + d2i_X509_REQ_INFO + d2i_X509_REQ_bio + d2i_X509_REQ_fp + d2i_X509_REVOKED + d2i_X509_SIG + d2i_X509_VAL + d2i_X509_bio + d2i_X509_fp + err_free_strings_int + i2a_ACCESS_DESCRIPTION + i2a_ASN1_ENUMERATED + i2a_ASN1_INTEGER + i2a_ASN1_OBJECT + i2a_ASN1_STRING + i2b_PVK_bio + i2b_PVK_bio_ex + i2b_PrivateKey_bio + i2b_PublicKey_bio + i2d_ACCESS_DESCRIPTION + i2d_ADMISSIONS + i2d_ADMISSION_SYNTAX + i2d_ASIdOrRange + i2d_ASIdentifierChoice + i2d_ASIdentifiers + i2d_ASN1_BIT_STRING + i2d_ASN1_BMPSTRING + i2d_ASN1_ENUMERATED + i2d_ASN1_GENERALIZEDTIME + i2d_ASN1_GENERALSTRING + i2d_ASN1_IA5STRING + i2d_ASN1_INTEGER + i2d_ASN1_NULL + i2d_ASN1_OBJECT + i2d_ASN1_OCTET_STRING + i2d_ASN1_PRINTABLE + i2d_ASN1_PRINTABLESTRING + i2d_ASN1_SEQUENCE_ANY + i2d_ASN1_SET_ANY + i2d_ASN1_T61STRING + i2d_ASN1_TIME + i2d_ASN1_TYPE + i2d_ASN1_UNIVERSALSTRING + i2d_ASN1_UTCTIME + i2d_ASN1_UTF8STRING + i2d_ASN1_VISIBLESTRING + i2d_ASN1_bio_stream + i2d_ASRange + i2d_AUTHORITY_INFO_ACCESS + i2d_AUTHORITY_KEYID + i2d_BASIC_CONSTRAINTS + i2d_CERTIFICATEPOLICIES + i2d_CMS_ContentInfo + i2d_CMS_ReceiptRequest + i2d_CMS_bio + i2d_CMS_bio_stream + i2d_CRL_DIST_POINTS + i2d_DHparams + i2d_DHxparams + i2d_DIRECTORYSTRING + i2d_DISPLAYTEXT + i2d_DIST_POINT + i2d_DIST_POINT_NAME + i2d_DSAPrivateKey + i2d_DSAPrivateKey_bio + i2d_DSAPrivateKey_fp + i2d_DSAPublicKey + i2d_DSA_PUBKEY + i2d_DSA_PUBKEY_bio + i2d_DSA_PUBKEY_fp + i2d_DSA_SIG + i2d_DSAparams + i2d_ECDSA_SIG + i2d_ECPKParameters + i2d_ECParameters + i2d_ECPrivateKey + i2d_ECPrivateKey_bio + i2d_ECPrivateKey_fp + i2d_EC_PUBKEY + i2d_EC_PUBKEY_bio + i2d_EC_PUBKEY_fp + i2d_EDIPARTYNAME + i2d_ESS_CERT_ID + i2d_ESS_CERT_ID_V2 + i2d_ESS_ISSUER_SERIAL + i2d_ESS_SIGNING_CERT + i2d_ESS_SIGNING_CERT_V2 + i2d_EXTENDED_KEY_USAGE + i2d_GENERAL_NAME + i2d_GENERAL_NAMES + i2d_IPAddressChoice + i2d_IPAddressFamily + i2d_IPAddressOrRange + i2d_IPAddressRange + i2d_ISSUER_SIGN_TOOL + i2d_ISSUING_DIST_POINT + i2d_KeyParams + i2d_KeyParams_bio + i2d_NAMING_AUTHORITY + i2d_NETSCAPE_CERT_SEQUENCE + i2d_NETSCAPE_SPKAC + i2d_NETSCAPE_SPKI + i2d_NOTICEREF + i2d_OCSP_BASICRESP + i2d_OCSP_CERTID + i2d_OCSP_CERTSTATUS + i2d_OCSP_CRLID + i2d_OCSP_ONEREQ + i2d_OCSP_REQINFO + i2d_OCSP_REQUEST + i2d_OCSP_RESPBYTES + i2d_OCSP_RESPDATA + i2d_OCSP_RESPID + i2d_OCSP_RESPONSE + i2d_OCSP_REVOKEDINFO + i2d_OCSP_SERVICELOC + i2d_OCSP_SIGNATURE + i2d_OCSP_SINGLERESP + i2d_OSSL_AA_DIST_POINT + i2d_OSSL_ALLOWED_ATTRIBUTES_CHOICE + i2d_OSSL_ALLOWED_ATTRIBUTES_ITEM + i2d_OSSL_ALLOWED_ATTRIBUTES_SYNTAX + i2d_OSSL_ATAV + i2d_OSSL_ATTRIBUTES_SYNTAX + i2d_OSSL_ATTRIBUTE_DESCRIPTOR + i2d_OSSL_ATTRIBUTE_MAPPING + i2d_OSSL_ATTRIBUTE_MAPPINGS + i2d_OSSL_ATTRIBUTE_TYPE_MAPPING + i2d_OSSL_ATTRIBUTE_VALUE_MAPPING + i2d_OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX + i2d_OSSL_BASIC_ATTR_CONSTRAINTS + i2d_OSSL_CMP_ATAVS + i2d_OSSL_CMP_MSG + i2d_OSSL_CMP_MSG_bio + i2d_OSSL_CMP_PKIHEADER + i2d_OSSL_CMP_PKISI + i2d_OSSL_CRMF_CERTID + i2d_OSSL_CRMF_CERTTEMPLATE + i2d_OSSL_CRMF_ENCRYPTEDKEY + i2d_OSSL_CRMF_ENCRYPTEDVALUE + i2d_OSSL_CRMF_MSG + i2d_OSSL_CRMF_MSGS + i2d_OSSL_CRMF_PBMPARAMETER + i2d_OSSL_CRMF_PKIPUBLICATIONINFO + i2d_OSSL_CRMF_SINGLEPUBINFO + i2d_OSSL_DAY_TIME + i2d_OSSL_DAY_TIME_BAND + i2d_OSSL_HASH + i2d_OSSL_IETF_ATTR_SYNTAX + i2d_OSSL_INFO_SYNTAX + i2d_OSSL_INFO_SYNTAX_POINTER + i2d_OSSL_NAMED_DAY + i2d_OSSL_PRIVILEGE_POLICY_ID + i2d_OSSL_ROLE_SPEC_CERT_ID + i2d_OSSL_ROLE_SPEC_CERT_ID_SYNTAX + i2d_OSSL_TARGET + i2d_OSSL_TARGETING_INFORMATION + i2d_OSSL_TARGETS + i2d_OSSL_TIME_PERIOD + i2d_OSSL_TIME_SPEC + i2d_OSSL_TIME_SPEC_ABSOLUTE + i2d_OSSL_TIME_SPEC_DAY + i2d_OSSL_TIME_SPEC_MONTH + i2d_OSSL_TIME_SPEC_TIME + i2d_OSSL_TIME_SPEC_WEEKS + i2d_OSSL_TIME_SPEC_X_DAY_OF + i2d_OSSL_USER_NOTICE_SYNTAX + i2d_OTHERNAME + i2d_PBE2PARAM + i2d_PBEPARAM + i2d_PBKDF2PARAM + i2d_PBMAC1PARAM + i2d_PKCS12 + i2d_PKCS12_BAGS + i2d_PKCS12_MAC_DATA + i2d_PKCS12_SAFEBAG + i2d_PKCS12_bio + i2d_PKCS12_fp + i2d_PKCS7 + i2d_PKCS7_DIGEST + i2d_PKCS7_ENCRYPT + i2d_PKCS7_ENC_CONTENT + i2d_PKCS7_ENVELOPE + i2d_PKCS7_ISSUER_AND_SERIAL + i2d_PKCS7_NDEF + i2d_PKCS7_RECIP_INFO + i2d_PKCS7_SIGNED + i2d_PKCS7_SIGNER_INFO + i2d_PKCS7_SIGN_ENVELOPE + i2d_PKCS7_bio + i2d_PKCS7_bio_stream + i2d_PKCS7_fp + i2d_PKCS8PrivateKey + i2d_PKCS8PrivateKeyInfo_bio + i2d_PKCS8PrivateKeyInfo_fp + i2d_PKCS8PrivateKey_bio + i2d_PKCS8PrivateKey_fp + i2d_PKCS8PrivateKey_nid_bio + i2d_PKCS8PrivateKey_nid_fp + i2d_PKCS8_PRIV_KEY_INFO + i2d_PKCS8_PRIV_KEY_INFO_bio + i2d_PKCS8_PRIV_KEY_INFO_fp + i2d_PKCS8_bio + i2d_PKCS8_fp + i2d_PKEY_USAGE_PERIOD + i2d_POLICYINFO + i2d_POLICYQUALINFO + i2d_PROFESSION_INFO + i2d_PROXY_CERT_INFO_EXTENSION + i2d_PROXY_POLICY + i2d_PUBKEY + i2d_PUBKEY_bio + i2d_PUBKEY_fp + i2d_PrivateKey + i2d_PrivateKey_bio + i2d_PrivateKey_fp + i2d_PublicKey + i2d_RSAPrivateKey + i2d_RSAPrivateKey_bio + i2d_RSAPrivateKey_fp + i2d_RSAPublicKey + i2d_RSAPublicKey_bio + i2d_RSAPublicKey_fp + i2d_RSA_OAEP_PARAMS + i2d_RSA_PSS_PARAMS + i2d_RSA_PUBKEY + i2d_RSA_PUBKEY_bio + i2d_RSA_PUBKEY_fp + i2d_SCRYPT_PARAMS + i2d_SCT_LIST + i2d_SXNET + i2d_SXNETID + i2d_TS_ACCURACY + i2d_TS_MSG_IMPRINT + i2d_TS_MSG_IMPRINT_bio + i2d_TS_MSG_IMPRINT_fp + i2d_TS_REQ + i2d_TS_REQ_bio + i2d_TS_REQ_fp + i2d_TS_RESP + i2d_TS_RESP_bio + i2d_TS_RESP_fp + i2d_TS_STATUS_INFO + i2d_TS_TST_INFO + i2d_TS_TST_INFO_bio + i2d_TS_TST_INFO_fp + i2d_USERNOTICE + i2d_X509 + i2d_X509_ACERT + i2d_X509_ACERT_bio + i2d_X509_ACERT_fp + i2d_X509_ALGOR + i2d_X509_ALGORS + i2d_X509_ATTRIBUTE + i2d_X509_AUX + i2d_X509_CERT_AUX + i2d_X509_CINF + i2d_X509_CRL + i2d_X509_CRL_INFO + i2d_X509_CRL_bio + i2d_X509_CRL_fp + i2d_X509_EXTENSION + i2d_X509_EXTENSIONS + i2d_X509_NAME + i2d_X509_NAME_ENTRY + i2d_X509_PUBKEY + i2d_X509_PUBKEY_bio + i2d_X509_PUBKEY_fp + i2d_X509_REQ + i2d_X509_REQ_INFO + i2d_X509_REQ_bio + i2d_X509_REQ_fp + i2d_X509_REVOKED + i2d_X509_SIG + i2d_X509_VAL + i2d_X509_bio + i2d_X509_fp + i2d_re_X509_CRL_tbs + i2d_re_X509_REQ_tbs + i2d_re_X509_tbs + i2o_ECPublicKey + i2o_SCT + i2o_SCT_LIST + i2s_ASN1_ENUMERATED + i2s_ASN1_ENUMERATED_TABLE + i2s_ASN1_IA5STRING + i2s_ASN1_INTEGER + i2s_ASN1_OCTET_STRING + i2s_ASN1_UTF8STRING + i2t_ASN1_OBJECT + i2v_ASN1_BIT_STRING + i2v_GENERAL_NAME + i2v_GENERAL_NAMES + o2i_ECPublicKey + o2i_SCT + o2i_SCT_LIST + s2i_ASN1_IA5STRING + s2i_ASN1_INTEGER + s2i_ASN1_OCTET_STRING + s2i_ASN1_UTF8STRING + v2i_ASN1_BIT_STRING + v2i_GENERAL_NAME + v2i_GENERAL_NAMES + v2i_GENERAL_NAME_ex diff --git a/Modules/openssl.lib/libcrypto.lib b/Modules/openssl.lib/libcrypto.lib new file mode 100644 index 0000000000000000000000000000000000000000..d8e996ce4c4b3d01c55315589b982393b96ec47b GIT binary patch literal 1383240 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

GeftdZA`J#aYbXv{6juew${Bvu8*h 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 z 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

jGLTO?@-2%85jC2%LYJ8ulqlK3#s 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�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�o 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 literal 0 HcmV?d00001 diff --git a/Modules/openssl.lib/libssl_static.lib b/Modules/openssl.lib/libssl_static.lib new file mode 100644 index 0000000000000000000000000000000000000000..7fb682986960b0406d9c0f2ab8013c5f7d6455f4 GIT binary patch literal 13076120 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 YdHeG$U(h~AdhmYuq=|7$9QytW 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

KN4qP3#<%S+;o1qn&DB-zfh^#x8UN;lmmkrrM+ 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


FE%_iMoBV479Au3dMPY_>1IaEvA|HD^;c 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

Je&Ya1mxV-6#TtYflw!FfBl*>eY1UjIWF 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

XX9(YD@p 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 z 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%0AQ zqi3Wnd-WCjJREsA2TX<_Ry1rOjqt4dt~s9BceneLb9o)Ykx?R)0xb`vppc2H$dVpw z;|tKWV(GR*ge=)ZS}GnI=s6zm_;yE8iRzD5cn>yQW96J)u9h9`&|2WgmIyIQaU{wr z1x0zI{W!j~MNpOla}s2i?cD~vwZ-o~u=lm9lT)l)*$6G{9tUB71sg>MEAq(ylP6S4{KkKBn;sZ(Q%<#H@I zG0Ee=Dy=9(j#HN3#uJWfF!@3r!;mIrJ+m++E05b3BsqA`SM)u0boTa^K8Y~87w3zk z#+F4XS+|S+@PME%*j62ohq74%oys}ihG)tnpDFNHm(5-Y!{d|U90^f<9KGTO$0ms) zyn!f%I+iVjW7Uplz20^KZ81jyM%m{a-BrK{r&jJw>gx3UDO09N*m4-pcIpP+y5sjg z@V3h?=ULVX-%iJfXBY*n*-B>EkHP4B#8D}9aD_!r>3QgS&Yk!P4C&6=mg?gBDZX;rwAJ?5FB(-glP8!PNi*H}kRIs^-G zKc$Fs-elTpk2Lq(yWS38ZAW2-t2i$uH8(@ZX>HKoVs~bs=7ml*uId1`O~7Q{x_I9y zaS-}1Ctvf;?bSXz+A=3|q9B`FBxu$H{vkUTQFtCIo(Vf9V3H=^PuX$LG0mY7#ahB~ zc-Bq_Vesh^8v{Y}7T{m7%T-mE&#`U zJe5u{@;pIeTytFXKt9eNN5tBOof)3J=Z~s}jnj(}iL{>ht!e~|`G7M*FT8WE>21lU z=OCT0k0oD#VA5{%Rr#XLe72Aa+5Pd$FHymRj3 za}CHG<#YtzN8)!Be%*Wo7vOWN)8GXE$STXCtb!k1=oF3hR<=Z!SpkAi zt{-$!sXp5xwb+^cY>D_rK&HaXuikyZ?&ULN*p`e4B&Yh4N~>h4?COVRL60u=h7 zkL~Cy!-$IQ9Um7Ho8;&lkc6HDG*Ew6C@^R5qB;t*1SLd?5z5hK{sUJ(eB?EY!#>%)siF zs`9dqu&V$MUj|UH`M?V|a2wkt5JefpYolPqq%3j&w*a{Mr?c_TWr_W|5P8|JmsG#b z#Ix*Ixz|}NXw!-=^$PYU_Becpas;Pk@XK*w2OmoWuH*#sN~rH{Z&a+m3F*tH2t$h)=RB2V##t9K{6?qtAIzjY#`*)9#Vp5%A#*uzEDh}5|SJP;^O)bmRgG! z40N^4P0DFLcAf5dB+y8K5n-&LZwH^xTKEh$yl9C*_AZyAElTFV4$)Y%wp#*7JaIY`viJ>vffRsfW9DN4v3J;l8ABnJ+~>`#$Ru zx)c_$m_EZD@sSCU1GNg^D*-i@^TZ}a(|6yb74eh09*1zAAd}AKYx0&>8r-ca)5_4ChsL2G?N`!_Yiy^_hbD==04`5JfFupK;L9l;%4z-w+
NG1P#tD+dz=@-Hm6?Exz?c?xvKT$|7^6 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

  • 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

    f6y#z%G2 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

    X`M#<~%lG~Z8E6}CV} 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�?f4Ui% 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�Up)ir(D!wkkC4Vk|5Ic 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%0D7mZ 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

    B9@@D+dNN~rXi^WhxJ`zwm>S8MbGD3tt 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%0A)(nae^*2>%b7E&s0@4846rgM`@`w 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

    QxXUeY)bAb(9P7uk7C4sszgpnf&wOElWB)dG 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