From 42ee3cdceac90f1501b5f78fa2f4797146eb9ada Mon Sep 17 00:00:00 2001 From: sagudev Date: Sun, 11 Apr 2021 15:12:35 +0200 Subject: [PATCH] Rust n-api --- .gitignore | 9 +- Cargo.toml | 31 + binding.gyp | 48 - build.rs | 5 + decryptor.js | 2 +- native/decryptor.cc | 52 - native/decryptor.h | 73 - openssl/include/openssl/aes.h | 92 - openssl/include/openssl/applink.c | 138 - openssl/include/openssl/asn1.h | 886 ----- openssl/include/openssl/asn1_mac.h | 10 - openssl/include/openssl/asn1err.h | 256 -- openssl/include/openssl/asn1t.h | 945 ----- openssl/include/openssl/async.h | 76 - openssl/include/openssl/asyncerr.h | 42 - openssl/include/openssl/bio.h | 801 ---- openssl/include/openssl/bioerr.h | 124 - openssl/include/openssl/blowfish.h | 61 - openssl/include/openssl/bn.h | 539 --- openssl/include/openssl/bnerr.h | 100 - openssl/include/openssl/buffer.h | 58 - openssl/include/openssl/buffererr.h | 34 - openssl/include/openssl/camellia.h | 83 - openssl/include/openssl/cast.h | 53 - openssl/include/openssl/cmac.h | 41 - openssl/include/openssl/cms.h | 339 -- openssl/include/openssl/cmserr.h | 202 - openssl/include/openssl/comp.h | 53 - openssl/include/openssl/comperr.h | 44 - openssl/include/openssl/conf.h | 168 - openssl/include/openssl/conf_api.h | 40 - openssl/include/openssl/conferr.h | 76 - openssl/include/openssl/crypto.h | 445 --- openssl/include/openssl/cryptoerr.h | 57 - openssl/include/openssl/ct.h | 474 --- openssl/include/openssl/cterr.h | 80 - openssl/include/openssl/des.h | 174 - openssl/include/openssl/dh.h | 340 -- openssl/include/openssl/dherr.h | 88 - openssl/include/openssl/dsa.h | 244 -- openssl/include/openssl/dsaerr.h | 72 - openssl/include/openssl/dtls1.h | 55 - openssl/include/openssl/e_os2.h | 300 -- openssl/include/openssl/ebcdic.h | 33 - openssl/include/openssl/ec.h | 1479 ------- openssl/include/openssl/ecdh.h | 10 - openssl/include/openssl/ecdsa.h | 10 - openssl/include/openssl/ecerr.h | 276 -- openssl/include/openssl/engine.h | 751 ---- openssl/include/openssl/engineerr.h | 111 - openssl/include/openssl/err.h | 274 -- openssl/include/openssl/evp.h | 1666 -------- openssl/include/openssl/evperr.h | 205 - openssl/include/openssl/hmac.h | 51 - openssl/include/openssl/idea.h | 64 - openssl/include/openssl/kdf.h | 97 - openssl/include/openssl/kdferr.h | 55 - openssl/include/openssl/lhash.h | 241 -- openssl/include/openssl/md2.h | 44 - openssl/include/openssl/md4.h | 51 - openssl/include/openssl/md5.h | 50 - openssl/include/openssl/mdc2.h | 42 - openssl/include/openssl/modes.h | 208 - openssl/include/openssl/obj_mac.h | 5198 ------------------------- openssl/include/openssl/objects.h | 175 - openssl/include/openssl/objectserr.h | 42 - openssl/include/openssl/ocsp.h | 352 -- openssl/include/openssl/ocsperr.h | 78 - openssl/include/openssl/opensslconf.h | 213 - openssl/include/openssl/opensslv.h | 101 - openssl/include/openssl/ossl_typ.h | 197 - openssl/include/openssl/pem.h | 378 -- openssl/include/openssl/pem2.h | 13 - openssl/include/openssl/pemerr.h | 103 - openssl/include/openssl/pkcs12.h | 223 -- openssl/include/openssl/pkcs12err.h | 81 - openssl/include/openssl/pkcs7.h | 319 -- openssl/include/openssl/pkcs7err.h | 103 - openssl/include/openssl/rand.h | 77 - openssl/include/openssl/rand_drbg.h | 130 - openssl/include/openssl/randerr.h | 94 - openssl/include/openssl/rc2.h | 51 - openssl/include/openssl/rc4.h | 36 - openssl/include/openssl/rc5.h | 63 - openssl/include/openssl/ripemd.h | 47 - openssl/include/openssl/rsa.h | 513 --- openssl/include/openssl/rsaerr.h | 167 - openssl/include/openssl/safestack.h | 207 - openssl/include/openssl/seed.h | 96 - openssl/include/openssl/sha.h | 119 - openssl/include/openssl/srp.h | 135 - openssl/include/openssl/srtp.h | 50 - openssl/include/openssl/ssl.h | 2438 ------------ openssl/include/openssl/ssl2.h | 24 - openssl/include/openssl/ssl3.h | 342 -- openssl/include/openssl/sslerr.h | 773 ---- openssl/include/openssl/stack.h | 83 - openssl/include/openssl/store.h | 266 -- openssl/include/openssl/storeerr.h | 91 - openssl/include/openssl/symhacks.h | 37 - openssl/include/openssl/tls1.h | 1237 ------ openssl/include/openssl/ts.h | 559 --- openssl/include/openssl/tserr.h | 132 - openssl/include/openssl/txt_db.h | 57 - openssl/include/openssl/ui.h | 368 -- openssl/include/openssl/uierr.h | 65 - openssl/include/openssl/whrlpool.h | 48 - openssl/include/openssl/x509.h | 1050 ----- openssl/include/openssl/x509_vfy.h | 631 --- openssl/include/openssl/x509err.h | 129 - openssl/include/openssl/x509v3.h | 937 ----- openssl/include/openssl/x509v3err.h | 162 - openssl/lib/engines-1_1/capi.dll | Bin 70144 -> 0 bytes openssl/lib/engines-1_1/capi.pdb | Bin 487424 -> 0 bytes openssl/lib/engines-1_1/padlock.dll | Bin 30720 -> 0 bytes openssl/lib/engines-1_1/padlock.pdb | Bin 299008 -> 0 bytes openssl/lib/libcrypto.lib | Bin 1003434 -> 0 bytes openssl/lib/libssl.lib | Bin 118430 -> 0 bytes openssl/libcrypto-1_1-x64.dll | Bin 2756728 -> 0 bytes openssl/libssl-1_1-x64.dll | Bin 528504 -> 0 bytes package.json | 15 +- src/lib.rs | 144 + 122 files changed, 196 insertions(+), 32281 deletions(-) create mode 100644 Cargo.toml delete mode 100644 binding.gyp create mode 100644 build.rs delete mode 100644 native/decryptor.cc delete mode 100644 native/decryptor.h delete mode 100644 openssl/include/openssl/aes.h delete mode 100644 openssl/include/openssl/applink.c delete mode 100644 openssl/include/openssl/asn1.h delete mode 100644 openssl/include/openssl/asn1_mac.h delete mode 100644 openssl/include/openssl/asn1err.h delete mode 100644 openssl/include/openssl/asn1t.h delete mode 100644 openssl/include/openssl/async.h delete mode 100644 openssl/include/openssl/asyncerr.h delete mode 100644 openssl/include/openssl/bio.h delete mode 100644 openssl/include/openssl/bioerr.h delete mode 100644 openssl/include/openssl/blowfish.h delete mode 100644 openssl/include/openssl/bn.h delete mode 100644 openssl/include/openssl/bnerr.h delete mode 100644 openssl/include/openssl/buffer.h delete mode 100644 openssl/include/openssl/buffererr.h delete mode 100644 openssl/include/openssl/camellia.h delete mode 100644 openssl/include/openssl/cast.h delete mode 100644 openssl/include/openssl/cmac.h delete mode 100644 openssl/include/openssl/cms.h delete mode 100644 openssl/include/openssl/cmserr.h delete mode 100644 openssl/include/openssl/comp.h delete mode 100644 openssl/include/openssl/comperr.h delete mode 100644 openssl/include/openssl/conf.h delete mode 100644 openssl/include/openssl/conf_api.h delete mode 100644 openssl/include/openssl/conferr.h delete mode 100644 openssl/include/openssl/crypto.h delete mode 100644 openssl/include/openssl/cryptoerr.h delete mode 100644 openssl/include/openssl/ct.h delete mode 100644 openssl/include/openssl/cterr.h delete mode 100644 openssl/include/openssl/des.h delete mode 100644 openssl/include/openssl/dh.h delete mode 100644 openssl/include/openssl/dherr.h delete mode 100644 openssl/include/openssl/dsa.h delete mode 100644 openssl/include/openssl/dsaerr.h delete mode 100644 openssl/include/openssl/dtls1.h delete mode 100644 openssl/include/openssl/e_os2.h delete mode 100644 openssl/include/openssl/ebcdic.h delete mode 100644 openssl/include/openssl/ec.h delete mode 100644 openssl/include/openssl/ecdh.h delete mode 100644 openssl/include/openssl/ecdsa.h delete mode 100644 openssl/include/openssl/ecerr.h delete mode 100644 openssl/include/openssl/engine.h delete mode 100644 openssl/include/openssl/engineerr.h delete mode 100644 openssl/include/openssl/err.h delete mode 100644 openssl/include/openssl/evp.h delete mode 100644 openssl/include/openssl/evperr.h delete mode 100644 openssl/include/openssl/hmac.h delete mode 100644 openssl/include/openssl/idea.h delete mode 100644 openssl/include/openssl/kdf.h delete mode 100644 openssl/include/openssl/kdferr.h delete mode 100644 openssl/include/openssl/lhash.h delete mode 100644 openssl/include/openssl/md2.h delete mode 100644 openssl/include/openssl/md4.h delete mode 100644 openssl/include/openssl/md5.h delete mode 100644 openssl/include/openssl/mdc2.h delete mode 100644 openssl/include/openssl/modes.h delete mode 100644 openssl/include/openssl/obj_mac.h delete mode 100644 openssl/include/openssl/objects.h delete mode 100644 openssl/include/openssl/objectserr.h delete mode 100644 openssl/include/openssl/ocsp.h delete mode 100644 openssl/include/openssl/ocsperr.h delete mode 100644 openssl/include/openssl/opensslconf.h delete mode 100644 openssl/include/openssl/opensslv.h delete mode 100644 openssl/include/openssl/ossl_typ.h delete mode 100644 openssl/include/openssl/pem.h delete mode 100644 openssl/include/openssl/pem2.h delete mode 100644 openssl/include/openssl/pemerr.h delete mode 100644 openssl/include/openssl/pkcs12.h delete mode 100644 openssl/include/openssl/pkcs12err.h delete mode 100644 openssl/include/openssl/pkcs7.h delete mode 100644 openssl/include/openssl/pkcs7err.h delete mode 100644 openssl/include/openssl/rand.h delete mode 100644 openssl/include/openssl/rand_drbg.h delete mode 100644 openssl/include/openssl/randerr.h delete mode 100644 openssl/include/openssl/rc2.h delete mode 100644 openssl/include/openssl/rc4.h delete mode 100644 openssl/include/openssl/rc5.h delete mode 100644 openssl/include/openssl/ripemd.h delete mode 100644 openssl/include/openssl/rsa.h delete mode 100644 openssl/include/openssl/rsaerr.h delete mode 100644 openssl/include/openssl/safestack.h delete mode 100644 openssl/include/openssl/seed.h delete mode 100644 openssl/include/openssl/sha.h delete mode 100644 openssl/include/openssl/srp.h delete mode 100644 openssl/include/openssl/srtp.h delete mode 100644 openssl/include/openssl/ssl.h delete mode 100644 openssl/include/openssl/ssl2.h delete mode 100644 openssl/include/openssl/ssl3.h delete mode 100644 openssl/include/openssl/sslerr.h delete mode 100644 openssl/include/openssl/stack.h delete mode 100644 openssl/include/openssl/store.h delete mode 100644 openssl/include/openssl/storeerr.h delete mode 100644 openssl/include/openssl/symhacks.h delete mode 100644 openssl/include/openssl/tls1.h delete mode 100644 openssl/include/openssl/ts.h delete mode 100644 openssl/include/openssl/tserr.h delete mode 100644 openssl/include/openssl/txt_db.h delete mode 100644 openssl/include/openssl/ui.h delete mode 100644 openssl/include/openssl/uierr.h delete mode 100644 openssl/include/openssl/whrlpool.h delete mode 100644 openssl/include/openssl/x509.h delete mode 100644 openssl/include/openssl/x509_vfy.h delete mode 100644 openssl/include/openssl/x509err.h delete mode 100644 openssl/include/openssl/x509v3.h delete mode 100644 openssl/include/openssl/x509v3err.h delete mode 100644 openssl/lib/engines-1_1/capi.dll delete mode 100644 openssl/lib/engines-1_1/capi.pdb delete mode 100644 openssl/lib/engines-1_1/padlock.dll delete mode 100644 openssl/lib/engines-1_1/padlock.pdb delete mode 100644 openssl/lib/libcrypto.lib delete mode 100644 openssl/lib/libssl.lib delete mode 100644 openssl/libcrypto-1_1-x64.dll delete mode 100644 openssl/libssl-1_1-x64.dll create mode 100644 src/lib.rs diff --git a/.gitignore b/.gitignore index 6fdad53..1a722b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ +/target +**/*.rs.bk +Cargo.lock node_modules/ package-lock.json -build/ -test.js -.vscode \ No newline at end of file +.vscode +*.node +test.js \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..1ffd93c --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "deezcryptor" +version = "0.1.0" +authors = ["sagudev "] +edition = "2018" + +[features] +default = ["blowfish/bcrypt"] + +[lib] +crate-type = ["cdylib"] + +[dependencies] +napi = "1" +napi-derive = "1" +md-5 = "0.9" +blowfish = "0.7" +block-modes = "0.7" + +[target.'cfg(all(unix, not(target_env = "musl"), not(target_arch = "aarch64")))'.dependencies] +jemallocator = {version = "0.3", features = ["disable_initial_exec_tls"]} + +[target.'cfg(all(windows, target_arch = "x86_64"))'.dependencies] +mimalloc = {version = "0.1"} + +[build-dependencies] +napi-build = "1" + +[profile.release] +lto = true +opt-level = 3 \ No newline at end of file diff --git a/binding.gyp b/binding.gyp deleted file mode 100644 index 5703d03..0000000 --- a/binding.gyp +++ /dev/null @@ -1,48 +0,0 @@ -{ - "targets": [ - { - "target_name": "decryptor", - "cflags!": [ "-fno-exceptions" ], - "cflags_cc!": [ "-fno-exceptions" ], - "sources": [ "native/decryptor.cc" ], - "include_dirs": [ - " { return decryptor.getKey(trackId); diff --git a/native/decryptor.cc b/native/decryptor.cc deleted file mode 100644 index 626d5ba..0000000 --- a/native/decryptor.cc +++ /dev/null @@ -1,52 +0,0 @@ -#include -#include -#include "decryptor.h" - -Napi::Value napiGetKey(const Napi::CallbackInfo& info) { - Napi::Env env = info.Env(); - - std::string trackIdArg = info[0].As().Utf8Value(); - char* trackId = new char[trackIdArg.length() + 1]; - strcpy(trackId, trackIdArg.c_str()); - - char key[16]; - getKey(trackId, key); - return Napi::String::New(env, key, 16); -} - -void napiDecryptFile(const Napi::CallbackInfo& info) { - std::string decKeyArg = info[0].As().Utf8Value(); - char* decKey = new char[17]; - strcpy(decKey, decKeyArg.c_str()); - - std::string inputFn = info[1].As().Utf8Value(); - std::string outputFn = info[2].As().Utf8Value(); - decryptFile(decKey, inputFn.c_str(), outputFn.c_str()); - - return; -} - -Napi::Value napiDecryptBuffer(const Napi::CallbackInfo& info) { - Napi::Env env = info.Env(); - - std::string decKeyArg = info[0].As().Utf8Value(); - char* decKey = new char[17]; - strcpy(decKey, decKeyArg.c_str()); - size_t arrlen = info[1].As>().Length(); - unsigned char* buffer = info[1].As>().Data(); - - unsigned char* decrypted = new unsigned char[arrlen]; - decryptBytes(decKey, arrlen, buffer, decrypted); - - return Napi::Buffer::New(env, decrypted, arrlen); -} - - -Napi::Object Init(Napi::Env env, Napi::Object exports) { - exports.Set(Napi::String::New(env, "getKey"), Napi::Function::New(env, napiGetKey)); - exports.Set(Napi::String::New(env, "decryptFile"), Napi::Function::New(env, napiDecryptFile)); - exports.Set(Napi::String::New(env, "decryptBuffer"), Napi::Function::New(env, napiDecryptBuffer)); - return exports; -} - -NODE_API_MODULE(decryptor, Init) \ No newline at end of file diff --git a/native/decryptor.h b/native/decryptor.h deleted file mode 100644 index 97b993a..0000000 --- a/native/decryptor.h +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include -#include -#include - -void getKey(char* trackId, char* key) { - unsigned char digest[MD5_DIGEST_LENGTH]; - MD5_CTX context; - MD5_Init(&context); - MD5_Update(&context, trackId, strlen(trackId)); - MD5_Final(digest, &context); - - char MD5String[33]; - for (int i = 0; i < 16; i++) - sprintf(&MD5String[i*2], "%02x", (unsigned int)digest[i]); - - const char secret[] = "g4el58wc0zvf9na1"; - - for(int i=0; i<16; i++) - key[i] = MD5String[i] ^ MD5String[i+16] ^ secret[i]; -} - -void decryptFile(char* decKey, const char* inputfn, const char* outputfn) { - unsigned char* bfKey = reinterpret_cast(decKey); - BF_KEY key; - BF_set_key(&key, 16, bfKey); - - FILE* ofile = fopen(outputfn, "wb"); - FILE* ifile = fopen(inputfn, "rb"); - - int i=0; - while (!feof(ifile)) { - unsigned char buffer[2048]; - int read = fread(buffer, 1, 2048, ifile); - if (i % 3 == 0 && read == 2048) { - unsigned char decrypted[2048]; - unsigned char IV[8] = {0,1,2,3,4,5,6,7}; - BF_cbc_encrypt(buffer, decrypted, 2048, &key, IV, BF_DECRYPT); - fwrite(decrypted, sizeof(unsigned char), sizeof(decrypted), ofile); - } else { - fwrite(buffer, sizeof(unsigned char), read, ofile); - } - i++; - } - fclose(ofile); - fclose(ifile); -} - -void decryptBytes(char* decKey, long length, unsigned char* data, unsigned char* output) { - unsigned char* bfKey = reinterpret_cast(decKey); - BF_KEY key; - BF_set_key(&key, 16, bfKey); - int count = length/2048; - - int i=0; - for(i=0; i - -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 -# define AES_BLOCK_SIZE 16 - -/* This should be a hidden type, but EVP requires that the size be known */ -struct aes_key_st { -# ifdef AES_LONG - unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else - unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif - int rounds; -}; -typedef struct aes_key_st AES_KEY; - -const char *AES_options(void); - -int AES_set_encrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); -int AES_set_decrypt_key(const unsigned char *userKey, const int bits, - AES_KEY *key); - -void AES_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); -void AES_decrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key); - -void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, - const AES_KEY *key, const int enc); -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num, const int enc); -void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, int *num); -/* NB: the IV is _two_ blocks long */ -void AES_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - unsigned char *ivec, const int enc); -/* NB: the IV is _four_ blocks long */ -void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - -int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); -int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/openssl/include/openssl/applink.c b/openssl/include/openssl/applink.c deleted file mode 100644 index a323e09..0000000 --- a/openssl/include/openssl/applink.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#define APPLINK_STDIN 1 -#define APPLINK_STDOUT 2 -#define APPLINK_STDERR 3 -#define APPLINK_FPRINTF 4 -#define APPLINK_FGETS 5 -#define APPLINK_FREAD 6 -#define APPLINK_FWRITE 7 -#define APPLINK_FSETMOD 8 -#define APPLINK_FEOF 9 -#define APPLINK_FCLOSE 10 /* should not be used */ - -#define APPLINK_FOPEN 11 /* solely for completeness */ -#define APPLINK_FSEEK 12 -#define APPLINK_FTELL 13 -#define APPLINK_FFLUSH 14 -#define APPLINK_FERROR 15 -#define APPLINK_CLEARERR 16 -#define APPLINK_FILENO 17 /* to be used with below */ - -#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */ -#define APPLINK_READ 19 -#define APPLINK_WRITE 20 -#define APPLINK_LSEEK 21 -#define APPLINK_CLOSE 22 -#define APPLINK_MAX 22 /* always same as last macro */ - -#ifndef APPMACROS_ONLY -# include -# include -# include - -static void *app_stdin(void) -{ - return stdin; -} - -static void *app_stdout(void) -{ - return stdout; -} - -static void *app_stderr(void) -{ - return stderr; -} - -static int app_feof(FILE *fp) -{ - return feof(fp); -} - -static int app_ferror(FILE *fp) -{ - return ferror(fp); -} - -static void app_clearerr(FILE *fp) -{ - clearerr(fp); -} - -static int app_fileno(FILE *fp) -{ - return _fileno(fp); -} - -static int app_fsetmod(FILE *fp, char mod) -{ - return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT); -} - -#ifdef __cplusplus -extern "C" { -#endif - -__declspec(dllexport) -void ** -# if defined(__BORLANDC__) -/* - * __stdcall appears to be the only way to get the name - * decoration right with Borland C. Otherwise it works - * purely incidentally, as we pass no parameters. - */ -__stdcall -# else -__cdecl -# endif -OPENSSL_Applink(void) -{ - static int once = 1; - static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] = - { (void *)APPLINK_MAX }; - - if (once) { - OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin; - OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout; - OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr; - OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf; - OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets; - OPENSSL_ApplinkTable[APPLINK_FREAD] = fread; - OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite; - OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod; - OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof; - OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose; - - OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen; - OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek; - OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell; - OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush; - OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror; - OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; - OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; - - OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; - OPENSSL_ApplinkTable[APPLINK_READ] = _read; - OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; - OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; - OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; - - once = 0; - } - - return OPENSSL_ApplinkTable; -} - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/asn1.h b/openssl/include/openssl/asn1.h deleted file mode 100644 index ead8df5..0000000 --- a/openssl/include/openssl/asn1.h +++ /dev/null @@ -1,886 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H - -# include -# include -# include -# include -# include -# include -# include - -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define V_ASN1_UNIVERSAL 0x00 -# define V_ASN1_APPLICATION 0x40 -# define V_ASN1_CONTEXT_SPECIFIC 0x80 -# define V_ASN1_PRIVATE 0xc0 - -# define V_ASN1_CONSTRUCTED 0x20 -# define V_ASN1_PRIMITIVE_TAG 0x1f -# define V_ASN1_PRIMATIVE_TAG /*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 - struct X509_algor_st; -DEFINE_STACK_OF(X509_ALGOR) - -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ -/* - * This indicates that the ASN1_STRING is not a real value but just a place - * holder for the location where indefinite length constructed data should be - * inserted in the memory buffer - */ -# define ASN1_STRING_FLAG_NDEF 0x010 - -/* - * This flag is used by the CMS code to indicate that a string is not - * complete and is a place holder for content when it had all been accessed. - * The flag will be reset when content has been written to it. - */ - -# define ASN1_STRING_FLAG_CONT 0x020 -/* - * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING - * type. - */ -# define ASN1_STRING_FLAG_MSTRING 0x040 -/* String is embedded and only content should be freed */ -# define ASN1_STRING_FLAG_EMBED 0x080 -/* 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) - -typedef struct asn1_string_table_st { - int nid; - long minsize; - long maxsize; - unsigned long mask; - unsigned long flags; -} ASN1_STRING_TABLE; - -DEFINE_STACK_OF(ASN1_STRING_TABLE) - -/* size limits: this stuff is taken straight from RFC2459 */ - -# define ub_name 32768 -# define ub_common_name 64 -# define ub_locality_name 128 -# define ub_state_name 128 -# define ub_organization_name 64 -# define ub_organization_unit_name 64 -# define ub_title 64 -# define ub_email_address 128 - -/* - * Declarations for template structures: for full definitions see asn1t.h - */ -typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; -typedef struct ASN1_TLC_st ASN1_TLC; -/* This is just an opaque pointer */ -typedef struct ASN1_VALUE_st ASN1_VALUE; - -/* Declare ASN1 functions: the implement macro in in asn1t.h */ - -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) - -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) - -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) - -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) - -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); - -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) - -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); - -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) - -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); - -# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) - -# define CHECKED_D2I_OF(type, d2i) \ - ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) -# define CHECKED_I2D_OF(type, i2d) \ - ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) -# define CHECKED_NEW_OF(type, xnew) \ - ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) -# define CHECKED_PTR_OF(type, p) \ - ((void*) (1 ? p : (type*)0)) -# define CHECKED_PPTR_OF(type, p) \ - ((void**) (1 ? p : (type**)0)) - -# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) -# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) - -TYPEDEF_D2I2D_OF(void); - -/*- - * The following macros and typedefs allow an ASN1_ITEM - * to be embedded in a structure and referenced. Since - * the ASN1_ITEM pointers need to be globally accessible - * (possibly from shared libraries) they may exist in - * different forms. On platforms that support it the - * ASN1_ITEM structure itself will be globally exported. - * Other platforms will export a function that returns - * an ASN1_ITEM pointer. - * - * To handle both cases transparently the macros below - * should be used instead of hard coding an ASN1_ITEM - * pointer in a structure. - * - * The structure will look like this: - * - * typedef struct SOMETHING_st { - * ... - * ASN1_ITEM_EXP *iptr; - * ... - * } SOMETHING; - * - * It would be initialised as e.g.: - * - * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; - * - * and the actual pointer extracted with: - * - * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); - * - * Finally an ASN1_ITEM pointer can be extracted from an - * appropriate reference with: ASN1_ITEM_rptr(X509). This - * would be used when a function takes an ASN1_ITEM * argument. - * - */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else - -/* - * Platforms that can't easily handle shared global variables are declared as - * functions returning ASN1_ITEM pointers. - */ - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) - -# define ASN1_ITEM_rptr(ref) (ref##_it()) - -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif - -/* Parameters used by ASN1_STRING_print_ex() */ - -/* - * These determine which characters to escape: RFC2253 special characters, - * control characters and MSB set characters - */ - -# define ASN1_STRFLGS_ESC_2253 1 -# define ASN1_STRFLGS_ESC_CTRL 2 -# define ASN1_STRFLGS_ESC_MSB 4 - -/* - * This flag determines how we do escaping: normally RC2253 backslash only, - * set this to use backslash and quote. - */ - -# define ASN1_STRFLGS_ESC_QUOTE 8 - -/* These three flags are internal use only. */ - -/* Character is a valid PrintableString character */ -# define CHARTYPE_PRINTABLESTRING 0x10 -/* Character needs escaping if it is the first character */ -# define CHARTYPE_FIRST_ESC_2253 0x20 -/* Character needs escaping if it is the last character */ -# define CHARTYPE_LAST_ESC_2253 0x40 - -/* - * NB the internal flags are safely reused below by flags handled at the top - * level. - */ - -/* - * If this is set we convert all character strings to UTF8 first - */ - -# define ASN1_STRFLGS_UTF8_CONVERT 0x10 - -/* - * If this is set we don't attempt to interpret content: just assume all - * strings are 1 byte per character. This will produce some pretty odd - * looking output! - */ - -# define ASN1_STRFLGS_IGNORE_TYPE 0x20 - -/* If this is set we include the string type in the output */ -# define ASN1_STRFLGS_SHOW_TYPE 0x40 - -/* - * This determines which strings to display and which to 'dump' (hex dump of - * content octets or DER encoding). We can only dump non character strings or - * everything. If we don't dump 'unknown' they are interpreted as character - * strings with 1 octet per character and are subject to the usual escaping - * options. - */ - -# define ASN1_STRFLGS_DUMP_ALL 0x80 -# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 - -/* - * These determine what 'dumping' does, we can dump the content octets or the - * DER encoding: both use the RFC2253 #XXXXX notation. - */ - -# define ASN1_STRFLGS_DUMP_DER 0x200 - -/* - * This flag specifies that RC2254 escaping shall be performed. - */ -#define ASN1_STRFLGS_ESC_2254 0x400 - -/* - * All the string flags consistent with RFC2253, escaping control characters - * isn't essential in RFC2253 but it is advisable anyway. - */ - -# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ - ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - ASN1_STRFLGS_UTF8_CONVERT | \ - ASN1_STRFLGS_DUMP_UNKNOWN | \ - ASN1_STRFLGS_DUMP_DER) - -DEFINE_STACK_OF(ASN1_INTEGER) - -DEFINE_STACK_OF(ASN1_GENERALSTRING) - -DEFINE_STACK_OF(ASN1_UTF8STRING) - -typedef struct asn1_type_st { - int type; - union { - char *ptr; - ASN1_BOOLEAN boolean; - ASN1_STRING *asn1_string; - ASN1_OBJECT *object; - ASN1_INTEGER *integer; - ASN1_ENUMERATED *enumerated; - ASN1_BIT_STRING *bit_string; - ASN1_OCTET_STRING *octet_string; - ASN1_PRINTABLESTRING *printablestring; - ASN1_T61STRING *t61string; - ASN1_IA5STRING *ia5string; - ASN1_GENERALSTRING *generalstring; - ASN1_BMPSTRING *bmpstring; - ASN1_UNIVERSALSTRING *universalstring; - ASN1_UTCTIME *utctime; - ASN1_GENERALIZEDTIME *generalizedtime; - ASN1_VISIBLESTRING *visiblestring; - ASN1_UTF8STRING *utf8string; - /* - * set and sequence are left complete and still contain the set or - * sequence bytes - */ - ASN1_STRING *set; - ASN1_STRING *sequence; - ASN1_VALUE *asn1_value; - } value; -} ASN1_TYPE; - -DEFINE_STACK_OF(ASN1_TYPE) - -typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) - -/* This is used to contain a list of bit names */ -typedef struct BIT_STRING_BITNAME_st { - int bitnum; - const char *lname; - const char *sname; -} BIT_STRING_BITNAME; - -# define B_ASN1_TIME \ - B_ASN1_UTCTIME | \ - B_ASN1_GENERALIZEDTIME - -# define B_ASN1_PRINTABLE \ - B_ASN1_NUMERICSTRING| \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_T61STRING| \ - B_ASN1_IA5STRING| \ - B_ASN1_BIT_STRING| \ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING|\ - B_ASN1_SEQUENCE|\ - B_ASN1_UNKNOWN - -# define B_ASN1_DIRECTORYSTRING \ - B_ASN1_PRINTABLESTRING| \ - B_ASN1_TELETEXSTRING|\ - B_ASN1_BMPSTRING|\ - B_ASN1_UNIVERSALSTRING|\ - B_ASN1_UTF8STRING - -# define B_ASN1_DISPLAYTEXT \ - B_ASN1_IA5STRING| \ - B_ASN1_VISIBLESTRING| \ - B_ASN1_BMPSTRING|\ - B_ASN1_UTF8STRING - -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) - -int ASN1_TYPE_get(const ASN1_TYPE *a); -void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); -int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); -int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); - -ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); -void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); - -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); - -DECLARE_ASN1_ITEM(ASN1_OBJECT) - -DEFINE_STACK_OF(ASN1_OBJECT) - -ASN1_STRING *ASN1_STRING_new(void); -void ASN1_STRING_free(ASN1_STRING *a); -void ASN1_STRING_clear_free(ASN1_STRING *a); -int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); -ASN1_STRING *ASN1_STRING_type_new(int type); -int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); - /* - * Since this is used to store all sorts of things, via macros, for now, - * make its data void * - */ -int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); -void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); -int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); -int ASN1_STRING_type(const ASN1_STRING *x); -DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) -const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); - -DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) -int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); -int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); -int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); -int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, - const unsigned char *flags, int flags_len); - -int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, - BIT_STRING_BITNAME *tbl, int indent); -int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); -int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, - BIT_STRING_BITNAME *tbl); - -DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) -ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, - long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); -int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); - -DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) - -int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); -ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); -ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); -int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); - -int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, - time_t t); -ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, - time_t t, int offset_day, - long offset_sec); -int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); - -int ASN1_TIME_diff(int *pday, int *psec, - const ASN1_TIME *from, const ASN1_TIME *to); - -DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); -int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, - const ASN1_OCTET_STRING *b); -int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, - int len); - -DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_NULL) -DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) - -int UTF8_getc(const unsigned char *str, int len, unsigned long *val); -int UTF8_putc(unsigned char *str, int len, unsigned long value); - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) - -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) -DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) -DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) -DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) -DECLARE_ASN1_FUNCTIONS(ASN1_TIME) - -DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) - -ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); -ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, - int offset_day, long offset_sec); -int ASN1_TIME_check(const ASN1_TIME *t); -ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(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, void *x); - -# define ASN1_dup_of(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(const type, x))) - -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); - -/* ASN1 alloc/free macros for when a type is only used internally */ - -# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) -# define M_ASN1_free_of(x, type) \ - ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) - -# ifndef OPENSSL_NO_STDIO -void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); - -# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); - -# define ASN1_i2d_fp_of(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); -int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); -# endif - -int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); - -void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); - -# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ - ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ - CHECKED_D2I_OF(type, d2i), \ - in, \ - CHECKED_PPTR_OF(type, x))) - -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); - -# define ASN1_i2d_bio_of(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ - out, \ - CHECKED_PTR_OF(const type, x))) - -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); -int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); -int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); -int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); -int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); -int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); -int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, - unsigned char *buf, int off); -int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); -int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, - int dump); -const char *ASN1_tag2str(int tag); - -/* Used to load and write Netscape format cert */ - -int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); - -int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); -int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); -int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, - unsigned char *data, int len); -int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, - unsigned char *data, int max_len); - -void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); - -ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, - ASN1_OCTET_STRING **oct); - -void ASN1_STRING_set_default_mask(unsigned long mask); -int ASN1_STRING_set_default_mask_asc(const char *p); -unsigned long ASN1_STRING_get_default_mask(void); -int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask); -int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, - int inform, unsigned long mask, - long minsize, long maxsize); - -ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, - const unsigned char *in, int inlen, - int inform, int nid); -ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); -int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); -void ASN1_STRING_TABLE_cleanup(void); - -/* ASN1 template functions */ - -/* Old API compatible functions */ -ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); -void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); -ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, - long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, - const ASN1_ITEM *it); - -void ASN1_add_oid_module(void); -void ASN1_add_stable_module(void); - -ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); -ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); -int ASN1_str2mask(const char *str, unsigned long *pmask); - -/* ASN1 Print flags */ - -/* Indicate missing OPTIONAL fields */ -# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 -/* Mark start and end of SEQUENCE */ -# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 -/* Mark start and end of SEQUENCE/SET OF */ -# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 -/* Show the ASN1 type of primitives */ -# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 -/* Don't show ASN1 type of ANY */ -# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 -/* Don't show ASN1 type of MSTRINGs */ -# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 -/* Don't show field names in SEQUENCE */ -# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 -/* Show structure names of each SEQUENCE field */ -# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 -/* Don't show structure name even at top level */ -# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 - -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, - const ASN1_ITEM *it, const ASN1_PCTX *pctx); -ASN1_PCTX *ASN1_PCTX_new(void); -void ASN1_PCTX_free(ASN1_PCTX *p); -unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); -unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); -void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); - -ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); -void ASN1_SCTX_free(ASN1_SCTX *p); -const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); -const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); -unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); -void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); -void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); - -const BIO_METHOD *BIO_f_asn1(void); - -BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); - -int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const ASN1_ITEM *it); -int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, - const char *hdr, const ASN1_ITEM *it); -int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, - int ctype_nid, int econt_nid, - STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); -ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); -int SMIME_crlf_copy(BIO *in, BIO *out, int flags); -int SMIME_text(BIO *in, BIO *out); - -const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); -const ASN1_ITEM *ASN1_ITEM_get(size_t i); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/asn1_mac.h b/openssl/include/openssl/asn1_mac.h deleted file mode 100644 index 333df34..0000000 --- a/openssl/include/openssl/asn1_mac.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#error "This file is obsolete; please update your software." diff --git a/openssl/include/openssl/asn1err.h b/openssl/include/openssl/asn1err.h deleted file mode 100644 index f96e68c..0000000 --- a/openssl/include/openssl/asn1err.h +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASN1ERR_H -# define HEADER_ASN1ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASN1_strings(void); - -/* - * ASN1 function codes. - */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIO_INIT 113 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DO_LOCK 233 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENC_SAVE 115 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_INT64 224 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_GET_UINT64 225 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 -# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 -# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PRIMITIVE_NEW 119 -# define ASN1_F_ASN1_SCTX_NEW 221 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_GET_INT64 227 -# define ASN1_F_ASN1_STRING_GET_UINT64 230 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TO_BN 228 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_STRING 229 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_C2I_IBUF 226 -# define ASN1_F_C2I_UINT64_INT 101 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_DO_BUF 142 -# define ASN1_F_DO_CREATE 124 -# define ASN1_F_DO_DUMP 125 -# define ASN1_F_DO_TCREATE 222 -# define ASN1_F_I2A_ASN1_OBJECT 126 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_OBJECT 143 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_NDEF_PREFIX 127 -# define ASN1_F_NDEF_SUFFIX 136 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_PKCS5_SCRYPT_SET 232 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_STABLE_GET 138 -# define ASN1_F_STBL_MODULE_INIT 223 -# define ASN1_F_UINT32_C2I 105 -# define ASN1_F_UINT32_NEW 139 -# define ASN1_F_UINT64_C2I 112 -# define ASN1_F_UINT64_NEW 141 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_PKEY_NEW 173 - -/* - * 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_BMPSTRING_IS_WRONG_LENGTH 214 -# define ASN1_R_BN_LIB 105 -# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 -# define ASN1_R_BUFFER_TOO_SMALL 107 -# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 -# define ASN1_R_CONTEXT_NOT_INITIALISED 217 -# define ASN1_R_DATA_IS_WRONG 109 -# define ASN1_R_DECODE_ERROR 110 -# define ASN1_R_DEPTH_EXCEEDED 174 -# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 -# define ASN1_R_ENCODE_ERROR 112 -# define ASN1_R_ERROR_GETTING_TIME 173 -# define ASN1_R_ERROR_LOADING_SECTION 172 -# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 -# define ASN1_R_EXPECTING_AN_INTEGER 115 -# define ASN1_R_EXPECTING_AN_OBJECT 116 -# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 -# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 -# define ASN1_R_FIELD_MISSING 121 -# define ASN1_R_FIRST_NUM_TOO_LARGE 122 -# define ASN1_R_HEADER_TOO_LONG 123 -# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 -# define ASN1_R_ILLEGAL_BOOLEAN 176 -# define ASN1_R_ILLEGAL_CHARACTERS 124 -# define ASN1_R_ILLEGAL_FORMAT 177 -# define ASN1_R_ILLEGAL_HEX 178 -# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 -# define ASN1_R_ILLEGAL_INTEGER 180 -# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 -# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 -# define ASN1_R_ILLEGAL_NULL 125 -# define ASN1_R_ILLEGAL_NULL_VALUE 182 -# define ASN1_R_ILLEGAL_OBJECT 183 -# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 -# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 -# define ASN1_R_ILLEGAL_PADDING 221 -# define ASN1_R_ILLEGAL_TAGGED_ANY 127 -# define ASN1_R_ILLEGAL_TIME_VALUE 184 -# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 -# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 -# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 -# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 -# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 -# define ASN1_R_INVALID_DIGIT 130 -# define ASN1_R_INVALID_MIME_TYPE 205 -# define ASN1_R_INVALID_MODIFIER 186 -# define ASN1_R_INVALID_NUMBER 187 -# define ASN1_R_INVALID_OBJECT_ENCODING 216 -# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 -# define ASN1_R_INVALID_SEPARATOR 131 -# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 -# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 -# define ASN1_R_INVALID_UTF8STRING 134 -# define ASN1_R_INVALID_VALUE 219 -# define ASN1_R_LIST_ERROR 188 -# define ASN1_R_MIME_NO_CONTENT_TYPE 206 -# define ASN1_R_MIME_PARSE_ERROR 207 -# define ASN1_R_MIME_SIG_PARSE_ERROR 208 -# define ASN1_R_MISSING_EOC 137 -# define ASN1_R_MISSING_SECOND_NUMBER 138 -# define ASN1_R_MISSING_VALUE 189 -# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 -# define ASN1_R_MSTRING_WRONG_TAG 140 -# define ASN1_R_NESTED_ASN1_STRING 197 -# define ASN1_R_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_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_WRONG_INTEGER_TYPE 225 -# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 -# define ASN1_R_WRONG_TAG 168 - -#endif diff --git a/openssl/include/openssl/asn1t.h b/openssl/include/openssl/asn1t.h deleted file mode 100644 index 56ac4ac..0000000 --- a/openssl/include/openssl/asn1t.h +++ /dev/null @@ -1,945 +0,0 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H - -# include -# include -# include - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -/* ASN1 template defines, structures and functions */ - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM itname##_it = { - -# define static_ASN1_ITEM_start(itname) \ - static const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM * itname##_it(void) \ - { \ - static const ASN1_ITEM local_it = { - -# define static_ASN1_ITEM_start(itname) \ - static ASN1_ITEM_start(itname) - -# define ASN1_ITEM_end(itname) \ - }; \ - return &local_it; \ - } - -# endif - -/* Macros to aid ASN1 template writing */ - -# define ASN1_ITEM_TEMPLATE(tname) \ - static const ASN1_TEMPLATE tname##_item_tt - -# define ASN1_ITEM_TEMPLATE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_PRIMITIVE,\ - -1,\ - &tname##_item_tt,\ - 0,\ - NULL,\ - 0,\ - #tname \ - ASN1_ITEM_end(tname) -# define static_ASN1_ITEM_TEMPLATE_END(tname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_PRIMITIVE,\ - -1,\ - &tname##_item_tt,\ - 0,\ - NULL,\ - 0,\ - #tname \ - ASN1_ITEM_end(tname) - -/* This is a ASN1 type which just embeds a template */ - -/*- - * This pair helps declare a SEQUENCE. We can do: - * - * ASN1_SEQUENCE(stname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END(stname) - * - * This will produce an ASN1_ITEM called stname_it - * for a structure called stname. - * - * If you want the same structure but a different - * name then use: - * - * ASN1_SEQUENCE(itname) = { - * ... SEQUENCE components ... - * } ASN1_SEQUENCE_END_name(stname, itname) - * - * This will create an item called itname_it using - * a structure called stname. - */ - -# define ASN1_SEQUENCE(tname) \ - static const ASN1_TEMPLATE tname##_seq_tt[] - -# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) - -# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) - -# define ASN1_SEQUENCE_END_name(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #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}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_ref(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ - ASN1_SEQUENCE(tname) - -# define ASN1_NDEF_SEQUENCE_END(tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(tname),\ - #tname \ - ASN1_ITEM_end(tname) -# define static_ASN1_NDEF_SEQUENCE_END(tname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_NDEF_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(tname),\ - #tname \ - ASN1_ITEM_end(tname) - -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) -# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ - static_ASN1_SEQUENCE_END_ref(stname, stname) - -# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) -# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) - -# define ASN1_SEQUENCE_END_ref(stname, tname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_SEQUENCE,\ - V_ASN1_SEQUENCE,\ - tname##_seq_tt,\ - sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #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}; \ - ASN1_CHOICE(tname) - -# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) - -# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) - -# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) - -# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) - -# define ASN1_CHOICE_END_selector(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ - ;\ - static_ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - NULL,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -# define ASN1_CHOICE_END_cb(stname, tname, selname) \ - ;\ - ASN1_ITEM_start(tname) \ - ASN1_ITYPE_CHOICE,\ - offsetof(stname,selname) ,\ - tname##_ch_tt,\ - sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ - &tname##_aux,\ - sizeof(stname),\ - #stname \ - ASN1_ITEM_end(tname) - -/* This helps with the template wrapper form of ASN1_ITEM */ - -# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ - (flags), (tag), 0,\ - #name, ASN1_ITEM_ref(type) } - -/* These help with SEQUENCE or CHOICE components */ - -/* used to declare other types */ - -# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ - (flags), (tag), offsetof(stname, field),\ - #field, ASN1_ITEM_ref(type) } - -/* implicit and explicit helper macros */ - -# define ASN1_IMP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) - -# define ASN1_EXP_EX(stname, field, type, tag, ex) \ - ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) - -/* Any defined by macros: the field used is in the table itself */ - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif -/* Plain simple type */ -# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) -/* Embedded simple type */ -# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) - -/* OPTIONAL simple type */ -# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) -# 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[] - -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ITEM *name##_adb(void) \ - { \ - static const ASN1_ADB internal_adb = \ - {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - }; \ - return (const ASN1_ITEM *) &internal_adb; \ - } \ - void dummy_function(void) - -# endif - -# define ADB_ENTRY(val, template) {val, template} - -# define ASN1_ADB_TEMPLATE(name) \ - static const ASN1_TEMPLATE name##_tt - -/* - * This is the ASN1 template structure that defines a wrapper round the - * actual type. It determines the actual position of the field in the value - * structure, various flags such as OPTIONAL and the field name. - */ - -struct ASN1_TEMPLATE_st { - unsigned long flags; /* Various flags */ - long tag; /* tag, not used if no tagging */ - unsigned long offset; /* Offset of this field in structure */ - const char *field_name; /* Field name */ - ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ -}; - -/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ - -# define ASN1_TEMPLATE_item(t) (t->item_ptr) -# define ASN1_TEMPLATE_adb(t) (t->item_ptr) - -typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; -typedef struct ASN1_ADB_st ASN1_ADB; - -struct ASN1_ADB_st { - unsigned long flags; /* Various flags */ - unsigned long offset; /* Offset of selector field */ - int (*adb_cb)(long *psel); /* Application callback */ - const ASN1_ADB_TABLE *tbl; /* Table of possible types */ - long tblcount; /* Number of entries in tbl */ - const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ - const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ -}; - -struct ASN1_ADB_TABLE_st { - long value; /* NID for an object or value for an int */ - const ASN1_TEMPLATE tt; /* item for this value */ -}; - -/* template flags */ - -/* Field is optional */ -# define ASN1_TFLG_OPTIONAL (0x1) - -/* Field is a SET OF */ -# define ASN1_TFLG_SET_OF (0x1 << 1) - -/* Field is a SEQUENCE OF */ -# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) - -/* - * Special case: this refers to a SET OF that will be sorted into DER order - * when encoded *and* the corresponding STACK will be modified to match the - * new order. - */ -# define ASN1_TFLG_SET_ORDER (0x3 << 1) - -/* Mask for SET OF or SEQUENCE OF */ -# define ASN1_TFLG_SK_MASK (0x3 << 1) - -/* - * These flags mean the tag should be taken from the tag field. If EXPLICIT - * then the underlying type is used for the inner tag. - */ - -/* IMPLICIT tagging */ -# define ASN1_TFLG_IMPTAG (0x1 << 3) - -/* EXPLICIT tagging, inner tag from underlying type */ -# define ASN1_TFLG_EXPTAG (0x2 << 3) - -# define ASN1_TFLG_TAG_MASK (0x3 << 3) - -/* context specific IMPLICIT */ -# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) - -/* context specific EXPLICIT */ -# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) - -/* - * If tagging is in force these determine the type of tag to use. Otherwise - * the tag is determined by the underlying type. These values reflect the - * actual octet format. - */ - -/* Universal tag */ -# define ASN1_TFLG_UNIVERSAL (0x0<<6) -/* Application tag */ -# define ASN1_TFLG_APPLICATION (0x1<<6) -/* Context specific tag */ -# define ASN1_TFLG_CONTEXT (0x2<<6) -/* Private tag */ -# define ASN1_TFLG_PRIVATE (0x3<<6) - -# define ASN1_TFLG_TAG_CLASS (0x3<<6) - -/* - * These are for ANY DEFINED BY type. In this case the 'item' field points to - * an ASN1_ADB structure which contains a table of values to decode the - * relevant type - */ - -# define ASN1_TFLG_ADB_MASK (0x3<<8) - -# define ASN1_TFLG_ADB_OID (0x1<<8) - -# define ASN1_TFLG_ADB_INT (0x1<<9) - -/* - * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes - * indefinite length constructed encoding to be used if required. - */ - -# define ASN1_TFLG_NDEF (0x1<<11) - -/* Field is embedded and not a pointer */ -# define ASN1_TFLG_EMBED (0x1 << 12) - -/* This is the actual ASN1 item itself */ - -struct ASN1_ITEM_st { - char itype; /* The item type, primitive, SEQUENCE, CHOICE - * or extern */ - long utype; /* underlying type */ - const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains - * the contents */ - long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ - long size; /* Structure size (usually) */ - const char *sname; /* Structure name */ -}; - -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - -/* - * Cache for ASN1 tag and length, so we don't keep re-reading it for things - * like CHOICE - */ - -struct ASN1_TLC_st { - char valid; /* Values below are valid */ - int ret; /* return value */ - long plen; /* length */ - int ptag; /* class value */ - int pclass; /* class value */ - int hdrlen; /* header length */ -}; - -/* Typedefs for ASN1 function pointers */ -typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); -typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); - -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, - int indent, const char *fname, - const ASN1_PCTX *pctx); - -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, - int *putype, const ASN1_ITEM *it); -typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, - int len, int utype, char *free_cont, - const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, - const ASN1_ITEM *it, int indent, - const ASN1_PCTX *pctx); - -typedef struct ASN1_EXTERN_FUNCS_st { - void *app_data; - ASN1_ex_new_func *asn1_ex_new; - ASN1_ex_free_func *asn1_ex_free; - ASN1_ex_free_func *asn1_ex_clear; - ASN1_ex_d2i *asn1_ex_d2i; - ASN1_ex_i2d *asn1_ex_i2d; - ASN1_ex_print_func *asn1_ex_print; -} ASN1_EXTERN_FUNCS; - -typedef struct ASN1_PRIMITIVE_FUNCS_st { - void *app_data; - unsigned long flags; - ASN1_ex_new_func *prim_new; - ASN1_ex_free_func *prim_free; - ASN1_ex_free_func *prim_clear; - ASN1_primitive_c2i *prim_c2i; - ASN1_primitive_i2c *prim_i2c; - ASN1_primitive_print *prim_print; -} ASN1_PRIMITIVE_FUNCS; - -/* - * This is the ASN1_AUX structure: it handles various miscellaneous - * requirements. For example the use of reference counts and an informational - * callback. The "informational callback" is called at various points during - * the ASN1 encoding and decoding. It can be used to provide minor - * customisation of the structures used. This is most useful where the - * supplied routines *almost* do the right thing but need some extra help at - * a few points. If the callback returns zero then it is assumed a fatal - * error has occurred and the main operation should be abandoned. If major - * changes in the default behaviour are required then an external type is - * more appropriate. - */ - -typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, - void *exarg); - -typedef struct ASN1_AUX_st { - void *app_data; - int flags; - int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ - ASN1_aux_cb *asn1_cb; - int enc_offset; /* Offset of ASN1_ENCODING structure */ -} ASN1_AUX; - -/* For print related callbacks exarg points to this structure */ -typedef struct ASN1_PRINT_ARG_st { - BIO *out; - int indent; - const ASN1_PCTX *pctx; -} ASN1_PRINT_ARG; - -/* For streaming related callbacks exarg points to this structure */ -typedef struct ASN1_STREAM_ARG_st { - /* BIO to stream through */ - BIO *out; - /* BIO with filters appended */ - BIO *ndef_bio; - /* Streaming I/O boundary */ - unsigned char **boundary; -} ASN1_STREAM_ARG; - -/* Flags in ASN1_AUX */ - -/* Use a reference count */ -# define ASN1_AFLG_REFCOUNT 1 -/* Save the encoding of structure (useful for signatures) */ -# define ASN1_AFLG_ENCODING 2 -/* The Sequence length is invalid */ -# define ASN1_AFLG_BROKEN 4 - -/* operation values for asn1_cb */ - -# define ASN1_OP_NEW_PRE 0 -# define ASN1_OP_NEW_POST 1 -# define ASN1_OP_FREE_PRE 2 -# define ASN1_OP_FREE_POST 3 -# define ASN1_OP_D2I_PRE 4 -# define ASN1_OP_D2I_POST 5 -# define ASN1_OP_I2D_PRE 6 -# define ASN1_OP_I2D_POST 7 -# define ASN1_OP_PRINT_PRE 8 -# define ASN1_OP_PRINT_POST 9 -# define ASN1_OP_STREAM_PRE 10 -# define ASN1_OP_STREAM_POST 11 -# define ASN1_OP_DETACHED_PRE 12 -# define ASN1_OP_DETACHED_POST 13 - -/* Macro to implement a primitive type */ -# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) -# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ - ASN1_ITEM_end(itname) - -/* Macro to implement a multi string type */ -# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ - ASN1_ITEM_start(itname) \ - ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ - ASN1_ITEM_end(itname) - -# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ - ASN1_ITEM_start(sname) \ - ASN1_ITYPE_EXTERN, \ - tag, \ - NULL, \ - 0, \ - &fptrs, \ - 0, \ - #sname \ - ASN1_ITEM_end(sname) - -/* Macro to implement standard functions in terms of ASN1_ITEM structures */ - -# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) - -# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ - IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) - -# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ - pre stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - pre void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ - stname *fname##_new(void) \ - { \ - return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ - } \ - void fname##_free(stname *a) \ - { \ - ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ - { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ - } - -# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ - static stname *d2i_##stname(stname **a, \ - const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ - ASN1_ITEM_rptr(stname)); \ - } \ - static int i2d_##stname(stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, \ - ASN1_ITEM_rptr(stname)); \ - } - -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - -# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ - { \ - return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ - } - -# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ - IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) - -# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx) \ - { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ - ASN1_ITEM_rptr(itname), pctx); \ - } - -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - -/* external definitions for primitive types */ - -DECLARE_ASN1_ITEM(ASN1_BOOLEAN) -DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) -DECLARE_ASN1_ITEM(ASN1_SEQUENCE) -DECLARE_ASN1_ITEM(CBIGNUM) -DECLARE_ASN1_ITEM(BIGNUM) -DECLARE_ASN1_ITEM(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) - -# if OPENSSL_API_COMPAT < 0x10200000L -/* - * 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 - -DEFINE_STACK_OF(ASN1_VALUE) - -/* Functions used internally by the ASN1 code */ - -int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); -void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); - -int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, - const ASN1_ITEM *it, int tag, int aclass, char opt, - ASN1_TLC *ctx); - -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, - const ASN1_ITEM *it, int tag, int aclass); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/async.h b/openssl/include/openssl/async.h deleted file mode 100644 index 8abfc20..0000000 --- a/openssl/include/openssl/async.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifndef HEADER_ASYNC_H -# define HEADER_ASYNC_H - -#if defined(_WIN32) -# if defined(BASETYPES) || defined(_WINDEF_H) -/* application has to include to use this */ -#define OSSL_ASYNC_FD HANDLE -#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE -# endif -#else -#define OSSL_ASYNC_FD int -#define OSSL_BAD_ASYNC_FD -1 -#endif -# include - - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct async_job_st ASYNC_JOB; -typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; - -#define ASYNC_ERR 0 -#define ASYNC_NO_JOBS 1 -#define ASYNC_PAUSE 2 -#define ASYNC_FINISH 3 - -int ASYNC_init_thread(size_t max_size, size_t init_size); -void ASYNC_cleanup_thread(void); - -#ifdef OSSL_ASYNC_FD -ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); -void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); -int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, - OSSL_ASYNC_FD fd, - void *custom_data, - void (*cleanup)(ASYNC_WAIT_CTX *, const void *, - OSSL_ASYNC_FD, void *)); -int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, - OSSL_ASYNC_FD *fd, void **custom_data); -int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, - size_t *numfds); -int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, - size_t *numaddfds, OSSL_ASYNC_FD *delfd, - size_t *numdelfds); -int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); -#endif - -int ASYNC_is_capable(void); - -int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, - int (*func)(void *), void *args, size_t size); -int ASYNC_pause_job(void); - -ASYNC_JOB *ASYNC_get_current_job(void); -ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); -void ASYNC_block_pause(void); -void ASYNC_unblock_pause(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/asyncerr.h b/openssl/include/openssl/asyncerr.h deleted file mode 100644 index b6fb965..0000000 --- a/openssl/include/openssl/asyncerr.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ASYNCERR_H -# define HEADER_ASYNCERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASYNC_strings(void); - -/* - * ASYNC function codes. - */ -# define ASYNC_F_ASYNC_CTX_NEW 100 -# define ASYNC_F_ASYNC_INIT_THREAD 101 -# define ASYNC_F_ASYNC_JOB_NEW 102 -# define ASYNC_F_ASYNC_PAUSE_JOB 103 -# define ASYNC_F_ASYNC_START_FUNC 104 -# define ASYNC_F_ASYNC_START_JOB 105 -# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 - -/* - * 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/openssl/include/openssl/bio.h b/openssl/include/openssl/bio.h deleted file mode 100644 index 47b30eb..0000000 --- a/openssl/include/openssl/bio.h +++ /dev/null @@ -1,801 +0,0 @@ -/* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BIO_H -# define HEADER_BIO_H - -# include - -# ifndef OPENSSL_NO_STDIO -# include -# endif -# include - -# include -# 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_START 128 - -/* - * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. - * BIO_set_fp(in,stdin,BIO_NOCLOSE); - */ -# define BIO_NOCLOSE 0x00 -# define BIO_CLOSE 0x01 - -/* - * These are used in the following macros and are passed to BIO_ctrl() - */ -# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ -# define BIO_CTRL_EOF 2/* opt - are we at the eof */ -# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ -# define BIO_CTRL_SET 4/* man - set the 'IO' type */ -# define BIO_CTRL_GET 5/* man - get the 'IO' type */ -# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ -# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ -# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ -# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ -# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ -# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ -# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ -# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ -# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ -# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ - -# define BIO_CTRL_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 tiemd out */ - -/* #ifdef IP_MTU_DISCOVER */ -# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ -/* #endif */ - -# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ -# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 -# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ -# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. - * want to use this if asking - * the kernel fails */ - -# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was - * exceed in the previous write - * operation */ - -# define BIO_CTRL_DGRAM_GET_PEER 46 -# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ - -# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout - * to adjust socket timeouts */ -# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 - -# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 - -/* 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 - -/* modifiers */ -# define BIO_FP_READ 0x02 -# define BIO_FP_WRITE 0x04 -# define BIO_FP_APPEND 0x08 -# define BIO_FP_TEXT 0x10 - -# define BIO_FLAGS_READ 0x01 -# define BIO_FLAGS_WRITE 0x02 -# define BIO_FLAGS_IO_SPECIAL 0x04 -# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) -# define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 -# endif - -# define BIO_FLAGS_BASE64_NO_NL 0x100 - -/* - * This is used with memory BIOs: - * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; - * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. - */ -# define BIO_FLAGS_MEM_RDONLY 0x200 -# define BIO_FLAGS_NONCLEAR_RST 0x400 -# define BIO_FLAGS_IN_EOF 0x800 - -typedef union bio_addr_st BIO_ADDR; -typedef struct bio_addrinfo_st BIO_ADDRINFO; - -int BIO_get_new_index(void); -void BIO_set_flags(BIO *b, int flags); -int BIO_test_flags(const BIO *b, int flags); -void BIO_clear_flags(BIO *b, int flags); - -# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) -# define BIO_set_retry_special(b) \ - BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_read(b) \ - BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_set_retry_write(b) \ - BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) - -/* These are normally used internally in BIOs */ -# define BIO_clear_retry_flags(b) \ - BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) -# define BIO_get_retry_flags(b) \ - BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) - -/* These should be used by the application to tell why we should retry */ -# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) -# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) -# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) -# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) -# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) - -/* - * The next three are used in conjunction with the BIO_should_io_special() - * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int - * *reason); will walk the BIO stack and return the 'reason' for the special - * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return - * the code. - */ -/* - * Returned from the SSL bio when the certificate retrieval code had an error - */ -# define BIO_RR_SSL_X509_LOOKUP 0x01 -/* Returned from the connect BIO when a connect would have blocked */ -# define BIO_RR_CONNECT 0x02 -/* Returned from the accept BIO when an accept would have blocked */ -# define BIO_RR_ACCEPT 0x03 - -/* These are passed by the BIO callback */ -# define BIO_CB_FREE 0x01 -# define BIO_CB_READ 0x02 -# define BIO_CB_WRITE 0x03 -# define BIO_CB_PUTS 0x04 -# define BIO_CB_GETS 0x05 -# define BIO_CB_CTRL 0x06 - -/* - * The callback is called before and after the underling operation, The - * BIO_CB_RETURN flag indicates if it is after the call - */ -# define BIO_CB_RETURN 0x80 -# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) -# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) -# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) - -typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, - long argl, long ret); -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 BIO_get_callback(const BIO *b); -void BIO_set_callback(BIO *b, BIO_callback_fn callback); - -BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); -void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); - -char *BIO_get_callback_arg(const BIO *b); -void BIO_set_callback_arg(BIO *b, char *arg); - -typedef struct bio_method_st BIO_METHOD; - -const char *BIO_method_name(const BIO *b); -int BIO_method_type(const BIO *b); - -typedef int BIO_info_cb(BIO *, int, int); -typedef BIO_info_cb bio_info_cb; /* backward compatibility */ - -DEFINE_STACK_OF(BIO) - -/* Prefix and suffix callback in ASN1 BIO */ -typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, - void *parg); - -# ifndef OPENSSL_NO_SCTP -/* SCTP parameter structs */ -struct bio_dgram_sctp_sndinfo { - uint16_t snd_sid; - uint16_t snd_flags; - uint32_t snd_ppid; - uint32_t snd_context; -}; - -struct bio_dgram_sctp_rcvinfo { - uint16_t rcv_sid; - uint16_t rcv_ssn; - uint16_t rcv_flags; - uint32_t rcv_ppid; - uint32_t rcv_tsn; - uint32_t rcv_cumtsn; - uint32_t rcv_context; -}; - -struct bio_dgram_sctp_prinfo { - uint16_t pr_policy; - uint32_t pr_value; -}; -# endif - -/* - * #define BIO_CONN_get_param_hostname BIO_ctrl - */ - -# define BIO_C_SET_CONNECT 100 -# define BIO_C_DO_STATE_MACHINE 101 -# define BIO_C_SET_NBIO 102 -/* # define BIO_C_SET_PROXY_PARAM 103 */ -# define BIO_C_SET_FD 104 -# define BIO_C_GET_FD 105 -# define BIO_C_SET_FILE_PTR 106 -# define BIO_C_GET_FILE_PTR 107 -# define BIO_C_SET_FILENAME 108 -# define BIO_C_SET_SSL 109 -# define BIO_C_GET_SSL 110 -# define BIO_C_SET_MD 111 -# define BIO_C_GET_MD 112 -# define BIO_C_GET_CIPHER_STATUS 113 -# define BIO_C_SET_BUF_MEM 114 -# define BIO_C_GET_BUF_MEM_PTR 115 -# define BIO_C_GET_BUFF_NUM_LINES 116 -# define BIO_C_SET_BUFF_SIZE 117 -# define BIO_C_SET_ACCEPT 118 -# define BIO_C_SSL_MODE 119 -# define BIO_C_GET_MD_CTX 120 -/* # define BIO_C_GET_PROXY_PARAM 121 */ -# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ -# define BIO_C_GET_CONNECT 123 -# define BIO_C_GET_ACCEPT 124 -# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 -# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 -# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 -# define BIO_C_FILE_SEEK 128 -# define BIO_C_GET_CIPHER_CTX 129 -# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input - * value */ -# define BIO_C_SET_BIND_MODE 131 -# define BIO_C_GET_BIND_MODE 132 -# define BIO_C_FILE_TELL 133 -# define BIO_C_GET_SOCKS 134 -# define BIO_C_SET_SOCKS 135 - -# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ -# define BIO_C_GET_WRITE_BUF_SIZE 137 -# define BIO_C_MAKE_BIO_PAIR 138 -# define BIO_C_DESTROY_BIO_PAIR 139 -# define BIO_C_GET_WRITE_GUARANTEE 140 -# define BIO_C_GET_READ_REQUEST 141 -# define BIO_C_SHUTDOWN_WR 142 -# define BIO_C_NREAD0 143 -# define BIO_C_NREAD 144 -# define BIO_C_NWRITE0 145 -# define BIO_C_NWRITE 146 -# define BIO_C_RESET_READ_REQUEST 147 -# define BIO_C_SET_MD_CTX 148 - -# define BIO_C_SET_PREFIX 149 -# define BIO_C_GET_PREFIX 150 -# define BIO_C_SET_SUFFIX 151 -# define BIO_C_GET_SUFFIX 152 - -# define BIO_C_SET_EX_ARG 153 -# define BIO_C_GET_EX_ARG 154 - -# define BIO_C_SET_CONNECT_MODE 155 - -# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) -# define BIO_get_app_data(s) BIO_get_ex_data(s,0) - -# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) - -# ifndef OPENSSL_NO_SOCK -/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ -/* Note: the underlying operating system may not support some of them */ -# define BIO_FAMILY_IPV4 4 -# define BIO_FAMILY_IPV6 6 -# define BIO_FAMILY_IPANY 256 - -/* BIO_s_connect() */ -# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ - (char *)(name)) -# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ - (char *)(port)) -# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ - (char *)(addr)) -# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) -# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) -# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) -# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) -# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) -# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) - -/* BIO_s_accept() */ -# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ - (char *)(name)) -# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ - (char *)(port)) -# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) -# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) -# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) -# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) -/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ -# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) -# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ - (char *)(bio)) -# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) -# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) - -/* Aliases kept for backward compatibility */ -# define BIO_BIND_NORMAL 0 -# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR -# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR -# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) -# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) -# endif /* OPENSSL_NO_SOCK */ - -# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) - -/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ -# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) -# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) - -/* BIO_s_file() */ -# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) -# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) - -/* BIO_s_fd() and BIO_s_file() */ -# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) -# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) - -/* - * name is cast to lose const, but might be better to route through a - * function so we can do it safely - */ -# ifdef CONST_STRICT -/* - * If you are wondering why this isn't defined, its because CONST_STRICT is - * purely a compile-time kludge to allow const to be checked. - */ -int BIO_read_filename(BIO *b, const char *name); -# else -# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ,(char *)(name)) -# endif -# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_WRITE,name) -# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_APPEND,name) -# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ - BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) - -/* - * WARNING WARNING, this ups the reference count on the read bio of the SSL - * structure. This is because the ssl read BIO is now pointed to by the - * next_bio field in the bio. So when you free the BIO, make sure you are - * doing a BIO_free_all() to catch the underlying BIO. - */ -# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) -# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) -# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) -# define BIO_set_ssl_renegotiate_bytes(b,num) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) -# define BIO_get_num_renegotiates(b) \ - BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) -# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) - -/* defined in evp.h */ -/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ - -# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) -# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) -# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ - (char *)(pp)) -# define BIO_set_mem_eof_return(b,v) \ - BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) - -/* For the BIO_f_buffer() type */ -# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) -# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) -# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) -# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) -# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) - -/* Don't use the next one unless you know what you are doing :-) */ -# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) - -# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) -# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) -# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) -# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) -# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) -# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) -/* ...pending macros have inappropriate return type */ -size_t BIO_ctrl_pending(BIO *b); -size_t BIO_ctrl_wpending(BIO *b); -# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) -# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ - cbp) -# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) - -/* For the BIO_f_buffer() type */ -# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) -# 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_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) - -#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) -int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); -uint64_t BIO_number_read(BIO *bio); -uint64_t BIO_number_written(BIO *bio); - -/* For BIO_f_asn1() */ -int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, - asn1_ps_func *prefix_free); -int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, - asn1_ps_func **pprefix_free); -int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, - asn1_ps_func *suffix_free); -int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, - asn1_ps_func **psuffix_free); - -const BIO_METHOD *BIO_s_file(void); -BIO *BIO_new_file(const char *filename, const char *mode); -# ifndef OPENSSL_NO_STDIO -BIO *BIO_new_fp(FILE *stream, int close_flag); -# endif -BIO *BIO_new(const BIO_METHOD *type); -int BIO_free(BIO *a); -void BIO_set_data(BIO *a, void *ptr); -void *BIO_get_data(BIO *a); -void BIO_set_init(BIO *a, int init); -int BIO_get_init(BIO *a); -void BIO_set_shutdown(BIO *a, int shut); -int BIO_get_shutdown(BIO *a); -void BIO_vfree(BIO *a); -int BIO_up_ref(BIO *a); -int BIO_read(BIO *b, void *data, int dlen); -int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); -int BIO_gets(BIO *bp, 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); -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); - -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - -const BIO_METHOD *BIO_s_mem(void); -const BIO_METHOD *BIO_s_secmem(void); -BIO *BIO_new_mem_buf(const void *buf, int len); -# ifndef OPENSSL_NO_SOCK -const BIO_METHOD *BIO_s_socket(void); -const BIO_METHOD *BIO_s_connect(void); -const BIO_METHOD *BIO_s_accept(void); -# endif -const BIO_METHOD *BIO_s_fd(void); -const BIO_METHOD *BIO_s_log(void); -const BIO_METHOD *BIO_s_bio(void); -const BIO_METHOD *BIO_s_null(void); -const BIO_METHOD *BIO_f_null(void); -const BIO_METHOD *BIO_f_buffer(void); -const BIO_METHOD *BIO_f_linebuffer(void); -const BIO_METHOD *BIO_f_nbio_test(void); -# ifndef OPENSSL_NO_DGRAM -const BIO_METHOD *BIO_s_datagram(void); -int BIO_dgram_non_fatal_error(int error); -BIO *BIO_new_dgram(int fd, int close_flag); -# ifndef OPENSSL_NO_SCTP -const BIO_METHOD *BIO_s_datagram_sctp(void); -BIO *BIO_new_dgram_sctp(int fd, int close_flag); -int BIO_dgram_is_sctp(BIO *bio); -int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void *context, - void *buf), - void *context); -int BIO_dgram_sctp_wait_for_dry(BIO *b); -int BIO_dgram_sctp_msg_waiting(BIO *b); -# endif -# endif - -# ifndef OPENSSL_NO_SOCK -int BIO_sock_should_retry(int i); -int BIO_sock_non_fatal_error(int error); -# endif - -int BIO_fd_should_retry(int i); -int BIO_fd_non_fatal_error(int error); -int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); -int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); -# ifndef OPENSSL_NO_STDIO -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); -# endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, - int datalen); - -# ifndef OPENSSL_NO_SOCK -BIO_ADDR *BIO_ADDR_new(void); -int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, - const void *where, size_t wherelen, unsigned short port); -void BIO_ADDR_free(BIO_ADDR *); -void BIO_ADDR_clear(BIO_ADDR *ap); -int BIO_ADDR_family(const BIO_ADDR *ap); -int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); -unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); -char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); -char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); -char *BIO_ADDR_path_string(const BIO_ADDR *ap); - -const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); -int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); -int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); -int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); -const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); -void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); - -enum BIO_hostserv_priorities { - BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV -}; -int BIO_parse_hostserv(const char *hostserv, char **host, char **service, - enum BIO_hostserv_priorities hostserv_prio); -enum BIO_lookup_type { - BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER -}; -int BIO_lookup(const char *host, const char *service, - enum BIO_lookup_type lookup_type, - int family, int socktype, BIO_ADDRINFO **res); -int BIO_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); -# if OPENSSL_API_COMPAT < 0x10100000L -# define BIO_sock_cleanup() while(0) continue -# endif -int BIO_set_tcp_ndelay(int sock, int turn_on); - -DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) -DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) -DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) -DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) -DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) - -union BIO_sock_info_u { - BIO_ADDR *addr; -}; -enum BIO_sock_info_type { - BIO_SOCK_INFO_ADDRESS -}; -int BIO_sock_info(int sock, - enum BIO_sock_info_type type, union BIO_sock_info_u *info); - -# define BIO_SOCK_REUSEADDR 0x01 -# define BIO_SOCK_V6_ONLY 0x02 -# define BIO_SOCK_KEEPALIVE 0x04 -# define BIO_SOCK_NONBLOCK 0x08 -# define BIO_SOCK_NODELAY 0x10 - -int BIO_socket(int domain, int socktype, int protocol, int options); -int BIO_connect(int sock, const BIO_ADDR *addr, int options); -int BIO_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); -/* - * 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(__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_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); -int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, - size_t *); -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_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); -int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_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_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); -int BIO_meth_set_puts(BIO_METHOD *biom, - int (*puts) (BIO *, const char *)); -int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); -int BIO_meth_set_gets(BIO_METHOD *biom, - int (*gets) (BIO *, char *, int)); -long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); -int BIO_meth_set_ctrl(BIO_METHOD *biom, - long (*ctrl) (BIO *, int, long, void *)); -int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); -int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); -int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); -int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); -long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) - (BIO *, int, BIO_info_cb *); -int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, - long (*callback_ctrl) (BIO *, int, - BIO_info_cb *)); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/bioerr.h b/openssl/include/openssl/bioerr.h deleted file mode 100644 index 9132ee6..0000000 --- a/openssl/include/openssl/bioerr.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BIOERR_H -# define HEADER_BIOERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BIO_strings(void); - -/* - * BIO function codes. - */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_ADDRINFO_WRAP 148 -# define BIO_F_ADDR_STRINGS 134 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_ACCEPT_EX 137 -# define BIO_F_BIO_ACCEPT_NEW 152 -# define BIO_F_BIO_ADDR_NEW 144 -# define BIO_F_BIO_BIND 147 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CONNECT 138 -# define BIO_F_BIO_CONNECT_NEW 153 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_NEW_INDEX 102 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_LISTEN 139 -# define BIO_F_BIO_LOOKUP 135 -# define BIO_F_BIO_LOOKUP_EX 143 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_METH_NEW 146 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_DGRAM_SCTP 145 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PARSE_HOSTSERV 136 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_READ_EX 105 -# define BIO_F_BIO_READ_INTERN 120 -# define BIO_F_BIO_SOCKET 140 -# define BIO_F_BIO_SOCKET_NBIO 142 -# define BIO_F_BIO_SOCK_INFO 141 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BIO_WRITE_EX 119 -# define BIO_F_BIO_WRITE_INTERN 128 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_NEW 149 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_DOAPR_OUTCH 150 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_LINEBUFFER_NEW 151 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_NBIOF_NEW 154 -# define BIO_F_SLG_WRITE 155 -# define BIO_F_SSL_NEW 118 - -/* - * 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_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_LOOKUP_RETURNED_NOTHING 142 -# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 -# define BIO_R_NBIO_CONNECT_ERROR 110 -# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 -# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 -# define BIO_R_NO_PORT_DEFINED 113 -# define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 -# define BIO_R_UNABLE_TO_BIND_SOCKET 117 -# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 -# define BIO_R_UNABLE_TO_KEEPALIVE 137 -# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 -# define BIO_R_UNABLE_TO_NODELAY 138 -# define BIO_R_UNABLE_TO_REUSEADDR 139 -# define BIO_R_UNAVAILABLE_IP_FAMILY 145 -# define BIO_R_UNINITIALIZED 120 -# define BIO_R_UNKNOWN_INFO_TYPE 140 -# define BIO_R_UNSUPPORTED_IP_FAMILY 146 -# define BIO_R_UNSUPPORTED_METHOD 121 -# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 -# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 -# define BIO_R_WSASTARTUP 122 - -#endif diff --git a/openssl/include/openssl/blowfish.h b/openssl/include/openssl/blowfish.h deleted file mode 100644 index e65dbea..0000000 --- a/openssl/include/openssl/blowfish.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H - -# include - -# ifndef OPENSSL_NO_BF -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! BF_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define BF_LONG unsigned int - -# define BF_ROUNDS 16 -# define BF_BLOCK 8 - -typedef struct bf_key_st { - BF_LONG P[BF_ROUNDS + 2]; - BF_LONG S[4 * 256]; -} BF_KEY; - -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/bn.h b/openssl/include/openssl/bn.h deleted file mode 100644 index 7f28e95..0000000 --- a/openssl/include/openssl/bn.h +++ /dev/null @@ -1,539 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BN_H -# define HEADER_BN_H - -# 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 - -# if OPENSSL_API_COMPAT < 0x00908000L -/* deprecated name for the flag */ -# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME -# define BN_FLG_FREE 0x8000 /* used for debugging */ -# endif - -void BN_set_flags(BIGNUM *b, int n); -int BN_get_flags(const BIGNUM *b, int n); - -/* Values for |top| in BN_rand() */ -#define BN_RAND_TOP_ANY -1 -#define BN_RAND_TOP_ONE 0 -#define BN_RAND_TOP_TWO 1 - -/* Values for |bottom| in BN_rand() */ -#define BN_RAND_BOTTOM_ANY 0 -#define BN_RAND_BOTTOM_ODD 1 - -/* - * get a clone of a BIGNUM with changed flags, for *temporary* use only (the - * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The - * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that - * has not been otherwise initialised or used. - */ -void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); - -/* Wrapper function to make using BN_GENCB easier */ -int BN_GENCB_call(BN_GENCB *cb, int a, int b); - -BN_GENCB *BN_GENCB_new(void); -void BN_GENCB_free(BN_GENCB *cb); - -/* Populate a BN_GENCB structure with an "old"-style callback */ -void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), - void *cb_arg); - -/* Populate a BN_GENCB structure with a "new"-style callback */ -void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), - void *cb_arg); - -void *BN_GENCB_get_arg(BN_GENCB *cb); - -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ - -/* - * 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) - -# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) - -int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_zero(const BIGNUM *a); -int BN_is_one(const BIGNUM *a); -int BN_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_odd(const BIGNUM *a); - -# define BN_one(a) (BN_set_word((a),1)) - -void BN_zero_ex(BIGNUM *a); - -# if OPENSSL_API_COMPAT >= 0x00908000L -# define BN_zero(a) BN_zero_ex(a) -# else -# define BN_zero(a) (BN_set_word((a),0)) -# endif - -const BIGNUM *BN_value_one(void); -char *BN_options(void); -BN_CTX *BN_CTX_new(void); -BN_CTX *BN_CTX_secure_new(void); -void BN_CTX_free(BN_CTX *c); -void BN_CTX_start(BN_CTX *ctx); -BIGNUM *BN_CTX_get(BN_CTX *ctx); -void BN_CTX_end(BN_CTX *ctx); -int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); -int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); -int BN_num_bits(const BIGNUM *a); -int BN_num_bits_word(BN_ULONG l); -int BN_security_bits(int L, int N); -BIGNUM *BN_new(void); -BIGNUM *BN_secure_new(void); -void BN_clear_free(BIGNUM *a); -BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); -void BN_swap(BIGNUM *a, BIGNUM *b); -BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2bin(const BIGNUM *a, unsigned char *to); -int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2mpi(const BIGNUM *a, unsigned char *to); -int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -/** BN_set_negative sets sign of a BIGNUM - * \param b pointer to the BIGNUM object - * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise - */ -void BN_set_negative(BIGNUM *b, int n); -/** BN_is_negative returns 1 if the BIGNUM is negative - * \param 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_mask_bits(BIGNUM *a, int n); -# ifndef OPENSSL_NO_STDIO -int BN_print_fp(FILE *fp, const BIGNUM *a); -# endif -int BN_print(BIO *bio, const BIGNUM *a); -int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); -int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_rshift1(BIGNUM *r, const BIGNUM *a); -void BN_clear(BIGNUM *a); -BIGNUM *BN_dup(const BIGNUM *a); -int BN_ucmp(const BIGNUM *a, const BIGNUM *b); -int BN_set_bit(BIGNUM *a, int n); -int BN_clear_bit(BIGNUM *a, int n); -char *BN_bn2hex(const BIGNUM *a); -char *BN_bn2dec(const BIGNUM *a); -int BN_hex2bn(BIGNUM **a, const char *str); -int BN_dec2bn(BIGNUM **a, const char *str); -int BN_asc2bn(BIGNUM **a, const char *str); -int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns - * -2 for - * error */ -BIGNUM *BN_mod_inverse(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); -BIGNUM *BN_mod_sqrt(BIGNUM *ret, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); - -void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); - -/* Deprecated versions */ -DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, - const BIGNUM *rem, - void (*callback) (int, int, - void *), - void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg, - int do_trial_division)) - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); -int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); -int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, - int do_trial_division, BN_GENCB *cb); - -int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); - -int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, - const BIGNUM *Xp, const BIGNUM *Xp1, - const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, - BN_GENCB *cb); -int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, - BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, - BN_CTX *ctx, BN_GENCB *cb); - -BN_MONT_CTX *BN_MONT_CTX_new(void); -int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - BN_MONT_CTX *mont, BN_CTX *ctx); -int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -void BN_MONT_CTX_free(BN_MONT_CTX *mont); -int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); -BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); -BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock, - const BIGNUM *mod, BN_CTX *ctx); - -/* BN_BLINDING flags */ -# define BN_BLINDING_NO_UPDATE 0x00000001 -# define BN_BLINDING_NO_RECREATE 0x00000002 - -BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); -void BN_BLINDING_free(BN_BLINDING *b); -int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); -int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, - BN_CTX *); - -int BN_BLINDING_is_current_thread(BN_BLINDING *b); -void BN_BLINDING_set_current_thread(BN_BLINDING *b); -int BN_BLINDING_lock(BN_BLINDING *b); -int BN_BLINDING_unlock(BN_BLINDING *b); - -unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); -void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); -BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, - const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx), - BN_MONT_CTX *m_ctx); - -DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) -DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 - * mont */ - -BN_RECP_CTX *BN_RECP_CTX_new(void); -void BN_RECP_CTX_free(BN_RECP_CTX *recp); -int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); -int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, - BN_RECP_CTX *recp, BN_CTX *ctx); -int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, - BN_RECP_CTX *recp, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M - -/* - * Functions for arithmetic over binary polynomials represented by BIGNUMs. - * The BIGNUM::neg property of BIGNUMs representing binary polynomials is - * ignored. Note that input arguments are not const so that their bit arrays - * can be expanded to the appropriate size if needed. - */ - -/* - * r = a + b - */ -int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) -/* - * r=a mod p - */ -int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) -/*- - * Some functions allow for representation of the irreducible polynomials - * as an unsigned int[], say p. The irreducible f(t) is then of the form: - * t^p[0] + t^p[1] + ... + t^p[k] - * where m = p[0] > p[1] > ... > p[k] = 0. - */ -/* r = a mod p */ -int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], - BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], - BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); -int BN_GF2m_arr2poly(const int p[], BIGNUM *a); - -# endif - -/* - * faster mod functions for the 'NIST primes' 0 <= a < p^2 - */ -int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -const BIGNUM *BN_get0_nist_prime_192(void); -const BIGNUM *BN_get0_nist_prime_224(void); -const BIGNUM *BN_get0_nist_prime_256(void); -const BIGNUM *BN_get0_nist_prime_384(void); -const BIGNUM *BN_get0_nist_prime_521(void); - -int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, - const BIGNUM *field, BN_CTX *ctx); - -int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, - const BIGNUM *priv, const unsigned char *message, - size_t message_len, BN_CTX *ctx); - -/* Primes from RFC 2409 */ -BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); -BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); - -/* Primes from RFC 3526 */ -BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 -# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 -# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 -# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 -# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 -# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 -# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 -# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 -# endif - -int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/bnerr.h b/openssl/include/openssl/bnerr.h deleted file mode 100644 index b58ef4d..0000000 --- a/openssl/include/openssl/bnerr.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BNERR_H -# define HEADER_BNERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BN_strings(void); - -/* - * BN function codes. - */ -# define BN_F_BNRAND 127 -# define BN_F_BNRAND_RANGE 138 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_COMPUTE_WNAF 142 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GENCB_NEW 143 -# define BN_F_BN_GENERATE_DSA_NONCE 140 -# define BN_F_BN_GENERATE_PRIME_EX 141 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MONT_CTX_NEW 149 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_POOL_GET 147 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RECP_CTX_NEW 150 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_SET_WORDS 144 -# define BN_F_BN_STACK_PUSH 148 -# define BN_F_BN_USUB 115 - -/* - * 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_SOLUTION 116 -# define BN_R_PRIVATE_KEY_TOO_LARGE 117 -# define BN_R_P_IS_NOT_PRIME 112 -# define BN_R_TOO_MANY_ITERATIONS 113 -# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 - -#endif diff --git a/openssl/include/openssl/buffer.h b/openssl/include/openssl/buffer.h deleted file mode 100644 index dd23b2e..0000000 --- a/openssl/include/openssl/buffer.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H - -# include -# ifndef HEADER_CRYPTO_H -# include -# endif -# include - - -#ifdef __cplusplus -extern "C" { -#endif - -# include -# include - -/* - * These names are outdated as of OpenSSL 1.1; a future release - * will move them to be deprecated. - */ -# define BUF_strdup(s) OPENSSL_strdup(s) -# define BUF_strndup(s, size) OPENSSL_strndup(s, size) -# define BUF_memdup(data, size) OPENSSL_memdup(data, size) -# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) -# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) -# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) - -struct buf_mem_st { - size_t length; /* current number of bytes */ - char *data; - size_t max; /* size of buffer */ - unsigned long flags; -}; - -# define BUF_MEM_FLAG_SECURE 0x01 - -BUF_MEM *BUF_MEM_new(void); -BUF_MEM *BUF_MEM_new_ex(unsigned long flags); -void BUF_MEM_free(BUF_MEM *a); -size_t BUF_MEM_grow(BUF_MEM *str, size_t len); -size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); -void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/buffererr.h b/openssl/include/openssl/buffererr.h deleted file mode 100644 index ded623a..0000000 --- a/openssl/include/openssl/buffererr.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_BUFERR_H -# define HEADER_BUFERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BUF_strings(void); - -/* - * BUF function codes. - */ -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 - -/* - * BUF reason codes. - */ - -#endif diff --git a/openssl/include/openssl/camellia.h b/openssl/include/openssl/camellia.h deleted file mode 100644 index 0932e32..0000000 --- a/openssl/include/openssl/camellia.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H - -# include - -# ifndef OPENSSL_NO_CAMELLIA -# include -#ifdef __cplusplus -extern "C" { -#endif - -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ - -/* This should be a hidden type, but EVP requires that the size be known */ - -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) - -typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match - * with WORD */ - -struct camellia_key_st { - union { - double d; /* ensures 64-bit align */ - KEY_TABLE_TYPE rd_key; - } u; - int grand_rounds; -}; -typedef struct camellia_key_st CAMELLIA_KEY; - -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); -void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char ivec[CAMELLIA_BLOCK_SIZE], - unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], - unsigned int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/cast.h b/openssl/include/openssl/cast.h deleted file mode 100644 index a94bb25..0000000 --- a/openssl/include/openssl/cast.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CAST_H -# define HEADER_CAST_H - -# include - -# ifndef OPENSSL_NO_CAST -# ifdef __cplusplus -extern "C" { -# endif - -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - -# define CAST_BLOCK 8 -# define CAST_KEY_LENGTH 16 - -typedef struct cast_key_st { - CAST_LONG data[32]; - int short_key; /* Use reduced rounds for short key */ -} CAST_KEY; - -void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); -void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAST_KEY *key, int enc); -void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); -void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *ks, unsigned char *iv, - int enc); -void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const CAST_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/cmac.h b/openssl/include/openssl/cmac.h deleted file mode 100644 index 8bcf69c..0000000 --- a/openssl/include/openssl/cmac.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H - -# ifndef OPENSSL_NO_CMAC - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -/* Opaque */ -typedef struct CMAC_CTX_st CMAC_CTX; - -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus -} -#endif - -# endif -#endif diff --git a/openssl/include/openssl/cms.h b/openssl/include/openssl/cms.h deleted file mode 100644 index b317148..0000000 --- a/openssl/include/openssl/cms.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CMS_H -# define HEADER_CMS_H - -# include - -# ifndef OPENSSL_NO_CMS -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_CertificateChoices CMS_CertificateChoices; -typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; -typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; -typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; -typedef struct CMS_Receipt_st CMS_Receipt; -typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; -typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; - -DEFINE_STACK_OF(CMS_SignerInfo) -DEFINE_STACK_OF(CMS_RecipientEncryptedKey) -DEFINE_STACK_OF(CMS_RecipientInfo) -DEFINE_STACK_OF(CMS_RevocationInfoChoice) -DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) -DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) -DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) - -# define CMS_SIGNERINFO_ISSUER_SERIAL 0 -# define CMS_SIGNERINFO_KEYIDENTIFIER 1 - -# define CMS_RECIPINFO_NONE -1 -# define CMS_RECIPINFO_TRANS 0 -# define CMS_RECIPINFO_AGREE 1 -# define CMS_RECIPINFO_KEK 2 -# define CMS_RECIPINFO_PASS 3 -# define CMS_RECIPINFO_OTHER 4 - -/* S/MIME related flags */ - -# define CMS_TEXT 0x1 -# define CMS_NOCERTS 0x2 -# define CMS_NO_CONTENT_VERIFY 0x4 -# define CMS_NO_ATTR_VERIFY 0x8 -# define CMS_NOSIGS \ - (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) -# define CMS_NOINTERN 0x10 -# define CMS_NO_SIGNER_CERT_VERIFY 0x20 -# define CMS_NOVERIFY 0x20 -# define CMS_DETACHED 0x40 -# define CMS_BINARY 0x80 -# define CMS_NOATTR 0x100 -# define CMS_NOSMIMECAP 0x200 -# define CMS_NOOLDMIMETYPE 0x400 -# define CMS_CRLFEOL 0x800 -# define CMS_STREAM 0x1000 -# define CMS_NOCRL 0x2000 -# define CMS_PARTIAL 0x4000 -# define CMS_REUSE_DIGEST 0x8000 -# define CMS_USE_KEYID 0x10000 -# define CMS_DEBUG_DECRYPT 0x20000 -# define CMS_KEY_PARAM 0x40000 -# define CMS_ASCIICRLF 0x80000 - -const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); - -BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); -int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); - -ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); -int CMS_is_detached(CMS_ContentInfo *cms); -int CMS_set_detached(CMS_ContentInfo *cms, int detached); - -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) -# endif -int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); -CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); -int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); - -BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); -int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); -int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, - int flags); -CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); -int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); - -int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, - unsigned int flags); - -CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, BIO *data, - unsigned int flags); - -CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, - X509 *signcert, EVP_PKEY *pkey, - STACK_OF(X509) *certs, unsigned int flags); - -int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); -CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); - -int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, - unsigned int flags); - -int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, - const unsigned char *key, size_t keylen, - BIO *dcont, BIO *out, unsigned int flags); - -CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, - const unsigned char *key, - size_t keylen, unsigned int flags); - -int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, - const unsigned char *key, size_t keylen); - -int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); - -int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, - STACK_OF(X509) *certs, - X509_STORE *store, unsigned int flags); - -STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); - -CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, - const EVP_CIPHER *cipher, unsigned int flags); - -int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, - BIO *dcont, BIO *out, unsigned int flags); - -int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); -int CMS_decrypt_set1_key(CMS_ContentInfo *cms, - unsigned char *key, size_t keylen, - const unsigned char *id, size_t idlen); -int CMS_decrypt_set1_password(CMS_ContentInfo *cms, - unsigned char *pass, ossl_ssize_t passlen); - -STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); -int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); -EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); -CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); -CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, - X509 *recip, unsigned int flags); -int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); -int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); -int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, - EVP_PKEY **pk, X509 **recip, - X509_ALGOR **palg); -int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, - unsigned char *key, size_t keylen, - unsigned char *id, size_t idlen, - ASN1_GENERALIZEDTIME *date, - ASN1_OBJECT *otherTypeId, - ASN1_TYPE *otherType); - -int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pid, - ASN1_GENERALIZEDTIME **pdate, - ASN1_OBJECT **potherid, - ASN1_TYPE **pothertype); - -int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, - unsigned char *key, size_t keylen); - -int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, - const unsigned char *id, size_t idlen); - -int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, - unsigned char *pass, - ossl_ssize_t passlen); - -CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, - int iter, int wrap_nid, - int pbe_nid, - unsigned char *pass, - ossl_ssize_t passlen, - const EVP_CIPHER *kekciph); - -int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); - -int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, - unsigned int flags); -CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); - -int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); -const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); - -CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); -int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); -int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); -STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); - -CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); -int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); -int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); -STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); - -int CMS_SignedData_init(CMS_ContentInfo *cms); -CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, - X509 *signer, EVP_PKEY *pk, const EVP_MD *md, - unsigned int flags); -EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); -EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); -STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); - -void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); -int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); -int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, - unsigned int flags); -void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, - X509 **signer, X509_ALGOR **pdig, - X509_ALGOR **psig); -ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); -int CMS_SignerInfo_sign(CMS_SignerInfo *si); -int CMS_SignerInfo_verify(CMS_SignerInfo *si); -int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); - -int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); -int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, - int algnid, int keysize); -int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); - -int CMS_signed_get_attr_count(const CMS_SignerInfo *si); -int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, - int lastpos, int type); - -int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); -int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, - int lastpos); -int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int lastpos); -X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); -X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); -int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); -int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, - const ASN1_OBJECT *obj, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, - int nid, int type, - const void *bytes, int len); -int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, - const char *attrname, int type, - const void *bytes, int len); -void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, - int lastpos, int type); - -int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); -int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); -void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, - ASN1_STRING **pcid, - int *pallorfirst, - STACK_OF(GENERAL_NAMES) **plist, - STACK_OF(GENERAL_NAMES) **prto); -int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, - X509_ALGOR **palg, - ASN1_OCTET_STRING **pukm); -STACK_OF(CMS_RecipientEncryptedKey) -*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); - -int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, - X509_ALGOR **pubalg, - ASN1_BIT_STRING **pubkey, - ASN1_OCTET_STRING **keyid, - X509_NAME **issuer, - ASN1_INTEGER **sno); - -int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); - -int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, - ASN1_OCTET_STRING **keyid, - ASN1_GENERALIZEDTIME **tm, - CMS_OtherKeyAttribute **other, - X509_NAME **issuer, ASN1_INTEGER **sno); -int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, - X509 *cert); -int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); -EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); -int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, - CMS_RecipientInfo *ri, - CMS_RecipientEncryptedKey *rek); - -int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, - ASN1_OCTET_STRING *ukm, int keylen); - -/* 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/openssl/include/openssl/cmserr.h b/openssl/include/openssl/cmserr.h deleted file mode 100644 index 1aae9d6..0000000 --- a/openssl/include/openssl/cmserr.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CMSERR_H -# define HEADER_CMSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_CMS - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CMS_strings(void); - -/* - * CMS function codes. - */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 -# define CMS_F_KEK_UNWRAP_KEY 180 - -/* - * 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_INITIALISATION_ERROR 101 -# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 -# define CMS_R_CMS_DATAFINAL_ERROR 103 -# define CMS_R_CMS_LIB 104 -# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 -# define CMS_R_CONTENT_NOT_FOUND 105 -# define CMS_R_CONTENT_TYPE_MISMATCH 171 -# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 -# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 -# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 -# define CMS_R_CONTENT_VERIFY_ERROR 109 -# define CMS_R_CTRL_ERROR 110 -# define CMS_R_CTRL_FAILURE 111 -# define CMS_R_DECRYPT_ERROR 112 -# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 -# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 -# define CMS_R_ERROR_SETTING_KEY 115 -# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 -# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 -# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 -# define CMS_R_INVALID_KEY_LENGTH 118 -# define CMS_R_MD_BIO_INIT_ERROR 119 -# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 -# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 -# define CMS_R_MSGSIGDIGEST_ERROR 172 -# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 -# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 -# define CMS_R_NEED_ONE_SIGNER 164 -# define CMS_R_NOT_A_SIGNED_RECEIPT 165 -# define CMS_R_NOT_ENCRYPTED_DATA 122 -# define CMS_R_NOT_KEK 123 -# define CMS_R_NOT_KEY_AGREEMENT 181 -# define CMS_R_NOT_KEY_TRANSPORT 124 -# define CMS_R_NOT_PWRI 177 -# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 -# define CMS_R_NO_CIPHER 126 -# define CMS_R_NO_CONTENT 127 -# define CMS_R_NO_CONTENT_TYPE 173 -# define CMS_R_NO_DEFAULT_DIGEST 128 -# define CMS_R_NO_DIGEST_SET 129 -# define CMS_R_NO_KEY 130 -# define CMS_R_NO_KEY_OR_CERT 174 -# define CMS_R_NO_MATCHING_DIGEST 131 -# define CMS_R_NO_MATCHING_RECIPIENT 132 -# define CMS_R_NO_MATCHING_SIGNATURE 166 -# define CMS_R_NO_MSGSIGDIGEST 167 -# define CMS_R_NO_PASSWORD 178 -# define CMS_R_NO_PRIVATE_KEY 133 -# define CMS_R_NO_PUBLIC_KEY 134 -# define CMS_R_NO_RECEIPT_REQUEST 168 -# define CMS_R_NO_SIGNERS 135 -# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 -# define CMS_R_RECEIPT_DECODE_ERROR 169 -# define CMS_R_RECIPIENT_ERROR 137 -# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 -# define CMS_R_SIGNFINAL_ERROR 139 -# define CMS_R_SMIME_TEXT_ERROR 140 -# define CMS_R_STORE_INIT_ERROR 141 -# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 -# define CMS_R_TYPE_NOT_DATA 143 -# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 -# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 -# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 -# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 -# define CMS_R_UNKNOWN_CIPHER 148 -# define CMS_R_UNKNOWN_DIGEST_ALGORITHM 149 -# define CMS_R_UNKNOWN_ID 150 -# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 -# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 -# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 -# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 -# define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 -# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 -# 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/openssl/include/openssl/comp.h b/openssl/include/openssl/comp.h deleted file mode 100644 index 1a14a21..0000000 --- a/openssl/include/openssl/comp.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_COMP_H -# define HEADER_COMP_H - -# include - -# ifndef OPENSSL_NO_COMP -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - - - -COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); -const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); -int COMP_CTX_get_type(const COMP_CTX* comp); -int COMP_get_type(const COMP_METHOD *meth); -const char *COMP_get_name(const COMP_METHOD *meth); -void COMP_CTX_free(COMP_CTX *ctx); - -int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); - -COMP_METHOD *COMP_zlib(void); - -#if OPENSSL_API_COMPAT < 0x10100000L -#define COMP_zlib_cleanup() while(0) continue -#endif - -# ifdef HEADER_BIO_H -# ifdef ZLIB -const BIO_METHOD *BIO_f_zlib(void); -# endif -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/openssl/include/openssl/comperr.h b/openssl/include/openssl/comperr.h deleted file mode 100644 index 22d2dc4..0000000 --- a/openssl/include/openssl/comperr.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_COMPERR_H -# define HEADER_COMPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_COMP - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_COMP_strings(void); - -/* - * COMP function codes. - */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 -# define COMP_F_COMP_CTX_NEW 103 - -/* - * COMP reason codes. - */ -# define COMP_R_ZLIB_DEFLATE_ERROR 99 -# define COMP_R_ZLIB_INFLATE_ERROR 100 -# define COMP_R_ZLIB_NOT_SUPPORTED 101 - -# endif -#endif diff --git a/openssl/include/openssl/conf.h b/openssl/include/openssl/conf.h deleted file mode 100644 index 4bb4ac8..0000000 --- a/openssl/include/openssl/conf.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CONF_H -# define HEADER_CONF_H - -# include -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - char *section; - char *name; - char *value; -} CONF_VALUE; - -DEFINE_STACK_OF(CONF_VALUE) -DEFINE_LHASH_OF(CONF_VALUE); - -struct conf_st; -struct conf_method_st; -typedef struct conf_method_st CONF_METHOD; - -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; - -/* Module definitions */ - -typedef struct conf_imodule_st CONF_IMODULE; -typedef struct conf_module_st CONF_MODULE; - -DEFINE_STACK_OF(CONF_MODULE) -DEFINE_STACK_OF(CONF_IMODULE) - -/* DSO module function typedefs */ -typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); -typedef void conf_finish_func (CONF_IMODULE *md); - -# define CONF_MFLAGS_IGNORE_ERRORS 0x1 -# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 -# define CONF_MFLAGS_SILENT 0x4 -# define CONF_MFLAGS_NO_DSO 0x8 -# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 -# define CONF_MFLAGS_DEFAULT_SECTION 0x20 - -int CONF_set_default_method(CONF_METHOD *meth); -void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); -LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, - long *eline); -# ifndef OPENSSL_NO_STDIO -LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, - long *eline); -# endif -LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, - long *eline); -STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, - const char *section); -char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, - const char *name); -void CONF_free(LHASH_OF(CONF_VALUE) *conf); -#ifndef OPENSSL_NO_STDIO -int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); -#endif -int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); - -DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) - -#if OPENSSL_API_COMPAT < 0x10100000L -# define OPENSSL_no_config() \ - OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) -#endif - -/* - * New conf code. The semantics are different from the functions above. If - * that wasn't the case, the above functions would have been replaced - */ - -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - -CONF *NCONF_new(CONF_METHOD *meth); -CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); -void NCONF_free(CONF *conf); -void NCONF_free_data(CONF *conf); - -int NCONF_load(CONF *conf, const char *file, long *eline); -# ifndef OPENSSL_NO_STDIO -int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); -# endif -int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); -STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, - const char *section); -char *NCONF_get_string(const CONF *conf, const char *group, const char *name); -int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, - long *result); -#ifndef OPENSSL_NO_STDIO -int NCONF_dump_fp(const CONF *conf, FILE *out); -#endif -int NCONF_dump_bio(const CONF *conf, BIO *out); - -#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) - -/* Module functions */ - -int CONF_modules_load(const CONF *cnf, const char *appname, - unsigned long flags); -int CONF_modules_load_file(const char *filename, const char *appname, - unsigned long flags); -void CONF_modules_unload(int all); -void CONF_modules_finish(void); -#if OPENSSL_API_COMPAT < 0x10100000L -# define CONF_modules_free() while(0) continue -#endif -int CONF_module_add(const char *name, conf_init_func *ifunc, - conf_finish_func *ffunc); - -const char *CONF_imodule_get_name(const CONF_IMODULE *md); -const char *CONF_imodule_get_value(const CONF_IMODULE *md); -void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); -void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); -CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); -unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); -void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); -void *CONF_module_get_usr_data(CONF_MODULE *pmod); -void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); - -char *CONF_get1_default_config_file(void); - -int CONF_parse_list(const char *list, int sep, int nospc, - int (*list_cb) (const char *elem, int len, void *usr), - void *arg); - -void OPENSSL_load_builtin_modules(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/conf_api.h b/openssl/include/openssl/conf_api.h deleted file mode 100644 index 27df295..0000000 --- a/openssl/include/openssl/conf_api.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Up until OpenSSL 0.9.5a, this was new_section */ -CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was get_section */ -CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ -STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, - const char *section); - -int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); -char *_CONF_get_string(const CONF *conf, const char *section, - const char *name); -long _CONF_get_number(const CONF *conf, const char *section, - const char *name); - -int _CONF_new_data(CONF *conf); -void _CONF_free_data(CONF *conf); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/conferr.h b/openssl/include/openssl/conferr.h deleted file mode 100644 index 2954eeb..0000000 --- a/openssl/include/openssl/conferr.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CONFERR_H -# define HEADER_CONFERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CONF_strings(void); - -/* - * CONF function codes. - */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_GET_NEXT_FILE 107 -# define CONF_F_MODULE_ADD 122 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_PROCESS_INCLUDE 116 -# define CONF_F_SSL_MODULE_INIT 123 -# define CONF_F_STR_COPY 101 - -/* - * CONF reason codes. - */ -# define CONF_R_ERROR_LOADING_DSO 110 -# define CONF_R_LIST_CANNOT_BE_NULL 115 -# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 -# define CONF_R_MISSING_EQUAL_SIGN 101 -# define CONF_R_MISSING_INIT_FUNCTION 112 -# define CONF_R_MODULE_INITIALIZATION_ERROR 109 -# define CONF_R_NO_CLOSE_BRACE 102 -# define CONF_R_NO_CONF 105 -# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 -# define CONF_R_NO_SECTION 107 -# define CONF_R_NO_SUCH_FILE 114 -# define CONF_R_NO_VALUE 108 -# define CONF_R_NUMBER_TOO_LARGE 121 -# define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 -# 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/openssl/include/openssl/crypto.h b/openssl/include/openssl/crypto.h deleted file mode 100644 index be52a59..0000000 --- a/openssl/include/openssl/crypto.h +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H - -# include -# include - -# include - -# ifndef OPENSSL_NO_STDIO -# include -# endif - -# include -# include -# include -# include -# include - -# ifdef CHARSET_EBCDIC -# include -# endif - -/* - * Resolve problems on some operating systems with symbol names that clash - * one way or another - */ -# include - -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSLeay OpenSSL_version_num -# define SSLeay_version OpenSSL_version -# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER -# define SSLEAY_VERSION OPENSSL_VERSION -# define SSLEAY_CFLAGS OPENSSL_CFLAGS -# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON -# define SSLEAY_PLATFORM OPENSSL_PLATFORM -# define SSLEAY_DIR OPENSSL_DIR - -/* - * Old type for allocating dynamic locks. No longer used. Use the new thread - * API instead. - */ -typedef struct { - int dummy; -} CRYPTO_dynlock; - -# endif /* OPENSSL_API_COMPAT */ - -typedef void CRYPTO_RWLOCK; - -CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); -int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); -void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); - -int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); - -/* - * The following can be used to detect memory leaks in the library. If - * used, it turns on malloc checking - */ -# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ -# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ - -struct crypto_ex_data_st { - STACK_OF(void) *sk; -}; -DEFINE_STACK_OF(void) - -/* - * Per class, we have a STACK of function pointers. - */ -# define CRYPTO_EX_INDEX_SSL 0 -# define CRYPTO_EX_INDEX_SSL_CTX 1 -# define CRYPTO_EX_INDEX_SSL_SESSION 2 -# define CRYPTO_EX_INDEX_X509 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_DH 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_EC_KEY 8 -# define CRYPTO_EX_INDEX_RSA 9 -# define CRYPTO_EX_INDEX_ENGINE 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_BIO 12 -# define CRYPTO_EX_INDEX_APP 13 -# define CRYPTO_EX_INDEX_UI_METHOD 14 -# define CRYPTO_EX_INDEX_DRBG 15 -# define CRYPTO_EX_INDEX__COUNT 16 - -/* No longer needed, so this is a no-op */ -#define OPENSSL_malloc_init() while(0) continue - -int CRYPTO_mem_ctrl(int mode); - -# define OPENSSL_malloc(num) \ - CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_zalloc(num) \ - CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_realloc(addr, num) \ - CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_clear_realloc(addr, old_num, num) \ - CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_clear_free(addr, num) \ - CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_free(addr) \ - CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_memdup(str, s) \ - CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_strdup(str) \ - CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_strndup(str, n) \ - CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_malloc(num) \ - CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_zalloc(num) \ - CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_free(addr) \ - CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_secure_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); -char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); -unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); -int OPENSSL_hexchar2int(unsigned char c); - -# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) - -unsigned long OpenSSL_version_num(void); -const char *OpenSSL_version(int type); -# define OPENSSL_VERSION 0 -# define OPENSSL_CFLAGS 1 -# define OPENSSL_BUILT_ON 2 -# define OPENSSL_PLATFORM 3 -# define OPENSSL_DIR 4 -# define OPENSSL_ENGINES_DIR 5 - -int OPENSSL_issetugid(void); - -typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, - int idx, long argl, void *argp); -typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, - void *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); - -/* - * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular - * index (relative to the class type involved) - */ -int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); -void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); - -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * This function cleans up all "ex_data" state. It mustn't be called under - * potential race-conditions. - */ -# define CRYPTO_cleanup_all_ex_data() while(0) continue - -/* - * The old locking functions have been removed completely without compatibility - * macros. This is because the old functions either could not properly report - * errors, or the returned error values were not clearly documented. - * Replacing the locking functions with no-ops would cause race condition - * issues in the affected applications. It is far better for them to fail at - * compile time. - * On the other hand, the locking callbacks are no longer used. Consequently, - * the callback management functions can be safely replaced with no-op macros. - */ -# define CRYPTO_num_locks() (1) -# define CRYPTO_set_locking_callback(func) -# define CRYPTO_get_locking_callback() (NULL) -# define CRYPTO_set_add_lock_callback(func) -# define CRYPTO_get_add_lock_callback() (NULL) - -/* - * These defines where used in combination with the old locking callbacks, - * they are not called anymore, but old code that's not called might still - * use them. - */ -# define CRYPTO_LOCK 1 -# define CRYPTO_UNLOCK 2 -# define CRYPTO_READ 4 -# define CRYPTO_WRITE 8 - -/* This structure is no longer used */ -typedef struct crypto_threadid_st { - int dummy; -} CRYPTO_THREADID; -/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ -# define CRYPTO_THREADID_set_numeric(id, val) -# define CRYPTO_THREADID_set_pointer(id, ptr) -# define CRYPTO_THREADID_set_callback(threadid_func) (0) -# define CRYPTO_THREADID_get_callback() (NULL) -# define CRYPTO_THREADID_current(id) -# define CRYPTO_THREADID_cmp(a, b) (-1) -# define CRYPTO_THREADID_cpy(dest, src) -# define CRYPTO_THREADID_hash(id) (0UL) - -# if OPENSSL_API_COMPAT < 0x10000000L -# define CRYPTO_set_id_callback(func) -# define CRYPTO_get_id_callback() (NULL) -# define CRYPTO_thread_id() (0UL) -# endif /* OPENSSL_API_COMPAT < 0x10000000L */ - -# define CRYPTO_set_dynlock_create_callback(dyn_create_function) -# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) -# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) -# define CRYPTO_get_dynlock_create_callback() (NULL) -# define CRYPTO_get_dynlock_lock_callback() (NULL) -# define CRYPTO_get_dynlock_destroy_callback() (NULL) -# endif /* OPENSSL_API_COMPAT < 0x10100000L */ - -int CRYPTO_set_mem_functions( - void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, int), - void (*f) (void *, const char *, int)); -int CRYPTO_set_mem_debug(int flag); -void CRYPTO_get_mem_functions( - void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, int), - void (**f) (void *, const char *, int)); - -void *CRYPTO_malloc(size_t num, const char *file, int line); -void *CRYPTO_zalloc(size_t num, const char *file, int line); -void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); -void CRYPTO_free(void *ptr, const char *file, int line); -void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); -void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); -void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, - const char *file, int line); - -int CRYPTO_secure_malloc_init(size_t sz, int minsize); -int CRYPTO_secure_malloc_done(void); -void *CRYPTO_secure_malloc(size_t num, const char *file, int line); -void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); -void CRYPTO_secure_free(void *ptr, const char *file, int line); -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 -# define OPENSSL_mem_debug_push(info) \ - CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_mem_debug_pop() \ - CRYPTO_mem_debug_pop() -int CRYPTO_mem_debug_push(const char *info, const char *file, int line); -int CRYPTO_mem_debug_pop(void); -void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); - -/*- - * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) - * The flag argument has the following significance: - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place - */ -void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_free(void *addr, int flag, - const char *file, int line); - -int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -int CRYPTO_mem_leaks_fp(FILE *); -# endif -int CRYPTO_mem_leaks(BIO *bio); -# endif - -/* die if we have to */ -ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); -# if OPENSSL_API_COMPAT < 0x10100000L -# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) -# endif -# define OPENSSL_assert(e) \ - (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) - -int OPENSSL_isservice(void); - -int FIPS_mode(void); -int FIPS_mode_set(int r); - -void OPENSSL_init(void); -# ifdef OPENSSL_SYS_UNIX -void OPENSSL_fork_prepare(void); -void OPENSSL_fork_parent(void); -void OPENSSL_fork_child(void); -# 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 -/* OPENSSL_INIT_ZLIB 0x00010000L */ -# define OPENSSL_INIT_ATFORK 0x00020000L -/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ -# define OPENSSL_INIT_NO_ATEXIT 0x00080000L -/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ -/* Max OPENSSL_INIT flag value is 0x80000000 */ - -/* openssl and dasync not counted as builtin */ -# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ - (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ - | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ - OPENSSL_INIT_ENGINE_PADLOCK) - - -/* Library initialisation functions */ -void OPENSSL_cleanup(void); -int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); -int OPENSSL_atexit(void (*handler)(void)); -void OPENSSL_thread_stop(void); - -/* Low-level control of initialization */ -OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); -# ifndef OPENSSL_NO_STDIO -int OPENSSL_INIT_set_config_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 -# include -typedef pthread_once_t CRYPTO_ONCE; -typedef pthread_key_t CRYPTO_THREAD_LOCAL; -typedef pthread_t CRYPTO_THREAD_ID; - -# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT -# endif -# endif - -# if !defined(CRYPTO_ONCE_STATIC_INIT) -typedef unsigned int CRYPTO_ONCE; -typedef unsigned int CRYPTO_THREAD_LOCAL; -typedef unsigned int CRYPTO_THREAD_ID; -# define CRYPTO_ONCE_STATIC_INIT 0 -# endif - -int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); - -int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); -void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); -int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); -int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); - -CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); -int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/cryptoerr.h b/openssl/include/openssl/cryptoerr.h deleted file mode 100644 index eb78d40..0000000 --- a/openssl/include/openssl/cryptoerr.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CRYPTOERR_H -# define HEADER_CRYPTOERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CRYPTO_strings(void); - -/* - * CRYPTO function codes. - */ -# define CRYPTO_F_CMAC_CTX_NEW 120 -# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 -# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_MEMDUP 115 -# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 -# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 -# define CRYPTO_F_CRYPTO_OCB128_INIT 122 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_GET_AND_LOCK 113 -# define CRYPTO_F_OPENSSL_ATEXIT 114 -# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 -# define CRYPTO_F_OPENSSL_FOPEN 119 -# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 -# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 -# define CRYPTO_F_OPENSSL_LH_NEW 126 -# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 -# define CRYPTO_F_OPENSSL_SK_DUP 128 -# define CRYPTO_F_PKEY_HMAC_INIT 123 -# define CRYPTO_F_PKEY_POLY1305_INIT 124 -# define CRYPTO_F_PKEY_SIPHASH_INIT 125 -# define CRYPTO_F_SK_RESERVE 129 - -/* - * CRYPTO reason codes. - */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 -# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 -# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 - -#endif diff --git a/openssl/include/openssl/ct.h b/openssl/include/openssl/ct.h deleted file mode 100644 index e34c5c5..0000000 --- a/openssl/include/openssl/ct.h +++ /dev/null @@ -1,474 +0,0 @@ -/* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CT_H -# define HEADER_CT_H - -# include - -# ifndef OPENSSL_NO_CT -# include -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - - -/* Minimum RSA key size, from RFC6962 */ -# define SCT_MIN_RSA_BITS 2048 - -/* All hashes are SHA256 in v1 of Certificate Transparency */ -# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH - -typedef enum { - CT_LOG_ENTRY_TYPE_NOT_SET = -1, - CT_LOG_ENTRY_TYPE_X509 = 0, - CT_LOG_ENTRY_TYPE_PRECERT = 1 -} ct_log_entry_type_t; - -typedef enum { - SCT_VERSION_NOT_SET = -1, - SCT_VERSION_V1 = 0 -} sct_version_t; - -typedef enum { - SCT_SOURCE_UNKNOWN, - SCT_SOURCE_TLS_EXTENSION, - SCT_SOURCE_X509V3_EXTENSION, - SCT_SOURCE_OCSP_STAPLED_RESPONSE -} sct_source_t; - -typedef enum { - SCT_VALIDATION_STATUS_NOT_SET, - SCT_VALIDATION_STATUS_UNKNOWN_LOG, - SCT_VALIDATION_STATUS_VALID, - SCT_VALIDATION_STATUS_INVALID, - SCT_VALIDATION_STATUS_UNVERIFIED, - SCT_VALIDATION_STATUS_UNKNOWN_VERSION -} sct_validation_status_t; - -DEFINE_STACK_OF(SCT) -DEFINE_STACK_OF(CTLOG) - -/****************************************** - * CT policy evaluation context functions * - ******************************************/ - -/* - * Creates a new, empty policy evaluation context. - * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished - * with the CT_POLICY_EVAL_CTX. - */ -CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); - -/* Deletes a policy evaluation context and anything it owns. */ -void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); - -/* Gets the peer certificate that the SCTs are for */ -X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); - -/* - * Sets the certificate associated with the received SCTs. - * Increments the reference count of cert. - * Returns 1 on success, 0 otherwise. - */ -int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); - -/* Gets the issuer of the aforementioned certificate */ -X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); - -/* - * Sets the issuer of the certificate associated with the received SCTs. - * Increments the reference count of issuer. - * Returns 1 on success, 0 otherwise. - */ -int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); - -/* Gets the CT logs that are trusted sources of SCTs */ -const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); - -/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ -void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, - CTLOG_STORE *log_store); - -/* - * 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 serialisation * - *********************************/ - -/* - * Serialize (to TLS format) a stack of SCTs and return the length. - * "a" must not be NULL. - * If "pp" is NULL, just return the length of what would have been serialized. - * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer - * for data that caller is responsible for freeing (only if function returns - * successfully). - * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring - * that "*pp" is large enough to accept all of the serialized data. - * Returns < 0 on error, >= 0 indicating bytes written (or would have been) - * on success. - */ -__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); - -/* - * Convert TLS format SCT list to a stack of SCTs. - * If "a" or "*a" is NULL, a new stack will be created that the caller is - * responsible for freeing (by calling SCT_LIST_free). - * "**pp" and "*pp" must not be NULL. - * Upon success, "*pp" will point to after the last bytes read, and a stack - * will be returned. - * Upon failure, a NULL pointer will be returned, and the position of "*pp" is - * not defined. - */ -STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, - size_t len); - -/* - * Serialize (to DER format) a stack of SCTs and return the length. - * "a" must not be NULL. - * If "pp" is NULL, just returns the length of what would have been serialized. - * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer - * for data that caller is responsible for freeing (only if function returns - * successfully). - * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring - * that "*pp" is large enough to accept all of the serialized data. - * Returns < 0 on error, >= 0 indicating bytes written (or would have been) - * on success. - */ -__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); - -/* - * Parses an SCT list in DER format and returns it. - * If "a" or "*a" is NULL, a new stack will be created that the caller is - * responsible for freeing (by calling SCT_LIST_free). - * "**pp" and "*pp" must not be NULL. - * Upon success, "*pp" will point to after the last bytes read, and a stack - * will be returned. - * Upon failure, a NULL pointer will be returned, and the position of "*pp" is - * not defined. - */ -STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, - long len); - -/* - * Serialize (to TLS format) an |sct| and write it to |out|. - * If |out| is null, no SCT will be output but the length will still be returned. - * If |out| points to a null pointer, a string will be allocated to hold the - * TLS-format SCT. It is the responsibility of the caller to free it. - * If |out| points to an allocated string, the TLS-format SCT will be written - * to it. - * The length of the SCT in TLS format will be returned. - */ -__owur int i2o_SCT(const SCT *sct, unsigned char **out); - -/* - * Parses an SCT in TLS format and returns it. - * If |psct| is not null, it will end up pointing to the parsed SCT. If it - * already points to a non-null pointer, the pointer will be free'd. - * |in| should be a pointer to a string containing the TLS-format SCT. - * |in| will be advanced to the end of the SCT if parsing succeeds. - * |len| should be the length of the SCT in |in|. - * Returns NULL if an error occurs. - * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' - * fields will be populated (with |in| and |len| respectively). - */ -SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); - -/******************** - * CT log functions * - ********************/ - -/* - * Creates a new CT log instance with the given |public_key| and |name|. - * Takes ownership of |public_key| but copies |name|. - * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. - * Should be deleted by the caller using CTLOG_free when no longer needed. - */ -CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); - -/* - * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER - * in |pkey_base64|. The |name| is a string to help users identify this log. - * Returns 1 on success, 0 on failure. - * Should be deleted by the caller using CTLOG_free when no longer needed. - */ -int CTLOG_new_from_base64(CTLOG ** ct_log, - const char *pkey_base64, const char *name); - -/* - * Deletes a CT log instance and its fields. - */ -void CTLOG_free(CTLOG *log); - -/* Gets the name of the CT log */ -const char *CTLOG_get0_name(const CTLOG *log); -/* Gets the ID of the CT log */ -void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, - size_t *log_id_len); -/* Gets the public key of the CT log */ -EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); - -/************************** - * CT log store functions * - **************************/ - -/* - * Creates a new CT log store. - * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. - */ -CTLOG_STORE *CTLOG_STORE_new(void); - -/* - * Deletes a CT log store and all of the CT log instances held within. - */ -void CTLOG_STORE_free(CTLOG_STORE *store); - -/* - * Finds a CT log in the store based on its log ID. - * Returns the CT log, or NULL if no match is found. - */ -const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, - const uint8_t *log_id, - size_t log_id_len); - -/* - * Loads a CT log list into a |store| from a |file|. - * Returns 1 if loading is successful, or 0 otherwise. - */ -__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); - -/* - * Loads the default CT log list into a |store|. - * 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/openssl/include/openssl/cterr.h b/openssl/include/openssl/cterr.h deleted file mode 100644 index f9a9d3d..0000000 --- a/openssl/include/openssl/cterr.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_CTERR_H -# define HEADER_CTERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_CT - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CT_strings(void); - -/* - * CT function codes. - */ -# define CT_F_CTLOG_NEW 117 -# define CT_F_CTLOG_NEW_FROM_BASE64 118 -# define CT_F_CTLOG_NEW_FROM_CONF 119 -# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 -# define CT_F_CTLOG_STORE_LOAD_FILE 123 -# define CT_F_CTLOG_STORE_LOAD_LOG 130 -# define CT_F_CTLOG_STORE_NEW 131 -# define CT_F_CT_BASE64_DECODE 124 -# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 -# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 -# define CT_F_I2O_SCT 107 -# define CT_F_I2O_SCT_LIST 108 -# define CT_F_I2O_SCT_SIGNATURE 109 -# define CT_F_O2I_SCT 110 -# define CT_F_O2I_SCT_LIST 111 -# define CT_F_O2I_SCT_SIGNATURE 112 -# define CT_F_SCT_CTX_NEW 126 -# define CT_F_SCT_CTX_VERIFY 128 -# define CT_F_SCT_NEW 100 -# define CT_F_SCT_NEW_FROM_BASE64 127 -# define CT_F_SCT_SET0_LOG_ID 101 -# define CT_F_SCT_SET1_EXTENSIONS 114 -# define CT_F_SCT_SET1_LOG_ID 115 -# define CT_F_SCT_SET1_SIGNATURE 116 -# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 -# define CT_F_SCT_SET_SIGNATURE_NID 103 -# define CT_F_SCT_SET_VERSION 104 - -/* - * 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/openssl/include/openssl/des.h b/openssl/include/openssl/des.h deleted file mode 100644 index 90a5ec9..0000000 --- a/openssl/include/openssl/des.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DES_H -# define HEADER_DES_H - -# include - -# ifndef OPENSSL_NO_DES -# ifdef __cplusplus -extern "C" { -# endif -# include - -typedef unsigned int DES_LONG; - -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif - -typedef unsigned char DES_cblock[8]; -typedef /* const */ unsigned char const_DES_cblock[8]; -/* - * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and - * const_DES_cblock * are incompatible pointer types. - */ - -typedef struct DES_ks { - union { - DES_cblock cblock; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG deslong[2]; - } ks[16]; -} DES_key_schedule; - -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) - -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 - -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 - -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ - DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) - -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ - DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) - -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ - DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) - -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ - DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) - -const char *DES_options(void); -void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, int enc); -DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, - long length, DES_key_schedule *schedule, - const_DES_cblock *ivec); -/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ -void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); -void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, - DES_key_schedule *ks, int enc); - -/* - * This is the DES encryption function that gets called by just about every - * other DES routine in the library. You should not use this function except - * to implement 'modes' of DES. I say this because the functions that call - * this routine do the conversion from 'char *' to long, and this needs to be - * done to make sure 'non-aligned' memory access do not occur. The - * characters are loaded 'little endian'. Data is a pointer to 2 unsigned - * long's and ks is the DES_key_schedule to use. enc, is non zero specifies - * encryption, zero if decryption. - */ -void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); - -/* - * This functions is the same as DES_encrypt1() except that the DES initial - * permutation (IP) and final permutation (FP) have been left out. As for - * DES_encrypt1(), you should not use this function. It is used by the - * routines in the library that implement triple DES. IP() DES_encrypt2() - * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() - * DES_encrypt1() DES_encrypt1() except faster :-). - */ -void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); -void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num, int enc); -void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, - int numbits, long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int enc); -void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3, - DES_cblock *ivec, int *num); -char *DES_fcrypt(const char *buf, const char *salt, char *ret); -char *DES_crypt(const char *buf, const char *salt); -void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); -void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); -DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], - long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); -/* - * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. - */ -int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); -int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_string_to_key(const char *str, DES_cblock *key); -void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); -void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num, int enc); -void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int *num); - -# define DES_fixup_key_parity DES_set_odd_parity - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/dh.h b/openssl/include/openssl/dh.h deleted file mode 100644 index 948d03c..0000000 --- a/openssl/include/openssl/dh.h +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DH_H -# define HEADER_DH_H - -# include - -# ifndef OPENSSL_NO_DH -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include - -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif - -# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 - -# define DH_FLAG_CACHE_MONT_P 0x01 - -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -DECLARE_ASN1_ITEM(DHparams) - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# 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_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_bits(const DH *dh); -int DH_size(const DH *dh); -int DH_security_bits(const DH *dh); -#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check_params_ex(const DH *dh); -int DH_check_ex(const DH *dh); -int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); -int DH_check_params(const DH *dh, int *ret); -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_STDIO -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -int DHparams_print(BIO *bp, const DH *x); - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* Named parameters, currently RFC7919 */ -DH *DH_new_by_nid(int nid); -int DH_get_nid(const DH *dh); - -# ifndef OPENSSL_NO_CMS -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); -# endif - -void DH_get0_pqg(const DH *dh, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DH_get0_key(const DH *dh, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DH_get0_p(const DH *dh); -const BIGNUM *DH_get0_q(const DH *dh); -const BIGNUM *DH_get0_g(const DH *dh); -const BIGNUM *DH_get0_priv_key(const DH *dh); -const BIGNUM *DH_get0_pub_key(const DH *dh); -void DH_clear_flags(DH *dh, int flags); -int DH_test_flags(const DH *dh, int flags); -void DH_set_flags(DH *dh, int flags); -ENGINE *DH_get0_engine(DH *d); -long DH_get_length(const DH *dh); -int DH_set_length(DH *dh, long length); - -DH_METHOD *DH_meth_new(const char *name, int flags); -void DH_meth_free(DH_METHOD *dhm); -DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); -const char *DH_meth_get0_name(const DH_METHOD *dhm); -int DH_meth_set1_name(DH_METHOD *dhm, const char *name); -int DH_meth_get_flags(const DH_METHOD *dhm); -int DH_meth_set_flags(DH_METHOD *dhm, int flags); -void *DH_meth_get0_app_data(const DH_METHOD *dhm); -int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); -int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); -int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) - (unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_meth_set_compute_key(DH_METHOD *dhm, - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); -int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) - (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, - int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); -int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); -int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); -int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) - (DH *, int, int, BN_GENCB *); -int DH_meth_set_generate_params(DH_METHOD *dhm, - int (*generate_params) (DH *, int, int, BN_GENCB *)); - - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ - EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_DH_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_PAD, pad, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) - -# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) -# 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 -# ifndef OPENSSL_NO_CMS -# define EVP_PKEY_DH_KDF_X9_42 2 -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/openssl/include/openssl/dherr.h b/openssl/include/openssl/dherr.h deleted file mode 100644 index 86e10ce..0000000 --- a/openssl/include/openssl/dherr.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DHERR_H -# define HEADER_DHERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_DH - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DH_strings(void); - -/* - * DH function codes. - */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CHECK_EX 121 -# define DH_F_DH_CHECK_PARAMS_EX 122 -# define DH_F_DH_CHECK_PUB_KEY_EX 123 -# define DH_F_DH_CMS_DECRYPT 114 -# define DH_F_DH_CMS_SET_PEERKEY 115 -# define DH_F_DH_CMS_SET_SHARED_INFO 116 -# define DH_F_DH_METH_DUP 117 -# define DH_F_DH_METH_NEW 118 -# define DH_F_DH_METH_SET1_NAME 119 -# define DH_F_DH_NEW_BY_NID 104 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PKEY_PUBLIC_CHECK 124 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_PKEY_DH_CTRL_STR 120 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_INIT 125 -# define DH_F_PKEY_DH_KEYGEN 113 - -/* - * DH reason codes. - */ -# 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_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_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_SHARED_INFO_ERROR 113 -# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 - -# endif -#endif diff --git a/openssl/include/openssl/dsa.h b/openssl/include/openssl/dsa.h deleted file mode 100644 index b2b3625..0000000 --- a/openssl/include/openssl/dsa.h +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DSA_H -# define HEADER_DSA_H - -# include - -# ifndef OPENSSL_NO_DSA -# ifdef __cplusplus -extern "C" { -# endif -# include -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include - -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif - -# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 - -# define DSA_FLAG_CACHE_MONT_P 0x01 -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 -# define DSA_FLAG_FIPS_CHECKED 0x0800 - -/* Already defined in ossl_typ.h */ -/* typedef struct dsa_st DSA; */ -/* typedef struct dsa_method DSA_METHOD; */ - -typedef struct DSA_SIG_st DSA_SIG; - -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) - -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); -void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); -int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); - -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); - -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); -const DSA_METHOD *DSA_get_method(DSA *d); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); -/* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); -int DSA_bits(const DSA *d); -int DSA_security_bits(const DSA *d); - /* next 4 return -1 on error */ -DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); - -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, - unsigned char *seed, - int seed_len, - int *counter_ret, - unsigned long *h_ret, void - (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); - -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); - -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# ifndef OPENSSL_NO_STDIO -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif - -# define DSS_prime_checks 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!) - */ -DH *DSA_dup_DH(const DSA *r); -# endif - -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(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) - -void DSA_get0_pqg(const DSA *d, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DSA_get0_key(const DSA *d, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DSA_get0_p(const DSA *d); -const BIGNUM *DSA_get0_q(const DSA *d); -const BIGNUM *DSA_get0_g(const DSA *d); -const BIGNUM *DSA_get0_pub_key(const DSA *d); -const BIGNUM *DSA_get0_priv_key(const DSA *d); -void DSA_clear_flags(DSA *d, int flags); -int DSA_test_flags(const DSA *d, int flags); -void DSA_set_flags(DSA *d, int flags); -ENGINE *DSA_get0_engine(DSA *d); - -DSA_METHOD *DSA_meth_new(const char *name, int flags); -void DSA_meth_free(DSA_METHOD *dsam); -DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); -const char *DSA_meth_get0_name(const DSA_METHOD *dsam); -int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); -int DSA_meth_get_flags(const DSA_METHOD *dsam); -int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); -void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); -int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); -DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA *); -int DSA_meth_set_sign(DSA_METHOD *dsam, - DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) - (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -int DSA_meth_set_sign_setup(DSA_METHOD *dsam, - int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA_SIG *, DSA *); -int DSA_meth_set_verify(DSA_METHOD *dsam, - int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) - (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_mod_exp(DSA_METHOD *dsam, - int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, - BN_MONT_CTX *)); -int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) - (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, - int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); -int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); -int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); -int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) - (DSA *, int, const unsigned char *, int, int *, unsigned long *, - BN_GENCB *); -int DSA_meth_set_paramgen(DSA_METHOD *dsam, - int (*paramgen) (DSA *, int, const unsigned char *, int, int *, - unsigned long *, BN_GENCB *)); -int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/openssl/include/openssl/dsaerr.h b/openssl/include/openssl/dsaerr.h deleted file mode 100644 index 08d5cae..0000000 --- a/openssl/include/openssl/dsaerr.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DSAERR_H -# define HEADER_DSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_DSA - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DSA_strings(void); - -/* - * DSA function codes. - */ -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN 125 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_METH_DUP 127 -# define DSA_F_DSA_METH_NEW 128 -# define DSA_F_DSA_METH_SET1_NAME 129 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 102 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_CTRL_STR 104 -# define DSA_F_PKEY_DSA_KEYGEN 121 - -/* - * DSA reason codes. - */ -# define DSA_R_BAD_Q_VALUE 102 -# define DSA_R_BN_DECODE_ERROR 108 -# define DSA_R_BN_ERROR 109 -# define DSA_R_DECODE_ERROR 104 -# define DSA_R_INVALID_DIGEST_TYPE 106 -# define DSA_R_INVALID_PARAMETERS 112 -# define DSA_R_MISSING_PARAMETERS 101 -# define DSA_R_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_Q_NOT_PRIME 113 -# define DSA_R_SEED_LEN_SMALL 110 - -# endif -#endif diff --git a/openssl/include/openssl/dtls1.h b/openssl/include/openssl/dtls1.h deleted file mode 100644 index 44d156e..0000000 --- a/openssl/include/openssl/dtls1.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H - -#ifdef __cplusplus -extern "C" { -#endif - -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MIN_VERSION DTLS1_VERSION -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE - -# define DTLS1_BAD_VER 0x0100 - -/* Special value for method supporting multiple versions */ -# define DTLS_ANY_VERSION 0x1FFFF - -/* lengths of messages */ -/* - * Actually the max cookie length in DTLS is 255. But we can't change this now - * due to compatibility concerns. - */ -# define DTLS1_COOKIE_LENGTH 256 - -# define DTLS1_RT_HEADER_LENGTH 13 - -# define DTLS1_HM_HEADER_LENGTH 12 - -# define DTLS1_HM_BAD_FRAGMENT -2 -# define DTLS1_HM_FRAGMENT_RETRY -3 - -# define DTLS1_CCS_HEADER_LENGTH 1 - -# define DTLS1_AL_HEADER_LENGTH 2 - -/* Timeout multipliers */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - -# define DTLS1_TMO_ALERT_COUNT 12 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/e_os2.h b/openssl/include/openssl/e_os2.h deleted file mode 100644 index 424d80b..0000000 --- a/openssl/include/openssl/e_os2.h +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * Detect operating systems. This probably needs completing. - * The result is that at least one OPENSSL_SYS_os macro should be defined. - * However, if none is defined, Unix is assumed. - **/ - -# define OPENSSL_SYS_UNIX - -/* --------------------- Microsoft operating systems ---------------------- */ - -/* - * Note that MSDOS actually denotes 32-bit environments running on top of - * MS-DOS, such as DJGPP one. - */ -# if defined(OPENSSL_SYS_MSDOS) -# undef OPENSSL_SYS_UNIX -# endif - -/* - * For 32 bit environment, there seems to be the CygWin environment and then - * all the others that try to do the same thing Microsoft does... - */ -/* - * UEFI lives here because it might be built with a Microsoft toolchain and - * we need to avoid the false positive match on Windows. - */ -# if defined(OPENSSL_SYS_UEFI) -# undef OPENSSL_SYS_UNIX -# elif defined(OPENSSL_SYS_UWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_UWIN -# else -# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) -# define OPENSSL_SYS_WIN32_CYGWIN -# else -# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN32) -# define OPENSSL_SYS_WIN32 -# endif -# endif -# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN64) -# define OPENSSL_SYS_WIN64 -# endif -# endif -# if defined(OPENSSL_SYS_WINNT) -# undef OPENSSL_SYS_UNIX -# endif -# if defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# endif -# endif -# endif - -/* Anything that tries to look like Microsoft is "Windows" */ -# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_SYS_MSDOS -# define OPENSSL_SYS_MSDOS -# endif -# endif - -/* - * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it - * requires some macro to be used. - */ -# ifdef OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_OPT_WINDLL -# if defined(_WINDLL) /* This is used when building OpenSSL to - * indicate that DLL linkage should be used */ -# define OPENSSL_OPT_WINDLL -# endif -# endif -# endif - -/* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) -# if !defined(OPENSSL_SYS_VMS) -# undef OPENSSL_SYS_UNIX -# endif -# define OPENSSL_SYS_VMS -# if defined(__DECC) -# define OPENSSL_SYS_VMS_DECC -# elif defined(__DECCXX) -# define OPENSSL_SYS_VMS_DECC -# define OPENSSL_SYS_VMS_DECCXX -# else -# define OPENSSL_SYS_VMS_NODECC -# endif -# endif - -/* -------------------------------- Unix ---------------------------------- */ -# ifdef OPENSSL_SYS_UNIX -# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) -# define OPENSSL_SYS_LINUX -# endif -# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) -# define OPENSSL_SYS_AIX -# endif -# endif - -/* -------------------------------- VOS ----------------------------------- */ -# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) -# define OPENSSL_SYS_VOS -# ifdef __HPPA__ -# define OPENSSL_SYS_VOS_HPPA -# endif -# ifdef __IA32__ -# define OPENSSL_SYS_VOS_IA32 -# endif -# endif - -/** - * That's it for OS-specific stuff - *****************************************************************************/ - -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - -/*- - * 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 - -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - -# ifdef _WIN32 -# ifdef _WIN64 -# define ossl_ssize_t __int64 -# define OSSL_SSIZE_MAX _I64_MAX -# else -# define ossl_ssize_t int -# define OSSL_SSIZE_MAX INT_MAX -# endif -# endif - -# if defined(OPENSSL_SYS_UEFI) && !defined(ossl_ssize_t) -# define ossl_ssize_t INTN -# define OSSL_SSIZE_MAX MAX_INTN -# endif - -# ifndef ossl_ssize_t -# define ossl_ssize_t ssize_t -# if defined(SSIZE_MAX) -# define OSSL_SSIZE_MAX SSIZE_MAX -# elif defined(_POSIX_SSIZE_MAX) -# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX -# else -# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) -# endif -# endif - -# ifdef DEBUG_UNUSED -# define __owur __attribute__((__warn_unused_result__)) -# else -# define __owur -# endif - -/* Standard integer types */ -# if defined(OPENSSL_SYS_UEFI) -typedef INT8 int8_t; -typedef UINT8 uint8_t; -typedef INT16 int16_t; -typedef UINT16 uint16_t; -typedef INT32 int32_t; -typedef UINT32 uint32_t; -typedef INT64 int64_t; -typedef UINT64 uint64_t; -# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ - defined(__osf__) || defined(__sgi) || defined(__hpux) || \ - defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) -# include -# elif defined(_MSC_VER) && _MSC_VER<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; -# else -# include -# endif - -/* ossl_inline: portable inline definition usable in public headers */ -# if !defined(inline) && !defined(__cplusplus) -# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L - /* just use inline */ -# define ossl_inline inline -# elif defined(__GNUC__) && __GNUC__>=2 -# define ossl_inline __inline__ -# elif defined(_MSC_VER) - /* - * Visual Studio: inline is available in C++ only, however - * __inline is available for C, see - * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx - */ -# define ossl_inline __inline -# else -# define ossl_inline -# endif -# else -# define ossl_inline inline -# endif - -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L -# define ossl_noreturn _Noreturn -# elif defined(__GNUC__) && __GNUC__ >= 2 -# define ossl_noreturn __attribute__((noreturn)) -# else -# define ossl_noreturn -# endif - -/* 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/openssl/include/openssl/ebcdic.h b/openssl/include/openssl/ebcdic.h deleted file mode 100644 index a0d967b..0000000 --- a/openssl/include/openssl/ebcdic.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Avoid name clashes with other applications */ -# define os_toascii _openssl_os_toascii -# define os_toebcdic _openssl_os_toebcdic -# define ebcdic2ascii _openssl_ebcdic2ascii -# define ascii2ebcdic _openssl_ascii2ebcdic - -extern const unsigned char os_toascii[256]; -extern const unsigned char os_toebcdic[256]; -void *ebcdic2ascii(void *dest, const void *srce, size_t count); -void *ascii2ebcdic(void *dest, const void *srce, size_t count); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/ec.h b/openssl/include/openssl/ec.h deleted file mode 100644 index 4e345e7..0000000 --- a/openssl/include/openssl/ec.h +++ /dev/null @@ -1,1479 +0,0 @@ -/* - * Copyright 2002-2019 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_EC_H -# define HEADER_EC_H - -# include - -# ifndef OPENSSL_NO_EC -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 -# endif - -/** Enum for the point conversion form as defined in X9.62 (ECDSA) - * for the encoding of a elliptic curve point (x,y) */ -typedef enum { - /** the point is encoded as z||x, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x04 */ - POINT_CONVERSION_UNCOMPRESSED = 4, - /** the point is encoded as z||x||y, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_HYBRID = 6 -} point_conversion_form_t; - -typedef struct ec_method_st EC_METHOD; -typedef struct ec_group_st EC_GROUP; -typedef struct ec_point_st EC_POINT; -typedef struct ecpk_parameters_st ECPKPARAMETERS; -typedef struct ec_parameters_st ECPARAMETERS; - -/********************************************************************/ -/* EC_METHODs for curves over GF(p) */ -/********************************************************************/ - -/** Returns the basic GFp ec methods which provides the basis for the - * optimized methods. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_simple_method(void); - -/** Returns GFp methods using montgomery multiplication. - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_mont_method(void); - -/** Returns GFp methods using optimized methods for NIST recommended curves - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nist_method(void); - -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -/** Returns 64-bit optimized methods for nistp224 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp224_method(void); - -/** Returns 64-bit optimized methods for nistp256 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp256_method(void); - -/** Returns 64-bit optimized methods for nistp521 - * \return EC_METHOD object - */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif - -# ifndef OPENSSL_NO_EC2M -/********************************************************************/ -/* EC_METHOD for curves over GF(2^m) */ -/********************************************************************/ - -/** Returns the basic GF2m ec method - * \return EC_METHOD object - */ -const EC_METHOD *EC_GF2m_simple_method(void); - -# endif - -/********************************************************************/ -/* EC_GROUP functions */ -/********************************************************************/ - -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); - -/** Frees a EC_GROUP object - * \param group EC_GROUP object to be freed. - */ -void EC_GROUP_free(EC_GROUP *group); - -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - -/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. - * \param dst destination EC_GROUP object - * \param src source EC_GROUP object - * \return 1 on success and 0 if an error occurred. - */ -int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); - -/** Creates a new EC_GROUP object and copies the copies the content - * form src to the newly created EC_KEY object - * \param src source EC_GROUP object - * \return newly created EC_GROUP object or NULL in case of an error. - */ -EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); - -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - -/** Sets the generator and 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); - -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 a 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); - -/** 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 - */ -DEPRECATEDIN_1_2_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 - */ -DEPRECATEDIN_1_2_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 - */ -DEPRECATEDIN_1_2_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 - */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) -# endif -/** Returns the number of bits needed to represent a field element - * \param group EC_GROUP object - * \return number of bits needed to represent a field element - */ -int EC_GROUP_get_degree(const EC_GROUP *group); - -/** Checks whether the parameter in the EC_GROUP define a valid ec group - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if group is a valid ec group and 0 otherwise - */ -int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); - -/** Checks whether the discriminant of the elliptic curve is zero or not - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if the discriminant is not zero and 0 otherwise - */ -int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); - -/** Compares two EC_GROUP objects - * \param a first EC_GROUP object - * \param b second EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 0 if the groups are equal, 1 if not, or -1 on error - */ -int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); - -/* - * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after - * choosing an appropriate EC_METHOD - */ - -/** Creates a new EC_GROUP object with the specified parameters defined - * over GFp (defined by the equation y^2 = x^3 + a*x + b) - * \param p BIGNUM with the prime number - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M -/** Creates a new EC_GROUP object with the specified parameters defined - * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) - * \param p BIGNUM with the polynomial defining the underlying field - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# endif - -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_by_curve_name(int nid); - -/** Creates a new EC_GROUP object from an ECPARAMETERS object - * \param params pointer to the ECPARAMETERS object - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); - -/** Creates an ECPARAMETERS object for the 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); - -/********************************************************************/ -/* EC_POINT functions */ -/********************************************************************/ - -/** Creates a new EC_POINT object for the specified EC_GROUP - * \param group EC_GROUP the underlying EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_new(const EC_GROUP *group); - -/** Frees a EC_POINT object - * \param point EC_POINT object to be freed - */ -void EC_POINT_free(EC_POINT *point); - -/** Clears and frees a EC_POINT object - * \param point EC_POINT object to be cleared and freed - */ -void EC_POINT_clear_free(EC_POINT *point); - -/** Copies EC_POINT object - * \param dst destination EC_POINT object - * \param src source EC_POINT object - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); - -/** Creates a new EC_POINT object and copies the content of the supplied - * EC_POINT - * \param src source EC_POINT object - * \param group underlying the EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); - -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - -/** Sets a point to infinity (neutral element) - * \param group underlying EC_GROUP object - * \param point EC_POINT to set to infinity - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); - -/** Sets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param z BIGNUM with the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); - -/** Gets the jacobian projective coordinates of a EC_POINT over GFp - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param z BIGNUM for the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); - -/** Sets the affine coordinates of 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); - -/** 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 - */ -DEPRECATEDIN_1_2_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 - */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) - -/** Sets the x9.62 compressed coordinates of a EC_POINT - * \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); - -/** 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 - */ -DEPRECATEDIN_1_2_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 - */ -DEPRECATEDIN_1_2_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 - */ -DEPRECATEDIN_1_2_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 - */ -DEPRECATEDIN_1_2_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 -/** 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: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); -char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BN_CTX *); -EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, - EC_POINT *, BN_CTX *); - -/********************************************************************/ -/* functions for doing EC_POINT arithmetic */ -/********************************************************************/ - -/** Computes the sum of two EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = a + b) - * \param a EC_POINT object with the first summand - * \param b EC_POINT object with the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx); - -/** Computes the double of a EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = 2 * a) - * \param a EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - BN_CTX *ctx); - -/** Computes the inverse of a EC_POINT - * \param group underlying EC_GROUP object - * \param a EC_POINT object to be inverted (it's used for the result as well) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); - -/** Checks whether the point is the neutral element of the group - * \param group the underlying EC_GROUP object - * \param p EC_POINT object - * \return 1 if the point is the neutral element and 0 otherwise - */ -int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); - -/** Checks whether the point is on the curve - * \param group underlying EC_GROUP object - * \param point EC_POINT object to check - * \param ctx BN_CTX object (optional) - * \return 1 if the point is on the curve, 0 if not, or -1 on error - */ -int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, - BN_CTX *ctx); - -/** Compares two EC_POINTs - * \param group underlying EC_GROUP object - * \param a first EC_POINT object - * \param b second EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 if the points are not equal, 0 if they are, or -1 on error - */ -int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, - BN_CTX *ctx); - -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); - -/** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param num number further summands - * \param p array of size num of EC_POINT objects - * \param m array of size num of BIGNUM objects - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); - -/** Computes r = generator * n + q * m - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param q EC_POINT object with the first factor of the second summand - * \param m BIGNUM with the second factor of the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); - -/** Stores multiples of generator for faster point multiplication - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); - -/** Reports whether a precomputation has been done - * \param group EC_GROUP object - * \return 1 if a pre-computation has been done and 0 otherwise - */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); - -/********************************************************************/ -/* ASN1 stuff */ -/********************************************************************/ - -DECLARE_ASN1_ITEM(ECPKPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) -DECLARE_ASN1_ITEM(ECPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) - -/* - * EC_GROUP_get_basis_type() returns the NID of the basis type used to - * represent the field elements - */ -int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M -int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); -int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, - unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_EXPLICIT_CURVE 0x000 -# define OPENSSL_EC_NAMED_CURVE 0x001 - -EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); -int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); - -# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) -# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) -# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ - (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) -# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ - (unsigned char *)(x)) - -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# ifndef OPENSSL_NO_STDIO -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif - -/********************************************************************/ -/* EC_KEY functions */ -/********************************************************************/ - -/* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 - -/* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 -# define EC_FLAG_COFACTOR_ECDH 0x1000 - -/** Creates a new EC_KEY object. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new(void); - -int EC_KEY_get_flags(const EC_KEY *key); - -void EC_KEY_set_flags(EC_KEY *key, int flags); - -void EC_KEY_clear_flags(EC_KEY *key, int flags); - -/** Creates a new EC_KEY object using a named curve as underlying - * EC_GROUP object. - * \param nid NID of the named curve. - * \return EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); - -/** Frees a EC_KEY object. - * \param key EC_KEY object to be freed. - */ -void EC_KEY_free(EC_KEY *key); - -/** Copies a EC_KEY object. - * \param dst destination EC_KEY object - * \param src src EC_KEY object - * \return dst or NULL if an error occurred. - */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); - -/** Creates a new EC_KEY object and copies the content from src to it. - * \param src the source EC_KEY object - * \return newly created EC_KEY object or NULL if an error occurred. - */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); - -/** Increases the internal reference count of a EC_KEY object. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_up_ref(EC_KEY *key); - -/** Returns the ENGINE object of a EC_KEY object - * \param eckey EC_KEY object - * \return the ENGINE object (possibly NULL). - */ -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). - */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); - -/** Sets the EC_GROUP of a EC_KEY object. - * \param key EC_KEY object - * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY - * object will use an own copy of the EC_GROUP). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); - -/** Returns the private key of a EC_KEY object. - * \param key EC_KEY object - * \return a BIGNUM with the private key (possibly NULL). - */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); - -/** Sets the private key of a EC_KEY object. - * \param key EC_KEY object - * \param prv BIGNUM with the private key (note: the EC_KEY object - * will use an own copy of the BIGNUM). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); - -/** Returns the public key of a EC_KEY object. - * \param key the EC_KEY object - * \return a EC_POINT object with the public key (possibly NULL) - */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); - -/** Sets the public key of a EC_KEY object. - * \param key EC_KEY object - * \param pub EC_POINT object with the public key (note: the EC_KEY object - * will use an own copy of the EC_POINT object). - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); - -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); - -#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) -int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); -void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); - -/* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); - -/** Creates a table of pre-computed multiples of the generator to - * accelerate further EC_KEY operations. - * \param key EC_KEY object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); - -/** Creates a new ec private (and optional a new public) key. - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred. - */ -int EC_KEY_generate_key(EC_KEY *key); - -/** Verifies that a private and/or public key is valid. - * \param key the EC_KEY object - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_check_key(const EC_KEY *key); - -/** Indicates if an EC_KEY can be used for signing. - * \param eckey the EC_KEY object - * \return 1 if can can sign and 0 otherwise. - */ -int EC_KEY_can_sign(const EC_KEY *eckey); - -/** Sets a public key from affine coordinates performing - * necessary NIST PKV tests. - * \param key the EC_KEY object - * \param x public key x coordinate - * \param y public key y coordinate - * \return 1 on success and 0 otherwise. - */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); - -/** Encodes an EC_KEY public key to an allocated octet string - * \param key key to encode - * \param form point conversion form - * \param pbuf returns pointer to allocated buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); - -/** Decodes a EC_KEY public key from a octet string - * \param key key to decode - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ - -int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, - BN_CTX *ctx); - -/** Decodes an EC_KEY private key from an octet string - * \param key key to decode - * \param buf memory buffer with the encoded private key - * \param len length of the encoded key - * \return 1 on success and 0 if an error occurred - */ - -int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); - -/** Encodes a EC_KEY private key to an octet string - * \param key key to encode - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \return the length of the encoded octet string or 0 if an error occurred - */ - -size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); - -/** Encodes an EC_KEY private key to an allocated octet string - * \param 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 - */ -size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); - -/********************************************************************/ -/* de- and encoding functions for SEC1 ECPrivateKey */ -/********************************************************************/ - -/** Decodes a private key from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded private key - * \param len length of the DER encoded private key - * \return the decoded private key or NULL if an error occurred. - */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a private key object and stores the result in a buffer. - * \param key the EC_KEY object to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC parameters */ -/********************************************************************/ - -/** Decodes ec parameter from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded ec parameters - * \param len length of the DER encoded ec parameters - * \return a EC_KEY object with the decoded parameters or NULL if an error - * occurred. - */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes ec parameter and stores the result in a buffer. - * \param key the EC_KEY object with ec parameters to encode - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred. - */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC public key */ -/* (octet string, not DER -- hence 'o2i' and 'i2o') */ -/********************************************************************/ - -/** Decodes a ec public key from a octet string. - * \param key a pointer to a EC_KEY object which should be used - * \param in memory buffer with the encoded public key - * \param len length of the encoded public key - * \return EC_KEY object with decoded public key or NULL if an error - * occurred. - */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); - -/** Encodes a ec public key in an octet string. - * \param key the EC_KEY object with the public key - * \param out the buffer for the result (if NULL the function returns number - * of bytes needed). - * \return 1 on success and 0 if an error occurred - */ -int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); - -/** Prints out the ec parameters on human readable form. - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print(BIO *bp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param bp BIO object to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); - -# ifndef OPENSSL_NO_STDIO -/** Prints out the ec parameters on human readable form. - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \return 1 on success and 0 if an error occurred - */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); - -/** Prints out the contents of a EC_KEY object - * \param fp file descriptor to which the information is printed - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); - -# endif - -const EC_KEY_METHOD *EC_KEY_OpenSSL(void); -const EC_KEY_METHOD *EC_KEY_get_default_method(void); -void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); -const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); -int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); -EC_KEY *EC_KEY_new_method(ENGINE *engine); - -/** The old name for ecdh_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); - -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - const EC_KEY *ecdh, - void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); - -typedef struct ECDSA_SIG_st ECDSA_SIG; - -/** Allocates and initialize a ECDSA_SIG structure - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_SIG_new(void); - -/** frees a ECDSA_SIG structure - * \param sig pointer to the ECDSA_SIG structure - */ -void ECDSA_SIG_free(ECDSA_SIG *sig); - -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp - * (*pp += length of the DER encoded signature)). - * \param sig pointer to the ECDSA_SIG object - * \param pp pointer to a unsigned char pointer for the output or NULL - * \return the length of the DER encoded ECDSA_SIG object or a negative value - * on error - */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); - -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp - * (*pp += len)). - * \param sig pointer to ECDSA_SIG pointer (may be NULL) - * \param pp memory buffer with the DER encoded signature - * \param len length of the buffer - * \return pointer to the decoded ECDSA_SIG structure (or NULL) - */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); - -/** Accessor for r and s fields of ECDSA_SIG - * \param sig pointer to ECDSA_SIG 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 (may be NULL) - * \param s pointer to BIGNUM for s (may be NULL) - */ -int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); - -/** Computes the ECDSA signature of the given hash value using - * the supplied private key and returns the created signature. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); - -/** Verifies that the supplied signature is a valid ECDSA - * signature of the supplied hash value using the supplied public key. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param sig ECDSA_SIG structure - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); - -/** Precompute parts of the signing operation - * \param eckey EC_KEY object containing a private EC key - * \param ctx BN_CTX object (optional) - * \param kinv BIGNUM pointer for the inverse of k - * \param rp BIGNUM pointer for x coordinate of k * generator - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig memory for the DER encoded created signature - * \param siglen pointer to the length of the returned signature - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); - -/** Computes ECDSA signature of a given hash value using the supplied - * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig buffer to hold the DER encoded signature - * \param siglen pointer to the length of the returned signature - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); - -/** Verifies that the given signature is valid ECDSA signature - * of the supplied hash value using the specified public key. - * \param type this parameter is ignored - * \param dgst pointer to the hash value - * \param dgstlen length of the hash value - * \param sig pointer to the DER encoded signature - * \param siglen length of the DER encoded signature - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); - -/** Returns the maximum length of the DER encoded signature - * \param eckey EC_KEY object - * \return numbers of bytes required for the DER encoded signature - */ -int ECDSA_size(const EC_KEY *eckey); - -/********************************************************************/ -/* EC_KEY_METHOD constructors, destructors, writers and accessors */ -/********************************************************************/ - -EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); -void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); -void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, - int (*init)(EC_KEY *key), - void (*finish)(EC_KEY *key), - int (*copy)(EC_KEY *dest, const EC_KEY *src), - int (*set_group)(EC_KEY *key, const EC_GROUP *grp), - int (*set_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (*set_public)(EC_KEY *key, - const EC_POINT *pub_key)); - -void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); - -void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, - int (*ckey)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); - -void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, - int (*sign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, - int (*verify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (*verify_sig)(const unsigned char *dgst, - int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -void EC_KEY_METHOD_get_init(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)); - -void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, - int (**pkeygen)(EC_KEY *key)); - -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)); - -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)); - -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)); - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) -# endif -# endif -# endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ - (void *)(plen)) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) - -/* SM2 will skip the operation check so no need to pass operation here */ -# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id(ctx, id) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) - -# 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) -# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) -/* 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 mistakingly 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 - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/openssl/include/openssl/ecdh.h b/openssl/include/openssl/ecdh.h deleted file mode 100644 index 7970f35..0000000 --- a/openssl/include/openssl/ecdh.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include diff --git a/openssl/include/openssl/ecdsa.h b/openssl/include/openssl/ecdsa.h deleted file mode 100644 index 7970f35..0000000 --- a/openssl/include/openssl/ecdsa.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include diff --git a/openssl/include/openssl/ecerr.h b/openssl/include/openssl/ecerr.h deleted file mode 100644 index 2e081db..0000000 --- a/openssl/include/openssl/ecerr.h +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ECERR_H -# define HEADER_ECERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_EC - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EC_strings(void); - -/* - * EC function codes. - */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECDH_COMPUTE_KEY 246 -# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 -# define EC_F_ECDSA_DO_SIGN_EX 251 -# define EC_F_ECDSA_DO_VERIFY 252 -# define EC_F_ECDSA_SIGN_EX 254 -# define EC_F_ECDSA_SIGN_SETUP 248 -# define EC_F_ECDSA_SIG_NEW 265 -# define EC_F_ECDSA_VERIFY 253 -# define EC_F_ECD_ITEM_VERIFY 270 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECX_KEY_OP 266 -# define EC_F_ECX_PRIV_ENCODE 267 -# define EC_F_ECX_PUB_ENCODE 268 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 -# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_INV 297 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 -# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET_CURVE 291 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 -# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 -# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 -# define EC_F_EC_GROUP_SET_CURVE 292 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_GROUP_SET_SEED 286 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_NEW_METHOD 245 -# define EC_F_EC_KEY_OCT2PRIV 255 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_PRIV2BUF 279 -# define EC_F_EC_KEY_PRIV2OCT 256 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 -# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 -# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 -# define EC_F_EC_PKEY_CHECK 273 -# define EC_F_EC_PKEY_PARAM_CHECK 274 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINTS_MUL 290 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_BN2POINT 280 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2BUF 281 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_SCALAR_MUL_LADDER 284 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 -# define EC_F_OSSL_ECDSA_SIGN_SIG 249 -# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 -# define EC_F_PKEY_ECD_CTRL 271 -# define EC_F_PKEY_ECD_DIGESTSIGN 272 -# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 -# define EC_F_PKEY_ECD_DIGESTSIGN448 277 -# define EC_F_PKEY_ECX_DERIVE 269 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_INIT 282 -# define EC_F_PKEY_EC_KDF_DERIVE 283 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 -# define EC_F_VALIDATE_ECX_DERIVE 278 - -/* - * 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_SIGNING 159 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 -# define EC_R_DECODE_ERROR 142 -# define EC_R_DISCRIMINANT_IS_ZERO 118 -# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 -# define EC_R_FIELD_TOO_LARGE 143 -# define EC_R_GF2M_NOT_SUPPORTED 147 -# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 -# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 -# define EC_R_INCOMPATIBLE_OBJECTS 101 -# define EC_R_INVALID_ARGUMENT 112 -# define EC_R_INVALID_COMPRESSED_POINT 110 -# define EC_R_INVALID_COMPRESSION_BIT 109 -# define EC_R_INVALID_CURVE 141 -# define EC_R_INVALID_DIGEST 151 -# define EC_R_INVALID_DIGEST_TYPE 138 -# define EC_R_INVALID_ENCODING 102 -# define EC_R_INVALID_FIELD 103 -# define EC_R_INVALID_FORM 104 -# define EC_R_INVALID_GROUP_ORDER 122 -# define EC_R_INVALID_KEY 116 -# define EC_R_INVALID_OUTPUT_LENGTH 161 -# define EC_R_INVALID_PEER_KEY 133 -# define EC_R_INVALID_PENTANOMIAL_BASIS 132 -# define EC_R_INVALID_PRIVATE_KEY 123 -# define EC_R_INVALID_TRINOMIAL_BASIS 137 -# define EC_R_KDF_PARAMETER_ERROR 148 -# define EC_R_KEYS_NOT_SET 140 -# define EC_R_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_PKPARAMETERS2GROUP_FAILURE 127 -# 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_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/openssl/include/openssl/engine.h b/openssl/include/openssl/engine.h deleted file mode 100644 index 83e156d..0000000 --- a/openssl/include/openssl/engine.h +++ /dev/null @@ -1,751 +0,0 @@ -/* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H - -# include - -# ifndef OPENSSL_NO_ENGINE -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# include -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -/* - * These flags are used to control combinations of algorithm (methods) by - * bitwise "OR"ing. - */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -# define ENGINE_METHOD_EC (unsigned int)0x0800 -/* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 - -/* - * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used - * internally to control registration of ENGINE implementations, and can be - * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to - * initialise registered ENGINEs if they are not already initialised. - */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 - -/* ENGINE flags that can be set by ENGINE_set_flags(). */ -/* Not used */ -/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ - -/* - * This flag is for ENGINEs that wish to handle the various 'CMD'-related - * control commands on their own. Without this flag, ENGINE_ctrl() handles - * these control commands on behalf of the ENGINE using their "cmd_defns" - * data. - */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 - -/* - * This flag is for ENGINEs who return new duplicate structures when found - * via "ENGINE_by_id()". When an ENGINE must store state (eg. if - * ENGINE_ctrl() commands are called in sequence as part of some stateful - * process like key-generation setup and execution), it can set this flag - - * then each attempt to obtain the ENGINE will result in it being copied into - * a new structure. Normally, ENGINEs don't declare this flag so - * ENGINE_by_id() just increments the existing ENGINE's structural reference - * count. - */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 - -/* - * This flag if for an ENGINE that does not want its methods registered as - * part of ENGINE_register_all_complete() for example if the methods are not - * usable as default methods. - */ - -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 - -/* - * ENGINEs can support their own command types, and these flags are used in - * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input - * each command expects. Currently only numeric and string input is - * supported. If a control command supports none of the _NUMERIC, _STRING, or - * _NO_INPUT options, then it is regarded as an "internal" control command - - * and not for use in config setting situations. As such, they're not - * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() - * access. Changes to this list of 'command types' should be reflected - * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). - */ - -/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 -/* - * accepts string input (cast from 'void*' to 'const char *', 4th parameter - * to ENGINE_ctrl) - */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 -/* - * Indicates that the control command takes *no* input. Ie. the control - * command is unparameterised. - */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 -/* - * Indicates that the control command is internal. This control command won't - * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() - * function. - */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 - -/* - * NB: These 3 control commands are deprecated and should not be used. - * ENGINEs relying on these commands should compile conditional support for - * compatibility (eg. if these symbols are defined) but should also migrate - * the same functionality to their own ENGINE-specific control functions that - * can be "discovered" by calling applications. The fact these control - * commands wouldn't be "executable" (ie. usable by text-based config) - * doesn't change the fact that application code can find and use them - * without requiring per-ENGINE hacking. - */ - -/* - * These flags are used to tell the ctrl function what should be done. All - * command numbers are shared between all engines, even if some don't make - * sense to some engines. In such a case, they do nothing but return the - * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. - */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise - * any handles/connections - * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used - * when calling the password - * callback and the user - * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, - * given a string that - * represents a file name - * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given - * section in the already - * loaded configuration */ - -/* - * These control commands allow an application to deal with an arbitrary - * engine in a dynamic way. Warn: Negative return values indicate errors FOR - * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other - * commands, including ENGINE-specific command types, return zero for an - * error. An ENGINE can choose to implement these ctrl functions, and can - * internally manage things however it chooses - it does so by setting the - * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise - * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the - * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's - * ctrl() handler need only implement its own commands - the above "meta" - * commands will be taken care of. - */ - -/* - * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", - * then all the remaining control commands will return failure, so it is - * worth checking this first if the caller is trying to "discover" the - * engine's capabilities and doesn't want errors generated unnecessarily. - */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 -/* - * Returns a positive command number for the first command supported by the - * engine. Returns zero if no ctrl commands are supported. - */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 -/* - * The 'long' argument specifies a command implemented by the engine, and the - * return value is the next command supported, or zero if there are no more. - */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 -/* - * The 'void*' argument is a command name (cast from 'const char *'), and the - * return value is the command that corresponds to it. - */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 -/* - * The next two allow a command to be converted into its corresponding string - * form. In each case, the 'long' argument supplies the command. In the - * NAME_LEN case, the return value is the length of the command name (not - * counting a trailing EOL). In the NAME case, the 'void*' argument must be a - * string buffer large enough, and it will be populated with the name of the - * command (WITH a trailing EOL). - */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 -/* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 -/* - * With this command, the return value is the OR'd combination of - * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given - * engine-specific ctrl command expects. - */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 - -/* - * ENGINE implementations should start the numbering of their own control - * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). - */ -# define ENGINE_CMD_BASE 200 - -/* - * NB: These 2 nCipher "chil" control commands are deprecated, and their - * functionality is now available through ENGINE-specific control commands - * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 - * commands should be migrated to the more general command handling before - * these are removed. - */ - -/* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ - -/* - * If an ENGINE supports its own specific control commands and wishes the - * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on - * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN - * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() - * handler that supports the stated commands (ie. the "cmd_num" entries as - * described by the array). NB: The array must be ordered in increasing order - * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element - * has cmd_num set to zero and/or cmd_name set to NULL. - */ -typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; /* The command number */ - const char *cmd_name; /* The command name itself */ - const char *cmd_desc; /* A short description of the command */ - unsigned int cmd_flags; /* The input the command expects */ -} ENGINE_CMD_DEFN; - -/* Generic function pointer */ -typedef int (*ENGINE_GEN_FUNC_PTR) (void); -/* Generic function pointer taking no arguments */ -typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); -/* Specific control function pointer */ -typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, - void (*f) (void)); -/* Generic load_key function pointer */ -typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, - UI_METHOD *ui_method, - void *callback_data); -typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, - STACK_OF(X509_NAME) *ca_dn, - X509 **pcert, EVP_PKEY **pkey, - STACK_OF(X509) **pother, - UI_METHOD *ui_method, - void *callback_data); -/*- - * These callback types are for an ENGINE's handler for cipher and digest logic. - * These handlers have these prototypes; - * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); - * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); - * Looking at how to implement these handlers in the case of cipher support, if - * the framework wants the EVP_CIPHER for 'nid', it will call; - * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) - * If the framework wants a list of supported 'nid's, it will call; - * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) - */ -/* - * Returns to a pointer to the array of supported cipher 'nid's. If the - * second parameter is non-NULL it is set to the size of the returned array. - */ -typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, - const int **, int); -typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, - int); -typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, - const int **, int); -typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, - const int **, int); -/* - * STRUCTURE functions ... all of these functions deal with pointers to - * ENGINE structures where the pointers have a "structural reference". This - * means that their reference is to allowed access to the structure but it - * does not imply that the structure is functional. To simply increment or - * decrement the structural reference count, use ENGINE_by_id and - * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next - * as it will automatically decrement the structural reference count of the - * "current" ENGINE and increment the structural reference count of the - * ENGINE it returns (unless it is NULL). - */ - -/* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); -/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); -/* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); -/* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); -/* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); - -#if OPENSSL_API_COMPAT < 0x10100000L -# define ENGINE_load_openssl() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) -# define ENGINE_load_dynamic() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) -# ifndef OPENSSL_NO_STATIC_ENGINE -# define ENGINE_load_padlock() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) -# define ENGINE_load_capi() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) -# define ENGINE_load_afalg() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) -# endif -# define ENGINE_load_cryptodev() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) -# define ENGINE_load_rdrand() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) -#endif -void ENGINE_load_builtin_engines(void); - -/* - * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation - * "registry" handling. - */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); - -/*- Manage registration of ENGINEs per "table". For each type, there are 3 - * functions; - * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) - * ENGINE_unregister_***(e) - unregister the implementation from 'e' - * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list - * Cleanup is automatically registered from each table when required. - */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_EC(ENGINE *e); -void ENGINE_unregister_EC(ENGINE *e); -void ENGINE_register_all_EC(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); - -/* - * These functions register all support from the above categories. Note, use - * of these functions can result in static linkage of code your application - * may not need. If you only need a subset of functionality, consider using - * more selective initialisation. - */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); - -/* - * Send 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. - */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); - -/* - * This function tests if an ENGINE-specific command is usable as a - * "setting". Eg. in an application's config file that gets processed through - * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to - * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). - */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); - -/* - * This function works like ENGINE_ctrl() with the exception of taking a - * command name instead of a command number, and can handle optional - * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation - * on how to use the cmd_name and cmd_optional. - */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); - -/* - * This function passes a command-name and argument to an ENGINE. The - * cmd_name is converted to a command number and the control command is - * called using 'arg' as an argument (unless the ENGINE doesn't support such - * a command, in which case no control command is called). The command is - * checked for input flags, and if necessary the argument will be converted - * to a numeric value. If cmd_optional is non-zero, then if the ENGINE - * doesn't support the given cmd_name the return value will be success - * anyway. This function is intended for applications to use so that users - * (or config files) can supply engine-specific config data to the ENGINE at - * run-time to control behaviour of specific engines. As such, it shouldn't - * be used for calling ENGINE_ctrl() functions that return data, deal with - * binary data, or that are otherwise supposed to be used directly through - * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() - * operation in this function will be lost - the return value is interpreted - * as failure if the return value is zero, success otherwise, and this - * function returns a boolean value as a result. In other words, vendors of - * 'ENGINE'-enabled devices should write ENGINE implementations with - * parameterisations that work in this scheme, so that compliant ENGINE-based - * applications can work consistently with the same configuration for the - * same ENGINE-enabled devices, across applications. - */ -int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, - int cmd_optional); - -/* - * These functions are useful for manufacturing new ENGINE structures. They - * don't address reference counting at all - one uses them to populate an - * ENGINE structure with personalised implementations of things prior to - * using it directly or adding it to the builtin ENGINE list in OpenSSL. - * These are also here so that the ENGINE structure doesn't have to be - * exposed and break binary compatibility! - */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); -int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); -int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); -int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); -int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); -int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); -int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); -int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); -int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); -int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); -/* These functions allow control over any per-structure ENGINE data. */ -#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); - -#if OPENSSL_API_COMPAT < 0x10100000L -/* - * This function previously cleaned up anything that needs it. Auto-deinit will - * now take care of it so it is no longer required to call this function. - */ -# define ENGINE_cleanup() while(0) continue -#endif - -/* - * These return values from within the ENGINE structure. These can be useful - * with functional references as well as structural references - it depends - * which you obtained. Using the result for functional purposes if you only - * obtained a structural reference may be problematic! - */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); -ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); -ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); -ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); -ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); -ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); -ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); -ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); -const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); -const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); -const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); -const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, - const char *str, - int len); -const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); -const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); - -/* - * FUNCTIONAL functions. These functions deal with ENGINE structures that - * have (or will) be initialised for use. Broadly speaking, the structural - * functions are useful for iterating the list of available engine types, - * creating new engine types, and other "list" operations. These functions - * actually deal with ENGINEs that are to be used. As such these functions - * can fail (if applicable) when particular engines are unavailable - eg. if - * a hardware accelerator is not attached or not functioning correctly. Each - * ENGINE has 2 reference counts; structural and functional. Every time a - * functional reference is obtained or released, a corresponding structural - * reference is automatically obtained or released too. - */ - -/* - * Initialise a engine type for use (or up its reference count if it's - * already in use). This will fail if the engine is not currently operational - * and cannot initialise. - */ -int ENGINE_init(ENGINE *e); -/* - * Free a functional reference to a engine type. This does not require a - * corresponding call to ENGINE_free as it also releases a structural - * reference. - */ -int ENGINE_finish(ENGINE *e); - -/* - * The following functions handle keys that are stored in some secondary - * location, handled by the engine. The storage may be on a card or - * whatever. - */ -EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, - UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, - UI_METHOD *ui_method, void *callback_data); - -/* - * This returns a pointer for the current ENGINE structure that is (by - * default) performing any RSA operations. The value returned is an - * incremented reference, so it should be free'd (ENGINE_finish) before it is - * discarded. - */ -ENGINE *ENGINE_get_default_RSA(void); -/* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_EC(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); -/* - * These functions can be used to get a functional reference to perform - * ciphering or digesting corresponding to "nid". - */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); - -/* - * This sets a new default ENGINE structure for performing RSA operations. If - * the result is non-zero (success) then the ENGINE structure will have had - * its reference count up'd so the caller should still free their own - * reference 'e'. - */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); -/* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_EC(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); - -/* - * The combination "set" - the flags are bitwise "OR"d from the - * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" - * function, this function can result in unnecessary static linkage. If your - * application requires only specific functionality, consider using more - * selective functions. - */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); - -/* Deprecated functions ... */ -/* int ENGINE_clear_defaults(void); */ - -/**************************/ -/* DYNAMIC ENGINE SUPPORT */ -/**************************/ - -/* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 -/* - * Binary versions older than this are too old for us (whether we're a loader - * or a loadee) - */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 - -/* - * When compiling an ENGINE entirely as an external shared library, loadable - * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' - * structure type provides the calling application's (or library's) error - * functionality and memory management function pointers to the loaded - * library. These should be used/set in the loaded library code so that the - * loading application's 'state' will be used/changed in all operations. The - * 'static_state' pointer allows the loaded library to know if it shares the - * same static data as the calling application (or library), and thus whether - * these callbacks need to be set or not. - */ -typedef void *(*dyn_MEM_malloc_fn) (size_t, const char *, int); -typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); -typedef void (*dyn_MEM_free_fn) (void *, const char *, int); -typedef struct st_dynamic_MEM_fns { - dyn_MEM_malloc_fn malloc_fn; - dyn_MEM_realloc_fn realloc_fn; - dyn_MEM_free_fn free_fn; -} dynamic_MEM_fns; -/* - * FIXME: Perhaps the memory and locking code (crypto.h) should declare and - * use these types so we (and any other dependent code) can simplify a bit?? - */ -/* The top-level structure */ -typedef struct st_dynamic_fns { - void *static_state; - dynamic_MEM_fns mem_fns; -} dynamic_fns; - -/* - * The version checking function should be of this prototype. NB: The - * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading - * code. If this function returns zero, it indicates a (potential) version - * incompatibility and the loaded library doesn't believe it can proceed. - * Otherwise, the returned value is the (latest) version supported by the - * loading library. The loader may still decide that the loaded code's - * version is unsatisfactory and could veto the load. The function is - * expected to be implemented with the symbol name "v_check", and a default - * implementation can be fully instantiated with - * IMPLEMENT_DYNAMIC_CHECK_FN(). - */ -typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ - OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ - if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ - return 0; } - -/* - * This function is passed the ENGINE structure to initialise with its own - * function and command settings. It should not adjust the structural or - * functional reference counts. If this function returns zero, (a) the load - * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto - * the structure, and (c) the shared library will be unloaded. So - * implementations should do their own internal cleanup in failure - * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, - * represents the ENGINE id that the loader is looking for. If this is NULL, - * the shared library can choose to return failure or to initialise a - * 'default' ENGINE. If non-NULL, the shared library must initialise only an - * ENGINE matching the passed 'id'. The function is expected to be - * implemented with the symbol name "bind_engine". A standard implementation - * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter - * 'fn' is a callback function that populates the ENGINE structure and - * returns an int value (zero for failure). 'fn' should have prototype; - * [static] int fn(ENGINE *e, const char *id); - */ -typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, - const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ - if (ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ - CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ - fns->mem_fns.realloc_fn, \ - fns->mem_fns.free_fn); \ - skip_cbs: \ - if (!fn(e, id)) return 0; \ - return 1; } - -/* - * If the loading application (or library) and the loaded ENGINE library - * share the same static data (eg. they're both dynamically linked to the - * same libcrypto.so) we need a way to avoid trying to set system callbacks - - * this would fail, and for the same reason that it's unnecessary to try. If - * the loaded ENGINE has (or gets from through the loader) its own copy of - * the libcrypto static data, we will need to set the callbacks. The easiest - * way to detect this is to have a function that returns a pointer to some - * static data and let the loading application and loaded ENGINE compare - * their respective values. - */ -void *ENGINE_get_static_state(void); - -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/openssl/include/openssl/engineerr.h b/openssl/include/openssl/engineerr.h deleted file mode 100644 index 52e7edb..0000000 --- a/openssl/include/openssl/engineerr.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ENGINEERR_H -# define HEADER_ENGINEERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_ENGINE - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ENGINE_strings(void); - -/* - * ENGINE function codes. - */ -# define ENGINE_F_DIGEST_UPDATE 198 -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_FIRST 195 -# define ENGINE_F_ENGINE_GET_LAST 196 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CLEANUP_ITEM 199 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_OSSL_HMAC_INIT 200 - -/* - * 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/openssl/include/openssl/err.h b/openssl/include/openssl/err.h deleted file mode 100644 index 9549219..0000000 --- a/openssl/include/openssl/err.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ERR_H -# define HEADER_ERR_H - -# include - -# ifndef OPENSSL_NO_STDIO -# include -# include -# endif - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) -# endif - -# include - -# define ERR_TXT_MALLOCED 0x01 -# define ERR_TXT_STRING 0x02 - -# define ERR_FLAG_MARK 0x01 -# define ERR_FLAG_CLEAR 0x02 - -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { - int err_flags[ERR_NUM_ERRORS]; - unsigned long err_buffer[ERR_NUM_ERRORS]; - char *err_data[ERR_NUM_ERRORS]; - int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; - int err_line[ERR_NUM_ERRORS]; - int top, bottom; -} ERR_STATE; - -/* library */ -# define ERR_LIB_NONE 1 -# define ERR_LIB_SYS 2 -# define ERR_LIB_BN 3 -# define ERR_LIB_RSA 4 -# define ERR_LIB_DH 5 -# define ERR_LIB_EVP 6 -# define ERR_LIB_BUF 7 -# define ERR_LIB_OBJ 8 -# define ERR_LIB_PEM 9 -# define ERR_LIB_DSA 10 -# define ERR_LIB_X509 11 -/* #define ERR_LIB_METH 12 */ -# define ERR_LIB_ASN1 13 -# define ERR_LIB_CONF 14 -# define ERR_LIB_CRYPTO 15 -# define ERR_LIB_EC 16 -# define ERR_LIB_SSL 20 -/* #define ERR_LIB_SSL23 21 */ -/* #define ERR_LIB_SSL2 22 */ -/* #define ERR_LIB_SSL3 23 */ -/* #define ERR_LIB_RSAREF 30 */ -/* #define ERR_LIB_PROXY 31 */ -# define ERR_LIB_BIO 32 -# define ERR_LIB_PKCS7 33 -# define ERR_LIB_X509V3 34 -# define ERR_LIB_PKCS12 35 -# define ERR_LIB_RAND 36 -# define ERR_LIB_DSO 37 -# define ERR_LIB_ENGINE 38 -# define ERR_LIB_OCSP 39 -# define ERR_LIB_UI 40 -# define ERR_LIB_COMP 41 -# define ERR_LIB_ECDSA 42 -# define ERR_LIB_ECDH 43 -# define ERR_LIB_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_USER 128 - -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) - -# define ERR_PACK(l,f,r) ( \ - (((unsigned int)(l) & 0x0FF) << 24L) | \ - (((unsigned int)(f) & 0xFFF) << 12L) | \ - (((unsigned int)(r) & 0xFFF) ) ) -# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) -# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) -# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) -# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) - -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_GETADDRINFO 12 -# define SYS_F_GETNAMEINFO 13 -# define SYS_F_SETSOCKOPT 14 -# define SYS_F_GETSOCKOPT 15 -# define SYS_F_GETSOCKNAME 16 -# define SYS_F_GETHOSTBYNAME 17 -# define SYS_F_FFLUSH 18 -# define SYS_F_OPEN 19 -# define SYS_F_CLOSE 20 -# define SYS_F_IOCTL 21 -# define SYS_F_STAT 22 -# define SYS_F_FCNTL 23 -# define SYS_F_FSTAT 24 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) -# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) -# define ERR_R_PASSED_INVALID_ARGUMENT (7) -# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) - -/* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries - */ - -typedef struct ERR_string_data_st { - unsigned long error; - const char *string; -} ERR_STRING_DATA; - -DEFINE_LHASH_OF(ERR_STRING_DATA); - -void ERR_put_error(int lib, int func, int reason, const char *file, int line); -void ERR_set_error_data(char *data, int flags); - -unsigned long ERR_get_error(void); -unsigned long ERR_get_error_line(const char **file, int *line); -unsigned long ERR_get_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_error(void); -unsigned long ERR_peek_error_line(const char **file, int *line); -unsigned long ERR_peek_error_line_data(const char **file, int *line, - const char **data, int *flags); -unsigned long ERR_peek_last_error(void); -unsigned long ERR_peek_last_error_line(const char **file, int *line); -unsigned long ERR_peek_last_error_line_data(const char **file, int *line, - const char **data, int *flags); -void ERR_clear_error(void); -char *ERR_error_string(unsigned long e, char *buf); -void ERR_error_string_n(unsigned long e, char *buf, size_t len); -const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); -const char *ERR_reason_error_string(unsigned long e); -void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -void ERR_print_errors_fp(FILE *fp); -# endif -void ERR_print_errors(BIO *bp); -void ERR_add_error_data(int num, ...); -void ERR_add_error_vdata(int num, va_list args); -int ERR_load_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_strings_const(const ERR_STRING_DATA *str); -int ERR_unload_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_ERR_strings(void); - -#if OPENSSL_API_COMPAT < 0x10100000L -# define ERR_load_crypto_strings() \ - OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) -# define ERR_free_strings() while(0) continue -#endif - -DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) -DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) -ERR_STATE *ERR_get_state(void); - -int ERR_get_next_error_library(void); - -int ERR_set_mark(void); -int ERR_pop_to_mark(void); -int ERR_clear_last_mark(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openssl/include/openssl/evp.h b/openssl/include/openssl/evp.h deleted file mode 100644 index 5b41bf3..0000000 --- a/openssl/include/openssl/evp.h +++ /dev/null @@ -1,1666 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H - -# include -# include -# include -# include -# include - -# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ -# define EVP_MAX_KEY_LENGTH 64 -# define EVP_MAX_IV_LENGTH 16 -# define EVP_MAX_BLOCK_LENGTH 32 - -# define PKCS5_SALT_LEN 8 -/* Default PKCS#5 iteration count */ -# define PKCS5_DEFAULT_ITER 2048 - -# include - -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 - -# define EVP_PKEY_NONE NID_undef -# define EVP_PKEY_RSA NID_rsaEncryption -# define EVP_PKEY_RSA2 NID_rsa -# define EVP_PKEY_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 - -#ifdef __cplusplus -extern "C" { -#endif - -# define EVP_PKEY_MO_SIGN 0x0001 -# define EVP_PKEY_MO_VERIFY 0x0002 -# define EVP_PKEY_MO_ENCRYPT 0x0004 -# define EVP_PKEY_MO_DECRYPT 0x0008 - -# ifndef EVP_MD -EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); -EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); -void EVP_MD_meth_free(EVP_MD *md); - -int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); -int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); -int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); -int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); -int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); -int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, - const void *data, - size_t count)); -int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, - unsigned char *md)); -int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, - const EVP_MD_CTX *from)); -int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); -int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, - int p1, void *p2)); - -int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); -int EVP_MD_meth_get_result_size(const EVP_MD *md); -int EVP_MD_meth_get_app_datasize(const EVP_MD *md); -unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); -int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); -int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, - const void *data, - size_t count); -int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, - unsigned char *md); -int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, - const EVP_MD_CTX *from); -int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); -int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, - int p1, void *p2); - -/* digest can only handle a single block */ -# define EVP_MD_FLAG_ONESHOT 0x0001 - -/* 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 - -/* Minimum Algorithm specific ctrl value */ - -# define EVP_MD_CTRL_ALG_CTRL 0x1000 - -# endif /* !EVP_MD */ - -/* values for EVP_MD_CTX flags */ - -# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be - * called once only */ -# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been - * cleaned */ -# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data - * in EVP_MD_CTX_reset */ -/* - * FIPS and pad options are ignored in 1.0.0, definitions are here so we - * don't accidentally reuse the values for other purposes. - */ - -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ - -/* - * The following PAD options are also currently ignored in 1.0.0, digest - * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() - * instead. - */ -# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ -# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ -# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ -# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ - -# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ -/* - * Some functions such as EVP_DigestSign only finalise copies of internal - * contexts so additional data can be included after the finalisation call. - * This is inefficient if this functionality is not required: it is disabled - * if the following flag is set. - */ -# define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 is reserved for internal usage */ - -EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); -EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); -void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); - -int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); -int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); -int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); -int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, - int (*init) (EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc)); -int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, - int (*do_cipher) (EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl)); -int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, - int (*cleanup) (EVP_CIPHER_CTX *)); -int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, - int (*set_asn1_parameters) (EVP_CIPHER_CTX *, - ASN1_TYPE *)); -int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, - int (*get_asn1_parameters) (EVP_CIPHER_CTX *, - ASN1_TYPE *)); -int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, - int (*ctrl) (EVP_CIPHER_CTX *, int type, - int arg, void *ptr)); - -int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc); -int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl); -int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); -int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - int type, int arg, - void *ptr); - -/* Values for cipher flags */ - -/* Modes for ciphers */ - -# define EVP_CIPH_STREAM_CIPHER 0x0 -# define EVP_CIPH_ECB_MODE 0x1 -# define EVP_CIPH_CBC_MODE 0x2 -# define EVP_CIPH_CFB_MODE 0x3 -# define EVP_CIPH_OFB_MODE 0x4 -# define EVP_CIPH_CTR_MODE 0x5 -# define EVP_CIPH_GCM_MODE 0x6 -# define EVP_CIPH_CCM_MODE 0x7 -# define EVP_CIPH_XTS_MODE 0x10001 -# define EVP_CIPH_WRAP_MODE 0x10002 -# define EVP_CIPH_OCB_MODE 0x10003 -# define EVP_CIPH_MODE 0xF0007 -/* Set if variable length cipher */ -# define EVP_CIPH_VARIABLE_LENGTH 0x8 -/* Set if the iv handling should be done by the cipher itself */ -# define EVP_CIPH_CUSTOM_IV 0x10 -/* Set if the cipher's init() function should be called if key is NULL */ -# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 -/* Call ctrl() to init cipher parameters */ -# define EVP_CIPH_CTRL_INIT 0x40 -/* Don't use standard key length function */ -# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 -/* Don't use standard block padding */ -# define EVP_CIPH_NO_PADDING 0x100 -/* cipher handles random key generation */ -# define EVP_CIPH_RAND_KEY 0x200 -/* cipher has its own additional copying logic */ -# define EVP_CIPH_CUSTOM_COPY 0x400 -/* Don't use standard iv length function */ -# define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 -/* Buffer length in bits not bytes: CFB1 mode only */ -# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 -/* - * Cipher handles any and all padding logic as well as finalisation. - */ -# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 -# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 -# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 -/* Cipher can handle pipeline operations */ -# define EVP_CIPH_FLAG_PIPELINE 0X800000 - -/* - * Cipher context flag to indicate we can handle wrap mode: if allowed in - * older applications it could overflow buffers. - */ - -# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 - -/* ctrl() values */ - -# define EVP_CTRL_INIT 0x0 -# define EVP_CTRL_SET_KEY_LENGTH 0x1 -# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 -# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 -# define EVP_CTRL_GET_RC5_ROUNDS 0x4 -# define EVP_CTRL_SET_RC5_ROUNDS 0x5 -# define EVP_CTRL_RAND_KEY 0x6 -# define EVP_CTRL_PBE_PRF_NID 0x7 -# define EVP_CTRL_COPY 0x8 -# define EVP_CTRL_AEAD_SET_IVLEN 0x9 -# define EVP_CTRL_AEAD_GET_TAG 0x10 -# define EVP_CTRL_AEAD_SET_TAG 0x11 -# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 -# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_GCM_IV_GEN 0x13 -# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_CCM_SET_L 0x14 -# define EVP_CTRL_CCM_SET_MSGLEN 0x15 -/* - * AEAD cipher deduces payload length and returns number of bytes required to - * store MAC and eventual padding. Subsequent call to EVP_Cipher even - * appends/verifies MAC. - */ -# define EVP_CTRL_AEAD_TLS1_AAD 0x16 -/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ -# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 -/* Set the GCM invocation field, decrypt only */ -# define EVP_CTRL_GCM_SET_IV_INV 0x18 - -# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 -# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a -# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b -# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c - -# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d - -/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ -# define EVP_CTRL_SET_SBOX 0x1e -/* - * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a - * pre-allocated buffer with specified size - */ -# define EVP_CTRL_SBOX_USED 0x1f -/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, - * 0 switches meshing off - */ -# define EVP_CTRL_KEY_MESH 0x20 -/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ -# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 - -/* Set the output buffers to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 -/* Set the input buffers to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 -/* Set the input buffer lengths to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 - -# define EVP_CTRL_GET_IVLEN 0x25 - -/* 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); - -# ifndef OPENSSL_NO_RSA -# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) -# endif - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) -# endif - -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) -# endif - -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) -# endif -# ifndef OPENSSL_NO_SIPHASH -# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ - (char *)(shkey)) -# endif - -# ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ - (char *)(polykey)) -# endif - -/* Add some extra combinations */ -# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) -# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) -# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) -# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) - -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); - -const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); -int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, - const void *data, size_t count); -void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, - int (*update) (EVP_MD_CTX *ctx, - const void *data, size_t count)); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) -EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); -void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); -void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); - -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) - -const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); -int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); -void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); -void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); -void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) -# endif -# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) - -# define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) -# define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) - -# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_SignInit(a,b) EVP_DigestInit(a,b) -# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) -# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) -# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) - -# ifdef CONST_STRICT -void BIO_set_md(BIO *, const EVP_MD *md); -# else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) -# endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ - (char *)(c_pp)) - -/*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, - unsigned char *out, - const unsigned char *in, unsigned int inl); - -# define EVP_add_cipher_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_add_digest_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_delete_cipher_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); -# define EVP_delete_digest_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); - -int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); -EVP_MD_CTX *EVP_MD_CTX_new(void); -int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); -void EVP_MD_CTX_free(EVP_MD_CTX *ctx); -# define EVP_MD_CTX_create() EVP_MD_CTX_new() -# define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) -# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) -__owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); -void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); -void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); -int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); -__owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, - ENGINE *impl); -__owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, - size_t cnt); -__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__owur int EVP_Digest(const void *data, size_t count, - unsigned char *md, unsigned int *size, - const EVP_MD *type, ENGINE *impl); - -__owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); -__owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); -__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, - size_t len); - -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_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl, const unsigned char *in, int inl); -/*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl); -/*__owur*/ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl); - -__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -/*__owur*/ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, - const EVP_CIPHER *cipher, ENGINE *impl, - const unsigned char *key, - const unsigned char *iv); -/*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl, const unsigned char *in, int inl); -__owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); -/*__owur*/ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv, - int enc); -/*__owur*/ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, - const EVP_CIPHER *cipher, ENGINE *impl, - const unsigned char *key, - const unsigned char *iv, int enc); -__owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl, const unsigned char *in, int inl); -__owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); -__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, - EVP_PKEY *pkey); - -__owur int EVP_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_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, - size_t siglen, const unsigned char *tbs, - size_t tbslen); - -/*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, - EVP_PKEY *pkey); -__owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, - size_t *siglen); - -__owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, - const EVP_MD *type, ENGINE *e, - EVP_PKEY *pkey); -__owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, - size_t siglen); - -# ifndef OPENSSL_NO_RSA -__owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - const unsigned char *ek, int ekl, - const unsigned char *iv, EVP_PKEY *priv); -__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -__owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, - unsigned char **ek, int *ekl, unsigned char *iv, - EVP_PKEY **pubk, int npubk); -__owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -# endif - -EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); -void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); -int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); -int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); -void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); -int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); -int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned - char *out, int *outl); -int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) -# define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) -# endif -EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); -int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); -void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); -int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); -int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); -int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); -int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); - -const BIO_METHOD *BIO_f_md(void); -const BIO_METHOD *BIO_f_base64(void); -const BIO_METHOD *BIO_f_cipher(void); -const BIO_METHOD *BIO_f_reliable(void); -__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, - const unsigned char *i, int enc); - -const EVP_MD *EVP_md_null(void); -# ifndef OPENSSL_NO_MD2 -const EVP_MD *EVP_md2(void); -# endif -# ifndef OPENSSL_NO_MD4 -const EVP_MD *EVP_md4(void); -# endif -# ifndef OPENSSL_NO_MD5 -const EVP_MD *EVP_md5(void); -const EVP_MD *EVP_md5_sha1(void); -# endif -# ifndef OPENSSL_NO_BLAKE2 -const EVP_MD *EVP_blake2b512(void); -const EVP_MD *EVP_blake2s256(void); -# endif -const EVP_MD *EVP_sha1(void); -const EVP_MD *EVP_sha224(void); -const EVP_MD *EVP_sha256(void); -const EVP_MD *EVP_sha384(void); -const EVP_MD *EVP_sha512(void); -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 - -# if OPENSSL_API_COMPAT < 0x10100000L -# define OPENSSL_add_all_algorithms_conf() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS \ - | OPENSSL_INIT_LOAD_CONFIG, NULL) -# define OPENSSL_add_all_algorithms_noconf() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) - -# ifdef OPENSSL_LOAD_CONF -# define OpenSSL_add_all_algorithms() OPENSSL_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_MD_do_all(void (*fn) (const EVP_MD *ciph, - const char *from, const char *to, void *x), - void *arg); -void EVP_MD_do_all_sorted(void (*fn) - (const EVP_MD *ciph, const char *from, - const char *to, void *x), void *arg); - -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); -int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(const EVP_PKEY *pkey); -int EVP_PKEY_security_bits(const EVP_PKEY *pkey); -int EVP_PKEY_size(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_alias_type(EVP_PKEY *pkey, int type); -# ifndef OPENSSL_NO_ENGINE -int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); -ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); -# endif -int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); -void *EVP_PKEY_get0(const EVP_PKEY *pkey); -const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); -# ifndef OPENSSL_NO_POLY1305 -const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH -const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif - -# ifndef OPENSSL_NO_RSA -struct rsa_st; -int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); -struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA -struct dsa_st; -int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); -struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH -struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC -struct ec_key_st; -int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); -struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif - -EVP_PKEY *EVP_PKEY_new(void); -int EVP_PKEY_up_ref(EVP_PKEY *pkey); -void EVP_PKEY_free(EVP_PKEY *pkey); - -EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); - -EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, - long length); -EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, - long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); - -int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); -int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); -int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); - -int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); -int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); - -int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); - -int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, - const unsigned char *pt, size_t ptlen); -size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); - -int EVP_CIPHER_type(const EVP_CIPHER *ctx); - -/* calls methods */ -int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* These are used by EVP_CIPHER methods */ -int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* PKCS5 password based encryption */ -int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); -int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - int keylen, unsigned char *out); -int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - const EVP_MD *digest, int keylen, unsigned char *out); -int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md, int en_de); - -#ifndef OPENSSL_NO_SCRYPT -int EVP_PBE_scrypt(const char *pass, size_t passlen, - const unsigned char *salt, size_t saltlen, - uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, - unsigned char *key, size_t keylen); - -int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, - int passlen, ASN1_TYPE *param, - const EVP_CIPHER *c, const EVP_MD *md, int en_de); -#endif - -void PKCS5_PBE_add(void); - -int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, - ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); - -/* PBE type */ - -/* Can appear as the outermost AlgorithmIdentifier */ -# define EVP_PBE_TYPE_OUTER 0x0 -/* Is an PRF type OID */ -# define EVP_PBE_TYPE_PRF 0x1 -/* Is a PKCS#5 v2.0 KDF */ -# define EVP_PBE_TYPE_KDF 0x2 - -int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, - int md_nid, EVP_PBE_KEYGEN *keygen); -int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, - EVP_PBE_KEYGEN *keygen); -int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, - EVP_PBE_KEYGEN **pkeygen); -void EVP_PBE_cleanup(void); -int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); - -# define ASN1_PKEY_ALIAS 0x1 -# define ASN1_PKEY_DYNAMIC 0x2 -# define ASN1_PKEY_SIGPARAM_NULL 0x4 - -# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 -# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 -# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 -# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 -# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 -# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 - -# define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 -# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa - -int EVP_PKEY_asn1_get_count(void); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, - const char *str, int len); -int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); -int EVP_PKEY_asn1_add_alias(int to, int from); -int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, - int *ppkey_flags, const char **pinfo, - const char **ppem_str, - const EVP_PKEY_ASN1_METHOD *ameth); - -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); -EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, - const char *pem_str, - const char *info); -void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, - const EVP_PKEY_ASN1_METHOD *src); -void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); -void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, - int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), - int (*pub_encode) (X509_PUBKEY *pub, - const EVP_PKEY *pk), - int (*pub_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*pub_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx), - int (*pkey_size) (const EVP_PKEY *pk), - int (*pkey_bits) (const EVP_PKEY *pk)); -void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, - int (*priv_decode) (EVP_PKEY *pk, - const PKCS8_PRIV_KEY_INFO - *p8inf), - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, - const EVP_PKEY *pk), - int (*priv_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); -void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, - int derlen), - int (*param_encode) (const EVP_PKEY *pkey, - unsigned char **pder), - int (*param_missing) (const EVP_PKEY *pk), - int (*param_copy) (EVP_PKEY *to, - const EVP_PKEY *from), - int (*param_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*param_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); - -void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, - void (*pkey_free) (EVP_PKEY *pkey)); -void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, - long arg1, void *arg2)); -void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, - int (*item_verify) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, - EVP_PKEY *pkey), - int (*item_sign) (EVP_MD_CTX *ctx, - const ASN1_ITEM *it, - void *asn, - X509_ALGOR *alg1, - X509_ALGOR *alg2, - ASN1_BIT_STRING *sig)); - -void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, - int (*siginf_set) (X509_SIG_INFO *siginf, - const X509_ALGOR *alg, - const ASN1_STRING *sig)); - -void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_pub_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_param_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_priv_key) (EVP_PKEY *pk, - const unsigned char - *priv, - size_t len)); -void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_pub_key) (EVP_PKEY *pk, - const unsigned char *pub, - size_t len)); -void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_priv_key) (const EVP_PKEY *pk, - unsigned char *priv, - size_t *len)); -void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_pub_key) (const EVP_PKEY *pk, - unsigned char *pub, - size_t *len)); - -void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_security_bits) (const EVP_PKEY - *pk)); - -# define EVP_PKEY_OP_UNDEFINED 0 -# define EVP_PKEY_OP_PARAMGEN (1<<1) -# define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) - -# define EVP_PKEY_OP_TYPE_SIG \ - (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ - | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) - -# define EVP_PKEY_OP_TYPE_CRYPT \ - (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) - -# define EVP_PKEY_OP_TYPE_NOGEN \ - (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) - -# define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) - -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) - -# define EVP_PKEY_CTRL_MD 1 -# define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - -# define EVP_PKEY_CTRL_SET_MAC_KEY 6 - -# define EVP_PKEY_CTRL_DIGESTINIT 7 - -/* Used by GOST key encryption in TLS */ -# define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - -# define EVP_PKEY_CTRL_CIPHER 12 - -# define EVP_PKEY_CTRL_GET_MD 13 - -# define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 - -# define EVP_PKEY_ALG_CTRL 0x1000 - -# define EVP_PKEY_FLAG_AUTOARGLEN 2 -/* - * Method handles all operations: don't assume any digest related defaults. - */ -# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 - -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); -size_t EVP_PKEY_meth_get_count(void); -const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); - -EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); -void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, int p1, void *p2); -int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, - const char *value); -int EVP_PKEY_CTX_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(int type, ENGINE *e, - const unsigned char *priv, - 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); - -EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, - size_t len, const EVP_CIPHER *cipher); - -void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); -EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); - -EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); - -void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, - const unsigned char *sig, size_t siglen, - const unsigned char *tbs, size_t tbslen); -int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, - unsigned char *rout, size_t *routlen, - const unsigned char *sig, size_t siglen); -int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); -int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, - unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); - -int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); -int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); - -typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); -int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); -int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); -int EVP_PKEY_check(EVP_PKEY_CTX *ctx); -int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); -int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); - -void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); -EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); - -int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_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)); - -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)); - -void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, - int (*digest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, - int (**pinit) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, - int (**pcopy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, - void (**pcleanup) (EVP_PKEY_CTX *ctx)); - -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)); - -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)); - -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)); - -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)); - -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)); - -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)); - -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)); - -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)); - -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)); - -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)); - -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)); - -void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, - int (**digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_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)); - -void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, - int (**pdigest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); -void EVP_add_alg_module(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/evperr.h b/openssl/include/openssl/evperr.h deleted file mode 100644 index a117756..0000000 --- a/openssl/include/openssl/evperr.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_EVPERR_H -# define HEADER_EVPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EVP_strings(void); - -/* - * EVP function codes. - */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_INIT_KEY 207 -# define EVP_F_AES_GCM_CTRL 196 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_OCB_CIPHER 169 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_T4_XTS_INIT_KEY 208 -# define EVP_F_AES_WRAP_CIPHER 170 -# define EVP_F_AES_XTS_INIT_KEY 209 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_ARIA_CCM_INIT_KEY 175 -# define EVP_F_ARIA_GCM_CTRL 197 -# define EVP_F_ARIA_GCM_INIT_KEY 176 -# define EVP_F_ARIA_INIT_KEY 185 -# define EVP_F_B64_NEW 198 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CHACHA20_POLY1305_CTRL 182 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_DES_EDE3_WRAP_CIPHER 171 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_ENC_NEW 199 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DECRYPTUPDATE 166 -# define EVP_F_EVP_DIGESTFINALXOF 174 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_ENCRYPTUPDATE 167 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PBE_SCRYPT 181 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKEY2PKCS8 113 -# define EVP_F_EVP_PKEY_ASN1_ADD0 188 -# define EVP_F_EVP_PKEY_CHECK 186 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_CTX_MD 168 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET0_DH 119 -# define EVP_F_EVP_PKEY_GET0_DSA 120 -# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET0_HMAC 183 -# define EVP_F_EVP_PKEY_GET0_POLY1305 184 -# define EVP_F_EVP_PKEY_GET0_RSA 121 -# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 -# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 -# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_METH_ADD0 194 -# define EVP_F_EVP_PKEY_METH_NEW 195 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 -# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 -# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_PARAM_CHECK 189 -# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 -# define EVP_F_EVP_PKEY_SET1_ENGINE 187 -# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_OK_NEW 200 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 -# define EVP_F_R_32_12_16_INIT_KEY 242 -# define EVP_F_S390X_AES_GCM_CTRL 201 -# define EVP_F_UPDATE 173 - -/* - * EVP reason codes. - */ -# define EVP_R_AES_KEY_SETUP_FAILED 143 -# define EVP_R_ARIA_KEY_SETUP_FAILED 176 -# define EVP_R_BAD_DECRYPT 100 -# define EVP_R_BAD_KEY_LENGTH 195 -# define EVP_R_BUFFER_TOO_SMALL 155 -# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 -# define EVP_R_CIPHER_PARAMETER_ERROR 122 -# define EVP_R_COMMAND_NOT_SUPPORTED 147 -# define EVP_R_COPY_ERROR 173 -# define EVP_R_CTRL_NOT_IMPLEMENTED 132 -# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 -# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 -# define EVP_R_DECODE_ERROR 114 -# define EVP_R_DIFFERENT_KEY_TYPES 101 -# define EVP_R_DIFFERENT_PARAMETERS 153 -# define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 -# define EVP_R_EXPECTING_AN_HMAC_KEY 174 -# define EVP_R_EXPECTING_AN_RSA_KEY 127 -# define EVP_R_EXPECTING_A_DH_KEY 128 -# define EVP_R_EXPECTING_A_DSA_KEY 129 -# define EVP_R_EXPECTING_A_EC_KEY 142 -# define EVP_R_EXPECTING_A_POLY1305_KEY 164 -# define EVP_R_EXPECTING_A_SIPHASH_KEY 175 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 -# define EVP_R_GET_RAW_KEY_FAILED 182 -# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 -# define EVP_R_INITIALIZATION_ERROR 134 -# define EVP_R_INPUT_NOT_INITIALIZED 111 -# define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 -# define EVP_R_INVALID_IV_LENGTH 194 -# define EVP_R_INVALID_KEY 163 -# define EVP_R_INVALID_KEY_LENGTH 130 -# define EVP_R_INVALID_OPERATION 148 -# define EVP_R_KEYGEN_FAILURE 120 -# define EVP_R_KEY_SETUP_FAILED 180 -# 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_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_KEY_SET 154 -# define EVP_R_NO_OPERATION_SET 149 -# define EVP_R_ONLY_ONESHOT_SUPPORTED 177 -# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_PARTIALLY_OVERLAPPING 162 -# define EVP_R_PBKDF2_ERROR 181 -# 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_PUBLIC_KEY_NOT_RSA 106 -# define EVP_R_UNKNOWN_CIPHER 160 -# define EVP_R_UNKNOWN_DIGEST 161 -# define EVP_R_UNKNOWN_OPTION 169 -# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 -# define EVP_R_UNSUPPORTED_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_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_WRAP_MODE_NOT_ALLOWED 170 -# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_XTS_DUPLICATED_KEYS 183 - -#endif diff --git a/openssl/include/openssl/hmac.h b/openssl/include/openssl/hmac.h deleted file mode 100644 index c66ba6d..0000000 --- a/openssl/include/openssl/hmac.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H - -# include - -# include - -# if OPENSSL_API_COMPAT < 0x10200000L -# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -size_t HMAC_size(const HMAC_CTX *e); -HMAC_CTX *HMAC_CTX_new(void); -int HMAC_CTX_reset(HMAC_CTX *ctx); -void HMAC_CTX_free(HMAC_CTX *ctx); - -DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md)) - -/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, - size_t len); -/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, - unsigned int *len); -unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); - -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); -const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openssl/include/openssl/idea.h b/openssl/include/openssl/idea.h deleted file mode 100644 index bc303b3..0000000 --- a/openssl/include/openssl/idea.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H - -# include - -# ifndef OPENSSL_NO_IDEA -# ifdef __cplusplus -extern "C" { -# endif - -typedef unsigned int IDEA_INT; - -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 - -typedef struct idea_key_st { - IDEA_INT data[9][6]; -} IDEA_KEY_SCHEDULE; - -const char *IDEA_options(void); -void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define idea_options IDEA_options -# define idea_ecb_encrypt IDEA_ecb_encrypt -# define idea_set_encrypt_key IDEA_set_encrypt_key -# define idea_set_decrypt_key IDEA_set_decrypt_key -# define idea_cbc_encrypt IDEA_cbc_encrypt -# define idea_cfb64_encrypt IDEA_cfb64_encrypt -# define idea_ofb64_encrypt IDEA_ofb64_encrypt -# define idea_encrypt IDEA_encrypt -# endif - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/kdf.h b/openssl/include/openssl/kdf.h deleted file mode 100644 index 609a779..0000000 --- a/openssl/include/openssl/kdf.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_KDF_H -# define HEADER_KDF_H - -# include -#ifdef __cplusplus -extern "C" { -#endif - -# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) -# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_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 0 -# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 -# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 - -# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) - -# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) - -# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) - -# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) - -# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) - -# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) - -# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) - -# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) - -# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_N, n) - -# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_R, r) - -# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_P, p) - -# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/kdferr.h b/openssl/include/openssl/kdferr.h deleted file mode 100644 index 6770025..0000000 --- a/openssl/include/openssl/kdferr.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_KDFERR_H -# define HEADER_KDFERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_KDF_strings(void); - -/* - * KDF function codes. - */ -# define KDF_F_PKEY_HKDF_CTRL_STR 103 -# define KDF_F_PKEY_HKDF_DERIVE 102 -# define KDF_F_PKEY_HKDF_INIT 108 -# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 -# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 -# define KDF_F_PKEY_SCRYPT_DERIVE 109 -# define KDF_F_PKEY_SCRYPT_INIT 106 -# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 -# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 -# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 -# define KDF_F_PKEY_TLS1_PRF_INIT 110 -# define KDF_F_TLS1_PRF_ALG 111 - -/* - * KDF reason codes. - */ -# define KDF_R_INVALID_DIGEST 100 -# define KDF_R_MISSING_ITERATION_COUNT 109 -# define KDF_R_MISSING_KEY 104 -# define KDF_R_MISSING_MESSAGE_DIGEST 105 -# define KDF_R_MISSING_PARAMETER 101 -# define KDF_R_MISSING_PASS 110 -# define KDF_R_MISSING_SALT 111 -# define KDF_R_MISSING_SECRET 107 -# define KDF_R_MISSING_SEED 106 -# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 -# define KDF_R_VALUE_ERROR 108 -# define KDF_R_VALUE_MISSING 102 - -#endif diff --git a/openssl/include/openssl/lhash.h b/openssl/include/openssl/lhash.h deleted file mode 100644 index 56e6b39..0000000 --- a/openssl/include/openssl/lhash.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * Header for dynamic hash table routines Author - Eric Young - */ - -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct lhash_node_st OPENSSL_LH_NODE; -typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); -typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); -typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); -typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); -typedef struct lhash_st OPENSSL_LHASH; - -/* - * Macros for declaring and implementing type-safe wrappers for LHASH - * callbacks. This way, callbacks can be provided to LHASH structures without - * function pointer casting and the macro-defined callbacks provide - * per-variable casting before deferring to the underlying type-specific - * callbacks. NB: It is possible to place a "static" in front of both the - * DECLARE and IMPLEMENT macros if the functions are strictly internal. - */ - -/* First: "hash" functions */ -# define DECLARE_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *); -# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ - unsigned long name##_LHASH_HASH(const void *arg) { \ - const o_type *a = arg; \ - return name##_hash(a); } -# define LHASH_HASH_FN(name) name##_LHASH_HASH - -/* Second: "compare" functions */ -# define DECLARE_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *, const void *); -# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ - int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ - const o_type *a = arg1; \ - const o_type *b = arg2; \ - return name##_cmp(a,b); } -# define LHASH_COMP_FN(name) name##_LHASH_COMP - -/* Fourth: "doall_arg" functions */ -# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *, void *); -# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ - void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ - o_type *a = arg1; \ - a_type *b = arg2; \ - name##_doall_arg(a, b); } -# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG - - -# define LH_LOAD_MULT 256 - -int OPENSSL_LH_error(OPENSSL_LHASH *lh); -OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); -void OPENSSL_LH_free(OPENSSL_LHASH *lh); -void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); -void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); -void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); -void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); -void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); -unsigned long OPENSSL_LH_strhash(const char *c); -unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); -unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); -void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); - -# ifndef OPENSSL_NO_STDIO -void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); -# endif -void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define _LHASH OPENSSL_LHASH -# define LHASH_NODE OPENSSL_LH_NODE -# define lh_error OPENSSL_LH_error -# define lh_new OPENSSL_LH_new -# define lh_free OPENSSL_LH_free -# define lh_insert OPENSSL_LH_insert -# define lh_delete OPENSSL_LH_delete -# define lh_retrieve OPENSSL_LH_retrieve -# define lh_doall OPENSSL_LH_doall -# define lh_doall_arg OPENSSL_LH_doall_arg -# define lh_strhash OPENSSL_LH_strhash -# define lh_num_items OPENSSL_LH_num_items -# ifndef OPENSSL_NO_STDIO -# define lh_stats OPENSSL_LH_stats -# define lh_node_stats OPENSSL_LH_node_stats -# define lh_node_usage_stats OPENSSL_LH_node_usage_stats -# endif -# define lh_stats_bio OPENSSL_LH_stats_bio -# define lh_node_stats_bio OPENSSL_LH_node_stats_bio -# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio -# endif - -/* Type checking... */ - -# define LHASH_OF(type) struct lhash_st_##type - -# define DEFINE_LHASH_OF(type) \ - LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ - static ossl_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_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ - } \ - static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ - { \ - OPENSSL_LH_free((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 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); \ - } \ - 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(LHASH_OF(type) *lh, \ - void (*doall)(type *)) \ - { \ - OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ - } \ - LHASH_OF(type) - -#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ - int_implement_lhash_doall(type, argtype, const type) - -#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ - int_implement_lhash_doall(type, argtype, type) - -#define int_implement_lhash_doall(type, argtype, cbargtype) \ - static ossl_unused ossl_inline void \ - lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ - void (*fn)(cbargtype *, argtype *), \ - argtype *arg) \ - { \ - OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ - } \ - LHASH_OF(type) - -DEFINE_LHASH_OF(OPENSSL_STRING); -# ifdef _MSC_VER -/* - * push and pop this warning: - * warning C4090: 'function': different 'const' qualifiers - */ -# pragma warning (push) -# pragma warning (disable: 4090) -# endif - -DEFINE_LHASH_OF(OPENSSL_CSTRING); - -# ifdef _MSC_VER -# pragma warning (pop) -# endif - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_LH_new -# pragma weak OPENSSL_LH_free -# pragma weak OPENSSL_LH_insert -# pragma weak OPENSSL_LH_delete -# pragma weak OPENSSL_LH_retrieve -# pragma weak OPENSSL_LH_error -# pragma weak OPENSSL_LH_num_items -# pragma weak OPENSSL_LH_node_stats_bio -# pragma weak OPENSSL_LH_node_usage_stats_bio -# pragma weak OPENSSL_LH_stats_bio -# pragma weak OPENSSL_LH_get_down_load -# pragma weak OPENSSL_LH_set_down_load -# pragma weak OPENSSL_LH_doall -# pragma weak OPENSSL_LH_doall_arg -# endif /* __SUNPRO_C */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openssl/include/openssl/md2.h b/openssl/include/openssl/md2.h deleted file mode 100644 index 06e9eee..0000000 --- a/openssl/include/openssl/md2.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MD2_H -# define HEADER_MD2_H - -# include - -# ifndef OPENSSL_NO_MD2 -# include -# ifdef __cplusplus -extern "C" { -# endif - -typedef unsigned char MD2_INT; - -# define MD2_DIGEST_LENGTH 16 -# define MD2_BLOCK 16 - -typedef struct MD2state_st { - unsigned int num; - unsigned char data[MD2_BLOCK]; - MD2_INT cksm[MD2_BLOCK]; - MD2_INT state[MD2_BLOCK]; -} MD2_CTX; - -const char *MD2_options(void); -int MD2_Init(MD2_CTX *c); -int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); -int MD2_Final(unsigned char *md, MD2_CTX *c); -unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/md4.h b/openssl/include/openssl/md4.h deleted file mode 100644 index 129af7f..0000000 --- a/openssl/include/openssl/md4.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MD4_H -# define HEADER_MD4_H - -# include - -# ifndef OPENSSL_NO_MD4 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD4_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define MD4_LONG unsigned int - -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 - -typedef struct MD4state_st { - MD4_LONG A, B, C, D; - MD4_LONG Nl, Nh; - MD4_LONG data[MD4_LBLOCK]; - unsigned int num; -} MD4_CTX; - -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/md5.h b/openssl/include/openssl/md5.h deleted file mode 100644 index 5f02418..0000000 --- a/openssl/include/openssl/md5.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MD5_H -# define HEADER_MD5_H - -# include - -# ifndef OPENSSL_NO_MD5 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -/* - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! MD5_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define MD5_LONG unsigned int - -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 - -typedef struct MD5state_st { - MD5_LONG A, B, C, D; - MD5_LONG Nl, Nh; - MD5_LONG data[MD5_LBLOCK]; - unsigned int num; -} MD5_CTX; - -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/mdc2.h b/openssl/include/openssl/mdc2.h deleted file mode 100644 index 6cf550e..0000000 --- a/openssl/include/openssl/mdc2.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H - -# include - -#ifndef OPENSSL_NO_MDC2 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 - -typedef struct mdc2_ctx_st { - unsigned int num; - unsigned char data[MDC2_BLOCK]; - DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ -} MDC2_CTX; - -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/modes.h b/openssl/include/openssl/modes.h deleted file mode 100644 index cd51d64..0000000 --- a/openssl/include/openssl/modes.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_MODES_H -# define HEADER_MODES_H - -# include - -# ifdef __cplusplus -extern "C" { -# endif -typedef void (*block128_f) (const unsigned char in[16], - unsigned char out[16], const void *key); - -typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int enc); - -typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16]); - -typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16], - unsigned char cmac[16]); - -void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); -void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); - -void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], unsigned int *num, - block128_f block); - -void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], - unsigned int *num, ctr128_f ctr); - -void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - block128_f block); - -void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, - size_t bits, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); - -size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -typedef struct gcm128_context GCM128_CONTEXT; - -GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); -void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); -void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, - size_t len); -int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); - -typedef struct ccm128_context CCM128_CONTEXT; - -void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, - unsigned int M, unsigned int L, void *key, - block128_f block); -int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, - size_t nlen, size_t mlen); -void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, - size_t alen); -int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); - -typedef struct xts128_context XTS128_CONTEXT; - -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); -size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); -size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); - -# ifndef OPENSSL_NO_OCB -typedef struct ocb128_context OCB128_CONTEXT; - -typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - size_t start_block_num, - unsigned char offset_i[16], - const unsigned char L_[][16], - unsigned char checksum[16]); - -OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, - void *keyenc, void *keydec); -int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, - size_t len, size_t taglen); -int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); -# endif /* OPENSSL_NO_OCB */ - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/openssl/include/openssl/obj_mac.h b/openssl/include/openssl/obj_mac.h deleted file mode 100644 index 03d6e1c..0000000 --- a/openssl/include/openssl/obj_mac.h +++ /dev/null @@ -1,5198 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by crypto/objects/objects.pl - * - * Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#define SN_undef "UNDEF" -#define LN_undef "undefined" -#define NID_undef 0 -#define OBJ_undef 0L - -#define SN_itu_t "ITU-T" -#define LN_itu_t "itu-t" -#define NID_itu_t 645 -#define OBJ_itu_t 0L - -#define NID_ccitt 404 -#define OBJ_ccitt OBJ_itu_t - -#define SN_iso "ISO" -#define LN_iso "iso" -#define NID_iso 181 -#define OBJ_iso 1L - -#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" -#define LN_joint_iso_itu_t "joint-iso-itu-t" -#define NID_joint_iso_itu_t 646 -#define OBJ_joint_iso_itu_t 2L - -#define NID_joint_iso_ccitt 393 -#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t - -#define SN_member_body "member-body" -#define LN_member_body "ISO Member Body" -#define NID_member_body 182 -#define OBJ_member_body OBJ_iso,2L - -#define SN_identified_organization "identified-organization" -#define NID_identified_organization 676 -#define OBJ_identified_organization OBJ_iso,3L - -#define SN_hmac_md5 "HMAC-MD5" -#define LN_hmac_md5 "hmac-md5" -#define NID_hmac_md5 780 -#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L - -#define SN_hmac_sha1 "HMAC-SHA1" -#define LN_hmac_sha1 "hmac-sha1" -#define NID_hmac_sha1 781 -#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L - -#define SN_x509ExtAdmission "x509ExtAdmission" -#define LN_x509ExtAdmission "Professional Information or basis for Admission" -#define NID_x509ExtAdmission 1093 -#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L - -#define SN_certicom_arc "certicom-arc" -#define NID_certicom_arc 677 -#define OBJ_certicom_arc OBJ_identified_organization,132L - -#define SN_ieee "ieee" -#define NID_ieee 1170 -#define OBJ_ieee OBJ_identified_organization,111L - -#define SN_ieee_siswg "ieee-siswg" -#define LN_ieee_siswg "IEEE Security in Storage Working Group" -#define NID_ieee_siswg 1171 -#define OBJ_ieee_siswg OBJ_ieee,2L,1619L - -#define SN_international_organizations "international-organizations" -#define LN_international_organizations "International Organizations" -#define NID_international_organizations 647 -#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L - -#define SN_wap "wap" -#define NID_wap 678 -#define OBJ_wap OBJ_international_organizations,43L - -#define SN_wap_wsg "wap-wsg" -#define NID_wap_wsg 679 -#define OBJ_wap_wsg OBJ_wap,1L - -#define SN_selected_attribute_types "selected-attribute-types" -#define LN_selected_attribute_types "Selected Attribute Types" -#define NID_selected_attribute_types 394 -#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L - -#define SN_clearance "clearance" -#define NID_clearance 395 -#define OBJ_clearance OBJ_selected_attribute_types,55L - -#define SN_ISO_US "ISO-US" -#define LN_ISO_US "ISO US Member Body" -#define NID_ISO_US 183 -#define OBJ_ISO_US OBJ_member_body,840L - -#define SN_X9_57 "X9-57" -#define LN_X9_57 "X9.57" -#define NID_X9_57 184 -#define OBJ_X9_57 OBJ_ISO_US,10040L - -#define SN_X9cm "X9cm" -#define LN_X9cm "X9.57 CM ?" -#define NID_X9cm 185 -#define OBJ_X9cm OBJ_X9_57,4L - -#define SN_ISO_CN "ISO-CN" -#define LN_ISO_CN "ISO CN Member Body" -#define NID_ISO_CN 1140 -#define OBJ_ISO_CN OBJ_member_body,156L - -#define SN_oscca "oscca" -#define NID_oscca 1141 -#define OBJ_oscca OBJ_ISO_CN,10197L - -#define SN_sm_scheme "sm-scheme" -#define NID_sm_scheme 1142 -#define OBJ_sm_scheme OBJ_oscca,1L - -#define SN_dsa "DSA" -#define LN_dsa "dsaEncryption" -#define NID_dsa 116 -#define OBJ_dsa OBJ_X9cm,1L - -#define SN_dsaWithSHA1 "DSA-SHA1" -#define LN_dsaWithSHA1 "dsaWithSHA1" -#define NID_dsaWithSHA1 113 -#define OBJ_dsaWithSHA1 OBJ_X9cm,3L - -#define SN_ansi_X9_62 "ansi-X9-62" -#define LN_ansi_X9_62 "ANSI X9.62" -#define NID_ansi_X9_62 405 -#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L - -#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L - -#define SN_X9_62_prime_field "prime-field" -#define NID_X9_62_prime_field 406 -#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L - -#define SN_X9_62_characteristic_two_field "characteristic-two-field" -#define NID_X9_62_characteristic_two_field 407 -#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L - -#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" -#define NID_X9_62_id_characteristic_two_basis 680 -#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L - -#define SN_X9_62_onBasis "onBasis" -#define NID_X9_62_onBasis 681 -#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L - -#define SN_X9_62_tpBasis "tpBasis" -#define NID_X9_62_tpBasis 682 -#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L - -#define SN_X9_62_ppBasis "ppBasis" -#define NID_X9_62_ppBasis 683 -#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L - -#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L - -#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" -#define NID_X9_62_id_ecPublicKey 408 -#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L - -#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L - -#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L - -#define SN_X9_62_c2pnb163v1 "c2pnb163v1" -#define NID_X9_62_c2pnb163v1 684 -#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L - -#define SN_X9_62_c2pnb163v2 "c2pnb163v2" -#define NID_X9_62_c2pnb163v2 685 -#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L - -#define SN_X9_62_c2pnb163v3 "c2pnb163v3" -#define NID_X9_62_c2pnb163v3 686 -#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L - -#define SN_X9_62_c2pnb176v1 "c2pnb176v1" -#define NID_X9_62_c2pnb176v1 687 -#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L - -#define SN_X9_62_c2tnb191v1 "c2tnb191v1" -#define NID_X9_62_c2tnb191v1 688 -#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L - -#define SN_X9_62_c2tnb191v2 "c2tnb191v2" -#define NID_X9_62_c2tnb191v2 689 -#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L - -#define SN_X9_62_c2tnb191v3 "c2tnb191v3" -#define NID_X9_62_c2tnb191v3 690 -#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L - -#define SN_X9_62_c2onb191v4 "c2onb191v4" -#define NID_X9_62_c2onb191v4 691 -#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L - -#define SN_X9_62_c2onb191v5 "c2onb191v5" -#define NID_X9_62_c2onb191v5 692 -#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L - -#define SN_X9_62_c2pnb208w1 "c2pnb208w1" -#define NID_X9_62_c2pnb208w1 693 -#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L - -#define SN_X9_62_c2tnb239v1 "c2tnb239v1" -#define NID_X9_62_c2tnb239v1 694 -#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L - -#define SN_X9_62_c2tnb239v2 "c2tnb239v2" -#define NID_X9_62_c2tnb239v2 695 -#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L - -#define SN_X9_62_c2tnb239v3 "c2tnb239v3" -#define NID_X9_62_c2tnb239v3 696 -#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L - -#define SN_X9_62_c2onb239v4 "c2onb239v4" -#define NID_X9_62_c2onb239v4 697 -#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L - -#define SN_X9_62_c2onb239v5 "c2onb239v5" -#define NID_X9_62_c2onb239v5 698 -#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L - -#define SN_X9_62_c2pnb272w1 "c2pnb272w1" -#define NID_X9_62_c2pnb272w1 699 -#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L - -#define SN_X9_62_c2pnb304w1 "c2pnb304w1" -#define NID_X9_62_c2pnb304w1 700 -#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L - -#define SN_X9_62_c2tnb359v1 "c2tnb359v1" -#define NID_X9_62_c2tnb359v1 701 -#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L - -#define SN_X9_62_c2pnb368w1 "c2pnb368w1" -#define NID_X9_62_c2pnb368w1 702 -#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L - -#define SN_X9_62_c2tnb431r1 "c2tnb431r1" -#define NID_X9_62_c2tnb431r1 703 -#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L - -#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L - -#define SN_X9_62_prime192v1 "prime192v1" -#define NID_X9_62_prime192v1 409 -#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L - -#define SN_X9_62_prime192v2 "prime192v2" -#define NID_X9_62_prime192v2 410 -#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L - -#define SN_X9_62_prime192v3 "prime192v3" -#define NID_X9_62_prime192v3 411 -#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L - -#define SN_X9_62_prime239v1 "prime239v1" -#define NID_X9_62_prime239v1 412 -#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L - -#define SN_X9_62_prime239v2 "prime239v2" -#define NID_X9_62_prime239v2 413 -#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L - -#define SN_X9_62_prime239v3 "prime239v3" -#define NID_X9_62_prime239v3 414 -#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L - -#define SN_X9_62_prime256v1 "prime256v1" -#define NID_X9_62_prime256v1 415 -#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L - -#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L - -#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" -#define NID_ecdsa_with_SHA1 416 -#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L - -#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" -#define NID_ecdsa_with_Recommended 791 -#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L - -#define SN_ecdsa_with_Specified "ecdsa-with-Specified" -#define NID_ecdsa_with_Specified 792 -#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L - -#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" -#define NID_ecdsa_with_SHA224 793 -#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L - -#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" -#define NID_ecdsa_with_SHA256 794 -#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L - -#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" -#define NID_ecdsa_with_SHA384 795 -#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L - -#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" -#define NID_ecdsa_with_SHA512 796 -#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L - -#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L - -#define SN_secp112r1 "secp112r1" -#define NID_secp112r1 704 -#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L - -#define SN_secp112r2 "secp112r2" -#define NID_secp112r2 705 -#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L - -#define SN_secp128r1 "secp128r1" -#define NID_secp128r1 706 -#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L - -#define SN_secp128r2 "secp128r2" -#define NID_secp128r2 707 -#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L - -#define SN_secp160k1 "secp160k1" -#define NID_secp160k1 708 -#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L - -#define SN_secp160r1 "secp160r1" -#define NID_secp160r1 709 -#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L - -#define SN_secp160r2 "secp160r2" -#define NID_secp160r2 710 -#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L - -#define SN_secp192k1 "secp192k1" -#define NID_secp192k1 711 -#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L - -#define SN_secp224k1 "secp224k1" -#define NID_secp224k1 712 -#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L - -#define SN_secp224r1 "secp224r1" -#define NID_secp224r1 713 -#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L - -#define SN_secp256k1 "secp256k1" -#define NID_secp256k1 714 -#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L - -#define SN_secp384r1 "secp384r1" -#define NID_secp384r1 715 -#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L - -#define SN_secp521r1 "secp521r1" -#define NID_secp521r1 716 -#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L - -#define SN_sect113r1 "sect113r1" -#define NID_sect113r1 717 -#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L - -#define SN_sect113r2 "sect113r2" -#define NID_sect113r2 718 -#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L - -#define SN_sect131r1 "sect131r1" -#define NID_sect131r1 719 -#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L - -#define SN_sect131r2 "sect131r2" -#define NID_sect131r2 720 -#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L - -#define SN_sect163k1 "sect163k1" -#define NID_sect163k1 721 -#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L - -#define SN_sect163r1 "sect163r1" -#define NID_sect163r1 722 -#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L - -#define SN_sect163r2 "sect163r2" -#define NID_sect163r2 723 -#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L - -#define SN_sect193r1 "sect193r1" -#define NID_sect193r1 724 -#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L - -#define SN_sect193r2 "sect193r2" -#define NID_sect193r2 725 -#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L - -#define SN_sect233k1 "sect233k1" -#define NID_sect233k1 726 -#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L - -#define SN_sect233r1 "sect233r1" -#define NID_sect233r1 727 -#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L - -#define SN_sect239k1 "sect239k1" -#define NID_sect239k1 728 -#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L - -#define SN_sect283k1 "sect283k1" -#define NID_sect283k1 729 -#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L - -#define SN_sect283r1 "sect283r1" -#define NID_sect283r1 730 -#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L - -#define SN_sect409k1 "sect409k1" -#define NID_sect409k1 731 -#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L - -#define SN_sect409r1 "sect409r1" -#define NID_sect409r1 732 -#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L - -#define SN_sect571k1 "sect571k1" -#define NID_sect571k1 733 -#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L - -#define SN_sect571r1 "sect571r1" -#define NID_sect571r1 734 -#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L - -#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L - -#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" -#define NID_wap_wsg_idm_ecid_wtls1 735 -#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L - -#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" -#define NID_wap_wsg_idm_ecid_wtls3 736 -#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L - -#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" -#define NID_wap_wsg_idm_ecid_wtls4 737 -#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L - -#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" -#define NID_wap_wsg_idm_ecid_wtls5 738 -#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L - -#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" -#define NID_wap_wsg_idm_ecid_wtls6 739 -#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L - -#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" -#define NID_wap_wsg_idm_ecid_wtls7 740 -#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L - -#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" -#define NID_wap_wsg_idm_ecid_wtls8 741 -#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L - -#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" -#define NID_wap_wsg_idm_ecid_wtls9 742 -#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L - -#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" -#define NID_wap_wsg_idm_ecid_wtls10 743 -#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L - -#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" -#define NID_wap_wsg_idm_ecid_wtls11 744 -#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L - -#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" -#define NID_wap_wsg_idm_ecid_wtls12 745 -#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L - -#define SN_cast5_cbc "CAST5-CBC" -#define LN_cast5_cbc "cast5-cbc" -#define NID_cast5_cbc 108 -#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L - -#define SN_cast5_ecb "CAST5-ECB" -#define LN_cast5_ecb "cast5-ecb" -#define NID_cast5_ecb 109 - -#define SN_cast5_cfb64 "CAST5-CFB" -#define LN_cast5_cfb64 "cast5-cfb" -#define NID_cast5_cfb64 110 - -#define SN_cast5_ofb64 "CAST5-OFB" -#define LN_cast5_ofb64 "cast5-ofb" -#define NID_cast5_ofb64 111 - -#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -#define NID_pbeWithMD5AndCast5_CBC 112 -#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L - -#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" -#define LN_id_PasswordBasedMAC "password based MAC" -#define NID_id_PasswordBasedMAC 782 -#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L - -#define SN_id_DHBasedMac "id-DHBasedMac" -#define LN_id_DHBasedMac "Diffie-Hellman based MAC" -#define NID_id_DHBasedMac 783 -#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L - -#define SN_rsadsi "rsadsi" -#define LN_rsadsi "RSA Data Security, Inc." -#define NID_rsadsi 1 -#define OBJ_rsadsi OBJ_ISO_US,113549L - -#define SN_pkcs "pkcs" -#define LN_pkcs "RSA Data Security, Inc. PKCS" -#define NID_pkcs 2 -#define OBJ_pkcs OBJ_rsadsi,1L - -#define SN_pkcs1 "pkcs1" -#define NID_pkcs1 186 -#define OBJ_pkcs1 OBJ_pkcs,1L - -#define LN_rsaEncryption "rsaEncryption" -#define NID_rsaEncryption 6 -#define OBJ_rsaEncryption OBJ_pkcs1,1L - -#define SN_md2WithRSAEncryption "RSA-MD2" -#define LN_md2WithRSAEncryption "md2WithRSAEncryption" -#define NID_md2WithRSAEncryption 7 -#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L - -#define SN_md4WithRSAEncryption "RSA-MD4" -#define LN_md4WithRSAEncryption "md4WithRSAEncryption" -#define NID_md4WithRSAEncryption 396 -#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L - -#define SN_md5WithRSAEncryption "RSA-MD5" -#define LN_md5WithRSAEncryption "md5WithRSAEncryption" -#define NID_md5WithRSAEncryption 8 -#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L - -#define SN_sha1WithRSAEncryption "RSA-SHA1" -#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -#define NID_sha1WithRSAEncryption 65 -#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L - -#define SN_rsaesOaep "RSAES-OAEP" -#define LN_rsaesOaep "rsaesOaep" -#define NID_rsaesOaep 919 -#define OBJ_rsaesOaep OBJ_pkcs1,7L - -#define SN_mgf1 "MGF1" -#define LN_mgf1 "mgf1" -#define NID_mgf1 911 -#define OBJ_mgf1 OBJ_pkcs1,8L - -#define SN_pSpecified "PSPECIFIED" -#define LN_pSpecified "pSpecified" -#define NID_pSpecified 935 -#define OBJ_pSpecified OBJ_pkcs1,9L - -#define SN_rsassaPss "RSASSA-PSS" -#define LN_rsassaPss "rsassaPss" -#define NID_rsassaPss 912 -#define OBJ_rsassaPss OBJ_pkcs1,10L - -#define SN_sha256WithRSAEncryption "RSA-SHA256" -#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" -#define NID_sha256WithRSAEncryption 668 -#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L - -#define SN_sha384WithRSAEncryption "RSA-SHA384" -#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" -#define NID_sha384WithRSAEncryption 669 -#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L - -#define SN_sha512WithRSAEncryption "RSA-SHA512" -#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" -#define NID_sha512WithRSAEncryption 670 -#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L - -#define SN_sha224WithRSAEncryption "RSA-SHA224" -#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" -#define NID_sha224WithRSAEncryption 671 -#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L - -#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224" -#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" -#define NID_sha512_224WithRSAEncryption 1145 -#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L - -#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" -#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" -#define NID_sha512_256WithRSAEncryption 1146 -#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L - -#define SN_pkcs3 "pkcs3" -#define NID_pkcs3 27 -#define OBJ_pkcs3 OBJ_pkcs,3L - -#define LN_dhKeyAgreement "dhKeyAgreement" -#define NID_dhKeyAgreement 28 -#define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -#define SN_pkcs5 "pkcs5" -#define NID_pkcs5 187 -#define OBJ_pkcs5 OBJ_pkcs,5L - -#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -#define NID_pbeWithMD2AndDES_CBC 9 -#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L - -#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -#define NID_pbeWithMD5AndDES_CBC 10 -#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L - -#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -#define NID_pbeWithMD2AndRC2_CBC 168 -#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L - -#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -#define NID_pbeWithMD5AndRC2_CBC 169 -#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L - -#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -#define NID_pbeWithSHA1AndDES_CBC 170 -#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L - -#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -#define NID_pbeWithSHA1AndRC2_CBC 68 -#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L - -#define LN_id_pbkdf2 "PBKDF2" -#define NID_id_pbkdf2 69 -#define OBJ_id_pbkdf2 OBJ_pkcs5,12L - -#define LN_pbes2 "PBES2" -#define NID_pbes2 161 -#define OBJ_pbes2 OBJ_pkcs5,13L - -#define LN_pbmac1 "PBMAC1" -#define NID_pbmac1 162 -#define OBJ_pbmac1 OBJ_pkcs5,14L - -#define SN_pkcs7 "pkcs7" -#define NID_pkcs7 20 -#define OBJ_pkcs7 OBJ_pkcs,7L - -#define LN_pkcs7_data "pkcs7-data" -#define NID_pkcs7_data 21 -#define OBJ_pkcs7_data OBJ_pkcs7,1L - -#define LN_pkcs7_signed "pkcs7-signedData" -#define NID_pkcs7_signed 22 -#define OBJ_pkcs7_signed OBJ_pkcs7,2L - -#define LN_pkcs7_enveloped "pkcs7-envelopedData" -#define NID_pkcs7_enveloped 23 -#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -#define NID_pkcs7_signedAndEnveloped 24 -#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -#define LN_pkcs7_digest "pkcs7-digestData" -#define NID_pkcs7_digest 25 -#define OBJ_pkcs7_digest OBJ_pkcs7,5L - -#define LN_pkcs7_encrypted "pkcs7-encryptedData" -#define NID_pkcs7_encrypted 26 -#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -#define SN_pkcs9 "pkcs9" -#define NID_pkcs9 47 -#define OBJ_pkcs9 OBJ_pkcs,9L - -#define LN_pkcs9_emailAddress "emailAddress" -#define NID_pkcs9_emailAddress 48 -#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -#define LN_pkcs9_unstructuredName "unstructuredName" -#define NID_pkcs9_unstructuredName 49 -#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -#define LN_pkcs9_contentType "contentType" -#define NID_pkcs9_contentType 50 -#define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -#define LN_pkcs9_messageDigest "messageDigest" -#define NID_pkcs9_messageDigest 51 -#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -#define LN_pkcs9_signingTime "signingTime" -#define NID_pkcs9_signingTime 52 -#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -#define LN_pkcs9_countersignature "countersignature" -#define NID_pkcs9_countersignature 53 -#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -#define LN_pkcs9_challengePassword "challengePassword" -#define NID_pkcs9_challengePassword 54 -#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -#define LN_pkcs9_unstructuredAddress "unstructuredAddress" -#define NID_pkcs9_unstructuredAddress 55 -#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -#define NID_pkcs9_extCertAttributes 56 -#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -#define SN_ext_req "extReq" -#define LN_ext_req "Extension Request" -#define NID_ext_req 172 -#define OBJ_ext_req OBJ_pkcs9,14L - -#define SN_SMIMECapabilities "SMIME-CAPS" -#define LN_SMIMECapabilities "S/MIME Capabilities" -#define NID_SMIMECapabilities 167 -#define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -#define SN_SMIME "SMIME" -#define LN_SMIME "S/MIME" -#define NID_SMIME 188 -#define OBJ_SMIME OBJ_pkcs9,16L - -#define SN_id_smime_mod "id-smime-mod" -#define NID_id_smime_mod 189 -#define OBJ_id_smime_mod OBJ_SMIME,0L - -#define SN_id_smime_ct "id-smime-ct" -#define NID_id_smime_ct 190 -#define OBJ_id_smime_ct OBJ_SMIME,1L - -#define SN_id_smime_aa "id-smime-aa" -#define NID_id_smime_aa 191 -#define OBJ_id_smime_aa OBJ_SMIME,2L - -#define SN_id_smime_alg "id-smime-alg" -#define NID_id_smime_alg 192 -#define OBJ_id_smime_alg OBJ_SMIME,3L - -#define SN_id_smime_cd "id-smime-cd" -#define NID_id_smime_cd 193 -#define OBJ_id_smime_cd OBJ_SMIME,4L - -#define SN_id_smime_spq "id-smime-spq" -#define NID_id_smime_spq 194 -#define OBJ_id_smime_spq OBJ_SMIME,5L - -#define SN_id_smime_cti "id-smime-cti" -#define NID_id_smime_cti 195 -#define OBJ_id_smime_cti OBJ_SMIME,6L - -#define SN_id_smime_mod_cms "id-smime-mod-cms" -#define NID_id_smime_mod_cms 196 -#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L - -#define SN_id_smime_mod_ess "id-smime-mod-ess" -#define NID_id_smime_mod_ess 197 -#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L - -#define SN_id_smime_mod_oid "id-smime-mod-oid" -#define NID_id_smime_mod_oid 198 -#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L - -#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" -#define NID_id_smime_mod_msg_v3 199 -#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L - -#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" -#define NID_id_smime_mod_ets_eSignature_88 200 -#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L - -#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" -#define NID_id_smime_mod_ets_eSignature_97 201 -#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L - -#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" -#define NID_id_smime_mod_ets_eSigPolicy_88 202 -#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L - -#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" -#define NID_id_smime_mod_ets_eSigPolicy_97 203 -#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L - -#define SN_id_smime_ct_receipt "id-smime-ct-receipt" -#define NID_id_smime_ct_receipt 204 -#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L - -#define SN_id_smime_ct_authData "id-smime-ct-authData" -#define NID_id_smime_ct_authData 205 -#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L - -#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" -#define NID_id_smime_ct_publishCert 206 -#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L - -#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" -#define NID_id_smime_ct_TSTInfo 207 -#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L - -#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" -#define NID_id_smime_ct_TDTInfo 208 -#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L - -#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" -#define NID_id_smime_ct_contentInfo 209 -#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L - -#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" -#define NID_id_smime_ct_DVCSRequestData 210 -#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L - -#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" -#define NID_id_smime_ct_DVCSResponseData 211 -#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L - -#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" -#define NID_id_smime_ct_compressedData 786 -#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L - -#define SN_id_smime_ct_contentCollection "id-smime-ct-contentCollection" -#define NID_id_smime_ct_contentCollection 1058 -#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L - -#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" -#define NID_id_smime_ct_authEnvelopedData 1059 -#define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L - -#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" -#define NID_id_ct_asciiTextWithCRLF 787 -#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L - -#define SN_id_ct_xml "id-ct-xml" -#define NID_id_ct_xml 1060 -#define OBJ_id_ct_xml OBJ_id_smime_ct,28L - -#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" -#define NID_id_smime_aa_receiptRequest 212 -#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L - -#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" -#define NID_id_smime_aa_securityLabel 213 -#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L - -#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" -#define NID_id_smime_aa_mlExpandHistory 214 -#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L - -#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" -#define NID_id_smime_aa_contentHint 215 -#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L - -#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" -#define NID_id_smime_aa_msgSigDigest 216 -#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L - -#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" -#define NID_id_smime_aa_encapContentType 217 -#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L - -#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" -#define NID_id_smime_aa_contentIdentifier 218 -#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L - -#define SN_id_smime_aa_macValue "id-smime-aa-macValue" -#define NID_id_smime_aa_macValue 219 -#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L - -#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" -#define NID_id_smime_aa_equivalentLabels 220 -#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L - -#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" -#define NID_id_smime_aa_contentReference 221 -#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L - -#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" -#define NID_id_smime_aa_encrypKeyPref 222 -#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L - -#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" -#define NID_id_smime_aa_signingCertificate 223 -#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L - -#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" -#define NID_id_smime_aa_smimeEncryptCerts 224 -#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L - -#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" -#define NID_id_smime_aa_timeStampToken 225 -#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L - -#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" -#define NID_id_smime_aa_ets_sigPolicyId 226 -#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L - -#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" -#define NID_id_smime_aa_ets_commitmentType 227 -#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L - -#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" -#define NID_id_smime_aa_ets_signerLocation 228 -#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L - -#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" -#define NID_id_smime_aa_ets_signerAttr 229 -#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L - -#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" -#define NID_id_smime_aa_ets_otherSigCert 230 -#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L - -#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" -#define NID_id_smime_aa_ets_contentTimestamp 231 -#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L - -#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" -#define NID_id_smime_aa_ets_CertificateRefs 232 -#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L - -#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" -#define NID_id_smime_aa_ets_RevocationRefs 233 -#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L - -#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" -#define NID_id_smime_aa_ets_certValues 234 -#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L - -#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" -#define NID_id_smime_aa_ets_revocationValues 235 -#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L - -#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" -#define NID_id_smime_aa_ets_escTimeStamp 236 -#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L - -#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" -#define NID_id_smime_aa_ets_certCRLTimestamp 237 -#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L - -#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" -#define NID_id_smime_aa_ets_archiveTimeStamp 238 -#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L - -#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" -#define NID_id_smime_aa_signatureType 239 -#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L - -#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" -#define NID_id_smime_aa_dvcs_dvc 240 -#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L - -#define SN_id_smime_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_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" -#define NID_id_smime_alg_ESDHwith3DES 241 -#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L - -#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" -#define NID_id_smime_alg_ESDHwithRC2 242 -#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L - -#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" -#define NID_id_smime_alg_3DESwrap 243 -#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L - -#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" -#define NID_id_smime_alg_RC2wrap 244 -#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L - -#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" -#define NID_id_smime_alg_ESDH 245 -#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L - -#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" -#define NID_id_smime_alg_CMS3DESwrap 246 -#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L - -#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" -#define NID_id_smime_alg_CMSRC2wrap 247 -#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L - -#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" -#define NID_id_alg_PWRI_KEK 893 -#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L - -#define SN_id_smime_cd_ldap "id-smime-cd-ldap" -#define NID_id_smime_cd_ldap 248 -#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L - -#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" -#define NID_id_smime_spq_ets_sqt_uri 249 -#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L - -#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" -#define NID_id_smime_spq_ets_sqt_unotice 250 -#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L - -#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" -#define NID_id_smime_cti_ets_proofOfOrigin 251 -#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L - -#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" -#define NID_id_smime_cti_ets_proofOfReceipt 252 -#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L - -#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" -#define NID_id_smime_cti_ets_proofOfDelivery 253 -#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L - -#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" -#define NID_id_smime_cti_ets_proofOfSender 254 -#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L - -#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" -#define NID_id_smime_cti_ets_proofOfApproval 255 -#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L - -#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" -#define NID_id_smime_cti_ets_proofOfCreation 256 -#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L - -#define LN_friendlyName "friendlyName" -#define NID_friendlyName 156 -#define OBJ_friendlyName OBJ_pkcs9,20L - -#define LN_localKeyID "localKeyID" -#define NID_localKeyID 157 -#define OBJ_localKeyID OBJ_pkcs9,21L - -#define SN_ms_csp_name "CSPName" -#define LN_ms_csp_name "Microsoft CSP Name" -#define NID_ms_csp_name 417 -#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L - -#define SN_LocalKeySet "LocalKeySet" -#define LN_LocalKeySet "Microsoft Local Key set" -#define NID_LocalKeySet 856 -#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L - -#define OBJ_certTypes OBJ_pkcs9,22L - -#define LN_x509Certificate "x509Certificate" -#define NID_x509Certificate 158 -#define OBJ_x509Certificate OBJ_certTypes,1L - -#define LN_sdsiCertificate "sdsiCertificate" -#define NID_sdsiCertificate 159 -#define OBJ_sdsiCertificate OBJ_certTypes,2L - -#define OBJ_crlTypes OBJ_pkcs9,23L - -#define LN_x509Crl "x509Crl" -#define NID_x509Crl 160 -#define OBJ_x509Crl OBJ_crlTypes,1L - -#define OBJ_pkcs12 OBJ_pkcs,12L - -#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L - -#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -#define NID_pbe_WithSHA1And128BitRC4 144 -#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L - -#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -#define NID_pbe_WithSHA1And40BitRC4 145 -#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L - -#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L - -#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L - -#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -#define NID_pbe_WithSHA1And128BitRC2_CBC 148 -#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L - -#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -#define NID_pbe_WithSHA1And40BitRC2_CBC 149 -#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L - -#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L - -#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L - -#define LN_keyBag "keyBag" -#define NID_keyBag 150 -#define OBJ_keyBag OBJ_pkcs12_BagIds,1L - -#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -#define NID_pkcs8ShroudedKeyBag 151 -#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L - -#define LN_certBag "certBag" -#define NID_certBag 152 -#define OBJ_certBag OBJ_pkcs12_BagIds,3L - -#define LN_crlBag "crlBag" -#define NID_crlBag 153 -#define OBJ_crlBag OBJ_pkcs12_BagIds,4L - -#define LN_secretBag "secretBag" -#define NID_secretBag 154 -#define OBJ_secretBag OBJ_pkcs12_BagIds,5L - -#define LN_safeContentsBag "safeContentsBag" -#define NID_safeContentsBag 155 -#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L - -#define SN_md2 "MD2" -#define LN_md2 "md2" -#define NID_md2 3 -#define OBJ_md2 OBJ_rsadsi,2L,2L - -#define SN_md4 "MD4" -#define LN_md4 "md4" -#define NID_md4 257 -#define OBJ_md4 OBJ_rsadsi,2L,4L - -#define SN_md5 "MD5" -#define LN_md5 "md5" -#define NID_md5 4 -#define OBJ_md5 OBJ_rsadsi,2L,5L - -#define SN_md5_sha1 "MD5-SHA1" -#define LN_md5_sha1 "md5-sha1" -#define NID_md5_sha1 114 - -#define LN_hmacWithMD5 "hmacWithMD5" -#define NID_hmacWithMD5 797 -#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L - -#define LN_hmacWithSHA1 "hmacWithSHA1" -#define NID_hmacWithSHA1 163 -#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -#define 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 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 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L - -#define SN_ms_code_ind "msCodeInd" -#define LN_ms_code_ind "Microsoft Individual Code Signing" -#define NID_ms_code_ind 134 -#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L - -#define SN_ms_code_com "msCodeCom" -#define LN_ms_code_com "Microsoft Commercial Code Signing" -#define NID_ms_code_com 135 -#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L - -#define SN_ms_ctl_sign "msCTLSign" -#define LN_ms_ctl_sign "Microsoft Trust List Signing" -#define NID_ms_ctl_sign 136 -#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L - -#define SN_ms_sgc "msSGC" -#define LN_ms_sgc "Microsoft Server Gated Crypto" -#define NID_ms_sgc 137 -#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L - -#define SN_ms_efs "msEFS" -#define LN_ms_efs "Microsoft Encrypted File System" -#define NID_ms_efs 138 -#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L - -#define SN_ms_smartcard_login "msSmartcardLogin" -#define LN_ms_smartcard_login "Microsoft Smartcard Login" -#define NID_ms_smartcard_login 648 -#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L - -#define SN_ms_upn "msUPN" -#define LN_ms_upn "Microsoft User Principal Name" -#define NID_ms_upn 649 -#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L - -#define SN_idea_cbc "IDEA-CBC" -#define LN_idea_cbc "idea-cbc" -#define NID_idea_cbc 34 -#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -#define SN_idea_ecb "IDEA-ECB" -#define LN_idea_ecb "idea-ecb" -#define NID_idea_ecb 36 - -#define SN_idea_cfb64 "IDEA-CFB" -#define LN_idea_cfb64 "idea-cfb" -#define NID_idea_cfb64 35 - -#define SN_idea_ofb64 "IDEA-OFB" -#define LN_idea_ofb64 "idea-ofb" -#define NID_idea_ofb64 46 - -#define SN_bf_cbc "BF-CBC" -#define LN_bf_cbc "bf-cbc" -#define NID_bf_cbc 91 -#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -#define SN_bf_ecb "BF-ECB" -#define LN_bf_ecb "bf-ecb" -#define NID_bf_ecb 92 - -#define SN_bf_cfb64 "BF-CFB" -#define LN_bf_cfb64 "bf-cfb" -#define NID_bf_cfb64 93 - -#define SN_bf_ofb64 "BF-OFB" -#define LN_bf_ofb64 "bf-ofb" -#define NID_bf_ofb64 94 - -#define SN_id_pkix "PKIX" -#define NID_id_pkix 127 -#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -#define SN_id_pkix_mod "id-pkix-mod" -#define NID_id_pkix_mod 258 -#define OBJ_id_pkix_mod OBJ_id_pkix,0L - -#define SN_id_pe "id-pe" -#define NID_id_pe 175 -#define OBJ_id_pe OBJ_id_pkix,1L - -#define SN_id_qt "id-qt" -#define NID_id_qt 259 -#define OBJ_id_qt OBJ_id_pkix,2L - -#define SN_id_kp "id-kp" -#define NID_id_kp 128 -#define OBJ_id_kp OBJ_id_pkix,3L - -#define SN_id_it "id-it" -#define NID_id_it 260 -#define OBJ_id_it OBJ_id_pkix,4L - -#define SN_id_pkip "id-pkip" -#define NID_id_pkip 261 -#define OBJ_id_pkip OBJ_id_pkix,5L - -#define SN_id_alg "id-alg" -#define NID_id_alg 262 -#define OBJ_id_alg OBJ_id_pkix,6L - -#define SN_id_cmc "id-cmc" -#define NID_id_cmc 263 -#define OBJ_id_cmc OBJ_id_pkix,7L - -#define SN_id_on "id-on" -#define NID_id_on 264 -#define OBJ_id_on OBJ_id_pkix,8L - -#define SN_id_pda "id-pda" -#define NID_id_pda 265 -#define OBJ_id_pda OBJ_id_pkix,9L - -#define SN_id_aca "id-aca" -#define NID_id_aca 266 -#define OBJ_id_aca OBJ_id_pkix,10L - -#define SN_id_qcs "id-qcs" -#define NID_id_qcs 267 -#define OBJ_id_qcs OBJ_id_pkix,11L - -#define SN_id_cct "id-cct" -#define NID_id_cct 268 -#define OBJ_id_cct OBJ_id_pkix,12L - -#define SN_id_ppl "id-ppl" -#define NID_id_ppl 662 -#define OBJ_id_ppl OBJ_id_pkix,21L - -#define SN_id_ad "id-ad" -#define NID_id_ad 176 -#define OBJ_id_ad OBJ_id_pkix,48L - -#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" -#define NID_id_pkix1_explicit_88 269 -#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L - -#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" -#define NID_id_pkix1_implicit_88 270 -#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L - -#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" -#define NID_id_pkix1_explicit_93 271 -#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L - -#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" -#define NID_id_pkix1_implicit_93 272 -#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L - -#define SN_id_mod_crmf "id-mod-crmf" -#define NID_id_mod_crmf 273 -#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L - -#define SN_id_mod_cmc "id-mod-cmc" -#define NID_id_mod_cmc 274 -#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L - -#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" -#define NID_id_mod_kea_profile_88 275 -#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L - -#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" -#define NID_id_mod_kea_profile_93 276 -#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L - -#define SN_id_mod_cmp "id-mod-cmp" -#define NID_id_mod_cmp 277 -#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L - -#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" -#define NID_id_mod_qualified_cert_88 278 -#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L - -#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" -#define NID_id_mod_qualified_cert_93 279 -#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L - -#define SN_id_mod_attribute_cert "id-mod-attribute-cert" -#define NID_id_mod_attribute_cert 280 -#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L - -#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" -#define NID_id_mod_timestamp_protocol 281 -#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L - -#define SN_id_mod_ocsp "id-mod-ocsp" -#define NID_id_mod_ocsp 282 -#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L - -#define SN_id_mod_dvcs "id-mod-dvcs" -#define NID_id_mod_dvcs 283 -#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L - -#define SN_id_mod_cmp2000 "id-mod-cmp2000" -#define NID_id_mod_cmp2000 284 -#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L - -#define SN_info_access "authorityInfoAccess" -#define LN_info_access "Authority Information Access" -#define NID_info_access 177 -#define OBJ_info_access OBJ_id_pe,1L - -#define SN_biometricInfo "biometricInfo" -#define LN_biometricInfo "Biometric Info" -#define NID_biometricInfo 285 -#define OBJ_biometricInfo OBJ_id_pe,2L - -#define SN_qcStatements "qcStatements" -#define NID_qcStatements 286 -#define OBJ_qcStatements OBJ_id_pe,3L - -#define SN_ac_auditEntity "ac-auditEntity" -#define NID_ac_auditEntity 287 -#define OBJ_ac_auditEntity OBJ_id_pe,4L - -#define SN_ac_targeting "ac-targeting" -#define NID_ac_targeting 288 -#define OBJ_ac_targeting OBJ_id_pe,5L - -#define SN_aaControls "aaControls" -#define NID_aaControls 289 -#define OBJ_aaControls OBJ_id_pe,6L - -#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" -#define NID_sbgp_ipAddrBlock 290 -#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L - -#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" -#define NID_sbgp_autonomousSysNum 291 -#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L - -#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" -#define NID_sbgp_routerIdentifier 292 -#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L - -#define SN_ac_proxying "ac-proxying" -#define NID_ac_proxying 397 -#define OBJ_ac_proxying OBJ_id_pe,10L - -#define SN_sinfo_access "subjectInfoAccess" -#define LN_sinfo_access "Subject Information Access" -#define NID_sinfo_access 398 -#define OBJ_sinfo_access OBJ_id_pe,11L - -#define SN_proxyCertInfo "proxyCertInfo" -#define LN_proxyCertInfo "Proxy Certificate Information" -#define NID_proxyCertInfo 663 -#define OBJ_proxyCertInfo OBJ_id_pe,14L - -#define SN_tlsfeature "tlsfeature" -#define LN_tlsfeature "TLS Feature" -#define NID_tlsfeature 1020 -#define OBJ_tlsfeature OBJ_id_pe,24L - -#define SN_id_qt_cps "id-qt-cps" -#define LN_id_qt_cps "Policy Qualifier CPS" -#define NID_id_qt_cps 164 -#define OBJ_id_qt_cps OBJ_id_qt,1L - -#define SN_id_qt_unotice "id-qt-unotice" -#define LN_id_qt_unotice "Policy Qualifier User Notice" -#define NID_id_qt_unotice 165 -#define OBJ_id_qt_unotice OBJ_id_qt,2L - -#define SN_textNotice "textNotice" -#define NID_textNotice 293 -#define OBJ_textNotice OBJ_id_qt,3L - -#define SN_server_auth "serverAuth" -#define LN_server_auth "TLS Web Server Authentication" -#define NID_server_auth 129 -#define OBJ_server_auth OBJ_id_kp,1L - -#define SN_client_auth "clientAuth" -#define LN_client_auth "TLS Web Client Authentication" -#define NID_client_auth 130 -#define OBJ_client_auth OBJ_id_kp,2L - -#define SN_code_sign "codeSigning" -#define LN_code_sign "Code Signing" -#define NID_code_sign 131 -#define OBJ_code_sign OBJ_id_kp,3L - -#define SN_email_protect "emailProtection" -#define LN_email_protect "E-mail Protection" -#define NID_email_protect 132 -#define OBJ_email_protect OBJ_id_kp,4L - -#define SN_ipsecEndSystem "ipsecEndSystem" -#define LN_ipsecEndSystem "IPSec End System" -#define NID_ipsecEndSystem 294 -#define OBJ_ipsecEndSystem OBJ_id_kp,5L - -#define SN_ipsecTunnel "ipsecTunnel" -#define LN_ipsecTunnel "IPSec Tunnel" -#define NID_ipsecTunnel 295 -#define OBJ_ipsecTunnel OBJ_id_kp,6L - -#define SN_ipsecUser "ipsecUser" -#define LN_ipsecUser "IPSec User" -#define NID_ipsecUser 296 -#define OBJ_ipsecUser OBJ_id_kp,7L - -#define SN_time_stamp "timeStamping" -#define LN_time_stamp "Time Stamping" -#define NID_time_stamp 133 -#define OBJ_time_stamp OBJ_id_kp,8L - -#define SN_OCSP_sign "OCSPSigning" -#define LN_OCSP_sign "OCSP Signing" -#define NID_OCSP_sign 180 -#define OBJ_OCSP_sign OBJ_id_kp,9L - -#define SN_dvcs "DVCS" -#define LN_dvcs "dvcs" -#define NID_dvcs 297 -#define OBJ_dvcs OBJ_id_kp,10L - -#define SN_ipsec_IKE "ipsecIKE" -#define LN_ipsec_IKE "ipsec Internet Key Exchange" -#define NID_ipsec_IKE 1022 -#define OBJ_ipsec_IKE OBJ_id_kp,17L - -#define SN_capwapAC "capwapAC" -#define LN_capwapAC "Ctrl/provision WAP Access" -#define NID_capwapAC 1023 -#define OBJ_capwapAC OBJ_id_kp,18L - -#define SN_capwapWTP "capwapWTP" -#define LN_capwapWTP "Ctrl/Provision WAP Termination" -#define NID_capwapWTP 1024 -#define OBJ_capwapWTP OBJ_id_kp,19L - -#define SN_sshClient "secureShellClient" -#define LN_sshClient "SSH Client" -#define NID_sshClient 1025 -#define OBJ_sshClient OBJ_id_kp,21L - -#define SN_sshServer "secureShellServer" -#define LN_sshServer "SSH Server" -#define NID_sshServer 1026 -#define OBJ_sshServer OBJ_id_kp,22L - -#define SN_sendRouter "sendRouter" -#define LN_sendRouter "Send Router" -#define NID_sendRouter 1027 -#define OBJ_sendRouter OBJ_id_kp,23L - -#define SN_sendProxiedRouter "sendProxiedRouter" -#define LN_sendProxiedRouter "Send Proxied Router" -#define NID_sendProxiedRouter 1028 -#define OBJ_sendProxiedRouter OBJ_id_kp,24L - -#define SN_sendOwner "sendOwner" -#define LN_sendOwner "Send Owner" -#define NID_sendOwner 1029 -#define OBJ_sendOwner OBJ_id_kp,25L - -#define SN_sendProxiedOwner "sendProxiedOwner" -#define LN_sendProxiedOwner "Send Proxied Owner" -#define NID_sendProxiedOwner 1030 -#define OBJ_sendProxiedOwner OBJ_id_kp,26L - -#define SN_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_id_it_caProtEncCert "id-it-caProtEncCert" -#define NID_id_it_caProtEncCert 298 -#define OBJ_id_it_caProtEncCert OBJ_id_it,1L - -#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" -#define NID_id_it_signKeyPairTypes 299 -#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L - -#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" -#define NID_id_it_encKeyPairTypes 300 -#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L - -#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" -#define NID_id_it_preferredSymmAlg 301 -#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L - -#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" -#define NID_id_it_caKeyUpdateInfo 302 -#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L - -#define SN_id_it_currentCRL "id-it-currentCRL" -#define NID_id_it_currentCRL 303 -#define OBJ_id_it_currentCRL OBJ_id_it,6L - -#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" -#define NID_id_it_unsupportedOIDs 304 -#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L - -#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" -#define NID_id_it_subscriptionRequest 305 -#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L - -#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" -#define NID_id_it_subscriptionResponse 306 -#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L - -#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" -#define NID_id_it_keyPairParamReq 307 -#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L - -#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" -#define NID_id_it_keyPairParamRep 308 -#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L - -#define SN_id_it_revPassphrase "id-it-revPassphrase" -#define NID_id_it_revPassphrase 309 -#define OBJ_id_it_revPassphrase OBJ_id_it,12L - -#define SN_id_it_implicitConfirm "id-it-implicitConfirm" -#define NID_id_it_implicitConfirm 310 -#define OBJ_id_it_implicitConfirm OBJ_id_it,13L - -#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" -#define NID_id_it_confirmWaitTime 311 -#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L - -#define SN_id_it_origPKIMessage "id-it-origPKIMessage" -#define NID_id_it_origPKIMessage 312 -#define OBJ_id_it_origPKIMessage OBJ_id_it,15L - -#define SN_id_it_suppLangTags "id-it-suppLangTags" -#define NID_id_it_suppLangTags 784 -#define OBJ_id_it_suppLangTags OBJ_id_it,16L - -#define SN_id_regCtrl "id-regCtrl" -#define NID_id_regCtrl 313 -#define OBJ_id_regCtrl OBJ_id_pkip,1L - -#define SN_id_regInfo "id-regInfo" -#define NID_id_regInfo 314 -#define OBJ_id_regInfo OBJ_id_pkip,2L - -#define SN_id_regCtrl_regToken "id-regCtrl-regToken" -#define NID_id_regCtrl_regToken 315 -#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L - -#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" -#define NID_id_regCtrl_authenticator 316 -#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L - -#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" -#define NID_id_regCtrl_pkiPublicationInfo 317 -#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L - -#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" -#define NID_id_regCtrl_pkiArchiveOptions 318 -#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L - -#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" -#define NID_id_regCtrl_oldCertID 319 -#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L - -#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" -#define NID_id_regCtrl_protocolEncrKey 320 -#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L - -#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" -#define NID_id_regInfo_utf8Pairs 321 -#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L - -#define SN_id_regInfo_certReq "id-regInfo-certReq" -#define NID_id_regInfo_certReq 322 -#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L - -#define SN_id_alg_des40 "id-alg-des40" -#define NID_id_alg_des40 323 -#define OBJ_id_alg_des40 OBJ_id_alg,1L - -#define SN_id_alg_noSignature "id-alg-noSignature" -#define NID_id_alg_noSignature 324 -#define OBJ_id_alg_noSignature OBJ_id_alg,2L - -#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" -#define NID_id_alg_dh_sig_hmac_sha1 325 -#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L - -#define SN_id_alg_dh_pop "id-alg-dh-pop" -#define NID_id_alg_dh_pop 326 -#define OBJ_id_alg_dh_pop OBJ_id_alg,4L - -#define SN_id_cmc_statusInfo "id-cmc-statusInfo" -#define NID_id_cmc_statusInfo 327 -#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L - -#define SN_id_cmc_identification "id-cmc-identification" -#define NID_id_cmc_identification 328 -#define OBJ_id_cmc_identification OBJ_id_cmc,2L - -#define SN_id_cmc_identityProof "id-cmc-identityProof" -#define NID_id_cmc_identityProof 329 -#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L - -#define SN_id_cmc_dataReturn "id-cmc-dataReturn" -#define NID_id_cmc_dataReturn 330 -#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L - -#define SN_id_cmc_transactionId "id-cmc-transactionId" -#define NID_id_cmc_transactionId 331 -#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L - -#define SN_id_cmc_senderNonce "id-cmc-senderNonce" -#define NID_id_cmc_senderNonce 332 -#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L - -#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" -#define NID_id_cmc_recipientNonce 333 -#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L - -#define SN_id_cmc_addExtensions "id-cmc-addExtensions" -#define NID_id_cmc_addExtensions 334 -#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L - -#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" -#define NID_id_cmc_encryptedPOP 335 -#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L - -#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" -#define NID_id_cmc_decryptedPOP 336 -#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L - -#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" -#define NID_id_cmc_lraPOPWitness 337 -#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L - -#define SN_id_cmc_getCert "id-cmc-getCert" -#define NID_id_cmc_getCert 338 -#define OBJ_id_cmc_getCert OBJ_id_cmc,15L - -#define SN_id_cmc_getCRL "id-cmc-getCRL" -#define NID_id_cmc_getCRL 339 -#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L - -#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" -#define NID_id_cmc_revokeRequest 340 -#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L - -#define SN_id_cmc_regInfo "id-cmc-regInfo" -#define NID_id_cmc_regInfo 341 -#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L - -#define SN_id_cmc_responseInfo "id-cmc-responseInfo" -#define NID_id_cmc_responseInfo 342 -#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L - -#define SN_id_cmc_queryPending "id-cmc-queryPending" -#define NID_id_cmc_queryPending 343 -#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L - -#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" -#define NID_id_cmc_popLinkRandom 344 -#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L - -#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" -#define NID_id_cmc_popLinkWitness 345 -#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L - -#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" -#define NID_id_cmc_confirmCertAcceptance 346 -#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L - -#define SN_id_on_personalData "id-on-personalData" -#define NID_id_on_personalData 347 -#define OBJ_id_on_personalData OBJ_id_on,1L - -#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" -#define LN_id_on_permanentIdentifier "Permanent Identifier" -#define NID_id_on_permanentIdentifier 858 -#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L - -#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" -#define NID_id_pda_dateOfBirth 348 -#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L - -#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" -#define NID_id_pda_placeOfBirth 349 -#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L - -#define SN_id_pda_gender "id-pda-gender" -#define NID_id_pda_gender 351 -#define OBJ_id_pda_gender OBJ_id_pda,3L - -#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" -#define NID_id_pda_countryOfCitizenship 352 -#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L - -#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" -#define NID_id_pda_countryOfResidence 353 -#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L - -#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" -#define NID_id_aca_authenticationInfo 354 -#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L - -#define SN_id_aca_accessIdentity "id-aca-accessIdentity" -#define NID_id_aca_accessIdentity 355 -#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L - -#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" -#define NID_id_aca_chargingIdentity 356 -#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L - -#define SN_id_aca_group "id-aca-group" -#define NID_id_aca_group 357 -#define OBJ_id_aca_group OBJ_id_aca,4L - -#define SN_id_aca_role "id-aca-role" -#define NID_id_aca_role 358 -#define OBJ_id_aca_role OBJ_id_aca,5L - -#define SN_id_aca_encAttrs "id-aca-encAttrs" -#define NID_id_aca_encAttrs 399 -#define OBJ_id_aca_encAttrs OBJ_id_aca,6L - -#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" -#define NID_id_qcs_pkixQCSyntax_v1 359 -#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L - -#define SN_id_cct_crs "id-cct-crs" -#define NID_id_cct_crs 360 -#define OBJ_id_cct_crs OBJ_id_cct,1L - -#define SN_id_cct_PKIData "id-cct-PKIData" -#define NID_id_cct_PKIData 361 -#define OBJ_id_cct_PKIData OBJ_id_cct,2L - -#define SN_id_cct_PKIResponse "id-cct-PKIResponse" -#define NID_id_cct_PKIResponse 362 -#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L - -#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" -#define LN_id_ppl_anyLanguage "Any language" -#define NID_id_ppl_anyLanguage 664 -#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L - -#define SN_id_ppl_inheritAll "id-ppl-inheritAll" -#define LN_id_ppl_inheritAll "Inherit all" -#define NID_id_ppl_inheritAll 665 -#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L - -#define SN_Independent "id-ppl-independent" -#define LN_Independent "Independent" -#define NID_Independent 667 -#define OBJ_Independent OBJ_id_ppl,2L - -#define SN_ad_OCSP "OCSP" -#define LN_ad_OCSP "OCSP" -#define NID_ad_OCSP 178 -#define OBJ_ad_OCSP OBJ_id_ad,1L - -#define SN_ad_ca_issuers "caIssuers" -#define LN_ad_ca_issuers "CA Issuers" -#define NID_ad_ca_issuers 179 -#define OBJ_ad_ca_issuers OBJ_id_ad,2L - -#define SN_ad_timeStamping "ad_timestamping" -#define LN_ad_timeStamping "AD Time Stamping" -#define NID_ad_timeStamping 363 -#define OBJ_ad_timeStamping OBJ_id_ad,3L - -#define SN_ad_dvcs "AD_DVCS" -#define LN_ad_dvcs "ad dvcs" -#define NID_ad_dvcs 364 -#define OBJ_ad_dvcs OBJ_id_ad,4L - -#define SN_caRepository "caRepository" -#define LN_caRepository "CA Repository" -#define NID_caRepository 785 -#define OBJ_caRepository OBJ_id_ad,5L - -#define OBJ_id_pkix_OCSP OBJ_ad_OCSP - -#define SN_id_pkix_OCSP_basic "basicOCSPResponse" -#define LN_id_pkix_OCSP_basic "Basic OCSP Response" -#define NID_id_pkix_OCSP_basic 365 -#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L - -#define SN_id_pkix_OCSP_Nonce "Nonce" -#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" -#define NID_id_pkix_OCSP_Nonce 366 -#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L - -#define SN_id_pkix_OCSP_CrlID "CrlID" -#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" -#define NID_id_pkix_OCSP_CrlID 367 -#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L - -#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" -#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" -#define NID_id_pkix_OCSP_acceptableResponses 368 -#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L - -#define SN_id_pkix_OCSP_noCheck "noCheck" -#define LN_id_pkix_OCSP_noCheck "OCSP No Check" -#define NID_id_pkix_OCSP_noCheck 369 -#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L - -#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" -#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" -#define NID_id_pkix_OCSP_archiveCutoff 370 -#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L - -#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" -#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" -#define NID_id_pkix_OCSP_serviceLocator 371 -#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L - -#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" -#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" -#define NID_id_pkix_OCSP_extendedStatus 372 -#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L - -#define SN_id_pkix_OCSP_valid "valid" -#define NID_id_pkix_OCSP_valid 373 -#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L - -#define SN_id_pkix_OCSP_path "path" -#define NID_id_pkix_OCSP_path 374 -#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L - -#define SN_id_pkix_OCSP_trustRoot "trustRoot" -#define LN_id_pkix_OCSP_trustRoot "Trust Root" -#define NID_id_pkix_OCSP_trustRoot 375 -#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L - -#define SN_algorithm "algorithm" -#define LN_algorithm "algorithm" -#define NID_algorithm 376 -#define OBJ_algorithm 1L,3L,14L,3L,2L - -#define SN_md5WithRSA "RSA-NP-MD5" -#define LN_md5WithRSA "md5WithRSA" -#define NID_md5WithRSA 104 -#define OBJ_md5WithRSA OBJ_algorithm,3L - -#define SN_des_ecb "DES-ECB" -#define LN_des_ecb "des-ecb" -#define NID_des_ecb 29 -#define OBJ_des_ecb OBJ_algorithm,6L - -#define SN_des_cbc "DES-CBC" -#define LN_des_cbc "des-cbc" -#define NID_des_cbc 31 -#define OBJ_des_cbc OBJ_algorithm,7L - -#define SN_des_ofb64 "DES-OFB" -#define LN_des_ofb64 "des-ofb" -#define NID_des_ofb64 45 -#define OBJ_des_ofb64 OBJ_algorithm,8L - -#define SN_des_cfb64 "DES-CFB" -#define LN_des_cfb64 "des-cfb" -#define NID_des_cfb64 30 -#define OBJ_des_cfb64 OBJ_algorithm,9L - -#define SN_rsaSignature "rsaSignature" -#define NID_rsaSignature 377 -#define OBJ_rsaSignature OBJ_algorithm,11L - -#define SN_dsa_2 "DSA-old" -#define LN_dsa_2 "dsaEncryption-old" -#define NID_dsa_2 67 -#define OBJ_dsa_2 OBJ_algorithm,12L - -#define SN_dsaWithSHA "DSA-SHA" -#define LN_dsaWithSHA "dsaWithSHA" -#define NID_dsaWithSHA 66 -#define OBJ_dsaWithSHA OBJ_algorithm,13L - -#define SN_shaWithRSAEncryption "RSA-SHA" -#define LN_shaWithRSAEncryption "shaWithRSAEncryption" -#define NID_shaWithRSAEncryption 42 -#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -#define SN_des_ede_ecb "DES-EDE" -#define LN_des_ede_ecb "des-ede" -#define NID_des_ede_ecb 32 -#define OBJ_des_ede_ecb OBJ_algorithm,17L - -#define SN_des_ede3_ecb "DES-EDE3" -#define LN_des_ede3_ecb "des-ede3" -#define NID_des_ede3_ecb 33 - -#define SN_des_ede_cbc "DES-EDE-CBC" -#define LN_des_ede_cbc "des-ede-cbc" -#define NID_des_ede_cbc 43 - -#define SN_des_ede_cfb64 "DES-EDE-CFB" -#define LN_des_ede_cfb64 "des-ede-cfb" -#define NID_des_ede_cfb64 60 - -#define SN_des_ede3_cfb64 "DES-EDE3-CFB" -#define LN_des_ede3_cfb64 "des-ede3-cfb" -#define NID_des_ede3_cfb64 61 - -#define SN_des_ede_ofb64 "DES-EDE-OFB" -#define LN_des_ede_ofb64 "des-ede-ofb" -#define NID_des_ede_ofb64 62 - -#define SN_des_ede3_ofb64 "DES-EDE3-OFB" -#define LN_des_ede3_ofb64 "des-ede3-ofb" -#define NID_des_ede3_ofb64 63 - -#define SN_desx_cbc "DESX-CBC" -#define LN_desx_cbc "desx-cbc" -#define NID_desx_cbc 80 - -#define SN_sha "SHA" -#define LN_sha "sha" -#define NID_sha 41 -#define OBJ_sha OBJ_algorithm,18L - -#define SN_sha1 "SHA1" -#define LN_sha1 "sha1" -#define NID_sha1 64 -#define OBJ_sha1 OBJ_algorithm,26L - -#define SN_dsaWithSHA1_2 "DSA-SHA1-old" -#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -#define NID_dsaWithSHA1_2 70 -#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -#define SN_sha1WithRSA "RSA-SHA1-2" -#define LN_sha1WithRSA "sha1WithRSA" -#define NID_sha1WithRSA 115 -#define OBJ_sha1WithRSA OBJ_algorithm,29L - -#define SN_ripemd160 "RIPEMD160" -#define LN_ripemd160 "ripemd160" -#define NID_ripemd160 117 -#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -#define SN_ripemd160WithRSA "RSA-RIPEMD160" -#define LN_ripemd160WithRSA "ripemd160WithRSA" -#define NID_ripemd160WithRSA 119 -#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L - -#define SN_blake2b512 "BLAKE2b512" -#define LN_blake2b512 "blake2b512" -#define NID_blake2b512 1056 -#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L - -#define SN_blake2s256 "BLAKE2s256" -#define LN_blake2s256 "blake2s256" -#define NID_blake2s256 1057 -#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L - -#define SN_sxnet "SXNetID" -#define LN_sxnet "Strong Extranet ID" -#define NID_sxnet 143 -#define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -#define SN_X500 "X500" -#define LN_X500 "directory services (X.500)" -#define NID_X500 11 -#define OBJ_X500 2L,5L - -#define SN_X509 "X509" -#define NID_X509 12 -#define OBJ_X509 OBJ_X500,4L - -#define SN_commonName "CN" -#define LN_commonName "commonName" -#define NID_commonName 13 -#define OBJ_commonName OBJ_X509,3L - -#define SN_surname "SN" -#define LN_surname "surname" -#define NID_surname 100 -#define OBJ_surname OBJ_X509,4L - -#define LN_serialNumber "serialNumber" -#define NID_serialNumber 105 -#define OBJ_serialNumber OBJ_X509,5L - -#define SN_countryName "C" -#define LN_countryName "countryName" -#define NID_countryName 14 -#define OBJ_countryName OBJ_X509,6L - -#define SN_localityName "L" -#define LN_localityName "localityName" -#define NID_localityName 15 -#define OBJ_localityName OBJ_X509,7L - -#define SN_stateOrProvinceName "ST" -#define LN_stateOrProvinceName "stateOrProvinceName" -#define NID_stateOrProvinceName 16 -#define OBJ_stateOrProvinceName OBJ_X509,8L - -#define SN_streetAddress "street" -#define LN_streetAddress "streetAddress" -#define NID_streetAddress 660 -#define OBJ_streetAddress OBJ_X509,9L - -#define SN_organizationName "O" -#define LN_organizationName "organizationName" -#define NID_organizationName 17 -#define OBJ_organizationName OBJ_X509,10L - -#define SN_organizationalUnitName "OU" -#define LN_organizationalUnitName "organizationalUnitName" -#define NID_organizationalUnitName 18 -#define OBJ_organizationalUnitName OBJ_X509,11L - -#define SN_title "title" -#define LN_title "title" -#define NID_title 106 -#define OBJ_title OBJ_X509,12L - -#define LN_description "description" -#define NID_description 107 -#define OBJ_description OBJ_X509,13L - -#define LN_searchGuide "searchGuide" -#define NID_searchGuide 859 -#define OBJ_searchGuide OBJ_X509,14L - -#define LN_businessCategory "businessCategory" -#define NID_businessCategory 860 -#define OBJ_businessCategory OBJ_X509,15L - -#define LN_postalAddress "postalAddress" -#define NID_postalAddress 861 -#define OBJ_postalAddress OBJ_X509,16L - -#define LN_postalCode "postalCode" -#define NID_postalCode 661 -#define OBJ_postalCode OBJ_X509,17L - -#define LN_postOfficeBox "postOfficeBox" -#define NID_postOfficeBox 862 -#define OBJ_postOfficeBox OBJ_X509,18L - -#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" -#define NID_physicalDeliveryOfficeName 863 -#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L - -#define LN_telephoneNumber "telephoneNumber" -#define NID_telephoneNumber 864 -#define OBJ_telephoneNumber OBJ_X509,20L - -#define LN_telexNumber "telexNumber" -#define NID_telexNumber 865 -#define OBJ_telexNumber OBJ_X509,21L - -#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" -#define NID_teletexTerminalIdentifier 866 -#define OBJ_teletexTerminalIdentifier OBJ_X509,22L - -#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" -#define NID_facsimileTelephoneNumber 867 -#define OBJ_facsimileTelephoneNumber OBJ_X509,23L - -#define LN_x121Address "x121Address" -#define NID_x121Address 868 -#define OBJ_x121Address OBJ_X509,24L - -#define LN_internationaliSDNNumber "internationaliSDNNumber" -#define NID_internationaliSDNNumber 869 -#define OBJ_internationaliSDNNumber OBJ_X509,25L - -#define LN_registeredAddress "registeredAddress" -#define NID_registeredAddress 870 -#define OBJ_registeredAddress OBJ_X509,26L - -#define LN_destinationIndicator "destinationIndicator" -#define NID_destinationIndicator 871 -#define OBJ_destinationIndicator OBJ_X509,27L - -#define LN_preferredDeliveryMethod "preferredDeliveryMethod" -#define NID_preferredDeliveryMethod 872 -#define OBJ_preferredDeliveryMethod OBJ_X509,28L - -#define LN_presentationAddress "presentationAddress" -#define NID_presentationAddress 873 -#define OBJ_presentationAddress OBJ_X509,29L - -#define LN_supportedApplicationContext "supportedApplicationContext" -#define NID_supportedApplicationContext 874 -#define OBJ_supportedApplicationContext OBJ_X509,30L - -#define SN_member "member" -#define NID_member 875 -#define OBJ_member OBJ_X509,31L - -#define SN_owner "owner" -#define NID_owner 876 -#define OBJ_owner OBJ_X509,32L - -#define LN_roleOccupant "roleOccupant" -#define NID_roleOccupant 877 -#define OBJ_roleOccupant OBJ_X509,33L - -#define SN_seeAlso "seeAlso" -#define NID_seeAlso 878 -#define OBJ_seeAlso OBJ_X509,34L - -#define LN_userPassword "userPassword" -#define NID_userPassword 879 -#define OBJ_userPassword OBJ_X509,35L - -#define LN_userCertificate "userCertificate" -#define NID_userCertificate 880 -#define OBJ_userCertificate OBJ_X509,36L - -#define LN_cACertificate "cACertificate" -#define NID_cACertificate 881 -#define OBJ_cACertificate OBJ_X509,37L - -#define LN_authorityRevocationList "authorityRevocationList" -#define NID_authorityRevocationList 882 -#define OBJ_authorityRevocationList OBJ_X509,38L - -#define LN_certificateRevocationList "certificateRevocationList" -#define NID_certificateRevocationList 883 -#define OBJ_certificateRevocationList OBJ_X509,39L - -#define LN_crossCertificatePair "crossCertificatePair" -#define NID_crossCertificatePair 884 -#define OBJ_crossCertificatePair OBJ_X509,40L - -#define SN_name "name" -#define LN_name "name" -#define NID_name 173 -#define OBJ_name OBJ_X509,41L - -#define SN_givenName "GN" -#define LN_givenName "givenName" -#define NID_givenName 99 -#define OBJ_givenName OBJ_X509,42L - -#define SN_initials "initials" -#define LN_initials "initials" -#define NID_initials 101 -#define OBJ_initials OBJ_X509,43L - -#define LN_generationQualifier "generationQualifier" -#define NID_generationQualifier 509 -#define OBJ_generationQualifier OBJ_X509,44L - -#define LN_x500UniqueIdentifier "x500UniqueIdentifier" -#define NID_x500UniqueIdentifier 503 -#define OBJ_x500UniqueIdentifier OBJ_X509,45L - -#define SN_dnQualifier "dnQualifier" -#define LN_dnQualifier "dnQualifier" -#define NID_dnQualifier 174 -#define OBJ_dnQualifier OBJ_X509,46L - -#define LN_enhancedSearchGuide "enhancedSearchGuide" -#define NID_enhancedSearchGuide 885 -#define OBJ_enhancedSearchGuide OBJ_X509,47L - -#define LN_protocolInformation "protocolInformation" -#define NID_protocolInformation 886 -#define OBJ_protocolInformation OBJ_X509,48L - -#define LN_distinguishedName "distinguishedName" -#define NID_distinguishedName 887 -#define OBJ_distinguishedName OBJ_X509,49L - -#define LN_uniqueMember "uniqueMember" -#define NID_uniqueMember 888 -#define OBJ_uniqueMember OBJ_X509,50L - -#define LN_houseIdentifier "houseIdentifier" -#define NID_houseIdentifier 889 -#define OBJ_houseIdentifier OBJ_X509,51L - -#define LN_supportedAlgorithms "supportedAlgorithms" -#define NID_supportedAlgorithms 890 -#define OBJ_supportedAlgorithms OBJ_X509,52L - -#define LN_deltaRevocationList "deltaRevocationList" -#define NID_deltaRevocationList 891 -#define OBJ_deltaRevocationList OBJ_X509,53L - -#define SN_dmdName "dmdName" -#define NID_dmdName 892 -#define OBJ_dmdName OBJ_X509,54L - -#define LN_pseudonym "pseudonym" -#define NID_pseudonym 510 -#define OBJ_pseudonym OBJ_X509,65L - -#define SN_role "role" -#define LN_role "role" -#define NID_role 400 -#define OBJ_role OBJ_X509,72L - -#define 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_freshest_crl "freshestCRL" -#define LN_freshest_crl "X509v3 Freshest CRL" -#define NID_freshest_crl 857 -#define OBJ_freshest_crl OBJ_id_ce,46L - -#define SN_inhibit_any_policy "inhibitAnyPolicy" -#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" -#define NID_inhibit_any_policy 748 -#define OBJ_inhibit_any_policy OBJ_id_ce,54L - -#define SN_target_information "targetInformation" -#define LN_target_information "X509v3 AC Targeting" -#define NID_target_information 402 -#define OBJ_target_information OBJ_id_ce,55L - -#define SN_no_rev_avail "noRevAvail" -#define LN_no_rev_avail "X509v3 No Revocation Available" -#define NID_no_rev_avail 403 -#define OBJ_no_rev_avail OBJ_id_ce,56L - -#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" -#define LN_anyExtendedKeyUsage "Any Extended Key Usage" -#define NID_anyExtendedKeyUsage 910 -#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L - -#define SN_netscape "Netscape" -#define LN_netscape "Netscape Communications Corp." -#define NID_netscape 57 -#define OBJ_netscape 2L,16L,840L,1L,113730L - -#define SN_netscape_cert_extension "nsCertExt" -#define LN_netscape_cert_extension "Netscape Certificate Extension" -#define NID_netscape_cert_extension 58 -#define OBJ_netscape_cert_extension OBJ_netscape,1L - -#define SN_netscape_data_type "nsDataType" -#define LN_netscape_data_type "Netscape Data Type" -#define NID_netscape_data_type 59 -#define OBJ_netscape_data_type OBJ_netscape,2L - -#define SN_netscape_cert_type "nsCertType" -#define LN_netscape_cert_type "Netscape Cert Type" -#define NID_netscape_cert_type 71 -#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -#define SN_netscape_base_url "nsBaseUrl" -#define LN_netscape_base_url "Netscape Base Url" -#define NID_netscape_base_url 72 -#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -#define SN_netscape_revocation_url "nsRevocationUrl" -#define LN_netscape_revocation_url "Netscape Revocation Url" -#define NID_netscape_revocation_url 73 -#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -#define NID_netscape_ca_revocation_url 74 -#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -#define SN_netscape_renewal_url "nsRenewalUrl" -#define LN_netscape_renewal_url "Netscape Renewal Url" -#define NID_netscape_renewal_url 75 -#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -#define SN_netscape_ca_policy_url "nsCaPolicyUrl" -#define LN_netscape_ca_policy_url "Netscape CA Policy Url" -#define NID_netscape_ca_policy_url 76 -#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -#define SN_netscape_ssl_server_name "nsSslServerName" -#define LN_netscape_ssl_server_name "Netscape SSL Server Name" -#define NID_netscape_ssl_server_name 77 -#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -#define SN_netscape_comment "nsComment" -#define LN_netscape_comment "Netscape Comment" -#define NID_netscape_comment 78 -#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -#define SN_netscape_cert_sequence "nsCertSequence" -#define LN_netscape_cert_sequence "Netscape Certificate Sequence" -#define NID_netscape_cert_sequence 79 -#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -#define SN_ns_sgc "nsSGC" -#define LN_ns_sgc "Netscape Server Gated Crypto" -#define NID_ns_sgc 139 -#define OBJ_ns_sgc OBJ_netscape,4L,1L - -#define SN_org "ORG" -#define LN_org "org" -#define NID_org 379 -#define OBJ_org OBJ_iso,3L - -#define SN_dod "DOD" -#define LN_dod "dod" -#define NID_dod 380 -#define OBJ_dod OBJ_org,6L - -#define SN_iana "IANA" -#define LN_iana "iana" -#define NID_iana 381 -#define OBJ_iana OBJ_dod,1L - -#define OBJ_internet OBJ_iana - -#define SN_Directory "directory" -#define LN_Directory "Directory" -#define NID_Directory 382 -#define OBJ_Directory OBJ_internet,1L - -#define SN_Management "mgmt" -#define LN_Management "Management" -#define NID_Management 383 -#define OBJ_Management OBJ_internet,2L - -#define SN_Experimental "experimental" -#define LN_Experimental "Experimental" -#define NID_Experimental 384 -#define OBJ_Experimental OBJ_internet,3L - -#define SN_Private "private" -#define LN_Private "Private" -#define NID_Private 385 -#define OBJ_Private OBJ_internet,4L - -#define SN_Security "security" -#define LN_Security "Security" -#define NID_Security 386 -#define OBJ_Security OBJ_internet,5L - -#define SN_SNMPv2 "snmpv2" -#define LN_SNMPv2 "SNMPv2" -#define NID_SNMPv2 387 -#define OBJ_SNMPv2 OBJ_internet,6L - -#define LN_Mail "Mail" -#define NID_Mail 388 -#define OBJ_Mail OBJ_internet,7L - -#define SN_Enterprises "enterprises" -#define LN_Enterprises "Enterprises" -#define NID_Enterprises 389 -#define OBJ_Enterprises OBJ_Private,1L - -#define SN_dcObject "dcobject" -#define LN_dcObject "dcObject" -#define NID_dcObject 390 -#define OBJ_dcObject OBJ_Enterprises,1466L,344L - -#define SN_mime_mhs "mime-mhs" -#define LN_mime_mhs "MIME MHS" -#define NID_mime_mhs 504 -#define OBJ_mime_mhs OBJ_Mail,1L - -#define SN_mime_mhs_headings "mime-mhs-headings" -#define LN_mime_mhs_headings "mime-mhs-headings" -#define NID_mime_mhs_headings 505 -#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L - -#define SN_mime_mhs_bodies "mime-mhs-bodies" -#define LN_mime_mhs_bodies "mime-mhs-bodies" -#define NID_mime_mhs_bodies 506 -#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L - -#define SN_id_hex_partial_message "id-hex-partial-message" -#define LN_id_hex_partial_message "id-hex-partial-message" -#define NID_id_hex_partial_message 507 -#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L - -#define SN_id_hex_multipart_message "id-hex-multipart-message" -#define LN_id_hex_multipart_message "id-hex-multipart-message" -#define NID_id_hex_multipart_message 508 -#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L - -#define SN_zlib_compression "ZLIB" -#define LN_zlib_compression "zlib compression" -#define NID_zlib_compression 125 -#define OBJ_zlib_compression OBJ_id_smime_alg,8L - -#define OBJ_csor 2L,16L,840L,1L,101L,3L - -#define OBJ_nistAlgorithms OBJ_csor,4L - -#define OBJ_aes OBJ_nistAlgorithms,1L - -#define SN_aes_128_ecb "AES-128-ECB" -#define LN_aes_128_ecb "aes-128-ecb" -#define NID_aes_128_ecb 418 -#define OBJ_aes_128_ecb OBJ_aes,1L - -#define SN_aes_128_cbc "AES-128-CBC" -#define LN_aes_128_cbc "aes-128-cbc" -#define NID_aes_128_cbc 419 -#define OBJ_aes_128_cbc OBJ_aes,2L - -#define SN_aes_128_ofb128 "AES-128-OFB" -#define LN_aes_128_ofb128 "aes-128-ofb" -#define NID_aes_128_ofb128 420 -#define OBJ_aes_128_ofb128 OBJ_aes,3L - -#define SN_aes_128_cfb128 "AES-128-CFB" -#define LN_aes_128_cfb128 "aes-128-cfb" -#define NID_aes_128_cfb128 421 -#define OBJ_aes_128_cfb128 OBJ_aes,4L - -#define SN_id_aes128_wrap "id-aes128-wrap" -#define NID_id_aes128_wrap 788 -#define OBJ_id_aes128_wrap OBJ_aes,5L - -#define SN_aes_128_gcm "id-aes128-GCM" -#define LN_aes_128_gcm "aes-128-gcm" -#define NID_aes_128_gcm 895 -#define OBJ_aes_128_gcm OBJ_aes,6L - -#define SN_aes_128_ccm "id-aes128-CCM" -#define LN_aes_128_ccm "aes-128-ccm" -#define NID_aes_128_ccm 896 -#define OBJ_aes_128_ccm OBJ_aes,7L - -#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" -#define NID_id_aes128_wrap_pad 897 -#define OBJ_id_aes128_wrap_pad OBJ_aes,8L - -#define SN_aes_192_ecb "AES-192-ECB" -#define LN_aes_192_ecb "aes-192-ecb" -#define NID_aes_192_ecb 422 -#define OBJ_aes_192_ecb OBJ_aes,21L - -#define SN_aes_192_cbc "AES-192-CBC" -#define LN_aes_192_cbc "aes-192-cbc" -#define NID_aes_192_cbc 423 -#define OBJ_aes_192_cbc OBJ_aes,22L - -#define SN_aes_192_ofb128 "AES-192-OFB" -#define LN_aes_192_ofb128 "aes-192-ofb" -#define NID_aes_192_ofb128 424 -#define OBJ_aes_192_ofb128 OBJ_aes,23L - -#define SN_aes_192_cfb128 "AES-192-CFB" -#define LN_aes_192_cfb128 "aes-192-cfb" -#define NID_aes_192_cfb128 425 -#define OBJ_aes_192_cfb128 OBJ_aes,24L - -#define SN_id_aes192_wrap "id-aes192-wrap" -#define NID_id_aes192_wrap 789 -#define OBJ_id_aes192_wrap OBJ_aes,25L - -#define SN_aes_192_gcm "id-aes192-GCM" -#define LN_aes_192_gcm "aes-192-gcm" -#define NID_aes_192_gcm 898 -#define OBJ_aes_192_gcm OBJ_aes,26L - -#define SN_aes_192_ccm "id-aes192-CCM" -#define LN_aes_192_ccm "aes-192-ccm" -#define NID_aes_192_ccm 899 -#define OBJ_aes_192_ccm OBJ_aes,27L - -#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" -#define NID_id_aes192_wrap_pad 900 -#define OBJ_id_aes192_wrap_pad OBJ_aes,28L - -#define SN_aes_256_ecb "AES-256-ECB" -#define LN_aes_256_ecb "aes-256-ecb" -#define NID_aes_256_ecb 426 -#define OBJ_aes_256_ecb OBJ_aes,41L - -#define SN_aes_256_cbc "AES-256-CBC" -#define LN_aes_256_cbc "aes-256-cbc" -#define NID_aes_256_cbc 427 -#define OBJ_aes_256_cbc OBJ_aes,42L - -#define SN_aes_256_ofb128 "AES-256-OFB" -#define LN_aes_256_ofb128 "aes-256-ofb" -#define NID_aes_256_ofb128 428 -#define OBJ_aes_256_ofb128 OBJ_aes,43L - -#define SN_aes_256_cfb128 "AES-256-CFB" -#define LN_aes_256_cfb128 "aes-256-cfb" -#define NID_aes_256_cfb128 429 -#define OBJ_aes_256_cfb128 OBJ_aes,44L - -#define SN_id_aes256_wrap "id-aes256-wrap" -#define NID_id_aes256_wrap 790 -#define OBJ_id_aes256_wrap OBJ_aes,45L - -#define SN_aes_256_gcm "id-aes256-GCM" -#define LN_aes_256_gcm "aes-256-gcm" -#define NID_aes_256_gcm 901 -#define OBJ_aes_256_gcm OBJ_aes,46L - -#define SN_aes_256_ccm "id-aes256-CCM" -#define LN_aes_256_ccm "aes-256-ccm" -#define NID_aes_256_ccm 902 -#define OBJ_aes_256_ccm OBJ_aes,47L - -#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" -#define NID_id_aes256_wrap_pad 903 -#define OBJ_id_aes256_wrap_pad OBJ_aes,48L - -#define SN_aes_128_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 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_hold_instruction_code "holdInstructionCode" -#define LN_hold_instruction_code "Hold Instruction Code" -#define NID_hold_instruction_code 430 -#define OBJ_hold_instruction_code OBJ_id_ce,23L - -#define OBJ_holdInstruction OBJ_X9_57,2L - -#define SN_hold_instruction_none "holdInstructionNone" -#define LN_hold_instruction_none "Hold Instruction None" -#define NID_hold_instruction_none 431 -#define OBJ_hold_instruction_none OBJ_holdInstruction,1L - -#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" -#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" -#define NID_hold_instruction_call_issuer 432 -#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L - -#define SN_hold_instruction_reject "holdInstructionReject" -#define LN_hold_instruction_reject "Hold Instruction Reject" -#define NID_hold_instruction_reject 433 -#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L - -#define SN_data "data" -#define NID_data 434 -#define OBJ_data OBJ_itu_t,9L - -#define SN_pss "pss" -#define NID_pss 435 -#define OBJ_pss OBJ_data,2342L - -#define SN_ucl "ucl" -#define NID_ucl 436 -#define OBJ_ucl OBJ_pss,19200300L - -#define SN_pilot "pilot" -#define NID_pilot 437 -#define OBJ_pilot OBJ_ucl,100L - -#define LN_pilotAttributeType "pilotAttributeType" -#define NID_pilotAttributeType 438 -#define OBJ_pilotAttributeType OBJ_pilot,1L - -#define LN_pilotAttributeSyntax "pilotAttributeSyntax" -#define NID_pilotAttributeSyntax 439 -#define OBJ_pilotAttributeSyntax OBJ_pilot,3L - -#define LN_pilotObjectClass "pilotObjectClass" -#define NID_pilotObjectClass 440 -#define OBJ_pilotObjectClass OBJ_pilot,4L - -#define LN_pilotGroups "pilotGroups" -#define NID_pilotGroups 441 -#define OBJ_pilotGroups OBJ_pilot,10L - -#define LN_iA5StringSyntax "iA5StringSyntax" -#define NID_iA5StringSyntax 442 -#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L - -#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" -#define NID_caseIgnoreIA5StringSyntax 443 -#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L - -#define LN_pilotObject "pilotObject" -#define NID_pilotObject 444 -#define OBJ_pilotObject OBJ_pilotObjectClass,3L - -#define LN_pilotPerson "pilotPerson" -#define NID_pilotPerson 445 -#define OBJ_pilotPerson OBJ_pilotObjectClass,4L - -#define SN_account "account" -#define NID_account 446 -#define OBJ_account OBJ_pilotObjectClass,5L - -#define SN_document "document" -#define NID_document 447 -#define OBJ_document OBJ_pilotObjectClass,6L - -#define SN_room "room" -#define NID_room 448 -#define OBJ_room OBJ_pilotObjectClass,7L - -#define LN_documentSeries "documentSeries" -#define NID_documentSeries 449 -#define OBJ_documentSeries OBJ_pilotObjectClass,9L - -#define SN_Domain "domain" -#define LN_Domain "Domain" -#define NID_Domain 392 -#define OBJ_Domain OBJ_pilotObjectClass,13L - -#define LN_rFC822localPart "rFC822localPart" -#define NID_rFC822localPart 450 -#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L - -#define LN_dNSDomain "dNSDomain" -#define NID_dNSDomain 451 -#define OBJ_dNSDomain OBJ_pilotObjectClass,15L - -#define LN_domainRelatedObject "domainRelatedObject" -#define NID_domainRelatedObject 452 -#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L - -#define LN_friendlyCountry "friendlyCountry" -#define NID_friendlyCountry 453 -#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L - -#define LN_simpleSecurityObject "simpleSecurityObject" -#define NID_simpleSecurityObject 454 -#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L - -#define LN_pilotOrganization "pilotOrganization" -#define NID_pilotOrganization 455 -#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L - -#define LN_pilotDSA "pilotDSA" -#define NID_pilotDSA 456 -#define OBJ_pilotDSA OBJ_pilotObjectClass,21L - -#define LN_qualityLabelledData "qualityLabelledData" -#define NID_qualityLabelledData 457 -#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L - -#define SN_userId "UID" -#define LN_userId "userId" -#define NID_userId 458 -#define OBJ_userId OBJ_pilotAttributeType,1L - -#define LN_textEncodedORAddress "textEncodedORAddress" -#define NID_textEncodedORAddress 459 -#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L - -#define SN_rfc822Mailbox "mail" -#define LN_rfc822Mailbox "rfc822Mailbox" -#define NID_rfc822Mailbox 460 -#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L - -#define SN_info "info" -#define NID_info 461 -#define OBJ_info OBJ_pilotAttributeType,4L - -#define LN_favouriteDrink "favouriteDrink" -#define NID_favouriteDrink 462 -#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L - -#define LN_roomNumber "roomNumber" -#define NID_roomNumber 463 -#define OBJ_roomNumber OBJ_pilotAttributeType,6L - -#define SN_photo "photo" -#define NID_photo 464 -#define OBJ_photo OBJ_pilotAttributeType,7L - -#define LN_userClass "userClass" -#define NID_userClass 465 -#define OBJ_userClass OBJ_pilotAttributeType,8L - -#define SN_host "host" -#define NID_host 466 -#define OBJ_host OBJ_pilotAttributeType,9L - -#define SN_manager "manager" -#define NID_manager 467 -#define OBJ_manager OBJ_pilotAttributeType,10L - -#define LN_documentIdentifier "documentIdentifier" -#define NID_documentIdentifier 468 -#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L - -#define LN_documentTitle "documentTitle" -#define NID_documentTitle 469 -#define OBJ_documentTitle OBJ_pilotAttributeType,12L - -#define LN_documentVersion "documentVersion" -#define NID_documentVersion 470 -#define OBJ_documentVersion OBJ_pilotAttributeType,13L - -#define LN_documentAuthor "documentAuthor" -#define NID_documentAuthor 471 -#define OBJ_documentAuthor OBJ_pilotAttributeType,14L - -#define LN_documentLocation "documentLocation" -#define NID_documentLocation 472 -#define OBJ_documentLocation OBJ_pilotAttributeType,15L - -#define LN_homeTelephoneNumber "homeTelephoneNumber" -#define NID_homeTelephoneNumber 473 -#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L - -#define SN_secretary "secretary" -#define NID_secretary 474 -#define OBJ_secretary OBJ_pilotAttributeType,21L - -#define LN_otherMailbox "otherMailbox" -#define NID_otherMailbox 475 -#define OBJ_otherMailbox OBJ_pilotAttributeType,22L - -#define LN_lastModifiedTime "lastModifiedTime" -#define NID_lastModifiedTime 476 -#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L - -#define LN_lastModifiedBy "lastModifiedBy" -#define NID_lastModifiedBy 477 -#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L - -#define SN_domainComponent "DC" -#define LN_domainComponent "domainComponent" -#define NID_domainComponent 391 -#define OBJ_domainComponent OBJ_pilotAttributeType,25L - -#define LN_aRecord "aRecord" -#define NID_aRecord 478 -#define OBJ_aRecord OBJ_pilotAttributeType,26L - -#define LN_pilotAttributeType27 "pilotAttributeType27" -#define NID_pilotAttributeType27 479 -#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L - -#define LN_mXRecord "mXRecord" -#define NID_mXRecord 480 -#define OBJ_mXRecord OBJ_pilotAttributeType,28L - -#define LN_nSRecord "nSRecord" -#define NID_nSRecord 481 -#define OBJ_nSRecord OBJ_pilotAttributeType,29L - -#define LN_sOARecord "sOARecord" -#define NID_sOARecord 482 -#define OBJ_sOARecord OBJ_pilotAttributeType,30L - -#define LN_cNAMERecord "cNAMERecord" -#define NID_cNAMERecord 483 -#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L - -#define LN_associatedDomain "associatedDomain" -#define NID_associatedDomain 484 -#define OBJ_associatedDomain OBJ_pilotAttributeType,37L - -#define LN_associatedName "associatedName" -#define NID_associatedName 485 -#define OBJ_associatedName OBJ_pilotAttributeType,38L - -#define LN_homePostalAddress "homePostalAddress" -#define NID_homePostalAddress 486 -#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L - -#define LN_personalTitle "personalTitle" -#define NID_personalTitle 487 -#define OBJ_personalTitle OBJ_pilotAttributeType,40L - -#define LN_mobileTelephoneNumber "mobileTelephoneNumber" -#define NID_mobileTelephoneNumber 488 -#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L - -#define LN_pagerTelephoneNumber "pagerTelephoneNumber" -#define NID_pagerTelephoneNumber 489 -#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L - -#define LN_friendlyCountryName "friendlyCountryName" -#define NID_friendlyCountryName 490 -#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L - -#define SN_uniqueIdentifier "uid" -#define LN_uniqueIdentifier "uniqueIdentifier" -#define NID_uniqueIdentifier 102 -#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L - -#define LN_organizationalStatus "organizationalStatus" -#define NID_organizationalStatus 491 -#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L - -#define LN_janetMailbox "janetMailbox" -#define NID_janetMailbox 492 -#define OBJ_janetMailbox OBJ_pilotAttributeType,46L - -#define LN_mailPreferenceOption "mailPreferenceOption" -#define NID_mailPreferenceOption 493 -#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L - -#define LN_buildingName "buildingName" -#define NID_buildingName 494 -#define OBJ_buildingName OBJ_pilotAttributeType,48L - -#define LN_dSAQuality "dSAQuality" -#define NID_dSAQuality 495 -#define OBJ_dSAQuality OBJ_pilotAttributeType,49L - -#define LN_singleLevelQuality "singleLevelQuality" -#define NID_singleLevelQuality 496 -#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L - -#define LN_subtreeMinimumQuality "subtreeMinimumQuality" -#define NID_subtreeMinimumQuality 497 -#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L - -#define LN_subtreeMaximumQuality "subtreeMaximumQuality" -#define NID_subtreeMaximumQuality 498 -#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L - -#define LN_personalSignature "personalSignature" -#define NID_personalSignature 499 -#define OBJ_personalSignature OBJ_pilotAttributeType,53L - -#define LN_dITRedirect "dITRedirect" -#define NID_dITRedirect 500 -#define OBJ_dITRedirect OBJ_pilotAttributeType,54L - -#define SN_audio "audio" -#define NID_audio 501 -#define OBJ_audio OBJ_pilotAttributeType,55L - -#define LN_documentPublisher "documentPublisher" -#define NID_documentPublisher 502 -#define OBJ_documentPublisher OBJ_pilotAttributeType,56L - -#define SN_id_set "id-set" -#define LN_id_set "Secure Electronic Transactions" -#define NID_id_set 512 -#define OBJ_id_set OBJ_international_organizations,42L - -#define SN_set_ctype "set-ctype" -#define LN_set_ctype "content types" -#define NID_set_ctype 513 -#define OBJ_set_ctype OBJ_id_set,0L - -#define SN_set_msgExt "set-msgExt" -#define LN_set_msgExt "message extensions" -#define NID_set_msgExt 514 -#define OBJ_set_msgExt OBJ_id_set,1L - -#define SN_set_attr "set-attr" -#define NID_set_attr 515 -#define OBJ_set_attr OBJ_id_set,3L - -#define SN_set_policy "set-policy" -#define NID_set_policy 516 -#define OBJ_set_policy OBJ_id_set,5L - -#define SN_set_certExt "set-certExt" -#define LN_set_certExt "certificate extensions" -#define NID_set_certExt 517 -#define OBJ_set_certExt OBJ_id_set,7L - -#define SN_set_brand "set-brand" -#define NID_set_brand 518 -#define OBJ_set_brand OBJ_id_set,8L - -#define SN_setct_PANData "setct-PANData" -#define NID_setct_PANData 519 -#define OBJ_setct_PANData OBJ_set_ctype,0L - -#define SN_setct_PANToken "setct-PANToken" -#define NID_setct_PANToken 520 -#define OBJ_setct_PANToken OBJ_set_ctype,1L - -#define SN_setct_PANOnly "setct-PANOnly" -#define NID_setct_PANOnly 521 -#define OBJ_setct_PANOnly OBJ_set_ctype,2L - -#define SN_setct_OIData "setct-OIData" -#define NID_setct_OIData 522 -#define OBJ_setct_OIData OBJ_set_ctype,3L - -#define SN_setct_PI "setct-PI" -#define NID_setct_PI 523 -#define OBJ_setct_PI OBJ_set_ctype,4L - -#define SN_setct_PIData "setct-PIData" -#define NID_setct_PIData 524 -#define OBJ_setct_PIData OBJ_set_ctype,5L - -#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" -#define NID_setct_PIDataUnsigned 525 -#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L - -#define SN_setct_HODInput "setct-HODInput" -#define NID_setct_HODInput 526 -#define OBJ_setct_HODInput OBJ_set_ctype,7L - -#define SN_setct_AuthResBaggage "setct-AuthResBaggage" -#define NID_setct_AuthResBaggage 527 -#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L - -#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" -#define NID_setct_AuthRevReqBaggage 528 -#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L - -#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" -#define NID_setct_AuthRevResBaggage 529 -#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L - -#define SN_setct_CapTokenSeq "setct-CapTokenSeq" -#define NID_setct_CapTokenSeq 530 -#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L - -#define SN_setct_PInitResData "setct-PInitResData" -#define NID_setct_PInitResData 531 -#define OBJ_setct_PInitResData OBJ_set_ctype,12L - -#define SN_setct_PI_TBS "setct-PI-TBS" -#define NID_setct_PI_TBS 532 -#define OBJ_setct_PI_TBS OBJ_set_ctype,13L - -#define SN_setct_PResData "setct-PResData" -#define NID_setct_PResData 533 -#define OBJ_setct_PResData OBJ_set_ctype,14L - -#define SN_setct_AuthReqTBS "setct-AuthReqTBS" -#define NID_setct_AuthReqTBS 534 -#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L - -#define SN_setct_AuthResTBS "setct-AuthResTBS" -#define NID_setct_AuthResTBS 535 -#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L - -#define SN_setct_AuthResTBSX "setct-AuthResTBSX" -#define NID_setct_AuthResTBSX 536 -#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L - -#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" -#define NID_setct_AuthTokenTBS 537 -#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L - -#define SN_setct_CapTokenData "setct-CapTokenData" -#define NID_setct_CapTokenData 538 -#define OBJ_setct_CapTokenData OBJ_set_ctype,20L - -#define SN_setct_CapTokenTBS "setct-CapTokenTBS" -#define NID_setct_CapTokenTBS 539 -#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L - -#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" -#define NID_setct_AcqCardCodeMsg 540 -#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L - -#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" -#define NID_setct_AuthRevReqTBS 541 -#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L - -#define SN_setct_AuthRevResData "setct-AuthRevResData" -#define NID_setct_AuthRevResData 542 -#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L - -#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" -#define NID_setct_AuthRevResTBS 543 -#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L - -#define SN_setct_CapReqTBS "setct-CapReqTBS" -#define NID_setct_CapReqTBS 544 -#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L - -#define SN_setct_CapReqTBSX "setct-CapReqTBSX" -#define NID_setct_CapReqTBSX 545 -#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L - -#define SN_setct_CapResData "setct-CapResData" -#define NID_setct_CapResData 546 -#define OBJ_setct_CapResData OBJ_set_ctype,28L - -#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" -#define NID_setct_CapRevReqTBS 547 -#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L - -#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" -#define NID_setct_CapRevReqTBSX 548 -#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L - -#define SN_setct_CapRevResData "setct-CapRevResData" -#define NID_setct_CapRevResData 549 -#define OBJ_setct_CapRevResData OBJ_set_ctype,31L - -#define SN_setct_CredReqTBS "setct-CredReqTBS" -#define NID_setct_CredReqTBS 550 -#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L - -#define SN_setct_CredReqTBSX "setct-CredReqTBSX" -#define NID_setct_CredReqTBSX 551 -#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L - -#define SN_setct_CredResData "setct-CredResData" -#define NID_setct_CredResData 552 -#define OBJ_setct_CredResData OBJ_set_ctype,34L - -#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" -#define NID_setct_CredRevReqTBS 553 -#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L - -#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" -#define NID_setct_CredRevReqTBSX 554 -#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L - -#define SN_setct_CredRevResData "setct-CredRevResData" -#define NID_setct_CredRevResData 555 -#define OBJ_setct_CredRevResData OBJ_set_ctype,37L - -#define SN_setct_PCertReqData "setct-PCertReqData" -#define NID_setct_PCertReqData 556 -#define OBJ_setct_PCertReqData OBJ_set_ctype,38L - -#define SN_setct_PCertResTBS "setct-PCertResTBS" -#define NID_setct_PCertResTBS 557 -#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L - -#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" -#define NID_setct_BatchAdminReqData 558 -#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L - -#define SN_setct_BatchAdminResData "setct-BatchAdminResData" -#define NID_setct_BatchAdminResData 559 -#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L - -#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" -#define NID_setct_CardCInitResTBS 560 -#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L - -#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" -#define NID_setct_MeAqCInitResTBS 561 -#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L - -#define SN_setct_RegFormResTBS "setct-RegFormResTBS" -#define NID_setct_RegFormResTBS 562 -#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L - -#define SN_setct_CertReqData "setct-CertReqData" -#define NID_setct_CertReqData 563 -#define OBJ_setct_CertReqData OBJ_set_ctype,45L - -#define SN_setct_CertReqTBS "setct-CertReqTBS" -#define NID_setct_CertReqTBS 564 -#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L - -#define SN_setct_CertResData "setct-CertResData" -#define NID_setct_CertResData 565 -#define OBJ_setct_CertResData OBJ_set_ctype,47L - -#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" -#define NID_setct_CertInqReqTBS 566 -#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L - -#define SN_setct_ErrorTBS "setct-ErrorTBS" -#define NID_setct_ErrorTBS 567 -#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L - -#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" -#define NID_setct_PIDualSignedTBE 568 -#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L - -#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" -#define NID_setct_PIUnsignedTBE 569 -#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L - -#define SN_setct_AuthReqTBE "setct-AuthReqTBE" -#define NID_setct_AuthReqTBE 570 -#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L - -#define SN_setct_AuthResTBE "setct-AuthResTBE" -#define NID_setct_AuthResTBE 571 -#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L - -#define SN_setct_AuthResTBEX "setct-AuthResTBEX" -#define NID_setct_AuthResTBEX 572 -#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L - -#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" -#define NID_setct_AuthTokenTBE 573 -#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L - -#define SN_setct_CapTokenTBE "setct-CapTokenTBE" -#define NID_setct_CapTokenTBE 574 -#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L - -#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" -#define NID_setct_CapTokenTBEX 575 -#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L - -#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" -#define NID_setct_AcqCardCodeMsgTBE 576 -#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L - -#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" -#define NID_setct_AuthRevReqTBE 577 -#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L - -#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" -#define NID_setct_AuthRevResTBE 578 -#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L - -#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" -#define NID_setct_AuthRevResTBEB 579 -#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L - -#define SN_setct_CapReqTBE "setct-CapReqTBE" -#define NID_setct_CapReqTBE 580 -#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L - -#define SN_setct_CapReqTBEX "setct-CapReqTBEX" -#define NID_setct_CapReqTBEX 581 -#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L - -#define SN_setct_CapResTBE "setct-CapResTBE" -#define NID_setct_CapResTBE 582 -#define OBJ_setct_CapResTBE OBJ_set_ctype,64L - -#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" -#define NID_setct_CapRevReqTBE 583 -#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L - -#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" -#define NID_setct_CapRevReqTBEX 584 -#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L - -#define SN_setct_CapRevResTBE "setct-CapRevResTBE" -#define NID_setct_CapRevResTBE 585 -#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L - -#define SN_setct_CredReqTBE "setct-CredReqTBE" -#define NID_setct_CredReqTBE 586 -#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L - -#define SN_setct_CredReqTBEX "setct-CredReqTBEX" -#define NID_setct_CredReqTBEX 587 -#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L - -#define SN_setct_CredResTBE "setct-CredResTBE" -#define NID_setct_CredResTBE 588 -#define OBJ_setct_CredResTBE OBJ_set_ctype,70L - -#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" -#define NID_setct_CredRevReqTBE 589 -#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L - -#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" -#define NID_setct_CredRevReqTBEX 590 -#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L - -#define SN_setct_CredRevResTBE "setct-CredRevResTBE" -#define NID_setct_CredRevResTBE 591 -#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L - -#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" -#define NID_setct_BatchAdminReqTBE 592 -#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L - -#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" -#define NID_setct_BatchAdminResTBE 593 -#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L - -#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" -#define NID_setct_RegFormReqTBE 594 -#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L - -#define SN_setct_CertReqTBE "setct-CertReqTBE" -#define NID_setct_CertReqTBE 595 -#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L - -#define SN_setct_CertReqTBEX "setct-CertReqTBEX" -#define NID_setct_CertReqTBEX 596 -#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L - -#define SN_setct_CertResTBE "setct-CertResTBE" -#define NID_setct_CertResTBE 597 -#define OBJ_setct_CertResTBE OBJ_set_ctype,79L - -#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" -#define NID_setct_CRLNotificationTBS 598 -#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L - -#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" -#define NID_setct_CRLNotificationResTBS 599 -#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L - -#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" -#define NID_setct_BCIDistributionTBS 600 -#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L - -#define SN_setext_genCrypt "setext-genCrypt" -#define LN_setext_genCrypt "generic cryptogram" -#define NID_setext_genCrypt 601 -#define OBJ_setext_genCrypt OBJ_set_msgExt,1L - -#define SN_setext_miAuth "setext-miAuth" -#define LN_setext_miAuth "merchant initiated auth" -#define NID_setext_miAuth 602 -#define OBJ_setext_miAuth OBJ_set_msgExt,3L - -#define SN_setext_pinSecure "setext-pinSecure" -#define NID_setext_pinSecure 603 -#define OBJ_setext_pinSecure OBJ_set_msgExt,4L - -#define SN_setext_pinAny "setext-pinAny" -#define NID_setext_pinAny 604 -#define OBJ_setext_pinAny OBJ_set_msgExt,5L - -#define SN_setext_track2 "setext-track2" -#define NID_setext_track2 605 -#define OBJ_setext_track2 OBJ_set_msgExt,7L - -#define SN_setext_cv "setext-cv" -#define LN_setext_cv "additional verification" -#define NID_setext_cv 606 -#define OBJ_setext_cv OBJ_set_msgExt,8L - -#define SN_set_policy_root "set-policy-root" -#define NID_set_policy_root 607 -#define OBJ_set_policy_root OBJ_set_policy,0L - -#define SN_setCext_hashedRoot "setCext-hashedRoot" -#define NID_setCext_hashedRoot 608 -#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L - -#define SN_setCext_certType "setCext-certType" -#define NID_setCext_certType 609 -#define OBJ_setCext_certType OBJ_set_certExt,1L - -#define SN_setCext_merchData "setCext-merchData" -#define NID_setCext_merchData 610 -#define OBJ_setCext_merchData OBJ_set_certExt,2L - -#define SN_setCext_cCertRequired "setCext-cCertRequired" -#define NID_setCext_cCertRequired 611 -#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L - -#define SN_setCext_tunneling "setCext-tunneling" -#define NID_setCext_tunneling 612 -#define OBJ_setCext_tunneling OBJ_set_certExt,4L - -#define SN_setCext_setExt "setCext-setExt" -#define NID_setCext_setExt 613 -#define OBJ_setCext_setExt OBJ_set_certExt,5L - -#define SN_setCext_setQualf "setCext-setQualf" -#define NID_setCext_setQualf 614 -#define OBJ_setCext_setQualf OBJ_set_certExt,6L - -#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" -#define NID_setCext_PGWYcapabilities 615 -#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L - -#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" -#define NID_setCext_TokenIdentifier 616 -#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L - -#define SN_setCext_Track2Data "setCext-Track2Data" -#define NID_setCext_Track2Data 617 -#define OBJ_setCext_Track2Data OBJ_set_certExt,9L - -#define SN_setCext_TokenType "setCext-TokenType" -#define NID_setCext_TokenType 618 -#define OBJ_setCext_TokenType OBJ_set_certExt,10L - -#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" -#define NID_setCext_IssuerCapabilities 619 -#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L - -#define SN_setAttr_Cert "setAttr-Cert" -#define NID_setAttr_Cert 620 -#define OBJ_setAttr_Cert OBJ_set_attr,0L - -#define SN_setAttr_PGWYcap "setAttr-PGWYcap" -#define LN_setAttr_PGWYcap "payment gateway capabilities" -#define NID_setAttr_PGWYcap 621 -#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L - -#define SN_setAttr_TokenType "setAttr-TokenType" -#define NID_setAttr_TokenType 622 -#define OBJ_setAttr_TokenType OBJ_set_attr,2L - -#define SN_setAttr_IssCap "setAttr-IssCap" -#define LN_setAttr_IssCap "issuer capabilities" -#define NID_setAttr_IssCap 623 -#define OBJ_setAttr_IssCap OBJ_set_attr,3L - -#define SN_set_rootKeyThumb "set-rootKeyThumb" -#define NID_set_rootKeyThumb 624 -#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L - -#define SN_set_addPolicy "set-addPolicy" -#define NID_set_addPolicy 625 -#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L - -#define SN_setAttr_Token_EMV "setAttr-Token-EMV" -#define NID_setAttr_Token_EMV 626 -#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L - -#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" -#define NID_setAttr_Token_B0Prime 627 -#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L - -#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" -#define NID_setAttr_IssCap_CVM 628 -#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L - -#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" -#define NID_setAttr_IssCap_T2 629 -#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L - -#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" -#define NID_setAttr_IssCap_Sig 630 -#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L - -#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" -#define LN_setAttr_GenCryptgrm "generate cryptogram" -#define NID_setAttr_GenCryptgrm 631 -#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L - -#define SN_setAttr_T2Enc "setAttr-T2Enc" -#define LN_setAttr_T2Enc "encrypted track 2" -#define NID_setAttr_T2Enc 632 -#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L - -#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" -#define LN_setAttr_T2cleartxt "cleartext track 2" -#define NID_setAttr_T2cleartxt 633 -#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L - -#define SN_setAttr_TokICCsig "setAttr-TokICCsig" -#define LN_setAttr_TokICCsig "ICC or token signature" -#define NID_setAttr_TokICCsig 634 -#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L - -#define SN_setAttr_SecDevSig "setAttr-SecDevSig" -#define LN_setAttr_SecDevSig "secure device signature" -#define NID_setAttr_SecDevSig 635 -#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L - -#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" -#define NID_set_brand_IATA_ATA 636 -#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L - -#define SN_set_brand_Diners "set-brand-Diners" -#define NID_set_brand_Diners 637 -#define OBJ_set_brand_Diners OBJ_set_brand,30L - -#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" -#define NID_set_brand_AmericanExpress 638 -#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L - -#define SN_set_brand_JCB "set-brand-JCB" -#define NID_set_brand_JCB 639 -#define OBJ_set_brand_JCB OBJ_set_brand,35L - -#define SN_set_brand_Visa "set-brand-Visa" -#define NID_set_brand_Visa 640 -#define OBJ_set_brand_Visa OBJ_set_brand,4L - -#define SN_set_brand_MasterCard "set-brand-MasterCard" -#define NID_set_brand_MasterCard 641 -#define OBJ_set_brand_MasterCard OBJ_set_brand,5L - -#define SN_set_brand_Novus "set-brand-Novus" -#define NID_set_brand_Novus 642 -#define OBJ_set_brand_Novus OBJ_set_brand,6011L - -#define SN_des_cdmf "DES-CDMF" -#define LN_des_cdmf "des-cdmf" -#define NID_des_cdmf 643 -#define OBJ_des_cdmf OBJ_rsadsi,3L,10L - -#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" -#define NID_rsaOAEPEncryptionSET 644 -#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L - -#define SN_ipsec3 "Oakley-EC2N-3" -#define LN_ipsec3 "ipsec3" -#define NID_ipsec3 749 - -#define SN_ipsec4 "Oakley-EC2N-4" -#define LN_ipsec4 "ipsec4" -#define NID_ipsec4 750 - -#define SN_whirlpool "whirlpool" -#define NID_whirlpool 804 -#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L - -#define SN_cryptopro "cryptopro" -#define NID_cryptopro 805 -#define OBJ_cryptopro OBJ_member_body,643L,2L,2L - -#define SN_cryptocom "cryptocom" -#define NID_cryptocom 806 -#define OBJ_cryptocom OBJ_member_body,643L,2L,9L - -#define SN_id_tc26 "id-tc26" -#define NID_id_tc26 974 -#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L - -#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" -#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" -#define NID_id_GostR3411_94_with_GostR3410_2001 807 -#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L - -#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" -#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" -#define NID_id_GostR3411_94_with_GostR3410_94 808 -#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L - -#define SN_id_GostR3411_94 "md_gost94" -#define LN_id_GostR3411_94 "GOST R 34.11-94" -#define NID_id_GostR3411_94 809 -#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L - -#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" -#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" -#define NID_id_HMACGostR3411_94 810 -#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L - -#define SN_id_GostR3410_2001 "gost2001" -#define LN_id_GostR3410_2001 "GOST R 34.10-2001" -#define NID_id_GostR3410_2001 811 -#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L - -#define SN_id_GostR3410_94 "gost94" -#define LN_id_GostR3410_94 "GOST R 34.10-94" -#define NID_id_GostR3410_94 812 -#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L - -#define SN_id_Gost28147_89 "gost89" -#define LN_id_Gost28147_89 "GOST 28147-89" -#define NID_id_Gost28147_89 813 -#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L - -#define SN_gost89_cnt "gost89-cnt" -#define NID_gost89_cnt 814 - -#define SN_gost89_cnt_12 "gost89-cnt-12" -#define NID_gost89_cnt_12 975 - -#define SN_gost89_cbc "gost89-cbc" -#define NID_gost89_cbc 1009 - -#define SN_gost89_ecb "gost89-ecb" -#define NID_gost89_ecb 1010 - -#define SN_gost89_ctr "gost89-ctr" -#define NID_gost89_ctr 1011 - -#define SN_id_Gost28147_89_MAC "gost-mac" -#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" -#define NID_id_Gost28147_89_MAC 815 -#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L - -#define SN_gost_mac_12 "gost-mac-12" -#define NID_gost_mac_12 976 - -#define SN_id_GostR3411_94_prf "prf-gostr3411-94" -#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" -#define NID_id_GostR3411_94_prf 816 -#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L - -#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" -#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" -#define NID_id_GostR3410_2001DH 817 -#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L - -#define SN_id_GostR3410_94DH "id-GostR3410-94DH" -#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" -#define NID_id_GostR3410_94DH 818 -#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L - -#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" -#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 -#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L - -#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" -#define NID_id_Gost28147_89_None_KeyMeshing 820 -#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L - -#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" -#define NID_id_GostR3411_94_TestParamSet 821 -#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L - -#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" -#define NID_id_GostR3411_94_CryptoProParamSet 822 -#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L - -#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" -#define NID_id_Gost28147_89_TestParamSet 823 -#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L - -#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 -#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L - -#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 -#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L - -#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 -#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L - -#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 -#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L - -#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 -#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L - -#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" -#define NID_id_GostR3410_94_TestParamSet 831 -#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L - -#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 -#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L - -#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 -#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L - -#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 -#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L - -#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 -#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L - -#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 -#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L - -#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 -#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L - -#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 -#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L - -#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" -#define NID_id_GostR3410_2001_TestParamSet 839 -#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L - -#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 -#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L - -#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 -#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L - -#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 -#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L - -#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 -#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L - -#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 -#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L - -#define SN_id_GostR3410_94_a "id-GostR3410-94-a" -#define NID_id_GostR3410_94_a 845 -#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L - -#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" -#define NID_id_GostR3410_94_aBis 846 -#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L - -#define SN_id_GostR3410_94_b "id-GostR3410-94-b" -#define NID_id_GostR3410_94_b 847 -#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L - -#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" -#define NID_id_GostR3410_94_bBis 848 -#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L - -#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" -#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" -#define NID_id_Gost28147_89_cc 849 -#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L - -#define SN_id_GostR3410_94_cc "gost94cc" -#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" -#define NID_id_GostR3410_94_cc 850 -#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L - -#define SN_id_GostR3410_2001_cc "gost2001cc" -#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" -#define NID_id_GostR3410_2001_cc 851 -#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L - -#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" -#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 -#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L - -#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" -#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 -#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L - -#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" -#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" -#define NID_id_GostR3410_2001_ParamSet_cc 854 -#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L - -#define SN_id_tc26_algorithms "id-tc26-algorithms" -#define NID_id_tc26_algorithms 977 -#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L - -#define SN_id_tc26_sign "id-tc26-sign" -#define NID_id_tc26_sign 978 -#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L - -#define SN_id_GostR3410_2012_256 "gost2012_256" -#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" -#define NID_id_GostR3410_2012_256 979 -#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L - -#define SN_id_GostR3410_2012_512 "gost2012_512" -#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" -#define NID_id_GostR3410_2012_512 980 -#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L - -#define SN_id_tc26_digest "id-tc26-digest" -#define NID_id_tc26_digest 981 -#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L - -#define SN_id_GostR3411_2012_256 "md_gost12_256" -#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" -#define NID_id_GostR3411_2012_256 982 -#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L - -#define SN_id_GostR3411_2012_512 "md_gost12_512" -#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" -#define NID_id_GostR3411_2012_512 983 -#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L - -#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" -#define NID_id_tc26_signwithdigest 984 -#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L - -#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" -#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L - -#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" -#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L - -#define SN_id_tc26_mac "id-tc26-mac" -#define NID_id_tc26_mac 987 -#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L - -#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" -#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" -#define NID_id_tc26_hmac_gost_3411_2012_256 988 -#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L - -#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" -#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" -#define NID_id_tc26_hmac_gost_3411_2012_512 989 -#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L - -#define SN_id_tc26_cipher "id-tc26-cipher" -#define NID_id_tc26_cipher 990 -#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L - -#define SN_id_tc26_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_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L - -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_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_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L - -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_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_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 -#define OBJ_id_tc26_wrap_gostr3412_2015_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_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 -#define OBJ_id_tc26_wrap_gostr3412_2015_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_subjectSignTool "subjectSignTool" -#define LN_subjectSignTool "Signing Tool of Subject" -#define NID_subjectSignTool 1007 -#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L - -#define SN_issuerSignTool "issuerSignTool" -#define LN_issuerSignTool "Signing Tool of Issuer" -#define NID_issuerSignTool 1008 -#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L - -#define SN_grasshopper_ecb "grasshopper-ecb" -#define NID_grasshopper_ecb 1012 - -#define SN_grasshopper_ctr "grasshopper-ctr" -#define NID_grasshopper_ctr 1013 - -#define SN_grasshopper_ofb "grasshopper-ofb" -#define NID_grasshopper_ofb 1014 - -#define SN_grasshopper_cbc "grasshopper-cbc" -#define NID_grasshopper_cbc 1015 - -#define SN_grasshopper_cfb "grasshopper-cfb" -#define NID_grasshopper_cfb 1016 - -#define SN_grasshopper_mac "grasshopper-mac" -#define NID_grasshopper_mac 1017 - -#define SN_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_hmac "HMAC" -#define LN_hmac "hmac" -#define NID_hmac 855 - -#define SN_cmac "CMAC" -#define LN_cmac "cmac" -#define NID_cmac 894 - -#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" -#define LN_rc4_hmac_md5 "rc4-hmac-md5" -#define NID_rc4_hmac_md5 915 - -#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" -#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" -#define NID_aes_128_cbc_hmac_sha1 916 - -#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" -#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" -#define NID_aes_192_cbc_hmac_sha1 917 - -#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" -#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" -#define NID_aes_256_cbc_hmac_sha1 918 - -#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" -#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" -#define NID_aes_128_cbc_hmac_sha256 948 - -#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" -#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" -#define NID_aes_192_cbc_hmac_sha256 949 - -#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" -#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" -#define NID_aes_256_cbc_hmac_sha256 950 - -#define SN_chacha20_poly1305 "ChaCha20-Poly1305" -#define LN_chacha20_poly1305 "chacha20-poly1305" -#define NID_chacha20_poly1305 1018 - -#define SN_chacha20 "ChaCha20" -#define LN_chacha20 "chacha20" -#define NID_chacha20 1019 - -#define SN_dhpublicnumber "dhpublicnumber" -#define LN_dhpublicnumber "X9.42 DH" -#define NID_dhpublicnumber 920 -#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L - -#define SN_brainpoolP160r1 "brainpoolP160r1" -#define NID_brainpoolP160r1 921 -#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L - -#define SN_brainpoolP160t1 "brainpoolP160t1" -#define NID_brainpoolP160t1 922 -#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L - -#define SN_brainpoolP192r1 "brainpoolP192r1" -#define NID_brainpoolP192r1 923 -#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L - -#define SN_brainpoolP192t1 "brainpoolP192t1" -#define NID_brainpoolP192t1 924 -#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L - -#define SN_brainpoolP224r1 "brainpoolP224r1" -#define NID_brainpoolP224r1 925 -#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L - -#define SN_brainpoolP224t1 "brainpoolP224t1" -#define NID_brainpoolP224t1 926 -#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L - -#define SN_brainpoolP256r1 "brainpoolP256r1" -#define NID_brainpoolP256r1 927 -#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L - -#define SN_brainpoolP256t1 "brainpoolP256t1" -#define NID_brainpoolP256t1 928 -#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L - -#define SN_brainpoolP320r1 "brainpoolP320r1" -#define NID_brainpoolP320r1 929 -#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L - -#define SN_brainpoolP320t1 "brainpoolP320t1" -#define NID_brainpoolP320t1 930 -#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L - -#define SN_brainpoolP384r1 "brainpoolP384r1" -#define NID_brainpoolP384r1 931 -#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L - -#define SN_brainpoolP384t1 "brainpoolP384t1" -#define NID_brainpoolP384t1 932 -#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L - -#define SN_brainpoolP512r1 "brainpoolP512r1" -#define NID_brainpoolP512r1 933 -#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L - -#define SN_brainpoolP512t1 "brainpoolP512t1" -#define NID_brainpoolP512t1 934 -#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L - -#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L - -#define OBJ_secg_scheme OBJ_certicom_arc,1L - -#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" -#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 -#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L - -#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" -#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 -#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L - -#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" -#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 -#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L - -#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" -#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 -#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L - -#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" -#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 -#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L - -#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 -#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L - -#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 -#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L - -#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 -#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L - -#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 -#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L - -#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 -#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L - -#define SN_dh_std_kdf "dh-std-kdf" -#define NID_dh_std_kdf 946 - -#define SN_dh_cofactor_kdf "dh-cofactor-kdf" -#define NID_dh_cofactor_kdf 947 - -#define SN_ct_precert_scts "ct_precert_scts" -#define LN_ct_precert_scts "CT Precertificate SCTs" -#define NID_ct_precert_scts 951 -#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L - -#define SN_ct_precert_poison "ct_precert_poison" -#define LN_ct_precert_poison "CT Precertificate Poison" -#define NID_ct_precert_poison 952 -#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L - -#define SN_ct_precert_signer "ct_precert_signer" -#define LN_ct_precert_signer "CT Precertificate Signer" -#define NID_ct_precert_signer 953 -#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L - -#define SN_ct_cert_scts "ct_cert_scts" -#define LN_ct_cert_scts "CT Certificate SCTs" -#define NID_ct_cert_scts 954 -#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L - -#define SN_jurisdictionLocalityName "jurisdictionL" -#define LN_jurisdictionLocalityName "jurisdictionLocalityName" -#define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L - -#define SN_jurisdictionStateOrProvinceName "jurisdictionST" -#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" -#define NID_jurisdictionStateOrProvinceName 956 -#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L - -#define SN_jurisdictionCountryName "jurisdictionC" -#define LN_jurisdictionCountryName "jurisdictionCountryName" -#define NID_jurisdictionCountryName 957 -#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L - -#define SN_id_scrypt "id-scrypt" -#define 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_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_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_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 diff --git a/openssl/include/openssl/objects.h b/openssl/include/openssl/objects.h deleted file mode 100644 index 490a032..0000000 --- a/openssl/include/openssl/objects.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H - -# 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_NUM 0x05 - -# define OBJ_NAME_ALIAS 0x8000 - -# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 -# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct obj_name_st { - int type; - int alias; - const char *name; - const char *data; -} OBJ_NAME; - -# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) - -int OBJ_NAME_init(void); -int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), - int (*cmp_func) (const char *, const char *), - void (*free_func) (const char *, int, const char *)); -const char *OBJ_NAME_get(const char *name, int type); -int OBJ_NAME_add(const char *name, int type, const char *data); -int OBJ_NAME_remove(const char *name, int type); -void OBJ_NAME_cleanup(int type); /* -1 for everything */ -void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), - void *arg); -void OBJ_NAME_do_all_sorted(int type, - void (*fn) (const OBJ_NAME *, void *arg), - void *arg); - -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_nid2obj(int n); -const char *OBJ_nid2ln(int n); -const char *OBJ_nid2sn(int n); -int OBJ_obj2nid(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); -int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); -int OBJ_txt2nid(const char *s); -int OBJ_ln2nid(const char *s); -int OBJ_sn2nid(const char *s); -int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); -const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, - int (*cmp) (const void *, const void *)); -const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, - int size, - int (*cmp) (const void *, const void *), - int flags); - -# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ - static int nm##_cmp(type1 const *, type2 const *); \ - scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ - _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) -# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -/*- - * Unsolved problem: if a type is actually a pointer type, like - * nid_triple is, then its impossible to get a const where you need - * it. Consider: - * - * typedef int nid_triple[3]; - * const void *a_; - * const nid_triple const *a = a_; - * - * The 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); -#if OPENSSL_API_COMPAT < 0x10100000L -# define OBJ_cleanup() while(0) continue -#endif -int OBJ_create_objects(BIO *in); - -size_t OBJ_length(const ASN1_OBJECT *obj); -const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); - -int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); -int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); -int OBJ_add_sigid(int signid, int dig_id, int pkey_id); -void OBJ_sigid_free(void); - - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/objectserr.h b/openssl/include/openssl/objectserr.h deleted file mode 100644 index 6a06b64..0000000 --- a/openssl/include/openssl/objectserr.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OBJERR_H -# define HEADER_OBJERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OBJ_strings(void); - -/* - * OBJ function codes. - */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_ADD_SIGID 107 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 -# define OBJ_F_OBJ_TXT2OBJ 108 - -/* - * OBJ reason codes. - */ -# define OBJ_R_OID_EXISTS 102 -# define OBJ_R_UNKNOWN_NID 101 - -#endif diff --git a/openssl/include/openssl/ocsp.h b/openssl/include/openssl/ocsp.h deleted file mode 100644 index 2e8c569..0000000 --- a/openssl/include/openssl/ocsp.h +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H - -#include - -/* - * These definitions are outside the OPENSSL_NO_OCSP guard because although for - * historical reasons they have OCSP_* names, they can actually be used - * independently of OCSP. E.g. see RFC5280 - */ -/*- - * CRLReason ::= ENUMERATED { - * unspecified (0), - * keyCompromise (1), - * cACompromise (2), - * affiliationChanged (3), - * superseded (4), - * cessationOfOperation (5), - * certificateHold (6), - * removeFromCRL (8) } - */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 - - -# ifndef OPENSSL_NO_OCSP - -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Various flags and values */ - -# define OCSP_DEFAULT_NONCE_LENGTH 16 - -# define OCSP_NOCERTS 0x1 -# define OCSP_NOINTERN 0x2 -# define OCSP_NOSIGS 0x4 -# define OCSP_NOCHAIN 0x8 -# define OCSP_NOVERIFY 0x10 -# define OCSP_NOEXPLICIT 0x20 -# define OCSP_NOCASIGN 0x40 -# define OCSP_NODELEGATED 0x80 -# define OCSP_NOCHECKS 0x100 -# define OCSP_TRUSTOTHER 0x200 -# define OCSP_RESPID_KEY 0x400 -# define OCSP_NOTIME 0x800 - -typedef struct ocsp_cert_id_st OCSP_CERTID; - -DEFINE_STACK_OF(OCSP_CERTID) - -typedef struct ocsp_one_request_st OCSP_ONEREQ; - -DEFINE_STACK_OF(OCSP_ONEREQ) - -typedef struct ocsp_req_info_st OCSP_REQINFO; -typedef struct ocsp_signature_st OCSP_SIGNATURE; -typedef struct ocsp_request_st OCSP_REQUEST; - -# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 -# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 -# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 -# define OCSP_RESPONSE_STATUS_TRYLATER 3 -# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 -# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 - -typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; - -# define V_OCSP_RESPID_NAME 0 -# define V_OCSP_RESPID_KEY 1 - -DEFINE_STACK_OF(OCSP_RESPID) - -typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; - -# define V_OCSP_CERTSTATUS_GOOD 0 -# define V_OCSP_CERTSTATUS_REVOKED 1 -# define V_OCSP_CERTSTATUS_UNKNOWN 2 - -typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; -typedef struct ocsp_single_response_st OCSP_SINGLERESP; - -DEFINE_STACK_OF(OCSP_SINGLERESP) - -typedef struct ocsp_response_data_st OCSP_RESPDATA; - -typedef struct ocsp_basic_response_st OCSP_BASICRESP; - -typedef struct ocsp_crl_id_st OCSP_CRLID; -typedef struct ocsp_service_locator_st OCSP_SERVICELOC; - -# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" -# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" - -# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) - -# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) - -# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ - (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ - bp,(char **)(x),cb,NULL) - -# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio(\ - (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ - bp,(char **)(x),cb,NULL) - -# define PEM_write_bio_OCSP_REQUEST(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ - bp,(char *)(o), NULL,NULL,0,NULL,NULL) - -# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ - PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ - bp,(char *)(o), NULL,NULL,0,NULL,NULL) - -# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) - -# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) - -# define ASN1_BIT_STRING_digest(data,type,md,len) \ - ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) - -# define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) - -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); - -OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); - -OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, - const X509 *issuer); - -OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, - const X509_NAME *issuerName, - const ASN1_BIT_STRING *issuerKey, - const ASN1_INTEGER *serialNumber); - -OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); - -int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); -int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); -int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); -int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); - -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); -int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); - -int OCSP_request_sign(OCSP_REQUEST *req, - X509 *signer, - EVP_PKEY *key, - const EVP_MD *dgst, - STACK_OF(X509) *certs, unsigned long flags); - -int OCSP_response_status(OCSP_RESPONSE *resp); -OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); - -const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); -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); - -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); - -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(OCSP_RESPID *respid, X509 *cert); -int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); - -X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); - -X509_EXTENSION *OCSP_accept_responses_new(char **oids); - -X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); - -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); - -int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); -int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); -int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, - int lastpos); -int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); -X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); -X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); -void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, - int *idx); -int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); - -int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); -int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); -int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); -int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); -X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); -X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); -void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); -int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, - unsigned long flags); -int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); - -int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); -int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); -int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, - int lastpos); -int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); -X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); -void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, - int *idx); -int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); - -int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); -int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); -int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, - int lastpos); -int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, - int lastpos); -X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); -X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); -void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, - int *idx); -int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, - int crit, unsigned long flags); -int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); -const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); - -DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) -DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) -DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) -DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) -DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) -DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) -DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) -DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) -DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) -DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) - -const char *OCSP_response_status_str(long s); -const char *OCSP_cert_status_str(long s); -const char *OCSP_crl_reason_str(long s); - -int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); -int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); - -int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, - X509_STORE *st, unsigned long flags); - - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/openssl/include/openssl/ocsperr.h b/openssl/include/openssl/ocsperr.h deleted file mode 100644 index b51de7e..0000000 --- a/openssl/include/openssl/ocsperr.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OCSPERR_H -# define HEADER_OCSPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_OCSP - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OCSP_strings(void); - -/* - * OCSP function codes. - */ -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_PARSE_HTTP_LINE1 118 - -/* - * OCSP reason codes. - */ -# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 -# define OCSP_R_DIGEST_ERR 102 -# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 -# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 -# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 -# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 -# define OCSP_R_NOT_BASIC_RESPONSE 104 -# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 -# define OCSP_R_NO_RESPONSE_DATA 108 -# define OCSP_R_NO_REVOKED_TIME 109 -# define OCSP_R_NO_SIGNER_KEY 130 -# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 -# define OCSP_R_REQUEST_NOT_SIGNED 128 -# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 -# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 -# define OCSP_R_SIGNATURE_FAILURE 117 -# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 -# define OCSP_R_STATUS_EXPIRED 125 -# define OCSP_R_STATUS_NOT_YET_VALID 126 -# define OCSP_R_STATUS_TOO_OLD 127 -# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 -# define OCSP_R_UNKNOWN_NID 120 -# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 - -# endif -#endif diff --git a/openssl/include/openssl/opensslconf.h b/openssl/include/openssl/opensslconf.h deleted file mode 100644 index 5662fbd..0000000 --- a/openssl/include/openssl/opensslconf.h +++ /dev/null @@ -1,213 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by makefile from ..\include\openssl\opensslconf.h.in - * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#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_MIN_API 0x10100000L -#ifndef OPENSSL_NO_COMP -# define OPENSSL_NO_COMP -#endif -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_THREADS -# define OPENSSL_THREADS -#endif -#ifndef OPENSSL_RAND_SEED_OS -# define OPENSSL_RAND_SEED_OS -#endif -#ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG -#endif -#ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -#endif -#ifndef OPENSSL_NO_ASM -# define OPENSSL_NO_ASM -#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_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_FUZZ_AFL -# define OPENSSL_NO_FUZZ_AFL -#endif -#ifndef OPENSSL_NO_FUZZ_LIBFUZZER -# define OPENSSL_NO_FUZZ_LIBFUZZER -#endif -#ifndef OPENSSL_NO_HEARTBEATS -# define OPENSSL_NO_HEARTBEATS -#endif -#ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -#endif -#ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -#endif -#ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -#endif -#ifndef OPENSSL_NO_UI_CONSOLE -# define OPENSSL_NO_UI_CONSOLE -#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_STATIC_ENGINE -# define OPENSSL_NO_STATIC_ENGINE -#endif - - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -#undef I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#define OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -# undef BN_LLONG -/* Only one for the following should be defined */ -# undef SIXTY_FOUR_BIT_LONG -# define SIXTY_FOUR_BIT -# undef THIRTY_TWO_BIT -#endif - -#define RC4_INT unsigned int - -#ifdef __cplusplus -} -#endif diff --git a/openssl/include/openssl/opensslv.h b/openssl/include/openssl/opensslv.h deleted file mode 100644 index 8d0760b..0000000 --- a/openssl/include/openssl/opensslv.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) - */ -# define OPENSSL_VERSION_NUMBER 0x10101080L -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1h-dev xx XXX xxxx" - -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: - * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major version number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. - */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.1" - - -#ifdef __cplusplus -} -#endif -#endif /* HEADER_OPENSSLV_H */ diff --git a/openssl/include/openssl/ossl_typ.h b/openssl/include/openssl/ossl_typ.h deleted file mode 100644 index 26a8dcd..0000000 --- a/openssl/include/openssl/ossl_typ.h +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; -typedef struct asn1_sctx_st ASN1_SCTX; - -# ifdef _WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -struct dane_st; -typedef struct bio_st BIO; -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct evp_md_st EVP_MD; -typedef struct evp_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; - -typedef struct hmac_ctx_st HMAC_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; -typedef struct rsa_pss_params_st RSA_PSS_PARAMS; - -typedef struct ec_key_st EC_KEY; -typedef struct ec_key_method_st EC_KEY_METHOD; - -typedef struct rand_meth_st RAND_METHOD; -typedef struct 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 ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -typedef struct sct_st SCT; -typedef struct sct_ctx_st SCT_CTX; -typedef struct ctlog_st CTLOG; -typedef struct ctlog_store_st CTLOG_STORE; -typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; - -typedef struct ossl_store_info_st OSSL_STORE_INFO; -typedef struct ossl_store_search_st OSSL_STORE_SEARCH; - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ - defined(INTMAX_MAX) && defined(UINTMAX_MAX) -typedef intmax_t ossl_intmax_t; -typedef uintmax_t ossl_uintmax_t; -#else -/* - * Not long long, because the C-library can only be expected to provide - * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), - * strtoumax(). Since we use these for parsing arguments, we need the - * conversion functions, not just the sizes. - */ -typedef long ossl_intmax_t; -typedef unsigned long ossl_uintmax_t; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/openssl/include/openssl/pem.h b/openssl/include/openssl/pem.h deleted file mode 100644 index c6f334e..0000000 --- a/openssl/include/openssl/pem.h +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PEM_H -# define HEADER_PEM_H - -# include -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PEM_BUFSIZE 1024 - -# define PEM_STRING_X509_OLD "X509 CERTIFICATE" -# define PEM_STRING_X509 "CERTIFICATE" -# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" -# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" -# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" -# define PEM_STRING_X509_CRL "X509 CRL" -# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" -# define PEM_STRING_PUBLIC "PUBLIC KEY" -# define PEM_STRING_RSA "RSA PRIVATE KEY" -# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" -# define PEM_STRING_DSA "DSA PRIVATE KEY" -# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" -# define PEM_STRING_PKCS7 "PKCS7" -# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" -# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" -# define PEM_STRING_PKCS8INF "PRIVATE KEY" -# define PEM_STRING_DHPARAMS "DH PARAMETERS" -# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" -# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" -# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" -# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" -# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" -# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" -# define PEM_STRING_PARAMETERS "PARAMETERS" -# define PEM_STRING_CMS "CMS" - -# define PEM_TYPE_ENCRYPTED 10 -# define PEM_TYPE_MIC_ONLY 20 -# define PEM_TYPE_MIC_CLEAR 30 -# define PEM_TYPE_CLEAR 40 - -/* - * These macros make the PEM_read/PEM_write functions easier to maintain and - * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or - * IMPLEMENT_PEM_rw_cb(...) - */ - -# ifdef OPENSSL_NO_STDIO - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ -# else - -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# endif - -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} - -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} - -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ - IMPLEMENT_PEM_read_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_const(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write_cb(name, type, str, asn1) - -/* These are the same except they are for the declarations */ - -# if defined(OPENSSL_NO_STDIO) - -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_fp_const(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ -# else - -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# endif - -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); - -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); - -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); - -# define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) -# define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) -# define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); - -int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); -int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, - pem_password_cb *callback, void *u); - -int PEM_read_bio(BIO *bp, char **name, char **header, - unsigned char **data, long *len); -# 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, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cd, void *u); - -#ifndef OPENSSL_NO_STDIO -int PEM_read(FILE *fp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write(FILE *fp, const char *name, const char *hdr, - const unsigned char *data, long len); -void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, - pem_password_cb *cb, void *u); -int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); -STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, - pem_password_cb *cb, void *u); -#endif - -int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); -int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, - unsigned int *siglen, EVP_PKEY *pkey); - -/* 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, char *str); - -# include - -DECLARE_PEM_rw(X509, X509) -DECLARE_PEM_rw(X509_AUX, X509) -DECLARE_PEM_rw(X509_REQ, X509_REQ) -DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) -DECLARE_PEM_rw(X509_CRL, X509_CRL) -DECLARE_PEM_rw(PKCS7, PKCS7) -DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) -DECLARE_PEM_rw(PKCS8, X509_SIG) -DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) -# endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) -# endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) - -int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, - const EVP_CIPHER *enc, - unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -# ifndef OPENSSL_NO_STDIO -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, - pem_password_cb *cb, void *u); - -EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, - void *u); - -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); -# endif -EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); - -# ifndef OPENSSL_NO_DSA -EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); -EVP_PKEY *b2i_PrivateKey_bio(BIO *in); -EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 -EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, - pem_password_cb *cb, void *u); -# endif -# endif - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/pem2.h b/openssl/include/openssl/pem2.h deleted file mode 100644 index 92609f8..0000000 --- a/openssl/include/openssl/pem2.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PEM2_H -# define HEADER_PEM2_H -# include -#endif diff --git a/openssl/include/openssl/pemerr.h b/openssl/include/openssl/pemerr.h deleted file mode 100644 index 1d3de8c..0000000 --- a/openssl/include/openssl/pemerr.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PEMERR_H -# define HEADER_PEMERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PEM_strings(void); - -/* - * PEM function codes. - */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_I2B 146 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_GET_HEADER_AND_DATA 143 -# define PEM_F_GET_NAME 144 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_EX 145 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 - -/* - * 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_PRIVATE_KEY_BLOB 119 -# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 -# define PEM_R_HEADER_TOO_LONG 128 -# define PEM_R_INCONSISTENT_HEADER 121 -# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 -# define PEM_R_KEYBLOB_TOO_SHORT 123 -# define PEM_R_MISSING_DEK_IV 129 -# define PEM_R_NOT_DEK_INFO 105 -# define PEM_R_NOT_ENCRYPTED 106 -# define PEM_R_NOT_PROC_TYPE 107 -# define PEM_R_NO_START_LINE 108 -# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 -# define PEM_R_PVK_DATA_TOO_SHORT 124 -# define PEM_R_PVK_TOO_SHORT 125 -# define PEM_R_READ_KEY 111 -# define PEM_R_SHORT_HEADER 112 -# define PEM_R_UNEXPECTED_DEK_IV 130 -# define PEM_R_UNSUPPORTED_CIPHER 113 -# define PEM_R_UNSUPPORTED_ENCRYPTION 114 -# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 - -#endif diff --git a/openssl/include/openssl/pkcs12.h b/openssl/include/openssl/pkcs12.h deleted file mode 100644 index 36dde4d..0000000 --- a/openssl/include/openssl/pkcs12.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define PKCS12_KEY_ID 1 -# define PKCS12_IV_ID 2 -# define PKCS12_MAC_ID 3 - -/* Default iteration count */ -# ifndef PKCS12_DEFAULT_ITER -# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER -# endif - -# define PKCS12_MAC_KEY_LENGTH 20 - -# define PKCS12_SALT_LEN 8 - -/* It's not clear if these are actually needed... */ -# define PKCS12_key_gen PKCS12_key_gen_utf8 -# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 - -/* MS key usage constants */ - -# define KEY_EX 0x10 -# define KEY_SIG 0x80 - -typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; - -typedef struct PKCS12_st PKCS12; - -typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; - -DEFINE_STACK_OF(PKCS12_SAFEBAG) - -typedef struct pkcs12_bag_st PKCS12_BAGS; - -# define PKCS12_ERROR 0 -# define PKCS12_OK 1 - -/* Compatibility macros */ - -#if OPENSSL_API_COMPAT < 0x10100000L - -# define M_PKCS12_bag_type PKCS12_bag_type -# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type -# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type - -# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert -# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl -# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid -# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid -# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert -# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl -# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf -# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt - -#endif - -DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) - -ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); -int PKCS12_mac_present(const PKCS12 *p12); -void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, - const X509_ALGOR **pmacalg, - const ASN1_OCTET_STRING **psalt, - const ASN1_INTEGER **piter, - const PKCS12 *p12); - -const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, - int attr_nid); -const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); -int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); -int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); - -X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); -const STACK_OF(PKCS12_SAFEBAG) * -PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); -const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); -const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); - -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); -PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, - const char *pass, - int passlen, - unsigned char *salt, - int saltlen, int iter, - PKCS8_PRIV_KEY_INFO *p8inf); - -PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, - int nid1, int nid2); -PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, - int passlen); -PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, - const char *pass, int passlen); -X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, - const char *pass, int passlen, unsigned char *salt, - int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); -X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, - PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); -PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); -PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - STACK_OF(PKCS12_SAFEBAG) *bags); -STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, - int passlen); - -int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); -STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); - -int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, - int namelen); -int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, - int namelen); -int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, - const unsigned char *name, int namelen); -int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); -ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, - int attr_nid); -char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); -const STACK_OF(X509_ATTRIBUTE) * -PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); -unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, - const char *pass, int passlen, - const unsigned char *in, int inlen, - unsigned char **data, int *datalen, - int en_de); -void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, - const char *pass, int passlen, - const ASN1_OCTET_STRING *oct, int zbuf); -ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, - const ASN1_ITEM *it, - const char *pass, int passlen, - void *obj, int zbuf); -PKCS12 *PKCS12_init(int mode); -int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, - int saltlen, int id, int iter, int n, - unsigned char *out, const EVP_MD *md_type); -int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, - ASN1_TYPE *param, const EVP_CIPHER *cipher, - const EVP_MD *md_type, int en_de); -int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *mac, unsigned int *maclen); -int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); -int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, - unsigned char *salt, int saltlen, int iter, - const EVP_MD *md_type); -int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, - int saltlen, const EVP_MD *md_type); -unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, - unsigned char **uni, int *unilen); -char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); -unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, - unsigned char **uni, int *unilen); -char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); - -DECLARE_ASN1_FUNCTIONS(PKCS12) -DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) -DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) -DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) - -DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) -DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) - -void PKCS12_PBE_add(void); -int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, - STACK_OF(X509) **ca); -PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, - X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, - int iter, int mac_iter, int keytype); - -PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); -PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, - EVP_PKEY *key, int key_usage, int iter, - int key_nid, const char *pass); -int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, - int safe_nid, int iter, const char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); - -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); -# ifndef OPENSSL_NO_STDIO -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); -# endif -PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); -# ifndef OPENSSL_NO_STDIO -PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); -# endif -int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/pkcs12err.h b/openssl/include/openssl/pkcs12err.h deleted file mode 100644 index 189c7d8..0000000 --- a/openssl/include/openssl/pkcs12err.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS12ERR_H -# define HEADER_PKCS12ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS12_strings(void); - -/* - * PKCS12 function codes. - */ -# define PKCS12_F_OPENSSL_ASC2UNI 121 -# define PKCS12_F_OPENSSL_UNI2ASC 124 -# define PKCS12_F_OPENSSL_UNI2UTF8 127 -# define PKCS12_F_OPENSSL_UTF82UNI 129 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ENCRYPT 125 -# define PKCS12_F_PKCS8_SET0_PBE 132 - -/* - * PKCS12 reason codes. - */ -# define PKCS12_R_CANT_PACK_STRUCTURE 100 -# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 -# define PKCS12_R_DECODE_ERROR 101 -# define PKCS12_R_ENCODE_ERROR 102 -# define PKCS12_R_ENCRYPT_ERROR 103 -# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 -# define PKCS12_R_INVALID_NULL_ARGUMENT 104 -# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 -# define PKCS12_R_IV_GEN_ERROR 106 -# define PKCS12_R_KEY_GEN_ERROR 107 -# define PKCS12_R_MAC_ABSENT 108 -# define PKCS12_R_MAC_GENERATION_ERROR 109 -# define PKCS12_R_MAC_SETUP_ERROR 110 -# define PKCS12_R_MAC_STRING_SET_ERROR 111 -# define PKCS12_R_MAC_VERIFY_FAILURE 113 -# define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 -# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 -# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 -# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 - -#endif diff --git a/openssl/include/openssl/pkcs7.h b/openssl/include/openssl/pkcs7.h deleted file mode 100644 index 25bee6c..0000000 --- a/openssl/include/openssl/pkcs7.h +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H - -# include -# include -# include - -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/*- -Encryption_ID DES-CBC -Digest_ID MD5 -Digest_Encryption_ID rsaEncryption -Key_Encryption_ID rsaEncryption -*/ - -typedef struct pkcs7_issuer_and_serial_st { - X509_NAME *issuer; - ASN1_INTEGER *serial; -} PKCS7_ISSUER_AND_SERIAL; - -typedef struct pkcs7_signer_info_st { - ASN1_INTEGER *version; /* version 1 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *digest_alg; - STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ - X509_ALGOR *digest_enc_alg; - ASN1_OCTET_STRING *enc_digest; - STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ - /* The private key to sign with */ - EVP_PKEY *pkey; -} PKCS7_SIGNER_INFO; - -DEFINE_STACK_OF(PKCS7_SIGNER_INFO) - -typedef struct pkcs7_recip_info_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; - X509_ALGOR *key_enc_algor; - ASN1_OCTET_STRING *enc_key; - X509 *cert; /* get the pub-key from this */ -} PKCS7_RECIP_INFO; - -DEFINE_STACK_OF(PKCS7_RECIP_INFO) - -typedef struct pkcs7_signed_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - struct pkcs7_st *contents; -} PKCS7_SIGNED; -/* - * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about - * merging the two - */ - -typedef struct pkcs7_enc_content_st { - ASN1_OBJECT *content_type; - X509_ALGOR *algorithm; - ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ - const EVP_CIPHER *cipher; -} PKCS7_ENC_CONTENT; - -typedef struct pkcs7_enveloped_st { - ASN1_INTEGER *version; /* version 0 */ - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENVELOPE; - -typedef struct pkcs7_signedandenveloped_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ - STACK_OF(PKCS7_SIGNER_INFO) *signer_info; - PKCS7_ENC_CONTENT *enc_data; - STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; -} PKCS7_SIGN_ENVELOPE; - -typedef struct pkcs7_digest_st { - ASN1_INTEGER *version; /* version 0 */ - X509_ALGOR *md; /* md used */ - struct pkcs7_st *contents; - ASN1_OCTET_STRING *digest; -} PKCS7_DIGEST; - -typedef struct pkcs7_encrypted_st { - ASN1_INTEGER *version; /* version 0 */ - PKCS7_ENC_CONTENT *enc_data; -} PKCS7_ENCRYPT; - -typedef struct pkcs7_st { - /* - * The following is non NULL if it contains ASN1 encoding of this - * structure - */ - unsigned char *asn1; - long length; -# define PKCS7_S_HEADER 0 -# define PKCS7_S_BODY 1 -# define PKCS7_S_TAIL 2 - int state; /* used during processing */ - int detached; - ASN1_OBJECT *type; - /* content as defined by the type */ - /* - * all encryption/message digests are applied to the 'contents', leaving - * out the 'type' field. - */ - union { - char *ptr; - /* NID_pkcs7_data */ - ASN1_OCTET_STRING *data; - /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; - /* NID_pkcs7_enveloped */ - PKCS7_ENVELOPE *enveloped; - /* NID_pkcs7_signedAndEnveloped */ - PKCS7_SIGN_ENVELOPE *signed_and_enveloped; - /* NID_pkcs7_digest */ - PKCS7_DIGEST *digest; - /* NID_pkcs7_encrypted */ - PKCS7_ENCRYPT *encrypted; - /* Anything else */ - ASN1_TYPE *other; - } d; -} PKCS7; - -DEFINE_STACK_OF(PKCS7) - -# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 -# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 - -# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) -# define PKCS7_get_attributes(si) ((si)->unauth_attr) - -# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) -# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) -# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) -# define PKCS7_type_is_signedAndEnveloped(a) \ - (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) -# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) -# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) - -# define PKCS7_set_detached(p,v) \ - PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) -# define PKCS7_get_detached(p) \ - PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) - -# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) - -/* S/MIME related flags */ - -# define PKCS7_TEXT 0x1 -# define PKCS7_NOCERTS 0x2 -# define PKCS7_NOSIGS 0x4 -# define PKCS7_NOCHAIN 0x8 -# define PKCS7_NOINTERN 0x10 -# define PKCS7_NOVERIFY 0x20 -# define PKCS7_DETACHED 0x40 -# define PKCS7_BINARY 0x80 -# define PKCS7_NOATTR 0x100 -# define PKCS7_NOSMIMECAP 0x200 -# define PKCS7_NOOLDMIMETYPE 0x400 -# define PKCS7_CRLFEOL 0x800 -# define PKCS7_STREAM 0x1000 -# define PKCS7_NOCRL 0x2000 -# define PKCS7_PARTIAL 0x4000 -# define PKCS7_REUSE_DIGEST 0x8000 -# define PKCS7_NO_DUAL_CONTENT 0x10000 - -/* Flags: for compatibility with older code */ - -# define SMIME_TEXT PKCS7_TEXT -# define SMIME_NOCERTS PKCS7_NOCERTS -# define SMIME_NOSIGS PKCS7_NOSIGS -# define SMIME_NOCHAIN PKCS7_NOCHAIN -# define SMIME_NOINTERN PKCS7_NOINTERN -# define SMIME_NOVERIFY PKCS7_NOVERIFY -# define SMIME_DETACHED PKCS7_DETACHED -# define SMIME_BINARY PKCS7_BINARY -# define SMIME_NOATTR PKCS7_NOATTR - -/* CRLF ASCII canonicalisation */ -# define SMIME_ASCIICRLF 0x80000 - -DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) - -int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, - const EVP_MD *type, unsigned char *md, - unsigned int *len); -# ifndef OPENSSL_NO_STDIO -PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); -# endif -PKCS7 *PKCS7_dup(PKCS7 *p7); -PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); -int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); -int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); - -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) -DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) -DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) -DECLARE_ASN1_FUNCTIONS(PKCS7) - -DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) -DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) - -DECLARE_ASN1_NDEF_FUNCTION(PKCS7) -DECLARE_ASN1_PRINT_FUNCTION(PKCS7) - -long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); - -int PKCS7_set_type(PKCS7 *p7, int type); -int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); -int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); -int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, - const EVP_MD *dgst); -int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); -int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); -int PKCS7_content_new(PKCS7 *p7, int nid); -int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, - BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, - X509 *x509); - -BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); -int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); -BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); - -PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, - EVP_PKEY *pkey, const EVP_MD *dgst); -X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); -int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); -STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); - -PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); -void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, - X509_ALGOR **pdig, X509_ALGOR **psig); -void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); -int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); -int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); -int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); -int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); - -PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); -ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, - void *data); -int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, - void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); -int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); -int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, - STACK_OF(X509_ATTRIBUTE) *sk); - -PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, - BIO *data, int flags); - -PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, - X509 *signcert, EVP_PKEY *pkey, - const EVP_MD *md, int flags); - -int PKCS7_final(PKCS7 *p7, BIO *data, int flags); -int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, - BIO *indata, BIO *out, int flags); -STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, - int flags); -PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, - int flags); -int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, - int flags); - -int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, - STACK_OF(X509_ALGOR) *cap); -STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); -int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); - -int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); -int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); -int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, - const unsigned char *md, int mdlen); - -int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); -PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); - -BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/pkcs7err.h b/openssl/include/openssl/pkcs7err.h deleted file mode 100644 index 8d21ce9..0000000 --- a/openssl/include/openssl/pkcs7err.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_PKCS7ERR_H -# define HEADER_PKCS7ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS7_strings(void); - -/* - * PKCS7 function codes. - */ -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 - -/* - * 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/openssl/include/openssl/rand.h b/openssl/include/openssl/rand.h deleted file mode 100644 index c65c536..0000000 --- a/openssl/include/openssl/rand.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RAND_H -# define HEADER_RAND_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -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); -}; - -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif - -RAND_METHOD *RAND_OpenSSL(void); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define RAND_cleanup() while(0) continue -# endif -int RAND_bytes(unsigned char *buf, int num); -int RAND_priv_bytes(unsigned char *buf, int num); -DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) - -void RAND_seed(const void *buf, int num); -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 */ -DEPRECATEDIN_1_1_0(void RAND_screen(void)) -DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) -# endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openssl/include/openssl/rand_drbg.h b/openssl/include/openssl/rand_drbg.h deleted file mode 100644 index caf043f..0000000 --- a/openssl/include/openssl/rand_drbg.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DRBG_RAND_H -# define HEADER_DRBG_RAND_H - -# include -# include -# include - -/* - * RAND_DRBG flags - * - * Note: if new flags are added, the constant `rand_drbg_used_flags` - * in drbg_lib.c needs to be updated accordingly. - */ - -/* In CTR mode, disable derivation function ctr_df */ -# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 - - -# if OPENSSL_API_COMPAT < 0x10200000L -/* This #define was replaced by an internal constant and should not be used. */ -# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) -# 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. - * - * RAND_DRBG_STRENGTH is currently only used for the legacy RAND - * implementation. - * - * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and - * NID_aes_256_ctr - */ -# define RAND_DRBG_STRENGTH 256 -/* Default drbg type */ -# define RAND_DRBG_TYPE NID_aes_256_ctr -/* Default drbg flags */ -# define RAND_DRBG_FLAGS 0 - - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Object lifetime functions. - */ -RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); -RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); -int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); -int RAND_DRBG_set_defaults(int type, unsigned int flags); -int RAND_DRBG_instantiate(RAND_DRBG *drbg, - const unsigned char *pers, size_t perslen); -int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); -void RAND_DRBG_free(RAND_DRBG *drbg); - -/* - * Object "use" functions. - */ -int RAND_DRBG_reseed(RAND_DRBG *drbg, - const unsigned char *adin, size_t adinlen, - int prediction_resistance); -int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, - int prediction_resistance, - const unsigned char *adin, size_t adinlen); -int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); - -int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); -int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); - -int RAND_DRBG_set_reseed_defaults( - unsigned int master_reseed_interval, - unsigned int slave_reseed_interval, - time_t master_reseed_time_interval, - time_t slave_reseed_time_interval - ); - -RAND_DRBG *RAND_DRBG_get0_master(void); -RAND_DRBG *RAND_DRBG_get0_public(void); -RAND_DRBG *RAND_DRBG_get0_private(void); - -/* - * EXDATA - */ -# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) -int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); -void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); - -/* - * Callback function typedefs - */ -typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, - size_t max_len, - int prediction_resistance); -typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, - unsigned char *out, size_t outlen); -typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, - int entropy, size_t min_len, - size_t max_len); -typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, - RAND_DRBG_get_entropy_fn get_entropy, - RAND_DRBG_cleanup_entropy_fn cleanup_entropy, - RAND_DRBG_get_nonce_fn get_nonce, - RAND_DRBG_cleanup_nonce_fn cleanup_nonce); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/openssl/include/openssl/randerr.h b/openssl/include/openssl/randerr.h deleted file mode 100644 index 51ea00d..0000000 --- a/openssl/include/openssl/randerr.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RANDERR_H -# define HEADER_RANDERR_H - -# include - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RAND_strings(void); - -/* - * RAND function codes. - */ -# define RAND_F_DATA_COLLECT_METHOD 127 -# define RAND_F_DRBG_BYTES 101 -# define RAND_F_DRBG_GET_ENTROPY 105 -# define RAND_F_DRBG_SETUP 117 -# define RAND_F_GET_ENTROPY 106 -# define RAND_F_RAND_BYTES 100 -# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 -# define RAND_F_RAND_DRBG_GENERATE 107 -# define RAND_F_RAND_DRBG_GET_ENTROPY 120 -# define RAND_F_RAND_DRBG_GET_NONCE 123 -# define RAND_F_RAND_DRBG_INSTANTIATE 108 -# define RAND_F_RAND_DRBG_NEW 109 -# define RAND_F_RAND_DRBG_RESEED 110 -# define RAND_F_RAND_DRBG_RESTART 102 -# define RAND_F_RAND_DRBG_SET 104 -# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 -# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 -# define RAND_F_RAND_LOAD_FILE 111 -# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 -# define RAND_F_RAND_POOL_ADD 103 -# define RAND_F_RAND_POOL_ADD_BEGIN 113 -# define RAND_F_RAND_POOL_ADD_END 114 -# define RAND_F_RAND_POOL_ATTACH 124 -# define RAND_F_RAND_POOL_BYTES_NEEDED 115 -# define RAND_F_RAND_POOL_GROW 125 -# define RAND_F_RAND_POOL_NEW 116 -# define RAND_F_RAND_PSEUDO_BYTES 126 -# define RAND_F_RAND_WRITE_FILE 112 - -/* - * 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_INTERNAL_ERROR 113 -# 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_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_UNSUPPORTED_DRBG_FLAGS 132 -# define RAND_R_UNSUPPORTED_DRBG_TYPE 120 - -#endif diff --git a/openssl/include/openssl/rc2.h b/openssl/include/openssl/rc2.h deleted file mode 100644 index fec14af..0000000 --- a/openssl/include/openssl/rc2.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RC2_H -# define HEADER_RC2_H - -# include - -# ifndef OPENSSL_NO_RC2 -# ifdef __cplusplus -extern "C" { -# endif - -typedef unsigned int RC2_INT; - -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 - -typedef struct rc2_key_st { - RC2_INT data[64]; -} RC2_KEY; - -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/rc4.h b/openssl/include/openssl/rc4.h deleted file mode 100644 index b3bd70a..0000000 --- a/openssl/include/openssl/rc4.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RC4_H -# define HEADER_RC4_H - -# include - -# ifndef OPENSSL_NO_RC4 -# include -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc4_key_st { - RC4_INT x, y; - RC4_INT data[256]; -} RC4_KEY; - -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/rc5.h b/openssl/include/openssl/rc5.h deleted file mode 100644 index d05dce2..0000000 --- a/openssl/include/openssl/rc5.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RC5_H -# define HEADER_RC5_H - -# include - -# ifndef OPENSSL_NO_RC5 -# ifdef __cplusplus -extern "C" { -# endif - -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 - -# define RC5_32_INT unsigned int - -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ - -/* - * This are the only values supported. Tweak the code if you want more The - * most supported modes will be RC5-32/12/16 RC5-32/16/8 - */ -# define RC5_8_ROUNDS 8 -# define RC5_12_ROUNDS 12 -# define RC5_16_ROUNDS 16 - -typedef struct rc5_key_st { - /* Number of rounds */ - int rounds; - RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; -} RC5_32_KEY; - -void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, - int rounds); -void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC5_32_KEY *key, int enc); -void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *ks, unsigned char *iv, - int enc); -void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/ripemd.h b/openssl/include/openssl/ripemd.h deleted file mode 100644 index d17a8b3..0000000 --- a/openssl/include/openssl/ripemd.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H - -# include - -#ifndef OPENSSL_NO_RMD160 -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define RIPEMD160_LONG unsigned int - -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 - -typedef struct RIPEMD160state_st { - RIPEMD160_LONG A, B, C, D, E; - RIPEMD160_LONG Nl, Nh; - RIPEMD160_LONG data[RIPEMD160_LBLOCK]; - unsigned int num; -} RIPEMD160_CTX; - -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); - -# ifdef __cplusplus -} -# endif -# endif - - -#endif diff --git a/openssl/include/openssl/rsa.h b/openssl/include/openssl/rsa.h deleted file mode 100644 index 19025f8..0000000 --- a/openssl/include/openssl/rsa.h +++ /dev/null @@ -1,513 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RSA_H -# define HEADER_RSA_H - -# include - -# ifndef OPENSSL_NO_RSA -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifdef __cplusplus -extern "C" { -# endif - -/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ - -# ifndef OPENSSL_RSA_MAX_MODULUS_BITS -# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 -# endif - -# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - -# define RSA_3 0x3L -# define RSA_F4 0x10001L - -/* 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/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 -/* - * This flag means the private key operations will be handled by rsa_mod_exp - * and that they do not depend on the private key components being present: - * for example a key stored in external hardware. Without this flag - * bn_mod_exp gets called when private key components are absent. - */ -# define RSA_FLAG_EXT_PKEY 0x0020 - -/* - * new with 0.9.6j and 0.9.7b; the built-in - * RSA implementation now uses blinding by - * default (ignoring RSA_FLAG_BLINDING), - * but other engines might not need it - */ -# define RSA_FLAG_NO_BLINDING 0x0080 -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define RSA_FLAG_NO_CONSTTIME 0x0000 -# endif -# if OPENSSL_API_COMPAT < 0x00908000L -/* deprecated name for the flag*/ -/* - * new with 0.9.7h; the built-in RSA - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * faster variable sliding window method to - * be used for all exponents. - */ -# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME -# endif - -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) - -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) - -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) -/* 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 -/* Old compatible max salt length for sign only */ -# define RSA_PSS_SALTLEN_MAX_SIGN -2 - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) - -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ - EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ - 0, (void *)(md)) - -# 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 RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 - -# define RSA_PKCS1_PADDING_SIZE 11 - -# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) -# define RSA_get_app_data(s) RSA_get_ex_data(s,0) - -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_bits(const RSA *rsa); -int RSA_size(const RSA *rsa); -int RSA_security_bits(const RSA *rsa); - -int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); -int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); -int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); -int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], - BIGNUM *coeffs[], int pnum); -void RSA_get0_key(const RSA *r, - const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); -void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); -int RSA_get_multi_prime_extra_count(const RSA *r); -int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); -void RSA_get0_crt_params(const RSA *r, - const BIGNUM **dmp1, const BIGNUM **dmq1, - const BIGNUM **iqmp); -int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], - const BIGNUM *coeffs[]); -const BIGNUM *RSA_get0_n(const RSA *d); -const BIGNUM *RSA_get0_e(const RSA *d); -const BIGNUM *RSA_get0_d(const RSA *d); -const BIGNUM *RSA_get0_p(const RSA *d); -const BIGNUM *RSA_get0_q(const RSA *d); -const BIGNUM *RSA_get0_dmp1(const RSA *r); -const BIGNUM *RSA_get0_dmq1(const RSA *r); -const BIGNUM *RSA_get0_iqmp(const RSA *r); -const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); -void RSA_clear_flags(RSA *r, int flags); -int RSA_test_flags(const RSA *r, int flags); -void RSA_set_flags(RSA *r, int flags); -int RSA_get_version(RSA *r); -ENGINE *RSA_get0_engine(const RSA *r); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), - void *cb_arg)) - -/* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); -/* Multi-prime version */ -int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, - BIGNUM *e, BN_GENCB *cb); - -int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, - BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, - const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, - const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); -int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, - BN_GENCB *cb); - -int RSA_check_key(const RSA *); -int RSA_check_key_ex(const RSA *, BN_GENCB *cb); - /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); -/* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); - -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_null_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); - -/* these are the actual RSA functions */ -const RSA_METHOD *RSA_PKCS1_OpenSSL(void); - -int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); - -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - -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) - -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_STDIO -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif - -int RSA_print(BIO *bp, const RSA *r, int offset); - -/* - * The following 2 functions sign and verify a X509_SIG ASN1 object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); - -/* - * The following 2 function sign and verify a ASN1_OCTET_STRING object inside - * PKCS#1 padded RSA encryption - */ -int RSA_sign_ASN1_OCTET_STRING(int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); - -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); - -int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, - const unsigned char *f, int fl, - int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); -int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, - const unsigned char *p, int pl); -int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len, - const unsigned char *p, int pl); -int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - const unsigned char *param, int plen, - const EVP_MD *md, const EVP_MD *mgf1md); -int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, - const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); - -int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const unsigned char *EM, - int sLen); -int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, const EVP_MD *Hash, - int sLen); - -int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - const unsigned char *EM, int sLen); - -int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, - const unsigned char *mHash, - const EVP_MD *Hash, const EVP_MD *mgf1Hash, - int sLen); - -#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); - -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); - -/* - * If this flag is set the RSA method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define RSA_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 -/* - * Application has decided PRNG is good enough to generate a key: don't - * check. - */ -# define RSA_FLAG_CHECKED 0x0800 - -RSA_METHOD *RSA_meth_new(const char *name, int flags); -void RSA_meth_free(RSA_METHOD *meth); -RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); -const char *RSA_meth_get0_name(const RSA_METHOD *meth); -int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); -int RSA_meth_get_flags(const RSA_METHOD *meth); -int RSA_meth_set_flags(RSA_METHOD *meth, int flags); -void *RSA_meth_get0_app_data(const RSA_METHOD *meth); -int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); -int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_pub_enc(RSA_METHOD *rsa, - int (*pub_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_pub_dec(RSA_METHOD *rsa, - int (*pub_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_priv_enc(RSA_METHOD *rsa, - int (*priv_enc) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_meth_set_priv_dec(RSA_METHOD *rsa, - int (*priv_dec) (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, - int padding)); -int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); -int RSA_meth_set_mod_exp(RSA_METHOD *rsa, - int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, - BN_CTX *ctx)); -int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx)); -int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); -int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); -int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); -int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); -int (*RSA_meth_get_sign(const RSA_METHOD *meth)) - (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); -int RSA_meth_set_sign(RSA_METHOD *rsa, - int (*sign) (int type, const unsigned char *m, - unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa)); -int (*RSA_meth_get_verify(const RSA_METHOD *meth)) - (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); -int RSA_meth_set_verify(RSA_METHOD *rsa, - int (*verify) (int dtype, const unsigned char *m, - unsigned int m_length, - const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa)); -int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); -int RSA_meth_set_keygen(RSA_METHOD *rsa, - int (*keygen) (RSA *rsa, int bits, BIGNUM *e, - BN_GENCB *cb)); -int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); -int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, - int (*keygen) (RSA *rsa, int bits, - int primes, BIGNUM *e, - BN_GENCB *cb)); - -# ifdef __cplusplus -} -# endif -# endif -#endif diff --git a/openssl/include/openssl/rsaerr.h b/openssl/include/openssl/rsaerr.h deleted file mode 100644 index 81db90e..0000000 --- a/openssl/include/openssl/rsaerr.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_RSAERR_H -# define HEADER_RSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RSA_strings(void); - -/* - * RSA function codes. - */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_ENCODE_PKCS1 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_PSS_INIT 165 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 149 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 156 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CHECK_KEY_EX 160 -# define RSA_F_RSA_CMS_DECRYPT 159 -# define RSA_F_RSA_CMS_VERIFY 158 -# define RSA_F_RSA_ITEM_VERIFY 148 -# define RSA_F_RSA_METH_DUP 161 -# define RSA_F_RSA_METH_NEW 162 -# define RSA_F_RSA_METH_SET1_NAME 163 -# define RSA_F_RSA_MGF1_TO_MD 157 -# define RSA_F_RSA_MULTIP_INFO_NEW 166 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PARAM_DECODE 164 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIV_DECODE 150 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_GET_PARAM 151 -# define RSA_F_RSA_PSS_TO_CTX 155 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 -# define RSA_F_SETUP_TBUF 167 - -/* - * 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_LABEL 160 -# define RSA_R_INVALID_MESSAGE_LENGTH 131 -# define RSA_R_INVALID_MGF1_MD 156 -# 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_SALT_LENGTH 150 -# define RSA_R_INVALID_TRAILER 139 -# define RSA_R_INVALID_X931_DIGEST 142 -# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 -# define RSA_R_KEY_PRIME_NUM_INVALID 165 -# define RSA_R_KEY_SIZE_TOO_SMALL 120 -# define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MISSING_PRIVATE_KEY 179 -# define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 -# 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_PKCS_DECODING_ERROR 159 -# define RSA_R_PSS_SALTLEN_TOO_SMALL 164 -# define RSA_R_P_NOT_PRIME 128 -# define RSA_R_Q_NOT_PRIME 129 -# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 -# define RSA_R_SLEN_CHECK_FAILED 136 -# define RSA_R_SLEN_RECOVERY_FAILED 135 -# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 -# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 -# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 -# define RSA_R_UNKNOWN_DIGEST 166 -# define RSA_R_UNKNOWN_MASK_DIGEST 151 -# define RSA_R_UNKNOWN_PADDING_TYPE 118 -# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 -# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 -# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 -# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 -# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 -# define RSA_R_VALUE_MISSING 147 -# define RSA_R_WRONG_SIGNATURE_LENGTH 119 - -#endif diff --git a/openssl/include/openssl/safestack.h b/openssl/include/openssl/safestack.h deleted file mode 100644 index d631a26..0000000 --- a/openssl/include/openssl/safestack.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define STACK_OF(type) struct stack_st_##type - -# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ - STACK_OF(t1); \ - typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ - typedef void (*sk_##t1##_freefunc)(t3 *a); \ - typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ - static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ - { \ - return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ - { \ - return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ - } \ - static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ - { \ - return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ - { \ - return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ - } \ - static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ - { \ - OPENSSL_sk_free((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ - { \ - OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ - { \ - return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ - (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ - { \ - return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ - { \ - return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ - } \ - static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ - { \ - OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ - { \ - return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ - } \ - static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ - { \ - return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ - { \ - return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ - } \ - static ossl_unused ossl_inline 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_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) -# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) -# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ - SKM_DEFINE_STACK_OF(t1, const t2, t2) -# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) - -/*- - * Strings are special: normally an lhash entry will point to a single - * (somewhat) mutable object. In the case of strings: - * - * a) Instead of a single char, there is an array of chars, NUL-terminated. - * b) The string may have be immutable. - * - * So, they need their own declarations. Especially important for - * type-checking tools, such as Deputy. - * - * In practice, however, it appears to be hard to have a const - * string. For now, I'm settling for dealing with the fact it is a - * string at all. - */ -typedef char *OPENSSL_STRING; -typedef const char *OPENSSL_CSTRING; - -/*- - * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but - * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned - * above, instead of a single char each entry is a NUL-terminated array of - * chars. So, we have to implement STRING specially for STACK_OF. This is - * dealt with in the autogenerated macros below. - */ -DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) -DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) - -/* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. - * These should also be distinguished from "normal" stacks. - */ -typedef void *OPENSSL_BLOCK; -DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_sk_num -# pragma weak OPENSSL_sk_value -# pragma weak OPENSSL_sk_new -# pragma weak OPENSSL_sk_new_null -# pragma weak OPENSSL_sk_new_reserve -# pragma weak OPENSSL_sk_reserve -# pragma weak OPENSSL_sk_free -# pragma weak OPENSSL_sk_zero -# pragma weak OPENSSL_sk_delete -# pragma weak OPENSSL_sk_delete_ptr -# pragma weak OPENSSL_sk_push -# pragma weak OPENSSL_sk_unshift -# pragma weak OPENSSL_sk_pop -# pragma weak OPENSSL_sk_shift -# pragma weak OPENSSL_sk_pop_free -# pragma weak OPENSSL_sk_insert -# pragma weak OPENSSL_sk_set -# pragma weak OPENSSL_sk_find -# pragma weak OPENSSL_sk_find_ex -# pragma weak OPENSSL_sk_sort -# pragma weak OPENSSL_sk_is_sorted -# pragma weak OPENSSL_sk_dup -# pragma weak OPENSSL_sk_deep_copy -# pragma weak OPENSSL_sk_set_cmp_func -# endif /* __SUNPRO_C */ - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/seed.h b/openssl/include/openssl/seed.h deleted file mode 100644 index d6947f0..0000000 --- a/openssl/include/openssl/seed.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Neither the name of author nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef HEADER_SEED_H -# define HEADER_SEED_H - -# include - -# ifndef OPENSSL_NO_SEED -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 -# endif -# endif - -# include - -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 - -typedef struct seed_key_st { -# ifdef SEED_LONG - unsigned long data[32]; -# else - unsigned int data[32]; -# endif -} SEED_KEY_SCHEDULE; - -void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], - SEED_KEY_SCHEDULE *ks); - -void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); -void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], - unsigned char d[SEED_BLOCK_SIZE], - const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, - const SEED_KEY_SCHEDULE *ks, int enc); -void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, - const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); -void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); -void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/sha.h b/openssl/include/openssl/sha.h deleted file mode 100644 index f9356ba..0000000 --- a/openssl/include/openssl/sha.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SHA_H -# define HEADER_SHA_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/*- - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * ! SHA_LONG has to be at least 32 bits wide. ! - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ -# define SHA_LONG unsigned int - -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 - -typedef struct SHAstate_st { - SHA_LONG h0, h1, h2, h3, h4; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num; -} SHA_CTX; - -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); - -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ - -typedef struct SHA256state_st { - SHA_LONG h[8]; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num, md_len; -} SHA256_CTX; - -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); -unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); - -# define SHA224_DIGEST_LENGTH 28 -# define SHA256_DIGEST_LENGTH 32 -# define SHA384_DIGEST_LENGTH 48 -# define SHA512_DIGEST_LENGTH 64 - -/* - * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 - * being exactly 64-bit wide. See Implementation Notes in sha512.c - * for further details. - */ -/* - * SHA-512 treats input data as a - * contiguous array of 64 bit - * wide big-endian values. - */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif - -typedef struct SHA512state_st { - SHA_LONG64 h[8]; - SHA_LONG64 Nl, Nh; - union { - SHA_LONG64 d[SHA_LBLOCK]; - unsigned char p[SHA512_CBLOCK]; - } u; - unsigned int num, md_len; -} SHA512_CTX; - -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); -unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openssl/include/openssl/srp.h b/openssl/include/openssl/srp.h deleted file mode 100644 index 61f652d..0000000 --- a/openssl/include/openssl/srp.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2004, EdelKey Project. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Christophe Renou and Peter Sylvester, - * for the EdelKey project. - */ - -#ifndef HEADER_SRP_H -# define HEADER_SRP_H - -#include - -#ifndef OPENSSL_NO_SRP -# include -# include -# include -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct SRP_gN_cache_st { - char *b64_bn; - BIGNUM *bn; -} SRP_gN_cache; - - -DEFINE_STACK_OF(SRP_gN_cache) - -typedef struct SRP_user_pwd_st { - /* Owned by us. */ - char *id; - BIGNUM *s; - BIGNUM *v; - /* Not owned by us. */ - const BIGNUM *g; - const BIGNUM *N; - /* Owned by us. */ - char *info; -} SRP_user_pwd; - -void SRP_user_pwd_free(SRP_user_pwd *user_pwd); - -DEFINE_STACK_OF(SRP_user_pwd) - -typedef struct SRP_VBASE_st { - STACK_OF(SRP_user_pwd) *users_pwd; - STACK_OF(SRP_gN_cache) *gN_cache; -/* to simulate a user */ - char *seed_key; - const BIGNUM *default_g; - const BIGNUM *default_N; -} SRP_VBASE; - -/* - * Internal structure storing N and g pair - */ -typedef struct SRP_gN_st { - char *id; - const BIGNUM *g; - const BIGNUM *N; -} SRP_gN; - -DEFINE_STACK_OF(SRP_gN) - -SRP_VBASE *SRP_VBASE_new(char *seed_key); -void SRP_VBASE_free(SRP_VBASE *vb); -int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); - -/* This method ignores the configured seed and fails for an unknown user. */ -DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) -/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ -SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); - -char *SRP_create_verifier(const char *user, const char *pass, char **salt, - char **verifier, const char *N, const char *g); -int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, - BIGNUM **verifier, const BIGNUM *N, - const BIGNUM *g); - -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 - -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 - -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' - -/* see srp.c */ -char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); -SRP_gN *SRP_get_default_gN(const char *id); - -/* server side .... */ -BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, - const BIGNUM *b, const BIGNUM *N); -BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, - const BIGNUM *v); -int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); -BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); - -/* client side .... */ -BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); -BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); -BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, - const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); -int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); - -# define SRP_MINIMAL_N 1024 - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/srtp.h b/openssl/include/openssl/srtp.h deleted file mode 100644 index f8dcfc4..0000000 --- a/openssl/include/openssl/srtp.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * DTLS code by Eric Rescorla - * - * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. - */ - -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define SRTP_AES128_CM_SHA1_80 0x0001 -# define SRTP_AES128_CM_SHA1_32 0x0002 -# define SRTP_AES128_F8_SHA1_80 0x0003 -# define SRTP_AES128_F8_SHA1_32 0x0004 -# define SRTP_NULL_SHA1_80 0x0005 -# define SRTP_NULL_SHA1_32 0x0006 - -/* AEAD SRTP protection profiles from RFC 7714 */ -# define SRTP_AEAD_AES_128_GCM 0x0007 -# define SRTP_AEAD_AES_256_GCM 0x0008 - -# ifndef OPENSSL_NO_SRTP - -__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); -__owur int SSL_set_tlsext_use_srtp(SSL *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/openssl/include/openssl/ssl.h b/openssl/include/openssl/ssl.h deleted file mode 100644 index d2a5522..0000000 --- a/openssl/include/openssl/ssl.h +++ /dev/null @@ -1,2438 +0,0 @@ -/* - * Copyright 1995-2019 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 OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSL_H -# define HEADER_SSL_H - -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# endif -# include -# include -# include -# include - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* OpenSSL version number for ASN.1 encoding of the session information */ -/*- - * Version 0 - initial version - * Version 1 - added the optional peer certificate - */ -# define SSL_SESSION_ASN1_VERSION 0x0001 - -# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 -# define SSL_MAX_SID_CTX_LENGTH 32 - -# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) -# define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 - -/* The maximum number of encrypt/decrypt pipelines we can support */ -# define SSL_MAX_PIPELINES 32 - -/* text strings for the ciphers */ - -/* These are used to specify which ciphers to use and not to use */ - -# define SSL_TXT_LOW "LOW" -# define SSL_TXT_MEDIUM "MEDIUM" -# define SSL_TXT_HIGH "HIGH" -# define SSL_TXT_FIPS "FIPS" - -# define SSL_TXT_aNULL "aNULL" -# define SSL_TXT_eNULL "eNULL" -# define SSL_TXT_NULL "NULL" - -# define SSL_TXT_kRSA "kRSA" -# define SSL_TXT_kDHr "kDHr"/* 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_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_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. - */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" -/* This is the default set of TLSv1.3 ciphersuites */ -# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "TLS_CHACHA20_POLY1305_SHA256:" \ - "TLS_AES_128_GCM_SHA256" -# else -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "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; -typedef struct ssl_comp_st SSL_COMP; - -STACK_OF(SSL_CIPHER); -STACK_OF(SSL_COMP); - -/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ -typedef struct srtp_protection_profile_st { - const char *name; - unsigned long id; -} SRTP_PROTECTION_PROFILE; - -DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) - -typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, - int len, void *arg); -typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, - STACK_OF(SSL_CIPHER) *peer_ciphers, - const SSL_CIPHER **cipher, void *arg); - -/* Extension context codes */ -/* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 -/* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 -/* Some extensions may be allowed in DTLS but we don't implement them for it */ -#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 -/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 -/* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 -/* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 -/* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 -/* Really means TLS1.2 or below */ -#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 - -/* 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); - -/* - * Some values are reserved until OpenSSL 1.2.0 because they were previously - * included in SSL_OP_ALL in a 1.1.x release. - * - * Reserved value (until OpenSSL 1.2.0) 0x00000001U - * Reserved value (until OpenSSL 1.2.0) 0x00000002U - */ -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U - -/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ -# define SSL_OP_TLSEXT_PADDING 0x00000010U -/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U -/* - * Reserved value (until OpenSSL 1.2.0) 0x00000080U - * Reserved value (until OpenSSL 1.2.0) 0x00000100U - * Reserved value (until OpenSSL 1.2.0) 0x00000200U - */ - -/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ -# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U - -/* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. Added in 0.9.6e - */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000U -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000U -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000U -# ifndef OPENSSL_NO_DTLS1_METHOD -/* Use Cisco's "speshul" version of DTLS_BAD_VER - * (only with deprecated DTLSv1_client_method()) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000U -# endif - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000U -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U -/* Disable encrypt-then-mac */ -# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U - -/* - * 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 0x00100000U - -/* Prioritize Chacha20Poly1305 when client does. - * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ -# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U - -/* - * Set on servers to choose the cipher according to the server's preferences - */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U - -/* - * 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 0x01000000U - -# define SSL_OP_NO_SSLv3 0x02000000U -# define SSL_OP_NO_TLSv1 0x04000000U -# define SSL_OP_NO_TLSv1_2 0x08000000U -# define SSL_OP_NO_TLSv1_1 0x10000000U -# define SSL_OP_NO_TLSv1_3 0x20000000U - -# define SSL_OP_NO_DTLSv1 0x04000000U -# define SSL_OP_NO_DTLSv1_2 0x08000000U - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) -# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) - -/* Disallow all renegotiation */ -# define SSL_OP_NO_RENEGOTIATION 0x40000000U - -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. - * This used to be 0x000FFFFFL before 0.9.7. - * This used to be 0x80000BFFU before 1.1.1. - */ -# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ - SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ - SSL_OP_LEGACY_SERVER_CONNECT|\ - SSL_OP_TLSEXT_PADDING|\ - SSL_OP_SAFARI_ECDHE_ECDSA_BUG) - -/* OBSOLETE OPTIONS: retained for compatibility */ - -/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ -/* Related to removed SSLv2. */ -# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ -/* Related to removed SSLv2. */ -# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 -/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ -/* Dead forever, see CVE-2010-4180 */ -# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 -/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ -/* Refers to ancient SSLREF and SSLv2. */ -# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ -# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 -/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ -# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ -/* Ancient SSLeay version. */ -# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ -# define SSL_OP_TLS_D5_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ -# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ -# define SSL_OP_SINGLE_ECDH_USE 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ -# define SSL_OP_SINGLE_DH_USE 0x0 -/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ -# define SSL_OP_EPHEMERAL_RSA 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ -# define SSL_OP_NO_SSLv2 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ -# define SSL_OP_PKCS1_CHECK_1 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ -# define SSL_OP_PKCS1_CHECK_2 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ -# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ -# 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 - -# 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 - -/* 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. - */ - -unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); -unsigned long SSL_get_options(const SSL *s); -unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_clear_options(SSL *s, unsigned long op); -unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_set_options(SSL *s, unsigned long op); - -# define SSL_CTX_set_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) -# define SSL_CTX_clear_mode(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_CTX_get_mode(ctx) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) -# define SSL_clear_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) -# define SSL_set_mode(ssl,op) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) -# define SSL_get_mode(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) -# define SSL_set_mtu(ssl, mtu) \ - SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) -# define DTLS_set_link_mtu(ssl, mtu) \ - SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) -# define DTLS_get_link_min_mtu(ssl) \ - SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) - -# define SSL_get_secure_renegotiation_support(ssl) \ - SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - -# define SSL_CTX_set_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_set_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) -# define SSL_CTX_clear_cert_flags(ctx,op) \ - SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) -# define SSL_clear_cert_flags(s,op) \ - SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) - -void SSL_CTX_set_msg_callback(SSL_CTX *ctx, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -void SSL_set_msg_callback(SSL *ssl, - void (*cb) (int write_p, int version, - int content_type, const void *buf, - size_t len, SSL *ssl, void *arg)); -# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) -# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) - -# define SSL_get_extms_support(s) \ - SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) - -# ifndef OPENSSL_NO_SRP - -/* see tls_srp.c */ -__owur int SSL_SRP_CTX_init(SSL *s); -__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); -__owur int SRP_Calc_A_param(SSL *s); - -# endif - -/* 100k max cert list */ -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 - -# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) - -/* - * This callback type is used inside SSL_CTX, SSL, and in the functions that - * set them. It is used to override the generation of SSL/TLS session IDs in - * a server. Return value should be zero on an error, non-zero to proceed. - * Also, callbacks should themselves check if the id they generate is unique - * otherwise the SSL handshake will fail with an error - callbacks can do - * this using the 'ssl' value they're passed by; - * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in - * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 - * bytes. The callback can alter this length to be less if desired. It is - * also an error for the callback to set the size to zero. - */ -typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, - unsigned int *id_len); - -# define SSL_SESS_CACHE_OFF 0x0000 -# define SSL_SESS_CACHE_CLIENT 0x0001 -# define SSL_SESS_CACHE_SERVER 0x0002 -# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) -# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 -/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ -# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 -# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 -# define SSL_SESS_CACHE_NO_INTERNAL \ - (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) - -LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); -# define SSL_CTX_sess_number(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) -# define SSL_CTX_sess_connect(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) -# define SSL_CTX_sess_connect_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) -# define SSL_CTX_sess_connect_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) -# define SSL_CTX_sess_accept_renegotiate(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) -# define SSL_CTX_sess_accept_good(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) -# define SSL_CTX_sess_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) -# define SSL_CTX_sess_cb_hits(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) -# define SSL_CTX_sess_misses(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) -# define SSL_CTX_sess_timeouts(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) -# define SSL_CTX_sess_cache_full(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) - -void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, - int (*new_session_cb) (struct ssl_st *ssl, - SSL_SESSION *sess)); -int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - SSL_SESSION *sess); -void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, - void (*remove_session_cb) (struct ssl_ctx_st - *ctx, - SSL_SESSION *sess)); -void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, - SSL_SESSION *sess); -void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, - SSL_SESSION *(*get_session_cb) (struct ssl_st - *ssl, - const unsigned char - *data, int len, - int *copy)); -SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, - const unsigned char *data, - int len, int *copy); -void SSL_CTX_set_info_callback(SSL_CTX *ctx, - void (*cb) (const SSL *ssl, int type, int val)); -void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, - int val); -void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, - int (*client_cert_cb) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey)); -int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, - EVP_PKEY **pkey); -# ifndef OPENSSL_NO_ENGINE -__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); -# endif -void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, - int (*app_gen_cookie_cb) (SSL *ssl, - unsigned char - *cookie, - unsigned int - *cookie_len)); -void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, - int (*app_verify_cookie_cb) (SSL *ssl, - const unsigned - char *cookie, - unsigned int - cookie_len)); - -void SSL_CTX_set_stateless_cookie_generate_cb( - SSL_CTX *ctx, - int (*gen_stateless_cookie_cb) (SSL *ssl, - unsigned char *cookie, - size_t *cookie_len)); -void SSL_CTX_set_stateless_cookie_verify_cb( - SSL_CTX *ctx, - int (*verify_stateless_cookie_cb) (SSL *ssl, - const unsigned char *cookie, - size_t cookie_len)); -# ifndef OPENSSL_NO_NEXTPROTONEG - -typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, - const unsigned char **out, - unsigned int *outlen, - void *arg); -void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, - SSL_CTX_npn_advertised_cb_func cb, - void *arg); -# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb - -typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, - unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg); -void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, - SSL_CTX_npn_select_cb_func cb, - void *arg); -# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb - -void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, - unsigned *len); -# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated -# endif - -__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, - const unsigned char *in, unsigned int inlen, - const unsigned char *client, - unsigned int client_len); - -# define OPENSSL_NPN_UNSUPPORTED 0 -# define OPENSSL_NPN_NEGOTIATED 1 -# define OPENSSL_NPN_NO_OVERLAP 2 - -__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, - unsigned int protos_len); -__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, - unsigned int protos_len); -typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, - const unsigned char **out, - unsigned char *outlen, - const unsigned char *in, - unsigned int inlen, - void *arg); -void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, - SSL_CTX_alpn_select_cb_func cb, - void *arg); -void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, - unsigned int *len); - -# ifndef OPENSSL_NO_PSK -/* - * the maximum length of the buffer given to callbacks containing the - * resulting identity/psk - */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 -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 - -/* These will only be used when doing non-blocking IO */ -# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) -# define SSL_want_read(s) (SSL_want(s) == SSL_READING) -# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) -# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) -# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) -# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) -# define SSL_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 - -/* - * 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 */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These need to be after the above set of includes due to a compiler bug - * in VisualStudio 2015 - */ -DEFINE_STACK_OF_CONST(SSL_CIPHER) -DEFINE_STACK_OF(SSL_COMP) - -/* compatibility */ -# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) -# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) -# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ - (char *)(a))) -# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) -# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) -# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ - (char *)(arg))) -DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) - -/* 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_CERT_STATUS, - TLS_ST_CR_KEY_EXCH, - TLS_ST_CR_CERT_REQ, - TLS_ST_CR_SRVR_DONE, - TLS_ST_CR_SESSION_TICKET, - TLS_ST_CR_CHANGE, - TLS_ST_CR_FINISHED, - TLS_ST_CW_CLNT_HELLO, - TLS_ST_CW_CERT, - TLS_ST_CW_KEY_EXCH, - TLS_ST_CW_CERT_VRFY, - TLS_ST_CW_CHANGE, - TLS_ST_CW_NEXT_PROTO, - TLS_ST_CW_FINISHED, - TLS_ST_SW_HELLO_REQ, - TLS_ST_SR_CLNT_HELLO, - DTLS_ST_SW_HELLO_VERIFY_REQUEST, - TLS_ST_SW_SRVR_HELLO, - TLS_ST_SW_CERT, - TLS_ST_SW_KEY_EXCH, - TLS_ST_SW_CERT_REQ, - TLS_ST_SW_SRVR_DONE, - TLS_ST_SR_CERT, - TLS_ST_SR_KEY_EXCH, - TLS_ST_SR_CERT_VRFY, - TLS_ST_SR_NEXT_PROTO, - TLS_ST_SR_CHANGE, - TLS_ST_SR_FINISHED, - TLS_ST_SW_SESSION_TICKET, - TLS_ST_SW_CERT_STATUS, - TLS_ST_SW_CHANGE, - TLS_ST_SW_FINISHED, - 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 - -# if OPENSSL_API_COMPAT < 0x10100000L -# 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_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_DH_CB 6 -# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 -# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 -# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 -# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 -# define SSL_CTRL_GET_FLAGS 13 -# define SSL_CTRL_EXTRA_CHAIN_CERT 14 -# define SSL_CTRL_SET_MSG_CALLBACK 15 -# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 -/* only applies to datagram connections */ -# define SSL_CTRL_SET_MTU 17 -/* Stats */ -# define SSL_CTRL_SESS_NUMBER 20 -# define SSL_CTRL_SESS_CONNECT 21 -# define SSL_CTRL_SESS_CONNECT_GOOD 22 -# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 -# define SSL_CTRL_SESS_ACCEPT 24 -# define SSL_CTRL_SESS_ACCEPT_GOOD 25 -# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 -# define SSL_CTRL_SESS_HIT 27 -# define SSL_CTRL_SESS_CB_HIT 28 -# define SSL_CTRL_SESS_MISSES 29 -# define SSL_CTRL_SESS_TIMEOUTS 30 -# define SSL_CTRL_SESS_CACHE_FULL 31 -# define SSL_CTRL_MODE 33 -# define SSL_CTRL_GET_READ_AHEAD 40 -# define SSL_CTRL_SET_READ_AHEAD 41 -# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 -# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 -# define SSL_CTRL_SET_SESS_CACHE_MODE 44 -# define SSL_CTRL_GET_SESS_CACHE_MODE 45 -# define SSL_CTRL_GET_MAX_CERT_LIST 50 -# define SSL_CTRL_SET_MAX_CERT_LIST 51 -# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 -/* see tls1.h for macros based on these */ -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 -# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 -# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 -# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 -# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 -# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 -/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ -/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ -/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 -# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 -# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 -# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 -# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 -# define SSL_CTRL_SET_SRP_ARG 78 -# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 -# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 -# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif -# define DTLS_CTRL_GET_TIMEOUT 73 -# define DTLS_CTRL_HANDLE_TIMEOUT 74 -# define SSL_CTRL_GET_RI_SUPPORT 76 -# define SSL_CTRL_CLEAR_MODE 78 -# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 -# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 -# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 -# define SSL_CTRL_CHAIN 88 -# define SSL_CTRL_CHAIN_CERT 89 -# define SSL_CTRL_GET_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_CERT_SET_FIRST 1 -# define SSL_CERT_SET_NEXT 2 -# define SSL_CERT_SET_SERVER 3 -# define DTLSv1_get_timeout(ssl, arg) \ - SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) -# define DTLSv1_handle_timeout(ssl) \ - SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) -# define SSL_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_clear_num_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) -# define SSL_total_renegotiations(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) -# define SSL_CTX_set_dh_auto(ctx, onoff) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_dh_auto(s, onoff) \ - SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_tmp_dh(ssl,dh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) -# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) -# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) -# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) -# define SSL_CTX_clear_extra_chain_certs(ctx) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) -# define SSL_CTX_set0_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) -# define SSL_CTX_set1_chain(ctx,sk) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) -# define SSL_CTX_add0_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) -# define SSL_CTX_add1_chain_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) -# define SSL_CTX_get0_chain_certs(ctx,px509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) -# define SSL_CTX_clear_chain_certs(ctx) \ - SSL_CTX_set0_chain(ctx,NULL) -# define SSL_CTX_build_cert_chain(ctx, flags) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) -# define SSL_CTX_select_current_cert(ctx,x509) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) -# define SSL_CTX_set_current_cert(ctx, op) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) -# define SSL_CTX_set0_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) -# define SSL_CTX_set1_verify_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) -# define SSL_CTX_set0_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) -# define SSL_CTX_set1_chain_cert_store(ctx,st) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) -# define SSL_set0_chain(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_set0_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) -# define SSL_set1_chain_cert_store(s,st) \ - SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) -# define SSL_get1_groups(s, glist) \ - SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) -# 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_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_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_get_signature_nid(s, pn) \ - SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) -# 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) - -/* 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) - -/* - * 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 - - -# if OPENSSL_API_COMPAT < 0x10100000L -/* Provide some compatibility macros for removed functionality. */ -# define SSL_CTX_need_tmp_RSA(ctx) 0 -# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 -# define SSL_need_tmp_RSA(ssl) 0 -# define SSL_set_tmp_rsa(ssl,rsa) 1 -# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) -# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) -/* - * We "pretend" to call the callback to avoid warnings about unused static - * functions. - */ -# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) -# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) -# endif -__owur const BIO_METHOD *BIO_f_ssl(void); -__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); -__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); -__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); -__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); -void BIO_ssl_shutdown(BIO *ssl_bio); - -__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); -__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); -int SSL_CTX_up_ref(SSL_CTX *ctx); -void SSL_CTX_free(SSL_CTX *); -__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); -__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); -__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); -void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); -void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); -__owur int SSL_want(const SSL *s); -__owur int SSL_clear(SSL *s); - -void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); - -__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); -__owur 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_RSA -__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, - long len); -# endif -__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); -__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, - long len); -__owur int SSL_use_certificate(SSL *ssl, X509 *x); -__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); -__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_RSA -__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); -#endif - -__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); -__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); - -#ifndef OPENSSL_NO_RSA -__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, - int type); -#endif -__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, - int type); -__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, - int type); -/* PEM type */ -__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); -__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); -__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); -__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *file); -int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, - const char *dir); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_load_error_strings() \ - OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ - | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) -# endif - -__owur const char *SSL_state_string(const SSL *s); -__owur const char *SSL_rstate_string(const SSL *s); -__owur const char *SSL_state_string_long(const SSL *s); -__owur const char *SSL_rstate_string_long(const SSL *s); -__owur long SSL_SESSION_get_time(const SSL_SESSION *s); -__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); -__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); -__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); -__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); -__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); - -__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(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(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); - -# ifdef HEADER_X509_H -__owur X509 *SSL_get_peer_certificate(const SSL *s); -# endif - -__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); - -__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); -__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); -__owur 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_RSA -__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); -__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, - long len); -# endif -__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); -__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, - const unsigned char *d, long len); -__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); -__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, - const unsigned char *d); -__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); -__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 *hostname); -__owur int SSL_add1_host(SSL *s, const char *hostname); -__owur const char *SSL_get0_peername(SSL *s); -void SSL_set_hostflags(SSL *s, unsigned int flags); - -__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); -__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, - uint8_t mtype, uint8_t ord); -__owur int SSL_dane_enable(SSL *s, const char *basedomain); -__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, - uint8_t mtype, unsigned const char *data, size_t dlen); -__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); -__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, - uint8_t *mtype, unsigned const char **data, - size_t *dlen); -/* - * Bridge opacity barrier between libcrypt and libssl, also needed to support - * offline testing in test/danetest.c - */ -SSL_DANE *SSL_get0_dane(SSL *ssl); -/* - * DANE flags - */ -unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); -unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); -unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); -unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); - -__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); -__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); - -__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); -__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); - -# ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); -int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, - char *(*cb) (SSL *, void *)); -int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, - int (*cb) (SSL *, void *)); -int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, - int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); - -int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, - BIGNUM *sa, BIGNUM *v, char *info); -int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, - const char *grp); - -__owur BIGNUM *SSL_get_srp_g(SSL *s); -__owur BIGNUM *SSL_get_srp_N(SSL *s); - -__owur char *SSL_get_srp_username(SSL *s); -__owur char *SSL_get_srp_userinfo(SSL *s); -# endif - -/* - * 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); -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_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); -# 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 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_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); - -/* This sets the 'default' SSL version that SSL_new() will create */ -__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); - -# ifndef OPENSSL_NO_SSL3_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) -# endif - -#define SSLv23_method TLS_method -#define SSLv23_server_method TLS_server_method -#define SSLv23_client_method TLS_client_method - -/* Negotiate highest available SSL/TLS version */ -__owur const SSL_METHOD *TLS_method(void); -__owur const SSL_METHOD *TLS_server_method(void); -__owur const SSL_METHOD *TLS_client_method(void); - -# ifndef OPENSSL_NO_TLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) -# endif - -# ifndef OPENSSL_NO_TLS1_1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) -# endif - -# ifndef OPENSSL_NO_TLS1_2_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) -# endif - -# ifndef OPENSSL_NO_DTLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) -# endif - -# ifndef OPENSSL_NO_DTLS1_2_METHOD -/* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) -# 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_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); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_library_init() OPENSSL_init_ssl(0, NULL) -# endif - -__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); -__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(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_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) - -void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); -void SSL_set_default_read_buffer_len(SSL *s, size_t len); - -# ifndef OPENSSL_NO_DH -/* NB: the |keylength| is only applicable when is_export is true */ -void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -void SSL_set_tmp_dh_callback(SSL *ssl, - DH *(*dh) (SSL *ssl, int is_export, - int keylength)); -# endif - -__owur const COMP_METHOD *SSL_get_current_compression(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); -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_COMP_free_compression_methods() while(0) continue -# endif -__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); - -const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); -int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); -int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); -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); - -void 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_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); - -# if OPENSSL_API_COMPAT < 0x10100000L -# 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); - -extern const char SSL_version_str[]; - -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); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/ssl2.h b/openssl/include/openssl/ssl2.h deleted file mode 100644 index 1b10983..0000000 --- a/openssl/include/openssl/ssl2.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H - -#ifdef __cplusplus -extern "C" { -#endif - -# define SSL2_VERSION 0x0002 - -# define SSL2_MT_CLIENT_HELLO 1 - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/ssl3.h b/openssl/include/openssl/ssl3.h deleted file mode 100644 index 884b6af..0000000 --- a/openssl/include/openssl/ssl3.h +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Signalling cipher suite value from RFC 5746 - * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) - */ -# define SSL3_CK_SCSV 0x030000FF - -/* - * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 - * (TLS_FALLBACK_SCSV) - */ -# define SSL3_CK_FALLBACK_SCSV 0x03005600 - -# define SSL3_CK_RSA_NULL_MD5 0x03000001 -# define SSL3_CK_RSA_NULL_SHA 0x03000002 -# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 -# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 -# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 -# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 -# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 -# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 -# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 -# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A - -# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B -# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C -# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D -# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E -# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F -# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 - -# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA 0x03000011 -# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 -# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 -# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA -# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 -# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 -# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 -# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_RSA_DES_192_CBC3_SHA - -# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 -# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 -# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 -# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A -# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B - -/* 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" - -# define SSL3_VERSION 0x0300 -# define SSL3_VERSION_MAJOR 0x03 -# define SSL3_VERSION_MINOR 0x00 - -# define SSL3_RT_CHANGE_CIPHER_SPEC 20 -# define SSL3_RT_ALERT 21 -# define SSL3_RT_HANDSHAKE 22 -# define SSL3_RT_APPLICATION_DATA 23 -# define DTLS1_RT_HEARTBEAT 24 - -/* Pseudo content types to indicate additional parameters */ -# define TLS1_RT_CRYPTO 0x1000 -# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) -# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) -# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) -# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) - -# define TLS1_RT_CRYPTO_READ 0x0000 -# define TLS1_RT_CRYPTO_WRITE 0x0100 -# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) -# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) -# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) -# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) - -/* Pseudo content types for SSL/TLS header info */ -# define SSL3_RT_HEADER 0x100 -# define SSL3_RT_INNER_CONTENT_TYPE 0x101 - -# 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 10 - -# 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 - -# 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 -# 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/openssl/include/openssl/sslerr.h b/openssl/include/openssl/sslerr.h deleted file mode 100644 index 150334a..0000000 --- a/openssl/include/openssl/sslerr.h +++ /dev/null @@ -1,773 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SSLERR_H -# define HEADER_SSLERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SSL_strings(void); - -/* - * SSL function codes. - */ -# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 -# define SSL_F_ADD_KEY_SHARE 512 -# define SSL_F_BYTES_TO_CIPHER_LIST 519 -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CIPHERSUITE_CB 622 -# define SSL_F_CONSTRUCT_CA_NAMES 552 -# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 -# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 -# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 -# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 -# define SSL_F_CREATE_TICKET_PREQUEL 638 -# define SSL_F_CT_MOVE_SCTS 345 -# define SSL_F_CT_STRICT 349 -# define SSL_F_CUSTOM_EXT_ADD 554 -# define SSL_F_CUSTOM_EXT_PARSE 555 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DANE_CTX_ENABLE 347 -# define SSL_F_DANE_MTYPE_SET 393 -# define SSL_F_DANE_TLSA_ADD 394 -# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 339 -# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_DTLS1_WRITE_BYTES 545 -# define SSL_F_DTLSV1_LISTEN 350 -# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 -# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 -# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 -# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 -# define SSL_F_DTLS_RECORD_LAYER_NEW 635 -# define SSL_F_DTLS_WAIT_FOR_DRY 592 -# define SSL_F_EARLY_DATA_COUNT_OK 532 -# define SSL_F_FINAL_EARLY_DATA 556 -# define SSL_F_FINAL_EC_PT_FORMATS 485 -# define SSL_F_FINAL_EMS 486 -# define SSL_F_FINAL_KEY_SHARE 503 -# define SSL_F_FINAL_MAXFRAGMENTLEN 557 -# define SSL_F_FINAL_RENEGOTIATE 483 -# define SSL_F_FINAL_SERVER_NAME 558 -# define SSL_F_FINAL_SIG_ALGS 497 -# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 -# define SSL_F_NSS_KEYLOG_INT 500 -# define SSL_F_OPENSSL_INIT_SSL 342 -# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 -# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 -# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 -# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 -# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 -# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 -# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 -# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 -# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 -# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 -# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 -# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 -# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 640 -# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 -# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 -# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 -# define SSL_F_PARSE_CA_NAMES 541 -# define SSL_F_PITEM_NEW 624 -# define SSL_F_PQUEUE_NEW 625 -# define SSL_F_PROCESS_KEY_SHARE_EXT 439 -# define SSL_F_READ_STATE_MACHINE 352 -# define SSL_F_SET_CLIENT_CIPHERSUITE 540 -# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 -# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 -# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 608 -# define SSL_F_SSL3_FINAL_FINISH_MAC 285 -# define SSL_F_SSL3_FINISH_MAC 587 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_INIT_FINISHED_MAC 397 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 316 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CACHE_CIPHERLIST 520 -# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CERT_SET0_CHAIN 340 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 -# define SSL_F_SSL_CIPHER_DESCRIPTION 626 -# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_ENABLE_CT 398 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DANE_DUP 403 -# define SSL_F_SSL_DANE_ENABLE 395 -# define SSL_F_SSL_DERIVE 590 -# define SSL_F_SSL_DO_CONFIG 391 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_DUP_CA_LIST 408 -# define SSL_F_SSL_ENABLE_CT 402 -# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 -# define SSL_F_SSL_GENERATE_SESSION_ID 547 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_HANDSHAKE_HASH 560 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_KEY_UPDATE 515 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_LOG_MASTER_SECRET 498 -# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 -# define SSL_F_SSL_MODULE_INIT 392 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PEEK_EX 432 -# define SSL_F_SSL_PEEK_INTERNAL 522 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_READ_EARLY_DATA 529 -# define SSL_F_SSL_READ_EX 434 -# define SSL_F_SSL_READ_INTERNAL 523 -# define SSL_F_SSL_RENEGOTIATE 516 -# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID 423 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SET_ALPN_PROTOS 344 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CERT_AND_KEY 621 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_START_ASYNC_JOB 389 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VALIDATE_CT 400 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_SSL_WRITE_EARLY_DATA 526 -# define SSL_F_SSL_WRITE_EARLY_FINISH 527 -# define SSL_F_SSL_WRITE_EX 433 -# define SSL_F_SSL_WRITE_INTERNAL 524 -# define SSL_F_STATE_MACHINE 353 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS12_COPY_SIGALGS 533 -# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 -# define SSL_F_TLS13_ENC 609 -# define SSL_F_TLS13_FINAL_FINISH_MAC 605 -# define SSL_F_TLS13_GENERATE_SECRET 591 -# define SSL_F_TLS13_HKDF_EXPAND 561 -# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 -# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 -# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 -# define SSL_F_TLS1_ENC 401 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SAVE_U16 628 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_GROUPS 629 -# define SSL_F_TLS1_SET_RAW_SIGALGS 630 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 -# define SSL_F_TLS1_SET_SIGALGS 632 -# define SSL_F_TLS_CHOOSE_SIGALG 513 -# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 -# define SSL_F_TLS_COLLECT_EXTENSIONS 435 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 -# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 -# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 -# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 -# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 -# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 -# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 -# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 -# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 -# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 -# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 -# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 -# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 -# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 -# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 -# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 -# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 -# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 -# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 -# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 -# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 -# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 -# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 -# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 -# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 -# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 -# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 -# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 -# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 -# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 -# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 -# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 -# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 -# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 -# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 -# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 -# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 -# define SSL_F_TLS_CONSTRUCT_FINISHED 359 -# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 -# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 -# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 -# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 -# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 -# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 -# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 -# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 -# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 -# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 -# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 -# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 -# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 -# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 -# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 -# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 -# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 -# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 -# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 -# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 -# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 -# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 -# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 -# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 -# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 -# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 -# define SSL_F_TLS_FINISH_HANDSHAKE 597 -# define SSL_F_TLS_GET_MESSAGE_BODY 351 -# define SSL_F_TLS_GET_MESSAGE_HEADER 387 -# define SSL_F_TLS_HANDLE_ALPN 562 -# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 -# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 -# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 -# define SSL_F_TLS_PARSE_CTOS_ALPN 567 -# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 -# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 -# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 -# define SSL_F_TLS_PARSE_CTOS_EMS 570 -# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 -# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 -# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 -# define SSL_F_TLS_PARSE_CTOS_PSK 505 -# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 -# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 -# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 -# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 -# define SSL_F_TLS_PARSE_CTOS_SRP 576 -# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 -# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 -# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 -# define SSL_F_TLS_PARSE_STOC_ALPN 579 -# define SSL_F_TLS_PARSE_STOC_COOKIE 534 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 -# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 -# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 -# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 -# define SSL_F_TLS_PARSE_STOC_NPN 582 -# define SSL_F_TLS_PARSE_STOC_PSK 502 -# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 -# define SSL_F_TLS_PARSE_STOC_SCT 564 -# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 -# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 -# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 -# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 -# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 -# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 -# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 -# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 -# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 -# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 -# define SSL_F_TLS_PROCESS_CERT_STATUS 362 -# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 -# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 -# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 -# define SSL_F_TLS_PROCESS_CKE_DHE 411 -# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 -# define SSL_F_TLS_PROCESS_CKE_GOST 413 -# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 -# define SSL_F_TLS_PROCESS_CKE_RSA 415 -# define SSL_F_TLS_PROCESS_CKE_SRP 416 -# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 -# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 -# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 -# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 -# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 -# define SSL_F_TLS_PROCESS_FINISHED 364 -# define SSL_F_TLS_PROCESS_HELLO_REQ 507 -# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 -# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 -# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 -# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 -# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 -# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 -# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 -# define SSL_F_TLS_PROCESS_SERVER_DONE 368 -# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 -# define SSL_F_TLS_PROCESS_SKE_DHE 419 -# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 -# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 -# define SSL_F_TLS_PROCESS_SKE_SRP 422 -# define SSL_F_TLS_PSK_DO_BINDER 506 -# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 -# define SSL_F_TLS_SETUP_HANDSHAKE 508 -# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_WPACKET_INTERN_INIT_LEN 633 -# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 -# define SSL_F_WRITE_STATE_MACHINE 586 - -/* - * 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_0_NEEDED_IN_FIPS_MODE 143 -# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 -# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 -# define SSL_R_BAD_CIPHER 186 -# 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_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_CIPHER_OR_HASH_UNAVAILABLE 138 -# define SSL_R_CLIENTHELLO_TLSEXT 226 -# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 -# define SSL_R_COMPRESSION_DISABLED 343 -# define SSL_R_COMPRESSION_FAILURE 141 -# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 -# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 -# define SSL_R_CONNECTION_TYPE_NOT_SET 144 -# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 -# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 -# define SSL_R_COOKIE_MISMATCH 308 -# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 -# define SSL_R_DANE_ALREADY_ENABLED 172 -# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 -# define SSL_R_DANE_NOT_ENABLED 175 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 -# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 -# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 -# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 -# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 -# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 -# define SSL_R_DANE_TLSA_NULL_DATA 203 -# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 -# define SSL_R_DATA_LENGTH_TOO_LONG 146 -# define SSL_R_DECRYPTION_FAILED 147 -# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 -# define SSL_R_DH_KEY_TOO_SMALL 394 -# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 -# define SSL_R_DIGEST_CHECK_FAILED 149 -# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 -# define SSL_R_DUPLICATE_COMPRESSION_ID 309 -# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 -# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 -# define SSL_R_EE_KEY_TOO_SMALL 399 -# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 -# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 -# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 -# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 -# define SSL_R_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_INIT_ASYNC 405 -# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 -# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 -# define SSL_R_HTTPS_PROXY_REQUEST 155 -# define SSL_R_HTTP_REQUEST 156 -# define SSL_R_ILLEGAL_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_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_LENGTH_MISMATCH 159 -# define SSL_R_LENGTH_TOO_LONG 404 -# define SSL_R_LENGTH_TOO_SHORT 160 -# define SSL_R_LIBRARY_BUG 274 -# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 -# define SSL_R_MISSING_DSA_SIGNING_CERT 165 -# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 -# define SSL_R_MISSING_FATAL 256 -# define SSL_R_MISSING_PARAMETERS 290 -# 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_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_SUITABLE_KEY_SHARE 101 -# 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_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_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_READ_BIO_NOT_SET 211 -# define SSL_R_READ_TIMEOUT_EXPIRED 312 -# define SSL_R_RECORD_LENGTH_MISMATCH 213 -# define SSL_R_RECORD_TOO_SMALL 298 -# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 -# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 -# define SSL_R_RENEGOTIATION_MISMATCH 337 -# define SSL_R_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_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_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_RENEGOTIATION 1100 -# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 -# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 -# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 -# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 -# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 -# define SSL_R_TOO_MANY_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_MESSAGE 244 -# define SSL_R_UNEXPECTED_RECORD 245 -# define SSL_R_UNINITIALIZED 276 -# define SSL_R_UNKNOWN_ALERT_TYPE 246 -# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 -# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 -# define SSL_R_UNKNOWN_CIPHER_TYPE 249 -# define SSL_R_UNKNOWN_CMD_NAME 386 -# define SSL_R_UNKNOWN_COMMAND 139 -# define SSL_R_UNKNOWN_DIGEST 368 -# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 -# define SSL_R_UNKNOWN_PKEY_TYPE 251 -# define SSL_R_UNKNOWN_PROTOCOL 252 -# define SSL_R_UNKNOWN_SSL_VERSION 254 -# define SSL_R_UNKNOWN_STATE 255 -# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 -# define SSL_R_UNSOLICITED_EXTENSION 217 -# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 -# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 -# define SSL_R_UNSUPPORTED_PROTOCOL 258 -# define SSL_R_UNSUPPORTED_SSL_VERSION 259 -# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 -# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 -# define SSL_R_VERSION_TOO_HIGH 166 -# define SSL_R_VERSION_TOO_LOW 396 -# define SSL_R_WRONG_CERTIFICATE_TYPE 383 -# define SSL_R_WRONG_CIPHER_RETURNED 261 -# define SSL_R_WRONG_CURVE 378 -# define SSL_R_WRONG_SIGNATURE_LENGTH 264 -# define SSL_R_WRONG_SIGNATURE_SIZE 265 -# define SSL_R_WRONG_SIGNATURE_TYPE 370 -# define SSL_R_WRONG_SSL_VERSION 266 -# define SSL_R_WRONG_VERSION_NUMBER 267 -# define SSL_R_X509_LIB 268 -# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 - -#endif diff --git a/openssl/include/openssl/stack.h b/openssl/include/openssl/stack.h deleted file mode 100644 index b429d4e..0000000 --- a/openssl/include/openssl/stack.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_STACK_H -# define HEADER_STACK_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ - -typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); -typedef void (*OPENSSL_sk_freefunc)(void *); -typedef void *(*OPENSSL_sk_copyfunc)(const void *); - -int OPENSSL_sk_num(const OPENSSL_STACK *); -void *OPENSSL_sk_value(const OPENSSL_STACK *, int); - -void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); - -OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); -OPENSSL_STACK *OPENSSL_sk_new_null(void); -OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); -int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); -void OPENSSL_sk_free(OPENSSL_STACK *); -void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); -OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, - OPENSSL_sk_copyfunc c, - OPENSSL_sk_freefunc f); -int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); -void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); -void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); -int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); -int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); -int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); -int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); -void *OPENSSL_sk_shift(OPENSSL_STACK *st); -void *OPENSSL_sk_pop(OPENSSL_STACK *st); -void OPENSSL_sk_zero(OPENSSL_STACK *st); -OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, - OPENSSL_sk_compfunc cmp); -OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); -void OPENSSL_sk_sort(OPENSSL_STACK *st); -int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define _STACK OPENSSL_STACK -# define sk_num OPENSSL_sk_num -# define sk_value OPENSSL_sk_value -# define sk_set OPENSSL_sk_set -# define sk_new OPENSSL_sk_new -# define sk_new_null OPENSSL_sk_new_null -# define sk_free OPENSSL_sk_free -# define sk_pop_free OPENSSL_sk_pop_free -# define sk_deep_copy OPENSSL_sk_deep_copy -# define sk_insert OPENSSL_sk_insert -# define sk_delete OPENSSL_sk_delete -# define sk_delete_ptr OPENSSL_sk_delete_ptr -# define sk_find OPENSSL_sk_find -# define sk_find_ex OPENSSL_sk_find_ex -# define sk_push OPENSSL_sk_push -# define sk_unshift OPENSSL_sk_unshift -# define sk_shift OPENSSL_sk_shift -# define sk_pop OPENSSL_sk_pop -# define sk_zero OPENSSL_sk_zero -# define sk_set_cmp_func OPENSSL_sk_set_cmp_func -# define sk_dup OPENSSL_sk_dup -# define sk_sort OPENSSL_sk_sort -# define sk_is_sorted OPENSSL_sk_is_sorted -# endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openssl/include/openssl/store.h b/openssl/include/openssl/store.h deleted file mode 100644 index 58aa2f8..0000000 --- a/openssl/include/openssl/store.h +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OSSL_STORE_H -# define HEADER_OSSL_STORE_H - -# 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); - -/* - * 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. - */ -int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); -int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); - -/* - * 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 - -/* - * 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); - -/* - * 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); - - -/*- - * 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_PKEY 3 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_CERT 4 /* X509 * */ -# define OSSL_STORE_INFO_CRL 5 /* 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_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_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); -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_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(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, OSSL_STORE_SEARCH *search); - - -/*- - * Function to register a loader for the given URI scheme. - * ------------------------------------------------------- - * - * The loader receives all the main components of an URI except for the - * scheme. - */ - -typedef struct ossl_store_loader_st OSSL_STORE_LOADER; -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); -const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); -const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); -/* 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); -int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, - OSSL_STORE_open_fn open_function); -typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, - va_list args); -int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, - OSSL_STORE_ctrl_fn ctrl_function); -typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); -int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, - OSSL_STORE_expect_fn expect_function); -typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, - OSSL_STORE_SEARCH *criteria); -int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, - OSSL_STORE_find_fn find_function); -typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, - const UI_METHOD *ui_method, - void *ui_data); -int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, - OSSL_STORE_load_fn load_function); -typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); -int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, - OSSL_STORE_eof_fn eof_function); -typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); -int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, - OSSL_STORE_error_fn error_function); -typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); -int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, - OSSL_STORE_close_fn close_function); -void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); - -int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); -OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); - -/*- - * Functions to list STORE loaders - * ------------------------------- - */ -int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER - *loader, void *do_arg), - void *do_arg); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/storeerr.h b/openssl/include/openssl/storeerr.h deleted file mode 100644 index 6b5fb2e..0000000 --- a/openssl/include/openssl/storeerr.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_OSSL_STOREERR_H -# define HEADER_OSSL_STOREERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OSSL_STORE_strings(void); - -/* - * OSSL_STORE function codes. - */ -# define OSSL_STORE_F_FILE_CTRL 129 -# define OSSL_STORE_F_FILE_FIND 138 -# define OSSL_STORE_F_FILE_GET_PASS 118 -# define OSSL_STORE_F_FILE_LOAD 119 -# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 -# define OSSL_STORE_F_FILE_NAME_TO_URI 126 -# define OSSL_STORE_F_FILE_OPEN 120 -# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 -# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 -# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 -# define OSSL_STORE_F_OSSL_STORE_FIND 131 -# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 -# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 -# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 -# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 -# define OSSL_STORE_F_OSSL_STORE_OPEN 114 -# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 -# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 -# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 -# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 -# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 -# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 - -/* - * 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_KEY 102 -# define OSSL_STORE_R_NOT_A_NAME 103 -# define OSSL_STORE_R_NOT_PARAMETERS 104 -# 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/openssl/include/openssl/symhacks.h b/openssl/include/openssl/symhacks.h deleted file mode 100644 index 16bd297..0000000 --- a/openssl/include/openssl/symhacks.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H - -# include - -/* Case insensitive linking causes problems.... */ -# if defined(OPENSSL_SYS_VMS) -# undef ERR_load_CRYPTO_strings -# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings -# undef OCSP_crlID_new -# define OCSP_crlID_new OCSP_crlID2_new - -# undef d2i_ECPARAMETERS -# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS -# undef i2d_ECPARAMETERS -# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS -# undef d2i_ECPKPARAMETERS -# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS -# undef i2d_ECPKPARAMETERS -# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS - -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - -# endif - -#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/openssl/include/openssl/tls1.h b/openssl/include/openssl/tls1.h deleted file mode 100644 index 2600704..0000000 --- a/openssl/include/openssl/tls1.h +++ /dev/null @@ -1,1237 +0,0 @@ -/* - * Copyright 1995-2019 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 OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Default security level if not overridden at config time */ -# ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 1 -# endif - -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS1_3_VERSION 0x0304 -# define TLS_MAX_VERSION TLS1_3_VERSION - -/* Special value for method supporting multiple versions */ -# define TLS_ANY_VERSION 0x10000 - -# define TLS1_VERSION_MAJOR 0x03 -# define TLS1_VERSION_MINOR 0x01 - -# define TLS1_1_VERSION_MAJOR 0x03 -# define TLS1_1_VERSION_MINOR 0x02 - -# define TLS1_2_VERSION_MAJOR 0x03 -# define TLS1_2_VERSION_MINOR 0x03 - -# define TLS1_get_version(s) \ - ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) - -# define TLS1_get_client_version(s) \ - ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) - -# define TLS1_AD_DECRYPTION_FAILED 21 -# define TLS1_AD_RECORD_OVERFLOW 22 -# define TLS1_AD_UNKNOWN_CA 48/* fatal */ -# define TLS1_AD_ACCESS_DENIED 49/* fatal */ -# define TLS1_AD_DECODE_ERROR 50/* fatal */ -# define TLS1_AD_DECRYPT_ERROR 51 -# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ -# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ -# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ -# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ -# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ -# define TLS1_AD_USER_CANCELLED 90 -# define TLS1_AD_NO_RENEGOTIATION 100 -/* 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 RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - -/* ExtensionType value from RFC7301 */ -# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 - -/* - * Extension type for Certificate Transparency - * https://tools.ietf.org/html/rfc6962#section-3.3.1 - */ -# define TLSEXT_TYPE_signed_certificate_timestamp 18 - -/* - * ExtensionType value for TLS padding extension. - * http://tools.ietf.org/html/draft-agl-tls-padding - */ -# define TLSEXT_TYPE_padding 21 - -/* ExtensionType value from RFC7366 */ -# define TLSEXT_TYPE_encrypt_then_mac 22 - -/* ExtensionType value from RFC7627 */ -# define TLSEXT_TYPE_extended_master_secret 23 - -/* ExtensionType value from RFC4507 */ -# define TLSEXT_TYPE_session_ticket 35 - -/* 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 - -/* Temporary extension type */ -# define TLSEXT_TYPE_renegotiate 0xff01 - -# ifndef OPENSSL_NO_NEXTPROTONEG -/* This is not an IANA defined extension number */ -# define TLSEXT_TYPE_next_proto_neg 13172 -# endif - -/* NameType value from RFC3546 */ -# define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC3546 */ -# define TLSEXT_STATUSTYPE_ocsp 1 - -/* ECPointFormat values from RFC4492 */ -# define TLSEXT_ECPOINTFORMAT_first 0 -# define TLSEXT_ECPOINTFORMAT_uncompressed 0 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 -# define TLSEXT_ECPOINTFORMAT_last 2 - -/* Signature and hash algorithms from RFC5246 */ -# define TLSEXT_signature_anonymous 0 -# define TLSEXT_signature_rsa 1 -# define TLSEXT_signature_dsa 2 -# define TLSEXT_signature_ecdsa 3 -# define TLSEXT_signature_gostr34102001 237 -# define TLSEXT_signature_gostr34102012_256 238 -# define TLSEXT_signature_gostr34102012_512 239 - -/* Total number of different signature algorithms */ -# define TLSEXT_signature_num 7 - -# define TLSEXT_hash_none 0 -# define TLSEXT_hash_md5 1 -# define TLSEXT_hash_sha1 2 -# define TLSEXT_hash_sha224 3 -# define TLSEXT_hash_sha256 4 -# define TLSEXT_hash_sha384 5 -# define TLSEXT_hash_sha512 6 -# define TLSEXT_hash_gostr3411 237 -# define TLSEXT_hash_gostr34112012_256 238 -# define TLSEXT_hash_gostr34112012_512 239 - -/* Total number of different digest algorithms */ - -# define TLSEXT_hash_num 10 - -/* Flag set for unrecognised algorithms */ -# define TLSEXT_nid_unknown 0x1000000 - -/* ECC curves */ - -# define TLSEXT_curve_P_256 23 -# define TLSEXT_curve_P_384 24 - -/* 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 - -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); - -int SSL_get_shared_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -__owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); - -# define SSL_set_tlsext_host_name(s,name) \ - SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\ - (void *)name) - -# define SSL_set_tlsext_debug_callback(ssl, cb) \ - SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,\ - (void (*)(void))cb) - -# define SSL_set_tlsext_debug_arg(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0,arg) - -# define SSL_get_tlsext_status_type(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# define SSL_set_tlsext_status_type(ssl, type) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_get_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_set_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_get_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_set_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) - -# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,arg) - -# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ - SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,\ - (void (*)(void))cb) - -# define SSL_TLSEXT_ERR_OK 0 -# define SSL_TLSEXT_ERR_ALERT_WARNING 1 -# define SSL_TLSEXT_ERR_ALERT_FATAL 2 -# define SSL_TLSEXT_ERR_NOACK 3 - -# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0,arg) - -# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_TLSEXT_TICKET_KEYS,keylen,keys) -# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_TICKET_KEYS,keylen,keys) - -# define SSL_CTX_get_tlsext_status_cb(ssl, cb) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0,(void *)cb) -# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ - SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,\ - (void (*)(void))cb) - -# define SSL_CTX_get_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) -# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) - -# define SSL_CTX_set_tlsext_status_type(ssl, type) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_CTX_get_tlsext_status_type(ssl) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ - SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ - (void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_DTLSEXT_HB_ENABLED 0x01 -# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 -# define SSL_get_dtlsext_heartbeat_pending(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ - SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ - SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ - SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS -# define SSL_TLSEXT_HB_ENABLED \ - SSL_DTLSEXT_HB_ENABLED -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ - SSL_DTLSEXT_HB_DONT_SEND_REQUESTS -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ - SSL_DTLSEXT_HB_DONT_RECV_REQUESTS -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_get_dtlsext_heartbeat_pending(ssl) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) -# endif -# endif - -/* PSK ciphersuites from 4279 */ -# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A -# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D -# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E -# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 -# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 -# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 - -/* PSK ciphersuites from 5487 */ -# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 -# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB -# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC -# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF -# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 -# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E - -/* AES ciphersuites from RFC3268 */ -# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 -# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 -# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 -# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B -# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C -# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B -# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C -# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 -# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 -# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 -# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 -# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A -# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C -# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D -# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E -# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F -# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 -# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 -# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 -# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 -# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 -# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 -# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 -# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 - -/* CCM ciphersuites from RFC6655 */ -# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C -# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F -# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 -# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 -# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 -# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 -# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 -# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB - -/* CCM ciphersuites from RFC7251 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF - -/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF - -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 -# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 -# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 - -# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 -# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 -# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A - -# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B -# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C -# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D -# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E -# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F - -# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 -# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 -# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 - -# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 -# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 -# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 -# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 -# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 - -/* SRP ciphersuites from RFC 5054 */ -# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A -# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B -# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C -# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F -# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 - -/* ECDH HMAC based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 - -/* ECDHE PSK ciphersuites from RFC5489 */ -# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 -# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 - -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B - -/* Camellia-CBC ciphersuites from RFC6367 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 - -# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 -# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B - -/* draft-ietf-tls-chacha20-poly1305-03 */ -# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 -# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 -# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA -# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB -# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC -# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD -# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE - -/* 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 - -/* 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_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_SIGN 238 -# define TLS_CT_GOST12_512_SIGN 239 - -/* - * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see - * comment there) - */ -# define TLS_CT_NUMBER 10 - -# 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 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 - -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST -/* - * extended master secret - */ -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif - -/* TLS Session Ticket extension struct */ -struct tls_session_ticket_ext_st { - unsigned short length; - void *data; -}; - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/ts.h b/openssl/include/openssl/ts.h deleted file mode 100644 index 5aa2ba9..0000000 --- a/openssl/include/openssl/ts.h +++ /dev/null @@ -1,559 +0,0 @@ -/* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TS_H -# define HEADER_TS_H - -# include - -# ifndef OPENSSL_NO_TS -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# include -# include - -typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; -typedef struct TS_req_st TS_REQ; -typedef struct TS_accuracy_st TS_ACCURACY; -typedef struct TS_tst_info_st TS_TST_INFO; - -/* Possible values for status. */ -# define TS_STATUS_GRANTED 0 -# define TS_STATUS_GRANTED_WITH_MODS 1 -# define TS_STATUS_REJECTION 2 -# define TS_STATUS_WAITING 3 -# define TS_STATUS_REVOCATION_WARNING 4 -# define TS_STATUS_REVOCATION_NOTIFICATION 5 - -/* Possible values for failure_info. */ -# define TS_INFO_BAD_ALG 0 -# define TS_INFO_BAD_REQUEST 2 -# define TS_INFO_BAD_DATA_FORMAT 5 -# define TS_INFO_TIME_NOT_AVAILABLE 14 -# define TS_INFO_UNACCEPTED_POLICY 15 -# define TS_INFO_UNACCEPTED_EXTENSION 16 -# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 -# define TS_INFO_SYSTEM_FAILURE 25 - - -typedef struct TS_status_info_st TS_STATUS_INFO; -typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; -typedef struct ESS_cert_id ESS_CERT_ID; -typedef struct ESS_signing_cert ESS_SIGNING_CERT; - -DEFINE_STACK_OF(ESS_CERT_ID) - -typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; -typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; - -DEFINE_STACK_OF(ESS_CERT_ID_V2) - -typedef struct TS_resp_st TS_RESP; - -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); - -#ifndef OPENSSL_NO_STDIO -TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); -#endif -TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); - -#ifndef OPENSSL_NO_STDIO -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); -#endif -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); - -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); - -#ifndef OPENSSL_NO_STDIO -TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); -#endif -TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); - -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); - -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); - -#ifndef OPENSSL_NO_STDIO -TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); -#endif -TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); - -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); -void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); -int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); -ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, - const unsigned char **pp, long length); -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); - -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); -void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); -int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); -ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, - const unsigned char **pp, - long length); -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); - -int TS_REQ_set_version(TS_REQ *a, long version); -long TS_REQ_get_version(const TS_REQ *a); - -int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); -const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); - -const STACK_OF(ASN1_UTF8STRING) * -TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); - -const ASN1_BIT_STRING * -TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *a); - -int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); - -int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); -X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); - -int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); -ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); - -int TS_REQ_set_policy_id(TS_REQ *a, const ASN1_OBJECT *policy); -ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); - -int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); - -int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); -int TS_REQ_get_cert_req(const TS_REQ *a); - -STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); -void TS_REQ_ext_free(TS_REQ *a); -int TS_REQ_get_ext_count(TS_REQ *a); -int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); -int TS_REQ_get_ext_by_OBJ(TS_REQ *a, const ASN1_OBJECT *obj, int lastpos); -int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); -X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); -X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); -int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); -void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); - -/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ - -int TS_REQ_print_bio(BIO *bio, TS_REQ *a); - -/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ - -int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); -TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); - -/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ -void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); -PKCS7 *TS_RESP_get_token(TS_RESP *a); -TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); - -int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); -long TS_TST_INFO_get_version(const TS_TST_INFO *a); - -int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); -ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); - -int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); - -int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); -const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); - -int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); -const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); - -int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); -TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); - -int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); -const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); - -int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); -const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); - -int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); -const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); - -int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); -int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); - -int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); - -int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); -GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); - -STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); -void TS_TST_INFO_ext_free(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); -int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, - int lastpos); -int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); -X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); -X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); -int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); -void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); - -/* - * Declarations related to response generation, defined in ts/ts_resp_sign.c. - */ - -/* Optional flags for response generation. */ - -/* Don't include the TSA name in response. */ -# define TS_TSA_NAME 0x01 - -/* Set ordering to true in response. */ -# define TS_ORDERING 0x02 - -/* - * Include the signer certificate and the other specified certificates in - * the ESS signing certificate attribute beside the PKCS7 signed data. - * Only the signer certificates is included by default. - */ -# define TS_ESS_CERT_ID_CHAIN 0x04 - -/* Forward declaration. */ -struct TS_resp_ctx; - -/* This must return a unique number less than 160 bits long. */ -typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); - -/* - * This must return the seconds and microseconds since Jan 1, 1970 in the sec - * and usec variables allocated by the caller. Return non-zero for success - * and zero for failure. - */ -typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, - long *usec); - -/* - * This must process the given extension. It can modify the TS_TST_INFO - * object of the context. Return values: !0 (processed), 0 (error, it must - * set the status info/failure info of the response). - */ -typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, - void *); - -typedef struct TS_resp_ctx TS_RESP_CTX; - -DEFINE_STACK_OF_CONST(EVP_MD) - -/* Creates a response context that can be used for generating responses. */ -TS_RESP_CTX *TS_RESP_CTX_new(void); -void TS_RESP_CTX_free(TS_RESP_CTX *ctx); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); - -int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, - const EVP_MD *signer_digest); -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); -BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); -unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, - unsigned char *hexstr, long len); -X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); -STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); - -/*- - * If ctx is NULL, it allocates and returns a new object, otherwise - * it returns ctx. It initialises all the members as follows: - * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) - * certs = NULL - * store = NULL - * policy = policy from the request or NULL if absent (in this case - * TS_VFY_POLICY is cleared from flags as well) - * md_alg = MD algorithm from request - * imprint, imprint_len = imprint from request - * data = NULL - * nonce, nonce_len = nonce from the request or NULL if absent (in this case - * TS_VFY_NONCE is cleared from flags as well) - * tsa_name = NULL - * Important: after calling this method TS_VFY_SIGNATURE should be added! - */ -TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); - -/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ - -int TS_RESP_print_bio(BIO *bio, TS_RESP *a); -int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); -int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); - -/* Common utility functions defined in ts/ts_lib.c */ - -int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); -int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); -int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); -int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); -int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); - -/* - * Function declarations for handling configuration options, defined in - * ts/ts_conf.c - */ - -X509 *TS_CONF_load_cert(const char *file); -STACK_OF(X509) *TS_CONF_load_certs(const char *file); -EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); -const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); -int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, - TS_RESP_CTX *ctx); -#ifndef OPENSSL_NO_ENGINE -int TS_CONF_set_crypto_device(CONF *conf, const char *section, - const char *device); -int TS_CONF_set_default_engine(const char *name); -#endif -int TS_CONF_set_signer_cert(CONF *conf, const char *section, - const char *cert, TS_RESP_CTX *ctx); -int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_key(CONF *conf, const char *section, - const char *key, const char *pass, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_digest(CONF *conf, const char *section, - const char *md, TS_RESP_CTX *ctx); -int TS_CONF_set_def_policy(CONF *conf, const char *section, - const char *policy, TS_RESP_CTX *ctx); -int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -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/openssl/include/openssl/tserr.h b/openssl/include/openssl/tserr.h deleted file mode 100644 index 5b9afa3..0000000 --- a/openssl/include/openssl/tserr.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TSERR_H -# define HEADER_TSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# include - -# ifndef OPENSSL_NO_TS - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_TS_strings(void); - -/* - * TS function codes. - */ -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_INVALID 151 -# define TS_F_TS_CONF_LOAD_CERT 153 -# define TS_F_TS_CONF_LOAD_CERTS 154 -# define TS_F_TS_CONF_LOAD_KEY 155 -# define TS_F_TS_CONF_LOOKUP_FAIL 152 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 - -/* - * 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/openssl/include/openssl/txt_db.h b/openssl/include/openssl/txt_db.h deleted file mode 100644 index 293a298..0000000 --- a/openssl/include/openssl/txt_db.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H - -# include -# include -# include -# include - -# define DB_ERROR_OK 0 -# define DB_ERROR_MALLOC 1 -# define DB_ERROR_INDEX_CLASH 2 -# define DB_ERROR_INDEX_OUT_OF_RANGE 3 -# define DB_ERROR_NO_INDEX 4 -# define DB_ERROR_INSERT_INDEX_CLASH 5 -# define DB_ERROR_WRONG_NUM_FIELDS 6 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef OPENSSL_STRING *OPENSSL_PSTRING; -DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) - -typedef struct txt_db_st { - int num_fields; - STACK_OF(OPENSSL_PSTRING) *data; - LHASH_OF(OPENSSL_STRING) **index; - int (**qual) (OPENSSL_STRING *); - long error; - long arg1; - long arg2; - OPENSSL_STRING *arg_row; -} TXT_DB; - -TXT_DB *TXT_DB_read(BIO *in, int num); -long TXT_DB_write(BIO *out, TXT_DB *db); -int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), - OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); -void TXT_DB_free(TXT_DB *db); -OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, - OPENSSL_STRING *value); -int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/openssl/include/openssl/ui.h b/openssl/include/openssl/ui.h deleted file mode 100644 index 9c6cf50..0000000 --- a/openssl/include/openssl/ui.h +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_UI_H -# define HEADER_UI_H - -# include - -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# include -# include -# include - -/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ -# if OPENSSL_API_COMPAT < 0x10200000L -# 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. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. - * The returned string shall always be allocated on the heap with - * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). - * - * If the ui_method doesn't contain a pointer to a user-defined prompt - * constructor, a default string is built, looking like this: - * - * "Enter {object_desc} for {object_name}:" - * - * So, if object_desc has the value "pass phrase" and object_name has - * the value "foo.key", the resulting string is: - * - * "Enter pass phrase for foo.key:" -*/ -char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); - -/* - * The following function is used to store a pointer to user-specific data. - * Any previous such pointer will be returned and replaced. - * - * For callback purposes, this function makes a lot more sense than using - * ex_data, since the latter requires that different parts of OpenSSL or - * applications share the same ex_data index. - * - * Note that the UI_OpenSSL() method completely ignores the user data. Other - * methods may not, however. - */ -void *UI_add_user_data(UI *ui, void *user_data); -/* - * 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(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; -DEFINE_STACK_OF(UI_STRING) - -/* - * The different types of strings that are currently supported. This is only - * needed by method authors. - */ -enum UI_string_types { - UIT_NONE = 0, - UIT_PROMPT, /* Prompt for a string */ - UIT_VERIFY, /* Prompt for a string and verify */ - UIT_BOOLEAN, /* Prompt for a yes/no response */ - UIT_INFO, /* Send info to the user */ - UIT_ERROR /* Send an error message to the user */ -}; - -/* Create and manipulate methods */ -UI_METHOD *UI_create_method(const char *name); -void UI_destroy_method(UI_METHOD *ui_method); -int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); -int UI_method_set_writer(UI_METHOD *method, - int (*writer) (UI *ui, UI_STRING *uis)); -int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); -int UI_method_set_reader(UI_METHOD *method, - int (*reader) (UI *ui, UI_STRING *uis)); -int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); -int UI_method_set_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 - *object_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/openssl/include/openssl/uierr.h b/openssl/include/openssl/uierr.h deleted file mode 100644 index badf29d..0000000 --- a/openssl/include/openssl/uierr.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_UIERR_H -# define HEADER_UIERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_UI_strings(void); - -/* - * UI function codes. - */ -# define UI_F_CLOSE_CONSOLE 115 -# define UI_F_ECHO_CONSOLE 116 -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_NOECHO_CONSOLE 117 -# define UI_F_OPEN_CONSOLE 114 -# define UI_F_UI_CONSTRUCT_PROMPT 121 -# define UI_F_UI_CREATE_METHOD 112 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_USER_DATA 118 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_GET_RESULT_LENGTH 119 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_PROCESS 113 -# define UI_F_UI_SET_RESULT 105 -# define UI_F_UI_SET_RESULT_EX 120 - -/* - * 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/openssl/include/openssl/whrlpool.h b/openssl/include/openssl/whrlpool.h deleted file mode 100644 index 12b070d..0000000 --- a/openssl/include/openssl/whrlpool.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H - -#include - -# ifndef OPENSSL_NO_WHIRLPOOL -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) - -typedef struct { - union { - unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; - /* double q is here to ensure 64-bit alignment */ - double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; - } H; - unsigned char data[WHIRLPOOL_BBLOCK / 8]; - unsigned int bitoff; - size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; -} WHIRLPOOL_CTX; - -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); - -# ifdef __cplusplus -} -# endif -# endif - -#endif diff --git a/openssl/include/openssl/x509.h b/openssl/include/openssl/x509.h deleted file mode 100644 index 1b95708..0000000 --- a/openssl/include/openssl/x509.h +++ /dev/null @@ -1,1050 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509_H -# define HEADER_X509_H - -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# endif - -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - - -/* 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 - -# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 -# define X509v3_KU_NON_REPUDIATION 0x0040 -# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 -# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 -# define X509v3_KU_KEY_AGREEMENT 0x0008 -# define X509v3_KU_KEY_CERT_SIGN 0x0004 -# define X509v3_KU_CRL_SIGN 0x0002 -# define X509v3_KU_ENCIPHER_ONLY 0x0001 -# define X509v3_KU_DECIPHER_ONLY 0x8000 -# define X509v3_KU_UNDEF 0xffff - -struct X509_algor_st { - ASN1_OBJECT *algorithm; - ASN1_TYPE *parameter; -} /* X509_ALGOR */ ; - -typedef STACK_OF(X509_ALGOR) X509_ALGORS; - -typedef struct X509_val_st { - ASN1_TIME *notBefore; - ASN1_TIME *notAfter; -} X509_VAL; - -typedef struct X509_sig_st X509_SIG; - -typedef struct X509_name_entry_st X509_NAME_ENTRY; - -DEFINE_STACK_OF(X509_NAME_ENTRY) - -DEFINE_STACK_OF(X509_NAME) - -# define X509_EX_V_NETSCAPE_HACK 0x8000 -# define X509_EX_V_INIT 0x0001 -typedef struct X509_extension_st X509_EXTENSION; - -typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DEFINE_STACK_OF(X509_EXTENSION) - -typedef struct x509_attributes_st X509_ATTRIBUTE; - -DEFINE_STACK_OF(X509_ATTRIBUTE) - -typedef struct X509_req_info_st X509_REQ_INFO; - -typedef struct X509_req_st X509_REQ; - -typedef struct x509_cert_aux_st X509_CERT_AUX; - -typedef struct x509_cinf_st X509_CINF; - -DEFINE_STACK_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DEFINE_STACK_OF(X509_TRUST) - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC (1U << 0) -# define X509_TRUST_DYNAMIC_NAME (1U << 1) -/* No compat trust if self-signed, preempts "DO_SS" */ -# define X509_TRUST_NO_SS_COMPAT (1U << 2) -/* Compat trust if no explicit accepted trust EKUs */ -# define X509_TRUST_DO_SS_COMPAT (1U << 3) -/* Accept "anyEKU" as a wildcard trust OID */ -# define X509_TRUST_OK_ANY_EKU (1U << 4) - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - -/* Flags for X509_print_ex() */ - -# define X509_FLAG_COMPAT 0 -# define X509_FLAG_NO_HEADER 1L -# define X509_FLAG_NO_VERSION (1L << 1) -# define X509_FLAG_NO_SERIAL (1L << 2) -# define X509_FLAG_NO_SIGNAME (1L << 3) -# define X509_FLAG_NO_ISSUER (1L << 4) -# define X509_FLAG_NO_VALIDITY (1L << 5) -# define X509_FLAG_NO_SUBJECT (1L << 6) -# define X509_FLAG_NO_PUBKEY (1L << 7) -# define X509_FLAG_NO_EXTENSIONS (1L << 8) -# define X509_FLAG_NO_SIGDUMP (1L << 9) -# define X509_FLAG_NO_AUX (1L << 10) -# define X509_FLAG_NO_ATTRIBUTES (1L << 11) -# define X509_FLAG_NO_IDS (1L << 12) - -/* Flags specific to X509_NAME_print_ex() */ - -/* The field separator information */ - -# define XN_FLAG_SEP_MASK (0xf << 16) - -# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ -# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ -# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ -# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ -# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ - -# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ - -/* How the field name is shown */ - -# define XN_FLAG_FN_MASK (0x3 << 21) - -# define XN_FLAG_FN_SN 0/* Object short name */ -# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ -# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ -# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ - -# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ - -/* - * This determines if we dump fields we don't recognise: RFC2253 requires - * this. - */ - -# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) - -# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 - * characters */ - -/* Complete set of RFC2253 flags */ - -# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ - XN_FLAG_SEP_COMMA_PLUS | \ - XN_FLAG_DN_REV | \ - XN_FLAG_FN_SN | \ - XN_FLAG_DUMP_UNKNOWN_FIELDS) - -/* readable oneline form */ - -# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ - ASN1_STRFLGS_ESC_QUOTE | \ - XN_FLAG_SEP_CPLUS_SPC | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_SN) - -/* readable multiline form */ - -# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ - ASN1_STRFLGS_ESC_MSB | \ - XN_FLAG_SEP_MULTILINE | \ - XN_FLAG_SPC_EQ | \ - XN_FLAG_FN_LN | \ - XN_FLAG_FN_ALIGN) - -DEFINE_STACK_OF(X509_REVOKED) - -typedef struct X509_crl_info_st X509_CRL_INFO; - -DEFINE_STACK_OF(X509_CRL) - -typedef struct private_key_st { - int version; - /* The PKCS#8 data types */ - X509_ALGOR *enc_algor; - ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ - /* When decrypted, the following will not be NULL */ - EVP_PKEY *dec_pkey; - /* used to encrypt and decrypt */ - int key_length; - char *key_data; - int key_free; /* true if we should auto free key_data */ - /* expanded version of 'enc_algor' */ - EVP_CIPHER_INFO cipher; -} X509_PKEY; - -typedef struct X509_info_st { - X509 *x509; - X509_CRL *crl; - X509_PKEY *x_pkey; - EVP_CIPHER_INFO enc_cipher; - int enc_len; - char *enc_data; -} X509_INFO; - -DEFINE_STACK_OF(X509_INFO) - -/* - * The next 2 structures and their 8 routines 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; - -#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, - ASN1_INTEGER *ser, - X509_NAME *issuer), - int (*crl_verify) (X509_CRL *crl, - EVP_PKEY *pk)); -void X509_CRL_METHOD_free(X509_CRL_METHOD *m); - -void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); -void *X509_CRL_get_meth_data(X509_CRL *crl); - -const char *X509_verify_cert_error_string(long n); - -int X509_verify(X509 *a, EVP_PKEY *r); - -int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); -int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); -int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); - -NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); -char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); -EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); -int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); - -int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); - -int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); -int X509_signature_print(BIO *bp, const X509_ALGOR *alg, - const ASN1_STRING *sig); - -int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -# endif -int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); -int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); -int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -# endif -int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); - -int X509_pubkey_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_digest(const X509 *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); -int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, - unsigned char *md, unsigned int *len); - -# ifndef OPENSSL_NO_STDIO -X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); -X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); -# endif - -X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); -X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); -X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); -# endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); -# endif -X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); -PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, - PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); -EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); - -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); -int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, - void *pval); -void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, - const void **ppval, const X509_ALGOR *algor); -void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); -int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); -int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); - -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); - -int X509_cmp_time(const ASN1_TIME *s, time_t *t); -int X509_cmp_current_time(const ASN1_TIME *s); -ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); -ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, - int offset_day, long offset_sec, time_t *t); -ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); - -const char *X509_get_default_cert_area(void); -const char *X509_get_default_cert_dir(void); -const char *X509_get_default_cert_file(void); -const char *X509_get_default_cert_dir_env(void); -const char *X509_get_default_cert_file_env(void); -const char *X509_get_default_private_dir(void); - -X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); -X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); - -DECLARE_ASN1_FUNCTIONS(X509_ALGOR) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) -DECLARE_ASN1_FUNCTIONS(X509_VAL) - -DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) - -int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); -int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); -long X509_get_pathlen(X509 *x); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); -# endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); -# endif - -DECLARE_ASN1_FUNCTIONS(X509_SIG) -void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, - const ASN1_OCTET_STRING **pdigest); -void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, - ASN1_OCTET_STRING **pdigest); - -DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) -DECLARE_ASN1_FUNCTIONS(X509_REQ) - -DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) -X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); - -DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) -DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) - -DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) - -DECLARE_ASN1_FUNCTIONS(X509_NAME) - -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(X509_CINF) - -DECLARE_ASN1_FUNCTIONS(X509) -DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) - -#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) -int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); - -int i2d_re_X509_tbs(X509 *x, unsigned char **pp); - -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); - -int X509_trusted(const X509 *x); -int X509_alias_set1(X509 *x, const unsigned char *name, int len); -int X509_keyid_set1(X509 *x, const unsigned char *id, int len); -unsigned char *X509_alias_get0(X509 *x, int *len); -unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); - -DECLARE_ASN1_FUNCTIONS(X509_REVOKED) -DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) -DECLARE_ASN1_FUNCTIONS(X509_CRL) - -int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); -int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); -int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); - -X509_PKEY *X509_PKEY_new(void); -void X509_PKEY_free(X509_PKEY *a); - -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) -DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) - -X509_INFO *X509_INFO_new(void); -void X509_INFO_free(X509_INFO *a); -char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); - -int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - -int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, - unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - -int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, - unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); -int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); - -long X509_get_version(const X509 *x); -int X509_set_version(X509 *x, long version); -int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); -ASN1_INTEGER *X509_get_serialNumber(X509 *x); -const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_issuer_name(const X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); -X509_NAME *X509_get_subject_name(const X509 *a); -const ASN1_TIME * X509_get0_notBefore(const X509 *x); -ASN1_TIME *X509_getm_notBefore(const X509 *x); -int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); -const ASN1_TIME *X509_get0_notAfter(const X509 *x); -ASN1_TIME *X509_getm_notAfter(const X509 *x); -int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); -int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); -int X509_up_ref(X509 *x); -int X509_get_signature_type(const X509 *x); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define X509_get_notBefore X509_getm_notBefore -# define X509_get_notAfter X509_getm_notAfter -# define X509_set_notBefore X509_set1_notBefore -# define X509_set_notAfter X509_set1_notAfter -#endif - - -/* - * This one is only used so that a binary form can output, as in - * i2d_X509_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); -int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); - -long X509_REQ_get_version(const X509_REQ *req); -int X509_REQ_set_version(X509_REQ *x, long version); -X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); -void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, - const X509_ALGOR **palg); -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(X509_REQ *req); -X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); -int X509_REQ_extension_nid(int nid); -int *X509_REQ_get_extension_nids(void); -void X509_REQ_set_extension_nids(int *nids); -STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); -int X509_REQ_get_attr_count(const X509_REQ *req); -int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); -int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); -X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); -int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); -int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_NID(X509_REQ *req, - int nid, int type, - const unsigned char *bytes, int len); -int X509_REQ_add1_attr_by_txt(X509_REQ *req, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); -int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); -int X509_CRL_sort(X509_CRL *crl); -int X509_CRL_up_ref(X509_CRL *crl); - -# if OPENSSL_API_COMPAT < 0x10100000L -# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate -# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate -#endif - -long X509_CRL_get_version(const X509_CRL *crl); -const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); -const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) -X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); -const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); -STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); -void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, - const X509_ALGOR **palg); -int X509_CRL_get_signature_nid(const X509_CRL *crl); -int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); - -const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); -int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); -const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); -int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); -const STACK_OF(X509_EXTENSION) * -X509_REVOKED_get0_extensions(const X509_REVOKED *r); - -X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, - EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); - -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); - -int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); -int X509_chain_check_suiteb(int *perror_depth, - X509 *x, STACK_OF(X509) *chain, - unsigned long flags); -int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); -STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); - -int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_and_serial_hash(X509 *a); - -int X509_issuer_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_issuer_name_hash(X509 *a); - -int X509_subject_name_cmp(const X509 *a, const X509 *b); -unsigned long X509_subject_name_hash(X509 *x); - -# ifndef OPENSSL_NO_MD5 -unsigned long X509_issuer_name_hash_old(X509 *a); -unsigned long X509_subject_name_hash_old(X509 *x); -# endif - -int X509_cmp(const X509 *a, const X509 *b); -int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); - -int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); -int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); -int X509_aux_print(BIO *out, X509 *x, int indent); -# ifndef OPENSSL_NO_STDIO -int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print_fp(FILE *bp, X509 *x); -int X509_CRL_print_fp(FILE *bp, X509_CRL *x); -int X509_REQ_print_fp(FILE *bp, X509_REQ *req); -int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, - unsigned long flags); -# endif - -int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); -int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, - unsigned long flags); -int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, - unsigned long cflag); -int X509_print(BIO *bp, X509 *x); -int X509_ocspid_print(BIO *bp, X509 *x); -int X509_CRL_print_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(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, - char *buf, int len); - -/* - * NOTE: you should be passing -1, not 0 as lastpos. The functions that use - * lastpos, search after that position on. - */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, - int lastpos); -X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); -X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); -int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, - int loc, int set); -int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len, int loc, - int set); -int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, - const unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, - const char *field, int type, - const unsigned char *bytes, - int len); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, - int type, - const unsigned char *bytes, - int len); -int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, - const unsigned char *bytes, int len, int loc, - int set); -X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, - int len); -int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); -int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, - const unsigned char *bytes, int len); -ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); -ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); -int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); - -int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, - size_t *pderlen); - -int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); -int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, - int nid, int lastpos); -int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, - const ASN1_OBJECT *obj, int lastpos); -int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, - int crit, int lastpos); -X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); -X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); -STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, - X509_EXTENSION *ex, int loc); - -int X509_get_ext_count(const X509 *x); -int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); -int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); -int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); -X509_EXTENSION *X509_get_ext(const X509 *x, int loc); -X509_EXTENSION *X509_delete_ext(X509 *x, int loc); -int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); -void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); -int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_CRL_get_ext_count(const X509_CRL *x); -int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); -int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, - int lastpos); -int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); -X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); -X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); -int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); -void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); -int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, - unsigned long flags); - -int X509_REVOKED_get_ext_count(const X509_REVOKED *x); -int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); -int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, - int lastpos); -int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, - int lastpos); -X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); -X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); -int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); -void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, - int *idx); -int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, - unsigned long flags); - -X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, - int nid, int crit, - ASN1_OCTET_STRING *data); -X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, - const ASN1_OBJECT *obj, int crit, - ASN1_OCTET_STRING *data); -int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); -int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); -int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); -ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); -ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); -int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); - -int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); -int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, - int lastpos); -int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, - const ASN1_OBJECT *obj, int lastpos); -X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); -X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, - X509_ATTRIBUTE *attr); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) - **x, const ASN1_OBJECT *obj, - int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) - **x, int nid, int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) - **x, const char *attrname, - int type, - const unsigned char *bytes, - int len); -void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, - const ASN1_OBJECT *obj, int lastpos, int type); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, - const ASN1_OBJECT *obj, - int atrtype, const void *data, - int len); -X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, - const char *atrname, int type, - const unsigned char *bytes, - int len); -int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); -int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, - const void *data, int len); -void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, - void *data); -int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); -ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); -ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); - -int EVP_PKEY_get_attr_count(const EVP_PKEY *key); -int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); -int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, - int lastpos); -X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); -X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); -int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); -int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, - const ASN1_OBJECT *obj, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, - int nid, int type, - const unsigned char *bytes, int len); -int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, - const char *attrname, int type, - const unsigned char *bytes, int len); - -int X509_verify_cert(X509_STORE_CTX *ctx); - -/* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); - -DECLARE_ASN1_FUNCTIONS(PBEPARAM) -DECLARE_ASN1_FUNCTIONS(PBE2PARAM) -DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) -#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); - -X509_ALGOR *PKCS5_pbe_set(int alg, int iter, - const unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen); -X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, - unsigned char *salt, int saltlen, - unsigned char *aiv, int prf_nid); - -#ifndef OPENSSL_NO_SCRYPT -X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, - const unsigned char *salt, int saltlen, - unsigned char *aiv, uint64_t N, uint64_t r, - uint64_t p); -#endif - -X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, - int prf_nid, int keylen); - -/* PKCS#8 utilities */ - -DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) - -EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); - -int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, - int version, int ptype, void *pval, - unsigned char *penc, int penclen); -int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); - -const STACK_OF(X509_ATTRIBUTE) * -PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); -int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, - const unsigned char *bytes, int len); - -int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, - int ptype, void *pval, - unsigned char *penc, int penclen); -int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, - const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - const char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(const X509_TRUST *xp); -char *X509_TRUST_get0_name(const X509_TRUST *xp); -int X509_TRUST_get_trust(const X509_TRUST *xp); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/x509_vfy.h b/openssl/include/openssl/x509_vfy.h deleted file mode 100644 index bfd4a97..0000000 --- a/openssl/include/openssl/x509_vfy.h +++ /dev/null @@ -1,631 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H - -/* - * Protect against recursion, x509.h and x509_vfy.h each include the other. - */ -# ifndef HEADER_X509_H -# include -# endif - -# include -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/*- -SSL_CTX -> X509_STORE - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -> X509_LOOKUP - ->X509_LOOKUP_METHOD - -SSL -> X509_STORE_CTX - ->X509_STORE - -The X509_STORE holds the tables etc for verification stuff. -A X509_STORE_CTX is used while validating a single certificate. -The X509_STORE has X509_LOOKUPs for looking up certs. -The X509_STORE then calls a function to actually verify the -certificate chain. -*/ - -typedef enum { - X509_LU_NONE = 0, - X509_LU_X509, X509_LU_CRL -} X509_LOOKUP_TYPE; - -#if OPENSSL_API_COMPAT < 0x10100000L -#define X509_LU_RETRY -1 -#define X509_LU_FAIL 0 -#endif - -DEFINE_STACK_OF(X509_LOOKUP) -DEFINE_STACK_OF(X509_OBJECT) -DEFINE_STACK_OF(X509_VERIFY_PARAM) - -int X509_STORE_set_depth(X509_STORE *store, int depth); - -typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); -typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); -typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, - X509_STORE_CTX *ctx, X509 *x); -typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, - X509 *x, X509 *issuer); -typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); -typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, - X509_CRL **crl, X509 *x); -typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); -typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, - X509_CRL *crl, X509 *x); -typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); -typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); - - -void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); - -# define X509_STORE_CTX_set_app_data(ctx,data) \ - X509_STORE_CTX_set_ex_data(ctx,0,data) -# define X509_STORE_CTX_get_app_data(ctx) \ - X509_STORE_CTX_get_ex_data(ctx,0) - -# define X509_L_FILE_LOAD 1 -# define X509_L_ADD_DIR 2 - -# define X509_LOOKUP_load_file(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) - -# define X509_LOOKUP_add_dir(x,name,type) \ - X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) - -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 -# define X509_V_ERR_UNNESTED_RESOURCE 46 -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -/* The application is not happy */ -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 -/* Another issuer check debug option */ -# define X509_V_ERR_PATH_LOOP 55 -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 -/* DANE TLSA errors */ -# define X509_V_ERR_DANE_NO_MATCH 65 -/* security level errors */ -# define X509_V_ERR_EE_KEY_TOO_SMALL 66 -# define X509_V_ERR_CA_KEY_TOO_SMALL 67 -# define X509_V_ERR_CA_MD_TOO_WEAK 68 -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 69 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 70 -/* Certificate transparency */ -# define X509_V_ERR_NO_VALID_SCTS 71 - -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 -/* 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_SIGNATURE_ALGORITHM_MISMATCH 76 -# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 77 -# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78 - -/* Certificate verify flags */ - -# if OPENSSL_API_COMPAT < 0x10100000L -# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ -# endif -/* Use check time instead of current time */ -# define X509_V_FLAG_USE_CHECK_TIME 0x2 -/* Lookup CRLs */ -# define X509_V_FLAG_CRL_CHECK 0x4 -/* Lookup CRLs for whole chain */ -# define X509_V_FLAG_CRL_CHECK_ALL 0x8 -/* Ignore unhandled critical extensions */ -# define X509_V_FLAG_IGNORE_CRITICAL 0x10 -/* Disable workarounds for broken certificates */ -# define X509_V_FLAG_X509_STRICT 0x20 -/* Enable proxy certificate validation */ -# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 -/* Enable policy checking */ -# define X509_V_FLAG_POLICY_CHECK 0x80 -/* Policy variable require-explicit-policy */ -# define X509_V_FLAG_EXPLICIT_POLICY 0x100 -/* Policy variable inhibit-any-policy */ -# define X509_V_FLAG_INHIBIT_ANY 0x200 -/* Policy variable inhibit-policy-mapping */ -# define X509_V_FLAG_INHIBIT_MAP 0x400 -/* Notify callback that policy is OK */ -# define X509_V_FLAG_NOTIFY_POLICY 0x800 -/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ -# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 -/* Delta CRL support */ -# define X509_V_FLAG_USE_DELTAS 0x2000 -/* Check self-signed CA signature */ -# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 -/* Use trusted store first */ -# define X509_V_FLAG_TRUSTED_FIRST 0x8000 -/* Suite B 128 bit only mode: not normally used */ -# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 -/* Suite B 192 bit only mode */ -# define X509_V_FLAG_SUITEB_192_LOS 0x20000 -/* Suite B 128 bit mode allowing 192 bit algorithms */ -# define X509_V_FLAG_SUITEB_128_LOS 0x30000 -/* Allow partial chains if at least one certificate is in trusted store */ -# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 -/* - * If the initial chain is not trusted, do not attempt to build an alternative - * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag - * will force the behaviour to match that of previous versions. - */ -# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 -/* Do not check certificate/CRL validity against current time */ -# define X509_V_FLAG_NO_CHECK_TIME 0x200000 - -# define X509_VP_FLAG_DEFAULT 0x1 -# define X509_VP_FLAG_OVERWRITE 0x2 -# define X509_VP_FLAG_RESET_FLAGS 0x4 -# define X509_VP_FLAG_LOCKED 0x8 -# define X509_VP_FLAG_ONCE 0x10 - -/* Internal use: mask of policy related options */ -# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ - | X509_V_FLAG_EXPLICIT_POLICY \ - | X509_V_FLAG_INHIBIT_ANY \ - | X509_V_FLAG_INHIBIT_MAP) - -int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, - X509_LOOKUP_TYPE type, - X509_NAME *name); -X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, - X509_OBJECT *x); -int X509_OBJECT_up_ref_count(X509_OBJECT *a); -X509_OBJECT *X509_OBJECT_new(void); -void X509_OBJECT_free(X509_OBJECT *a); -X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); -X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); -int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); -X509_CRL *X509_OBJECT_get0_X509_CRL(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 *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); -int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); - -void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); -#define X509_STORE_set_verify_func(ctx, func) \ - X509_STORE_set_verify((ctx),(func)) -void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, - X509_STORE_CTX_verify_fn verify); -X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, - X509_STORE_CTX_verify_cb verify_cb); -# define X509_STORE_set_verify_cb_func(ctx,func) \ - X509_STORE_set_verify_cb((ctx),(func)) -X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, - X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, - X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, - X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, - X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, - X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, - X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, - X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, - X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, - X509_STORE_CTX_lookup_crls_fn lookup_crls); -#define X509_STORE_set_lookup_crls_cb(ctx, func) \ - X509_STORE_set_lookup_crls((ctx), (func)) -X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, - X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); - -#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) -int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); - -X509_STORE_CTX *X509_STORE_CTX_new(void); - -int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - -void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); -void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); -void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); - -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); -STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); -void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, - X509_STORE_CTX_verify_cb verify); -X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); -X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); -X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); - -#if OPENSSL_API_COMPAT < 0x10100000L -# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain -# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted -# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack -# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject -# define X509_STORE_get1_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 *v, X509_LOOKUP_METHOD *m); -X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); -X509_LOOKUP_METHOD *X509_LOOKUP_file(void); - -typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, - long argl, char **ret); -typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, - X509_LOOKUP_TYPE type, - X509_NAME *name, - X509_OBJECT *ret); -typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, - X509_LOOKUP_TYPE type, - X509_NAME *name, - 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 *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); - -int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); -X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, - X509_LOOKUP_TYPE type, - X509_NAME *name); - -int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, - long argl, char **ret); - -int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); -int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); - -X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); -void X509_LOOKUP_free(X509_LOOKUP *ctx); -int X509_LOOKUP_init(X509_LOOKUP *ctx); -int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); -int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, ASN1_INTEGER *serial, - X509_OBJECT *ret); -int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - const unsigned char *bytes, int len, - X509_OBJECT *ret); -int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - const char *str, int len, X509_OBJECT *ret); -int X509_LOOKUP_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_locations(X509_STORE *ctx, - const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); - -#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) -int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); -void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); -int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); -int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); -int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, - int purpose, int trust); -void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); -void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, - time_t t); - -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); - -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); -int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); - -/* - * Bridge opacity barrier between libcrypt and libssl, also needed to support - * offline testing in test/danetest.c - */ -void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); -#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) - -/* X509_VERIFY_PARAM functions */ - -X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); -void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, - const X509_VERIFY_PARAM *from); -int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); -int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, - unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); -int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); -void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); -void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); -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); - -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(X509_VERIFY_PARAM *); -void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); -int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, - const char *email, size_t emaillen); -int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, - const unsigned char *ip, size_t iplen); -int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, - const char *ipasc); - -int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); -const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); - -int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); -int X509_VERIFY_PARAM_get_count(void); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); -const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); -void X509_VERIFY_PARAM_table_cleanup(void); - -/* Non positive return values are errors */ -#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ -#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ -#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ - -/* - * Positive return values form a bit mask, all but the first are internal to - * the library and don't appear in results from X509_policy_check(). - */ -#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ -#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ -#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ - -int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, - STACK_OF(X509) *certs, - STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); - -void X509_policy_tree_free(X509_POLICY_TREE *tree); - -int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); -X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, - int i); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); - -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); - -int X509_policy_level_node_count(X509_POLICY_LEVEL *level); - -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, - int i); - -const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); - -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/openssl/include/openssl/x509err.h b/openssl/include/openssl/x509err.h deleted file mode 100644 index 5f907ef..0000000 --- a/openssl/include/openssl/x509err.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509ERR_H -# define HEADER_X509ERR_H - -# include - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509_strings(void); - -/* - * X509 function codes. - */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BUILD_CHAIN 106 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 149 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DANE_I2D 107 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_I2D_X509_AUX 151 -# define X509_F_LOOKUP_CERTS_SK 152 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_NEW_DIR 153 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_METHOD_NEW 154 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_LOOKUP_METH_NEW 160 -# define X509_F_X509_LOOKUP_NEW 155 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_CANON 156 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_OBJECT_NEW 150 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_DECODE 148 -# define X509_F_X509_PUBKEY_GET 161 -# define X509_F_X509_PUBKEY_GET0 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_ADD_LOOKUP 157 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_STORE_NEW 158 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 -# define X509_F_X509_VERIFY_PARAM_NEW 159 - -/* - * 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_CERT_ALREADY_IN_HASH_TABLE 101 -# define X509_R_CRL_ALREADY_DELTA 127 -# define X509_R_CRL_VERIFY_FAILURE 131 -# define X509_R_IDP_MISMATCH 128 -# define X509_R_INVALID_ATTRIBUTES 138 -# define X509_R_INVALID_DIRECTORY 113 -# define X509_R_INVALID_FIELD_NAME 119 -# define X509_R_INVALID_TRUST 123 -# define X509_R_ISSUER_MISMATCH 129 -# define X509_R_KEY_TYPE_MISMATCH 115 -# define X509_R_KEY_VALUES_MISMATCH 116 -# define X509_R_LOADING_CERT_DIR 103 -# define X509_R_LOADING_DEFAULTS 104 -# define X509_R_METHOD_NOT_SUPPORTED 124 -# define X509_R_NAME_TOO_LONG 134 -# define X509_R_NEWER_CRL_NOT_NEWER 132 -# define X509_R_NO_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_TRUST_ID 120 -# define X509_R_UNSUPPORTED_ALGORITHM 111 -# define X509_R_WRONG_LOOKUP_TYPE 112 -# define X509_R_WRONG_TYPE 122 - -#endif diff --git a/openssl/include/openssl/x509v3.h b/openssl/include/openssl/x509v3.h deleted file mode 100644 index a30a109..0000000 --- a/openssl/include/openssl/x509v3.h +++ /dev/null @@ -1,937 +0,0 @@ -/* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Forward reference */ -struct v3_ext_method; -struct v3_ext_ctx; - -/* Useful typedefs */ - -typedef void *(*X509V3_EXT_NEW)(void); -typedef void (*X509V3_EXT_FREE) (void *); -typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); -typedef STACK_OF(CONF_VALUE) * - (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, - STACK_OF(CONF_VALUE) *extlist); -typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, - STACK_OF(CONF_VALUE) *values); -typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, - void *ext); -typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); -typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, - BIO *out, int indent); -typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, - struct v3_ext_ctx *ctx, const char *str); - -/* V3 extension structure */ - -struct v3_ext_method { - int ext_nid; - int ext_flags; -/* If this is set the following four fields are ignored */ - ASN1_ITEM_EXP *it; -/* Old style ASN1 calls */ - X509V3_EXT_NEW ext_new; - X509V3_EXT_FREE ext_free; - X509V3_EXT_D2I d2i; - X509V3_EXT_I2D i2d; -/* The following pair is used for string extensions */ - X509V3_EXT_I2S i2s; - X509V3_EXT_S2I s2i; -/* The following pair is used for multi-valued extensions */ - X509V3_EXT_I2V i2v; - X509V3_EXT_V2I v2i; -/* The following are used for raw extensions */ - X509V3_EXT_I2R i2r; - X509V3_EXT_R2I r2i; - void *usr_data; /* Any extension specific data */ -}; - -typedef struct X509V3_CONF_METHOD_st { - char *(*get_string) (void *db, const char *section, const char *value); - STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); - void (*free_string) (void *db, char *string); - void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); -} X509V3_CONF_METHOD; - -/* Context specific info */ -struct v3_ext_ctx { -# define CTX_TEST 0x1 -# define X509V3_CTX_REPLACE 0x2 - int flags; - X509 *issuer_cert; - X509 *subject_cert; - X509_REQ *subject_req; - X509_CRL *crl; - X509V3_CONF_METHOD *db_meth; - void *db; -/* Maybe more here */ -}; - -typedef struct v3_ext_method X509V3_EXT_METHOD; - -DEFINE_STACK_OF(X509V3_EXT_METHOD) - -/* ext_flags values */ -# define X509V3_EXT_DYNAMIC 0x1 -# define X509V3_EXT_CTX_DEP 0x2 -# define X509V3_EXT_MULTILINE 0x4 - -typedef BIT_STRING_BITNAME ENUMERATED_NAMES; - -typedef struct BASIC_CONSTRAINTS_st { - int ca; - ASN1_INTEGER *pathlen; -} BASIC_CONSTRAINTS; - -typedef struct PKEY_USAGE_PERIOD_st { - ASN1_GENERALIZEDTIME *notBefore; - ASN1_GENERALIZEDTIME *notAfter; -} PKEY_USAGE_PERIOD; - -typedef struct otherName_st { - ASN1_OBJECT *type_id; - ASN1_TYPE *value; -} OTHERNAME; - -typedef struct EDIPartyName_st { - ASN1_STRING *nameAssigner; - ASN1_STRING *partyName; -} EDIPARTYNAME; - -typedef struct GENERAL_NAME_st { -# define GEN_OTHERNAME 0 -# define GEN_EMAIL 1 -# define GEN_DNS 2 -# define GEN_X400 3 -# define GEN_DIRNAME 4 -# define GEN_EDIPARTY 5 -# define GEN_URI 6 -# define GEN_IPADD 7 -# define GEN_RID 8 - int type; - union { - char *ptr; - OTHERNAME *otherName; /* otherName */ - ASN1_IA5STRING *rfc822Name; - ASN1_IA5STRING *dNSName; - ASN1_TYPE *x400Address; - X509_NAME *directoryName; - EDIPARTYNAME *ediPartyName; - ASN1_IA5STRING *uniformResourceIdentifier; - ASN1_OCTET_STRING *iPAddress; - ASN1_OBJECT *registeredID; - /* Old names */ - ASN1_OCTET_STRING *ip; /* iPAddress */ - X509_NAME *dirn; /* dirn */ - ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, - * uniformResourceIdentifier */ - ASN1_OBJECT *rid; /* registeredID */ - ASN1_TYPE *other; /* x400Address */ - } d; -} GENERAL_NAME; - -typedef struct ACCESS_DESCRIPTION_st { - ASN1_OBJECT *method; - GENERAL_NAME *location; -} ACCESS_DESCRIPTION; - -typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - -typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - -typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; - -DEFINE_STACK_OF(GENERAL_NAME) -typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; -DEFINE_STACK_OF(GENERAL_NAMES) - -DEFINE_STACK_OF(ACCESS_DESCRIPTION) - -typedef struct DIST_POINT_NAME_st { - int type; - union { - GENERAL_NAMES *fullname; - STACK_OF(X509_NAME_ENTRY) *relativename; - } name; -/* If relativename then this contains the full distribution point name */ - X509_NAME *dpname; -} DIST_POINT_NAME; -/* All existing reasons */ -# define CRLDP_ALL_REASONS 0x807f - -# define CRL_REASON_NONE -1 -# define CRL_REASON_UNSPECIFIED 0 -# define CRL_REASON_KEY_COMPROMISE 1 -# define CRL_REASON_CA_COMPROMISE 2 -# define CRL_REASON_AFFILIATION_CHANGED 3 -# define CRL_REASON_SUPERSEDED 4 -# define CRL_REASON_CESSATION_OF_OPERATION 5 -# define CRL_REASON_CERTIFICATE_HOLD 6 -# define CRL_REASON_REMOVE_FROM_CRL 8 -# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 -# define CRL_REASON_AA_COMPROMISE 10 - -struct DIST_POINT_st { - DIST_POINT_NAME *distpoint; - ASN1_BIT_STRING *reasons; - GENERAL_NAMES *CRLissuer; - int dp_reasons; -}; - -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; - -DEFINE_STACK_OF(DIST_POINT) - -struct AUTHORITY_KEYID_st { - ASN1_OCTET_STRING *keyid; - GENERAL_NAMES *issuer; - ASN1_INTEGER *serial; -}; - -/* Strong extranet structures */ - -typedef struct SXNET_ID_st { - ASN1_INTEGER *zone; - ASN1_OCTET_STRING *user; -} SXNETID; - -DEFINE_STACK_OF(SXNETID) - -typedef struct SXNET_st { - ASN1_INTEGER *version; - STACK_OF(SXNETID) *ids; -} SXNET; - -typedef struct NOTICEREF_st { - ASN1_STRING *organization; - STACK_OF(ASN1_INTEGER) *noticenos; -} NOTICEREF; - -typedef struct USERNOTICE_st { - NOTICEREF *noticeref; - ASN1_STRING *exptext; -} USERNOTICE; - -typedef struct POLICYQUALINFO_st { - ASN1_OBJECT *pqualid; - union { - ASN1_IA5STRING *cpsuri; - USERNOTICE *usernotice; - ASN1_TYPE *other; - } d; -} POLICYQUALINFO; - -DEFINE_STACK_OF(POLICYQUALINFO) - -typedef struct POLICYINFO_st { - ASN1_OBJECT *policyid; - STACK_OF(POLICYQUALINFO) *qualifiers; -} POLICYINFO; - -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; - -DEFINE_STACK_OF(POLICYINFO) - -typedef struct POLICY_MAPPING_st { - ASN1_OBJECT *issuerDomainPolicy; - ASN1_OBJECT *subjectDomainPolicy; -} POLICY_MAPPING; - -DEFINE_STACK_OF(POLICY_MAPPING) - -typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; - -typedef struct GENERAL_SUBTREE_st { - GENERAL_NAME *base; - ASN1_INTEGER *minimum; - ASN1_INTEGER *maximum; -} GENERAL_SUBTREE; - -DEFINE_STACK_OF(GENERAL_SUBTREE) - -struct NAME_CONSTRAINTS_st { - STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; - STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; -}; - -typedef struct POLICY_CONSTRAINTS_st { - ASN1_INTEGER *requireExplicitPolicy; - ASN1_INTEGER *inhibitPolicyMapping; -} POLICY_CONSTRAINTS; - -/* Proxy certificate structures, see RFC 3820 */ -typedef struct PROXY_POLICY_st { - ASN1_OBJECT *policyLanguage; - ASN1_OCTET_STRING *policy; -} PROXY_POLICY; - -typedef struct PROXY_CERT_INFO_EXTENSION_st { - ASN1_INTEGER *pcPathLengthConstraint; - PROXY_POLICY *proxyPolicy; -} PROXY_CERT_INFO_EXTENSION; - -DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) -DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) - -struct ISSUING_DIST_POINT_st { - DIST_POINT_NAME *distpoint; - int onlyuser; - int onlyCA; - ASN1_BIT_STRING *onlysomereasons; - int indirectCRL; - int onlyattr; -}; - -/* Values in idp_flags field */ -/* IDP present */ -# define IDP_PRESENT 0x1 -/* IDP values inconsistent */ -# define IDP_INVALID 0x2 -/* onlyuser true */ -# define IDP_ONLYUSER 0x4 -/* onlyCA true */ -# define IDP_ONLYCA 0x8 -/* onlyattr true */ -# define IDP_ONLYATTR 0x10 -/* indirectCRL true */ -# define IDP_INDIRECT 0x20 -/* onlysomereasons present */ -# define IDP_REASONS 0x40 - -# define X509V3_conf_err(val) ERR_add_error_data(6, \ - "section:", (val)->section, \ - ",name:", (val)->name, ",value:", (val)->value) - -# define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) -# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; - -# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ - 0,0,0,0, \ - 0,0, \ - (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ - (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ - NULL, NULL, \ - table} - -# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ - 0,0,0,0, \ - (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ - (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ - 0,0,0,0, \ - NULL} - -# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - -/* X509_PURPOSE stuff */ - -# define EXFLAG_BCONS 0x1 -# define EXFLAG_KUSAGE 0x2 -# define EXFLAG_XKUSAGE 0x4 -# define EXFLAG_NSCERT 0x8 - -# define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 -# define EXFLAG_V1 0x40 -# define EXFLAG_INVALID 0x80 -/* 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 -/* Self signed */ -# define EXFLAG_SS 0x2000 - -# define KU_DIGITAL_SIGNATURE 0x0080 -# define KU_NON_REPUDIATION 0x0040 -# define KU_KEY_ENCIPHERMENT 0x0020 -# define KU_DATA_ENCIPHERMENT 0x0010 -# define KU_KEY_AGREEMENT 0x0008 -# define KU_KEY_CERT_SIGN 0x0004 -# define KU_CRL_SIGN 0x0002 -# define KU_ENCIPHER_ONLY 0x0001 -# define KU_DECIPHER_ONLY 0x8000 - -# define NS_SSL_CLIENT 0x80 -# define NS_SSL_SERVER 0x40 -# define NS_SMIME 0x20 -# define NS_OBJSIGN 0x10 -# define NS_SSL_CA 0x04 -# define NS_SMIME_CA 0x02 -# define NS_OBJSIGN_CA 0x01 -# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) - -# define XKU_SSL_SERVER 0x1 -# define XKU_SSL_CLIENT 0x2 -# define XKU_SMIME 0x4 -# define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 -# define XKU_OCSP_SIGN 0x20 -# define XKU_TIMESTAMP 0x40 -# define XKU_DVCS 0x80 -# define XKU_ANYEKU 0x100 - -# define X509_PURPOSE_DYNAMIC 0x1 -# define X509_PURPOSE_DYNAMIC_NAME 0x2 - -typedef struct x509_purpose_st { - int purpose; - int trust; /* Default trust ID */ - int flags; - int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); - char *name; - char *sname; - void *usr_data; -} X509_PURPOSE; - -# define X509_PURPOSE_SSL_CLIENT 1 -# define X509_PURPOSE_SSL_SERVER 2 -# define X509_PURPOSE_NS_SSL_SERVER 3 -# define X509_PURPOSE_SMIME_SIGN 4 -# define X509_PURPOSE_SMIME_ENCRYPT 5 -# define X509_PURPOSE_CRL_SIGN 6 -# define X509_PURPOSE_ANY 7 -# define X509_PURPOSE_OCSP_HELPER 8 -# define X509_PURPOSE_TIMESTAMP_SIGN 9 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 9 - -/* Flags for X509V3_EXT_print() */ - -# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) -/* Return error for unknown extensions */ -# define X509V3_EXT_DEFAULT 0 -/* Print error for unknown extensions */ -# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) -/* ASN1 parse unknown extensions */ -# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) -/* BIO_dump unknown extensions */ -# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) - -/* Flags for X509V3_add1_i2d */ - -# define X509V3_ADD_OP_MASK 0xfL -# define X509V3_ADD_DEFAULT 0L -# define X509V3_ADD_APPEND 1L -# define X509V3_ADD_REPLACE 2L -# define X509V3_ADD_REPLACE_EXISTING 3L -# define X509V3_ADD_KEEP_EXISTING 4L -# define X509V3_ADD_DELETE 5L -# define X509V3_ADD_SILENT 0x10 - -DEFINE_STACK_OF(X509_PURPOSE) - -DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) - -DECLARE_ASN1_FUNCTIONS(SXNET) -DECLARE_ASN1_FUNCTIONS(SXNETID) - -int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); -int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, - int userlen); -int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, - int userlen); - -ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); -ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); -ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); - -DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) - -DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); -int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); - -ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, - STACK_OF(CONF_VALUE) *nval); -STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, - ASN1_BIT_STRING *bits, - STACK_OF(CONF_VALUE) *extlist); -char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); -ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, const char *str); - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, - GENERAL_NAME *gen, - STACK_OF(CONF_VALUE) *ret); -int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); - -DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) - -STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, - GENERAL_NAMES *gen, - STACK_OF(CONF_VALUE) *extlist); -GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); - -DECLARE_ASN1_FUNCTIONS(OTHERNAME) -DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) -int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); -void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); -void *GENERAL_NAME_get0_value(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, X509_NAME *iname); - -int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); -int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); - -DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) -DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) - -DECLARE_ASN1_ITEM(POLICY_MAPPING) -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) -DECLARE_ASN1_ITEM(POLICY_MAPPINGS) - -DECLARE_ASN1_ITEM(GENERAL_SUBTREE) -DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) - -DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) -DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) - -DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) -DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) - -GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, int gen_type, - const char *value, int is_nc); - -# ifdef HEADER_CONF_H -GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf); -GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, - const X509V3_EXT_METHOD *method, - X509V3_CTX *ctx, CONF_VALUE *cnf, - int is_nc); -void X509V3_conf_free(CONF_VALUE *val); - -X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, - const char *value); -X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, - const char *value); -int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, - STACK_OF(X509_EXTENSION) **sk); -int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, - X509 *cert); -int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, - X509_REQ *req); -int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, - X509_CRL *crl); - -X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, - X509V3_CTX *ctx, int ext_nid, - const char *value); -X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *name, const char *value); -int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *section, X509 *cert); -int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *section, X509_REQ *req); -int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, - const char *section, X509_CRL *crl); - -int X509V3_add_value_bool_nf(const char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); -int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); -void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); -void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); -# endif - -char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); -STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); -void X509V3_string_free(X509V3_CTX *ctx, char *str); -void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); -void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, - X509_REQ *req, X509_CRL *crl, int flags); - -int X509V3_add_value(const char *name, const char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_uchar(const char *name, const unsigned char *value, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_bool(const char *name, int asn1_bool, - STACK_OF(CONF_VALUE) **extlist); -int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, - STACK_OF(CONF_VALUE) **extlist); -char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); -ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); -char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); -char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, - const ASN1_ENUMERATED *aint); -int X509V3_EXT_add(X509V3_EXT_METHOD *ext); -int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); -int X509V3_EXT_add_alias(int nid_to, int nid_from); -void X509V3_EXT_cleanup(void); - -const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); -const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); -int X509V3_add_standard_extensions(void); -STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); -void *X509V3_EXT_d2i(X509_EXTENSION *ext); -void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, - int *idx); - -X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); -int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, - int crit, unsigned long flags); - -#if OPENSSL_API_COMPAT < 0x10100000L -/* The new declarations are in crypto.h, but the old ones were here. */ -# define hex_to_string OPENSSL_buf2hexstr -# define string_to_hex OPENSSL_hexstr2buf -#endif - -void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, - int ml); -int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, - int indent); -#ifndef OPENSSL_NO_STDIO -int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); -#endif -int X509V3_extensions_print(BIO *out, const char *title, - const STACK_OF(X509_EXTENSION) *exts, - unsigned long flag, int indent); - -int X509_check_ca(X509 *x); -int X509_check_purpose(X509 *x, int id, int ca); -int X509_supported_extension(X509_EXTENSION *ex); -int X509_PURPOSE_set(int *p, int purpose); -int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); -void X509_set_proxy_flag(X509 *x); -void X509_set_proxy_pathlen(X509 *x, long l); -long X509_get_proxy_pathlen(X509 *x); - -uint32_t X509_get_extension_flags(X509 *x); -uint32_t X509_get_key_usage(X509 *x); -uint32_t X509_get_extended_key_usage(X509 *x); -const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); -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); -X509_PURPOSE *X509_PURPOSE_get0(int idx); -int X509_PURPOSE_get_by_sname(const char *sname); -int X509_PURPOSE_get_by_id(int id); -int X509_PURPOSE_add(int id, int trust, int flags, - int (*ck) (const X509_PURPOSE *, const X509 *, int), - const char *name, const char *sname, void *arg); -char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); -char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); -int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); -void X509_PURPOSE_cleanup(void); -int X509_PURPOSE_get_id(const X509_PURPOSE *); - -STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); -STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); -void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); -STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); -/* Flags for X509_check_* functions */ - -/* - * Always check subject name for host match even if subject alt names present - */ -# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 -/* Disable wildcard matching for dnsName fields and common name. */ -# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 -/* Wildcards must not match a partial label. */ -# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 -/* Allow (non-partial) wildcards to match multiple labels. */ -# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 -/* Constraint verifier subdomain patterns to match a single labels. */ -# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 -/* Never check the subject CN */ -# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 -/* - * Match reference identifiers starting with "." to any sub-domain. - * This is a non-public flag, turned on implicitly when the subject - * reference identity is a DNS name. - */ -# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 - -int X509_check_host(X509 *x, const char *chk, size_t chklen, - unsigned int flags, char **peername); -int X509_check_email(X509 *x, const char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, - unsigned int flags); -int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); - -ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); -ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); -int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, - unsigned long chtype); - -void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DEFINE_STACK_OF(X509_POLICY_NODE) - -#ifndef OPENSSL_NO_RFC3779 -typedef struct ASRange_st { - ASN1_INTEGER *min, *max; -} ASRange; - -# define ASIdOrRange_id 0 -# define ASIdOrRange_range 1 - -typedef struct ASIdOrRange_st { - int type; - union { - ASN1_INTEGER *id; - ASRange *range; - } u; -} ASIdOrRange; - -typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DEFINE_STACK_OF(ASIdOrRange) - -# define ASIdentifierChoice_inherit 0 -# define ASIdentifierChoice_asIdsOrRanges 1 - -typedef struct ASIdentifierChoice_st { - int type; - union { - ASN1_NULL *inherit; - ASIdOrRanges *asIdsOrRanges; - } u; -} ASIdentifierChoice; - -typedef struct ASIdentifiers_st { - ASIdentifierChoice *asnum, *rdi; -} ASIdentifiers; - -DECLARE_ASN1_FUNCTIONS(ASRange) -DECLARE_ASN1_FUNCTIONS(ASIdOrRange) -DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) -DECLARE_ASN1_FUNCTIONS(ASIdentifiers) - -typedef struct IPAddressRange_st { - ASN1_BIT_STRING *min, *max; -} IPAddressRange; - -# define IPAddressOrRange_addressPrefix 0 -# define IPAddressOrRange_addressRange 1 - -typedef struct IPAddressOrRange_st { - int type; - union { - ASN1_BIT_STRING *addressPrefix; - IPAddressRange *addressRange; - } u; -} IPAddressOrRange; - -typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DEFINE_STACK_OF(IPAddressOrRange) - -# define IPAddressChoice_inherit 0 -# define IPAddressChoice_addressesOrRanges 1 - -typedef struct IPAddressChoice_st { - int type; - union { - ASN1_NULL *inherit; - IPAddressOrRanges *addressesOrRanges; - } u; -} IPAddressChoice; - -typedef struct IPAddressFamily_st { - ASN1_OCTET_STRING *addressFamily; - IPAddressChoice *ipAddressChoice; -} IPAddressFamily; - -typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DEFINE_STACK_OF(IPAddressFamily) - -DECLARE_ASN1_FUNCTIONS(IPAddressRange) -DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) -DECLARE_ASN1_FUNCTIONS(IPAddressChoice) -DECLARE_ASN1_FUNCTIONS(IPAddressFamily) - -/* - * API tag for elements of the ASIdentifer SEQUENCE. - */ -# define V3_ASID_ASNUM 0 -# define V3_ASID_RDI 1 - -/* - * AFI values, assigned by IANA. It'd be nice to make the AFI - * handling code totally generic, but there are too many little things - * that would need to be defined for other address families for it to - * be worth the trouble. - */ -# define IANA_AFI_IPV4 1 -# define IANA_AFI_IPV6 2 - -/* - * Utilities to construct and extract values from RFC3779 extensions, - * since some of the encodings (particularly for IP address prefixes - * and ranges) are a bit tedious to work with directly. - */ -int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); -int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, - ASN1_INTEGER *min, ASN1_INTEGER *max); -int X509v3_addr_add_inherit(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi); -int X509v3_addr_add_prefix(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *a, const int prefixlen); -int X509v3_addr_add_range(IPAddrBlocks *addr, - const unsigned afi, const unsigned *safi, - unsigned char *min, unsigned char *max); -unsigned X509v3_addr_get_afi(const IPAddressFamily *f); -int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, - unsigned char *min, unsigned char *max, - const int length); - -/* - * Canonical forms. - */ -int X509v3_asid_is_canonical(ASIdentifiers *asid); -int X509v3_addr_is_canonical(IPAddrBlocks *addr); -int X509v3_asid_canonize(ASIdentifiers *asid); -int X509v3_addr_canonize(IPAddrBlocks *addr); - -/* - * Tests for inheritance and containment. - */ -int X509v3_asid_inherits(ASIdentifiers *asid); -int X509v3_addr_inherits(IPAddrBlocks *addr); -int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); -int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); - -/* - * Check whether RFC 3779 extensions nest properly in chains. - */ -int X509v3_asid_validate_path(X509_STORE_CTX *); -int X509v3_addr_validate_path(X509_STORE_CTX *); -int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, - ASIdentifiers *ext, - int allow_inheritance); -int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, - IPAddrBlocks *ext, int allow_inheritance); - -#endif /* OPENSSL_NO_RFC3779 */ - -DEFINE_STACK_OF(ASN1_STRING) - -/* - * 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) -DEFINE_STACK_OF(ADMISSIONS) -DEFINE_STACK_OF(PROFESSION_INFO) -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); - -# ifdef __cplusplus -} -# endif -#endif diff --git a/openssl/include/openssl/x509v3err.h b/openssl/include/openssl/x509v3err.h deleted file mode 100644 index e25042a..0000000 --- a/openssl/include/openssl/x509v3err.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_X509V3ERR_H -# define HEADER_X509V3ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif - -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509V3_strings(void); - -/* - * X509V3 function codes. - */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_BIGNUM_TO_STRING 167 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_LEVEL_ADD_NODE 168 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_CACHE_CREATE 169 -# define X509V3_F_POLICY_CACHE_NEW 170 -# define X509V3_F_POLICY_DATA_NEW 171 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_TREE_INIT 172 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V2I_TLS_FEATURE 165 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 - -/* - * X509V3 reason codes. - */ -# define X509V3_R_BAD_IP_ADDRESS 118 -# define X509V3_R_BAD_OBJECT 119 -# define X509V3_R_BN_DEC2BN_ERROR 100 -# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 -# define X509V3_R_DIRNAME_ERROR 149 -# define X509V3_R_DISTPOINT_ALREADY_SET 160 -# define X509V3_R_DUPLICATE_ZONE_ID 133 -# define X509V3_R_ERROR_CONVERTING_ZONE 131 -# define X509V3_R_ERROR_CREATING_EXTENSION 144 -# define X509V3_R_ERROR_IN_EXTENSION 128 -# define X509V3_R_EXPECTED_A_SECTION_NAME 137 -# define X509V3_R_EXTENSION_EXISTS 145 -# define X509V3_R_EXTENSION_NAME_ERROR 115 -# define X509V3_R_EXTENSION_NOT_FOUND 102 -# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 -# define X509V3_R_EXTENSION_VALUE_ERROR 116 -# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 -# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 -# define X509V3_R_INVALID_ASNUMBER 162 -# define X509V3_R_INVALID_ASRANGE 163 -# define X509V3_R_INVALID_BOOLEAN_STRING 104 -# define X509V3_R_INVALID_EXTENSION_STRING 105 -# define X509V3_R_INVALID_INHERITANCE 165 -# define X509V3_R_INVALID_IPADDRESS 166 -# define X509V3_R_INVALID_MULTIPLE_RDNS 161 -# define X509V3_R_INVALID_NAME 106 -# define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 -# define X509V3_R_INVALID_NULL_VALUE 109 -# define X509V3_R_INVALID_NUMBER 140 -# define X509V3_R_INVALID_NUMBERS 141 -# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 -# define X509V3_R_INVALID_OPTION 138 -# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 -# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 -# define X509V3_R_INVALID_PURPOSE 146 -# define X509V3_R_INVALID_SAFI 164 -# define X509V3_R_INVALID_SECTION 135 -# define X509V3_R_INVALID_SYNTAX 143 -# define X509V3_R_ISSUER_DECODE_ERROR 126 -# define X509V3_R_MISSING_VALUE 124 -# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 -# define X509V3_R_NO_CONFIG_DATABASE 136 -# define X509V3_R_NO_ISSUER_CERTIFICATE 121 -# define X509V3_R_NO_ISSUER_DETAILS 127 -# define X509V3_R_NO_POLICY_IDENTIFIER 139 -# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 -# define X509V3_R_NO_PUBLIC_KEY 114 -# define X509V3_R_NO_SUBJECT_DETAILS 125 -# define X509V3_R_OPERATION_NOT_DEFINED 148 -# define X509V3_R_OTHERNAME_ERROR 147 -# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 -# define X509V3_R_POLICY_PATH_LENGTH 156 -# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 -# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 -# define X509V3_R_SECTION_NOT_FOUND 150 -# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 -# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 -# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 -# define X509V3_R_UNKNOWN_EXTENSION 129 -# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 -# define X509V3_R_UNKNOWN_OPTION 120 -# define X509V3_R_UNSUPPORTED_OPTION 117 -# define X509V3_R_UNSUPPORTED_TYPE 167 -# define X509V3_R_USER_TOO_LONG 132 - -#endif diff --git a/openssl/lib/engines-1_1/capi.dll b/openssl/lib/engines-1_1/capi.dll deleted file mode 100644 index 02aecf759f04a0093760e1e51b674051e587b54c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70144 zcmeHw3w%_?_5W;=4dD?sAd3+}7f3V;(m+rHi0(pyH@bnyTSb$QY#S6bF%xxPAj5&o?g>aJl=KBz-o(o&%mj3 z3(Fm)WhHaUa_2ena*K;gypGu(N13nKQCRFqn>58SuO#0yEH<`Vf+GEK^`#3QI+U1T zJ`b#ZGGPP4xlbk}u4Cv(T+MJ`;u?l$BvSmRk0vCp2ORq6gv37sK6EG{VK|2eCO*tC zQNc4APA<%wOJ$ff%1Rd^|JE*IXYRmk6W1aJIl4#m>?a-src7e*=>-_a{v{Ryadh+l-rK|p3Q!SP{<$@xTxYmhoA$s(#aw{qev;sUb}LV@HFfCpa_B2^_h z5oknwGBc`T9Tt%kbE1?IH_Yo<=!N(32jCFPRCiSm`1t2Q>BGwMbG^Aj>`Vr#7S9Mg z>+ppAoKTx#GMU)XgCf8P)d4((|D2#OtW+k9BHmC}(G9Q>PuR~%^a^Dp> z0iLj*lhP$8=M~Hm;xZ%=S#Z!sq6Y=qeojhP<|!)46C$1Ba}ZB;?Ri|fac#N&Z~J!B zuj$sALNvWR15VVnaDH(WoJ+{}L_QqN1Lpw=9--I-^vtHGuYq$9CGin1 zjYyqJtgWTs4k~gX#V#PH@6~V?4TRI53hzScz9U~R$|kzNv5{|O0vrqZE}(30QWZo5t!FWuUgS6^UG{7^y~!6#P8>PAE`w7>5d(<8ROnz+1vxKJ;g6gLXYNus z7f}U^DV?7L(LhAc&xNyU91qB%m$dVOzEVV}|CR znh@vqrzOO@{q6+E^cmGOY#YD+CK%L)G**m?&;s6s98Ldf@r|0E5rceQuNJUx-%43$ zB_takLa{Xcptii$=hUr_e<}og-Hj)v2;sN>5y6`IAXt}{;5a`@2zMa%(^?_)`n15f zZ;gdWr0JldRcueqzIvNme?ik<)%0D)2Bx~pxQAg|ihotO#A}S^FG`5h{N9B48PzmD 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 O{yHVlDS;o9!2bi~?x#@z diff --git a/openssl/lib/engines-1_1/capi.pdb b/openssl/lib/engines-1_1/capi.pdb deleted file mode 100644 index 6dad2389b3d5067e271576f24fd9d814ca9cca93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487424 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

sTuTaUg4V>Fa#5 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 z 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 a4n!P?I1q6l;y}cKhyxJ^A`X1ZIPkyA8zp`K diff --git a/openssl/lib/engines-1_1/padlock.dll b/openssl/lib/engines-1_1/padlock.dll deleted file mode 100644 index c974169ee64a014a0925764f1fa7981b906ac94f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30720 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 ai}bshnG}0_M!U5=r`^#`8U6YpBJjT;^e5y1 diff --git a/openssl/lib/engines-1_1/padlock.pdb b/openssl/lib/engines-1_1/padlock.pdb deleted file mode 100644 index aeec3bbe1ee766371ee19edae1115fa46fe88fa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299008 zcmeEv3t*JRx%O-lFi3z60wSU=hzJTXKu7}xPnKju7IQNf2)g!T$!^F>vKw|c5G=N< z#TNf!#U5<2MT{!U?bN^~XZP7?9(jIqJTu^cT`L5cgD%S^!ii<~_JfX5lz&M4-0rP_H zaL_`C#fq7~1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbMpUAh7%J-;FT{7z7Lg1_6VB zLBJqj5HJWB1PlTO0fT@+;Qu%RWx0By;{SL$P4Wx^1_6VBLBJqj5HJWB1PlTO0fT@+ zz##CijKJ{k&2p4+3IO~3C4mu-JjvDM0H5(F?QMRta5%g1;1F*dI9cR4>9+t+qlIHM zeVt7=*u}v|ihO78Q2Y?NloXWD)$)tPkg-A}c*G#h#Nt+9ec0a>YO`uRwN`sLCW`*e z-O}H>yd3ctiQLg6#^wqYM=b7-!yj2t9H9LW#Fa0)f?YD8HxA54oQN=IDC}+H5@~^F zi4RsXu5m~ov0+@<)0l_Usx%JMX|yq+pFWt#$aBSTEnlGJ7wPom;aP|-e`jZ;4XO*K z(A1Q?y5eK}x=HfVd(baz@H9WJF?odK!-k*KBzc46h1>gTPm2 zN%9HkFkhXBkL7?E51OxoV9c^L8sXSw>l7WPjbkC*Kx05GTP$NNTVwGIzoU6fWip6v z%+x`L{-4lKa*o|mig%^@o4YrVDZ#U87w#=W@7^48SX)hw5KTi2}POR(f+=-k}suDGbuv#4cprMuZJb8m*b@zgDDuGVQ(?n|59i)uWJ z-3@&tR9(@DZeHHtfiA69#Ug>Wh;DzEVS8(8Jw!zJdfxw@t9B1?iqJVlX^tT0L6_IFlAX?Yc6^w@3DueB4!sR=4S;=4$sC~%O*;(82YHwXrvm5P| zWyv=|+B3ZIT`*O*FLt|qE}kc&P2hVl)pq5IX|SjKbjs&B#NEmEr@6r*W{Z$SG>_i; zMz)jH-o@3j3_Cg%e!i>;;#cU_IQ&STX#vdq*iMwx7C@KkuK zyvg>+A&%syp|O53-Y!ijb4gr|lmka4=cc^F{8u%4Ob4w8X?KZ_uzSn<^Tt zX7^%MmQNZ~Ru*XW;zSv^1el;7D>1nMm<*uXxr#;J0Yrb?!t^rWKfGOc!hWLDp_X8O#Y)T~lSDZ)N4Yujkm&YE53 zmd&F23E?-;2g@Bh2l2B{hF5-{XLJWui~jlor+SUebw*=}>;wnMabb){US zpHkX8Y&=RtDe@6kIUm5Eq{*>bo80Kwp*5*>H>>PSw?VEh$)5k7rRWS=?CRiE-&E1) zZD>Zvi(^o(~?{gRxjB683lcmR9(hBazOSueJ$4XO$GqE-ji}R#rUAw=xv= zRYzj+*3uFmBK5U(7I|9vZah=RT~y>#L)(}yXm$Go7=o`ZY7+-8OzC#?Y4QbPk)rOv zN`(Js?SJMaA=k{sv10tG0Pv7mz1uoZ}8MLHPu*6%bToa-nu!68LuL6j1AoA+}2g1f9|e>ZA+cEqQ26D zU+9k{e^xZ2qwlF`X+&?d9t9u6mkPWJSr^~X>81|^*@RAdN&o|pdTW`xu@3#4CP>(N zV0_FTHTpjn!M0A0n$n!z4PLxuYa86n3yXVa70)WBsYw$^R|4p^0g%Z+@nrSJ^f*w9O@rwoMUiz6~Gw!)=>lEpyvU+h(@5c_L|3rfqtM*)rv@c?aQq z@`JX`BG@dzYh`ItpDNf;!@FUtG_2D$k0)&|hRp^%G0{qD{(=w+gZLWt+Dc-MzAeGXsuwg3ho@Co>gUvd)=Otxsfekf$B&qWkVe>V( zpOv(^L;D(@^tIFWC1XclN0zC;e4iWdP-|Tzy4qLji~0B>UyJS_U$tlg@LNyv`Q%&O z*A?(}#ny5TaCI;m4t8Qp#=3!sMb@xXNOp*o!L_qWotf;>Mivn0_h=kn@$@1WhB`ewh2|aRPeZxR_ z*^=-sg7Nv|on7r&LrX6q1L#c=PcIr2j8cFX`eea)RjY4pNzq(lmo`qwrfxsqE#Xjm zC>TKZd$2;NTGc>sZ6LIka=vh&d!XQDYe(g}Lr|^~)3A{)j@gbjJxiO8?4h4NYh&Vw z^`MVpZIN($Xw_g!^$}m&cJ!h#G}cE*aNn>oh8+N${-x{a1jXOVq%s-ho{J+D|yYT0+)Bsv&l z5HJWB1PlTO0fT@+z#w1{FbEg~3<3s$_c;O_|1Z(w|6|)^ZqF8^w#Q?~8_s<%DCFUl zJ>nESPhj)D^9A+Y*fSNn0%wR_*eSwoaZ#K_sVU?c_}RiK=Oec29R|4?LypP0&vg%e zI7A|S$d2=a7Z%EM;Ub8$h3>*7@T=r<5pHE6H#3Zc49|_@40C`%QtqM*IXFu>o-KC> z9#U6w4H|MiZw*i|}IaL!{F(tNF) z^VoU%j~^V__=l?KxwXIUdUQRu=Ke(5f9{7v-U>O!?S1Y;4V%AnXnQlxuAIaq|HIUwz0` zP!arpXaBY-vK+gSmHeXHt8d)3q$mFR1&@5;?3rJ}IZ8FZt%EQ#Xf%xKi5Z zH4XpBzqx;Q`}C3fp7i~0?4N}AuC#yQv2%vb`|HPY7W}^8>90Rn_AJihpUiMt9=qyC zuZAD^AOC;P|Lp!zo1ez6W@-PK==|U2j=k@v^8+tl*!#Km>xH;c+Q0d=>hE9q+b16V zTl)pRg0p(w7UCIc|C28*nl)+I4_%*V`R#pwoYFo8`^&NK+UdA<>x&P4WaiiY{DYZG zZ(I0CYY;oak#EHyRrYx+0?wKtAIafOnpbi}f&f@huaQbtBRGCrbjsEZ-=e3l1 z4RV$ESpsSRb%1(7n?c(_J3&u@_JIz8obc=dm4RwNK2RrU6UZ2YfI+|@U=T0}7z7Lg z1_6VBLEwKM0o+F>T%ZLY45Q>7f8-e6;l2npZpZ^S#vou2FbEg~3<3rLgMdN6AYc$M z2p9wm0tSJ9UIefVYK%d^AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg|Hl#F+J3v<|KIOU zL3zXByS(#uRgXU!umYi2w?E$2QDmPD;6CI%NlbZ{!1p7WcL~(`+oBPdI~EIet>n1? znqS-Z3iMMl{kqM*7yS-&SFYe~16jj4^2Nhlouws3^p9w>hmrl>UTWDDis{=|eHrNZ zW4xt$oG2)Cf%l%mdz`2A2JrQa*!nK9NS_6GRqvbTo^2X(e#0#>RqoTa`UYx++VGJ; zD;()ovT9HN3OxAa-f{nZ<#n$AeC?j9Wggd;@BGR`Lfk3sOLt8i`5!mtJ}jQQbo>uy z_8bu6_tO5`)2`Y-YH{?xANcf-TG##8rcVlSJ`N)|9bY|sXz~-=&RV@?Vbk<0tj)M& zntREofx4AmIQO6o^_>WU$^u*P6XYKN=N!~iNZUTMFC0i1V-PS17z7Lg1_6VBLBJqj z5HJWB1WpVB9RFW_;>Q2I?W>O89Kdh?FU|qX?{P1pSTywz848Fl6Hp9|Qc=K|zMpP+C0Tma6V$hiQw zo(ot3$6g8;V-PS17z7Lg1_6VBLBJqj5HJWB1PlVl4FQh-SDujZf6Qu&L{^7_a_K+g zUO=w-^IpLIYySh?3-|`cw+Er?e$XRw%=(iL|Mcm(21?2(b{C=Q$mP%|HLbrBfSD3!n9Py}RU<)#{tcPRI6Z)_rtI z?DpOFY^(dhm*e?p!ruE>AVciq= zeRS?2d<6SVX@AE%AHHPyCo?&xFEqgey z_wze;EZ_C`$|fOVQhxmG=ht24EXZ5FW_!z+YinW8H1EfF*oDm#&7h5-2S6`_CL*jd zP%CI7Xea1d&_U1)T;R|FzvbW!pa7^Bv>9{+5*}E+68(7^gQSgC?AXeyc@0r zyb{z53V@6;2p9wm0tNwtfI+|@U=T0}7z7Lg27%*?0EUStZ2TYV>F$n1j9 z+v9$lAKiBWdNBSk6{F;L0rK_QFoy5~*RSKoe<6MacaAynT>#5k6^vWKa6B66UJobi zKfkc>mvF}jdwmR_9iaS3v8a&u99|;*Tqb3HDrLHZ(e}1DPaROE96TUpnxxFxcoss< zZ15MqAyAF+>pfCtsPt0|d)p7c5#XX=e^WgPcH?mWKlPw~^^TN&v@eG}b*guybfP`O zryli=bUo%3en{$ovl8$#Qp_vl*c+;em-TaR#`7lq{2JVO=l_Lzf58gOE70r&VQNEs z7R3Dp&q{gV8wuDayOck|-1;`uDRjh@4?%BhG!*0cfQm#{2Qh2jaPr4v?zHLa=_*4WB@e?qK2)Oee9k{$m4f2PscRBn>o5l0C7C$=~@wf3+;^gU^) zKMjYh|Bi#^<3X4MXbk!Tb&;xIxGh-9VSpSf-XPtYB0bSI4goN>Q{M?xe)8~qVc{us z5KH}?J?cAx9NV8R{W%8tj-D$ymd}T8##8S|#lx}ne64pS#zZvfdVd!36J;Dy?}kVy z91ljd`jF*#`9|rU3e(nI`OAY$ZD9v=Jq&ssI28bpfzor949kHrzZwfmh5G$bX|l({ z43l#YOdoa0OrJe>@VZW)oje>4>&lnTdehk#J-@|EhBr_shLF_dfb)-fcg+rS0)Qcg~4#`p9i+?t*t% z&@ewZe=y}tl`s5#y({$%M%AvUx=uId(G(Dk>r9a#hhG*WF%|p`@M4gv)7kx9=TiO< zkMy?%oc^YPR6SAg?8mb#3*a>MD6Zs9;C4K!tP8<9K>2k2KCR`qg0pVinC4HFtyDbe z{=TmL-3!k6?*ku?GJm9bkrl%+Cj+wgFmeA<2mHUAd6DBeComQZU54}NXs73 zLD0kkloL=lXdCDW(0-7M6HCSz1PlTO0fT@+z#w1{_+Lf<-K-O{{@)q#2in?KsonqL zA0GRkgq44eMc7aMS6fG2a1{OL1jZ|OfYSSx&*J$IXyPdB;|H~ZdO_PkyFqqe+deO_ z4|WAktmlC$L0kiD2JavN_xDR*Jab)guzvVf=x&Tbz#w1{FbEg~3<3rLgMdN6AYc$M z2&grt6SDpvSRc0HoiVvZTu%bb7Yho-ig$ko;0GAX*>~V^O^GI7F@fb)v3N8Vn=sy$ zX8>aO7JxhmkgkZ;hAZ(``rB3yvi2$Dn(M#v+UH+@q0@2mh;#0rI^p+Ye$YDg(JS_U z?VG7}O@*<-em`(eU;o4Yi3GD`3^?;-EI4J3wEkCs`5k*c;(u%HuLN;&?f!V*UC@AV zjWGxq1PlTO0fT@+z#w1{FbEg~3r1i1cxLdO3+9DfIb@nBm#6bT=fI{^NI@xQ%) zdyF3cV;iM3*k&ni#`wP(1JBg>KNPc+9{3PmC~Wn_++k^4pAu~oKG{zVN z3<3rLgMdN6AYc$M2p9wm0tNwt!2c2gCv5+JTX&EA^51b<`+pN-fBOu5GY^)++=@8> z49~^&;2isxgXGvh6!TmDwf<12e`RM-?m&=dv2THUzNlzu@mAuzc12+b{+Rv`Nq-}y z9na8nPeH4+8zJp3haJcF5otFDr=lz6=zRjttjA%GTkeDYwZWLBZ#%#dam42?s0{LU9uL4Uj_8uaosd6%D)BMgE1tk!W~D*f!lnRMDYq&{b3Vcj7f5!Z_| zV1HrZ4#;3Pe_OQJipBkLeV@UiLKkeiq--2vYW;F7tKGjg5{27n=*2Ydm2oT|C&;9`%mCdf0m>7|%dwH3s^Y!X`Q2@{yCo%2YwZsK6w1T5i!uW9UhbE zdTjriTb$RwT337j$cJD1?RW0RU2_25>3A{sl*gyW_E(%f`!j)2!_L`1@V6j%7R2dz z{JAgRef=k`$~C|G!s2HSpZPmAAB6&<>wu~oEx?z~yx zINOm}2Hpw292^BQ;Ri?APT<_PSO!LJ4fj0v^@_k$OMKaVnb2s9q`pbXRsviFv3!0+v#2S9s3`$61qa-{t!&M_zE z3`{Y?wZErPgWvWyHFyRm+ujr(WOzTK{cR1N)9HnseNH{w*%+ST8R$D3TjAFjgMdN6 zAYc$M2p9wm0tSJ99R$$zJu&D1af{npt1A*n`~II}#k<}6Kcz4h4`AF~Q+Nn{S^KUz zdk+Bb>!uk3nudNq`_Y^S;Aa3ZIF819x~-%-kU5t1|BDcx)6rJDaM{DZ{`6HJU3cgg z|I_~KpQP6RRb1-MaO#l07k(tV<+Q_?D?!~5RDyF0`=DO|HpUxc5HJWB1PlTO0fT@+ zz#w1{FbEg~3<3s$|1AVK{$DE`a(y>2-{&r#<+IjBqN{zSzL?L;d+57@fe;p$eQVp| zkw|CE*A-ift^Gw|EM2b+c1I(ZTeD^r&zVy?Z}x0oWaZ^ipT8?mTH*@?+x?Si`*3# zS)RJ3-p2YmYv~-0)oTj3!`(hhkieQDP5NB|e+43kVc`(Ftv+e!j^cLyb~`D9%q6J1 z=+6`d@?QI1#E~nkdWAq!JQDS<3L?(*yWH*X8fNN|k8f%9(<9dA52w^PYCSd$qQ_GG zje@Ouf5qw0kL82+fAjl)W27GZ{vXeF@Y{bOe`n~5AdYzqnAh-%y%3kk`|EE;7`K2p z|1ymZ{Y{^{7p6gv4@1W3_{oS1A6?usWX$iL{o3;GkKc!nuMM=0e*?mIIx26v@Ra4b z4=#P=wV#~-*U$TYj(ho$Zl~jWR}Nh@^ww>^Uw+fBjbGmNqgJdHBY{pw&#*b8mOUKU z`}rL^mhXCeWz)dx?|WqUzuCKS)Rz*|T)&9Uz4XkAZPT&#jJv#@j;gx03BPGQIAd7% z#C;!~dkA{IDedog=fjsQpFHx-{|Nr#+{@2OV1auY%9qnIr=u%g^gprS##uLfYC_{| zEWlrYNh7D@g~!erI`6L^%USUIf~UX!VA->{8-0L%5esGbh0QsKdS@+Q;vDJDFK)l5uRcBRQ-X_a> z>dyV8dOi->F7KwmUWepe_^OU&_qRg(TdDoEX@6yiPt^&0BLu&JkDH;4F$fq0 z3<3rLgMdN6AYc%9&kV>WxN@57jY2E#0A z(5;nY+vnw2Kg-xQzP_7B2-+h@-Z#K+#s5l%BgC&TuHo3;zOV3E9dAKKys!6(wXdHE{aw^XB(d%>p1)zY_xDXJ`<^*{Iiew;=}eo6aV>&)n^Ftb7}wOl@ESy z)1SVy{GyrHHaB*ax$!-Bsb~Lv^8<~a2bwP!Xngx#jsFLl2N`Jm%yIHGkSg!09`xcF zMMc=(wL=yq@F-A(li!w89|vgf`0`kNfd` z^8oDM?S25Bqn$5CVaS7THFGco(*Pnqi$V9moo9q`u0W^Ck{29?V%`3DTZcSre-~sN zA{54%gK%4r>wWG*e(zoRTP&txlrr>{I*aLm~qgP#~jG-g?ux{<{9`g`+~8U&Oyi$n@k*emjZEA z{!fRDyKpIBEV6{lSaWcP1$7h5u1f_5;$d z7k;bd^AMTd`=npoRT&P(;>cwBA%xe+IP>tlNMe4ie0~Y#^pZlZCoh3No=>R()q?6k z^`HjO#h^w|6Nux}7SK`<%YzGk`SWIEG@0`3QJ{tSjUDN%Tb-Khg-3ZO~a*Qp7F8g&h9RiJl-jORF>K zm_R;>NqSwXM31gl<&a~&9H^ZBM*7KQAl%I_SM8;6kP_XCt;o}MY~ zWS%DTZ)nO6xy!Pl+O}jF&A^QL<$_$&UDwz2GF!%k!*IHXWtK^!`Q9L9R%O^fR%Z96 z%4Z4VW14@OvP+iZOl;EAEX&{^Y0fO8c0HYjePJ}1Zj))&kK#ASl;&BP8e?B+=fj%RvHb-Of8H$<~gUnU^UXM?kU&??JQvQ7pD>l?6*=Q~aLnJnug z-)UFKFy7YB4zV7E$RS3^y0rpvW$QaItW)5o!a7U(#gwC1C&N0dpY5L=q~E_uzwB?Qu+NasHF$q1y++Bfx^-CWmkEJB0rq|J*Hq}mGVyg8)_2gCI#rwn znlGBf4dN7W2Q+vDw)VSwf~YN=fx>eK8oJAXXYRt`Glu3B6tLaP5p{**wEGjbd*c3~ zLkmV0&~3DKdlhaT_$?To_=>$|!hR5C?C|q(8M6#Ov0p~OJzOe$)rX@04{73W-nVof zxX7`(8~y7lJ3DL9tEIiWuo~EGm+AX4`Z@vJd2_BTyX6q?Z&VvKQgq1ukPMr8u&%~r zKFjtArCPmTSAb{hmoe|M^~<_ppY6R{40~pX?62v(;ab&Kq~1a>ZG4`rbVxo2)1KMJ zRq68o6gwXx@r8hI4_G>)%gS za>PKzr{prru^k>UNteqkqqZC|vgPb@V*wYoLv-tJQvHQlGTk!olJA@0DZ6BUX$1md zexe;s8zU4J+WE=8fju7JyQUlR+4>CBhv|@g37wzJpV>NpoY*T$V=p=I9mMwOd6}Qd z_9^OLmpw1+wn@pKmNg&jHYZ&sGY=@kw!@Ygs2;ID&wBJLso!Y42OJW2nTY;>lH-2pT^V$=PV|PX)zqLl|2ravbD|Su+J=e#PlHSxlaFn+vmO-jfT@v z{<-CQzxa!HKKP5x7ya^8{|7Gm=ilc((0+)4*7XP4-*Bw^)(6^uFwj1XKcigO>+!7T zTkyOW#Qp+*v)sG^N`TZ{keaWe8(+_H5Y6)t!SG4E0Dda?OW+Lm*Wi=De+fPf{6+AY z+MX}0U*MT#nQ{yCvl|>bBo=FX6bJcCJ@$dr{0#aos9V&7@1JKuG?U?vd*sgsKM#B= zIO91NobkXe;Q@yZiF$DKDH5&V7`P-Z14myYu@W4ziB;h9!EtPXZBXJ9;N{?-178Gw z8+Zlym%tZ;-wo~s|2p`^;NJpo1pgs;Gx#gu%fSBtjyUC>hb7>|cscmVNYDA&o>-~* z2Q@FjbmoAFDNQBh(4Ca=5|?ctHO5wBc*;9Ln?W?UK%V(^D>(D#KfsCGkHM#a|0nni z@SWfv0RJj@IrzQc#Or===qerrCvFdcF9qKXPTU>`M^{yRA3O&BBk*C~% zeiAs##Yk}EE!rTwP{6VIN#;B5d`Vn^=ds{dgP#U|BltvcU@6W7{|fk7;J`+>!1sV- zj3)1ZQ;Ni9B#e7_s?R`w z9MlWi0=fgl^D2A64}m70d35`G7C>$*3K94DG~;&%32~JJ81DB;;5qY5%NE!@0Qby2 zKexetH)uQ(Hw{zQ8R!`AhukH@{jiYyUU?`R6a*K|VSi@6GvomNiutRlV7QXLQk%W1F$)%Cjz^%bEcE za?H;$&^dT!{hA7nagH2Ya13!g&c45!ae_TYNIx5JG-u%1|4*Q=KTyBlzGFXIf4|f8 zvRf2q=IA}BIXvd|Q=hivM z&0NRIwuY5$?aCgLrmtHKv}QHXdR4Y>!ljQ@v#n2M8>_z8ZIX%KAYc$M2p9wm0tNwt zfI+|@U=TPl2ypy=Lhk?TiHABv@%6{^uK&q6`_FakJ1~yR<(byh97DkJ$GF`9Ym5bj z4s4{{C1vpa!Jf{bzP}$IG3X7&t+;<>XAt`Ul-yI<^QiLILYF8;7T8jY+|A35xfbcWj2 z&!68G3Acw<^+bcxnxWX|9CpG#_X62Fz`0rJ zfrHio3l}BEf^Gc7gE}+EI{u8uvYqGL3*{%#3+9}t9W7I3@H~~>(}n`tiBA_ zE6?6t0C&t%g`zQh&rwIfa4tq(grwX^V9jTTSSO#S;=A`bX?{EXXjZO1;cU6&i+*0u+p59XKZ)r{I|pI%TxJppZOcF6~VrI zX}DK=7Ic3=>4VDH9f>1;d=a8^y|otKg$P*bDdyQPwZA3ZHdP)}IA`nf;Sev&aC7Au zcH$=l($*352ZB+{9|+)(X-vxU+}Mw#>{$J5`^}N%TPoZCPoMlz=W_b$#k{c3fpzP& zpRB_{bfN@09aL$ri&ykSqey#maOEIzy5zYvhHKwNT8ur(H1j~rZt}0OP#~gI-S)Sk zH9{@6zhsIJs;pM^i+W?$ssrG+hgJroe6s7;1R2IzD7UqRap->##IOs7jX=$)E40s$ zeO;G>?CpRkpM)?^#(7o1Ed5jeCAy4q9*U*}MEzMd7)Ny<{n09S;kc~jZ^zN{wD!?z zgSgbM1UTFV`U>?c;F&IU9?Nd0?DM^pdkVyK7Yv!!rz}&(_Qy2wzLA03HATAgF!Y>atdz>#!e-1c3u+($ygJRz>!qefhL zE;>~%Y+QK_O}qmqNAV7n_uv52OA6Us-w!{$D}wiG983Hgb^MuW-+QF^_01D@KJZSI zV~zU|;-Fap;yZ6K=*I|$_Wjcy>}?CmFY2HIbfS0-e$G&Zq0YzSoP#(OFH;9N7_ADVBa%W*j{4uJ7hy-Q(H$(NboC^uzazig!Zt9JxcttAkX%K$!Gb z3%OC!U!{EJyG{8!Rkndjzf^kL@MUESetCWwXE$V7QS$08oCdh@{*Sq6ryL^Xk2e{o z`zwZAy1!PbkE(yHN8bdo?6_c`#mM&IcTG2yJvI(> zr|wK|y(8srr_5S*H0-Cx_5|ZQfc9dzNWrg;4${Coy8Xyc_f==rPcd$`;E+ zF~VUS^^U%Ar03yI9-@Q!B#8QxGcTqfU8!~>P5($Z)oYI(IUOpTQK)a~PK!A*+zp}| zp{M8n!XkKpN(1L>D`7->$`i)HAU!-o+ zv!;*ziOD*S{fL9@PVR!?=MSGT+&gqg?&zV;f*h7JrhlOE3Da=8)VTn1Op`;LE1x~M z2PFq*Scj(h?>|Q2J3z_LmzZ#TW8;@OX0b7=lHuoQ4DI;T9V^6^>0+H5&xd}d@BJh^ z)6aDCUY(!}mv>yugU*FA?^$l@9jQELeO#*VpvdE)Mi|D!AuRh6G@cLisgHw~&nbMX z^TrU>PLTIEse3pskzvbwIHVuyy(DQ@)<^HU4883>`4d|2DTs*q%YDnN&s$~s?RP;m zh;JLjGW+DLOYG~(`?k{Va%1|H|9qJ*tgqW;c&8`(hYvXNP!2 z`XLVLUG)TXJDT?Z-|xi;FPZi%_f(Z7-BWt7OxkBYws2EA49z5bxaTpFaJJ8$WGusg5w=kKW?;t(j1s!c(GM;)zDjw=vs@wRo zG1OLIE<+jCrA3f0mpUZ;@w9m=O0fKSvgl1cl^@<+sBq`I!q!uT-tTYuBv`S`aX7$m zGxfA_eOBvvD&$zUAu9C@*n09!EA0o?Pst8T)`urGh8zQBF-hHu;h0UggRtL+bid!u zrCf?K=yY7V{i?~|bN=Qlzy95jZ@hBjVjloH{gsLq^nta~#BHTQ4>5mzobu z*9+-N>ZRt<)LcxaUbv$ofneF5B!+-Pmjt>t96Kg(3}4>C!S`J;o~MJ)1wS9W6nqBw zY;ex|@tJx-PS1g<^b>ow`BOkNz9tnP@fTR}%Tu2yqi)Du%_yo*B`^xYH0 zZ8JEUX7Oq83E*47kp}S@@Jafa`fSHDb-5WFI^Rcs>k1 z8XVt#NsIyiC^*w{6*$|Wjo>rEKLLIL_$F{02Q@FG`ZHzT&IPv&4IPz4=QLl24nzKpi#e6RT z(L4@$>h&Zz@&67unr!i1aO#P*5t%-gMKwpD@{W44Z?OPG^C8Gl4-1_5tODmA!pp%q zf3q6=QvFQ5m~J(;R%IwN-JgU!^};e~xa<4ZMerM?BAP7uvB=*9SWR|)gK2%PnG z4mk6hcb3cn{~$QST?kIx7lW?^#~gWL4LHUl3C4xFrbGg~7~GCujrG)cGBf^G=y?+4 z+rT+Ty&9Z(5B(Br!Mniuo{fNi6g&=o4LIBq*MhGHzYaVIegimU68{c<6*%K}fz-G_ zjTacd1H?S1LD*8R9KTgRTD38hOE1qmAjkT1D>z=W;!EJ{lk5a%yLJ~i<0}WLeyQpw zXNL0(OPlN@QonudEEv6Ea)(3#*XQHa_*P+z3j#B%zd@{VHd~;5a&U6P%CH$ zXbT8G%WKpIUx1{i&1G&)b-jpb+E8JWBI93Y6ftyIR!O8 z$FZ0_Kg&CjXfop}86>X0t1`zH-{Aq`D?4(0$@{-K231=3`&&K6MetzK)3*SP z#)3iOOP@ucUyeVE!5zXP;9Z!K#(2{$@48jtF|rq^r9#7!NZ2N5Ybr z9faI?&@FfoIUTOguKr->bE9Uy6&wA`b=$9-t;RpZTGgEtrc`qZhz7+WL5?62EG~FI zC*MP=9%T22vL^ja*8a{;^QX#lc7Ic~zjL)eygHKcsq&QFAKv*gKBQObd0Lu3m6zH5 zP1OF-r<4Bh%1Fki@+G@JG}SUbG|kcH92kimzWxs$x8)FbK2p9wm z0tNwtfI+|@U=Vl@5XeKEC*=M=z5m||1Y@h?k?!Mp4&dGHtAEbPc{(+ButkrrIVD4b z=^fF90nTPjusOtTOMTrhxUy%}D(qVAh(uPaF=7}pnS1_VrTyg}^Z1tGWqwD`UjH3~ zc_$jK-(pzEJE_I@k%nzj$4z>EqaAzO)wk-nCnO^E8SD5kj>Yrz*5V(bRfcdsF3huTks^9%84q|@qdv;A@X{f{z^hotUb z1QwW8PVNEij)cP477(MYeK#U?*_t624Yoz10VUG_SRu* z3xUEj@>zZJ?;|o?>KW{fTXv`_-2L#&xD{Ubt{*mFg<>5jOYKpAR}kSXD%=OmRJw1K z>CWY(v*_@L1D%iy_~U-!wWyGDp|+g8xAz6a{k$fQ|93+si;?p@JZrEA?kpSFS1HQ| z_n9%zs9)yUgvoF#hduF4-%FW}ue~3W*rv1FSV5P2Ai07yZ0eKYvi>6V@K|^Y!|fb1anKrJp~n-M^)uy?Ew)iM=0) z_m9)e2eFNq4cY*i5`>eQW5mWeE7pM%IO}i@1`PWYgKBSB17vYxM|}qcvybf&RX$v> zWxj2rbAKcAjTpG##xUv~eZycH8l(=u81B^B-UGzBaT=|<{LOT4=%aILCe-R;NlWcl z-wU~;nNzak+pgowl`*M#SjM+;p!k3i_Z%Hd92*EeOe2VGQZ0ycy_@>R5wp7dVVpO@ zUij{Ah{$^NQJDvUNGxNIA=@FAUk6Gd>pR<_pUUSP*(M~UKb&e(=T4*y+hU&2a^R~s zY7da@=OmdP%u!`CGC!GTpOSusxLW6#y`NJq{K6-Su{2CB_y6vf^2xbul(U|&sto~b zw94H5eq>Ck!&_PhmVK5Rdp^BWzYH_;k$d@4Wj#5c-md^1O@7+*>2kptY2>=_$(nD3 zKKXs(8a%CRx7GgkRLi9D#16-ad{leu$IEap!duKC+vShTyiFl!w_B9wduFVZFUOiO zzt^kIQ~VmZ{RZ?hh-q~}?<_{=^^n3g83y;8~m*2E&K9Z+1@JH{`AF zHmrMY-5I_fAqM(3&>JWx#URyJReMHu zpMmcJ|1a=gfO8G~E%0A~qbkbp3-NnFFXI{CZV|75W1oX~4SW{(@4?yc{R24lF9)f2 zuX-o%#`6%`foQPAEYr(10H$L+_+)UbyC-IYb8esEu$@-#L*;)ro>9$`-|=aL93Jtd z%G4TwdY>trcf&0mZ?~4O0B1Or+Fvhzt9O)ochMiRJGr;R1-U#tPXebsbd`HNfW7=) z67-b%bBzJZ#MsNK_BhQ2zYx#pm&m;y3&AhKGn$12-;Hofrc=E`)VpOj+|tt-fE=vk z-VEZxa;4h)?CD&hWk10sbn;-mh>7zccqMxR8MxP_gVi z3+eZMmBVc}`c&!Pt6`bv{)P0t3k{GP>{~URaJRo#vlYK@1MNT<_CAKp`@rsnyS;}Y zbN|8qzC0G?xTI)3@7k6q(_a>6Oo z?mX-E>*_Y3(1pg(e(~Xx_RYWc!7IkMUicT!q0wI$cunJ2*CGa5a~SBG2Lr8{yd%@w z|9gAy)p_lK)`A9FL*SflHAt0jRqi<_%_Upb0h+0pYh_))bfi3=#<^z9LyMWV( z(9z8KW`2hu^L*Jq<2M)o^k zA!V^A0AoDfMk`wEEsGv|$6}Sft`~bzcn9L~iN93GpQp#xU$f(H3dRRf;kfE>p4Nfm zNtzwD4vq27rJ-oN$KTl!<}P8l9nZ8E>39$6ct4jGZw*c_^mJG0yX-u2EB^6}+fH*g zHw3|KO^dt2-yO#{2rASD@Z+0iyS#BP5KXro@5MdA==z3WR9-?5ZbR%nJQzTk?Lt4D{XAk7% z^WMO5jn^(?yzif8ZU1<69Ye%0$1}}#8LQ^Y4`!1ccV#HXdz71Hf@?x6qyFgn3ViS) zrs7x9=C47(AYc$M2p9wm0tSKiHv;TN4>bNhPmJp`{vRnuiAy`OkNw{-VZ6W5Hrg2k z3<3rLgMdN6AYc$M2p9wm0tNwtfI;BBL4f1`33~l~X+>j8U9-2=GpnTd-R=Rf*KHCy zIp4F_PAsd!iggFuLhYe8OW)@O8Lr!$i1>N82+hw^@!OxiOkVm!_v0PEy$4~Fj(_hU z@#7MAc`e$B)WfOQ#`mQ3h{XdIztSpiBjf#yxMpv?h1==kCjgH#?L8q{k6+t*bOpO& z_}nP*H^v}f5HJWB1PlTO0fT@+z#w1{FbEg~PCNof8vpm-1292+Kazb9z+mI}V+rTP zr`p6|5HJWB1PlTO0fT@+z#w1{FbEg~3<3s$e=P(!{y$Hz|NFZ`GrM9laXNiwTQoj1 zibK;lK|8Z^*34Nm?F|9PdMChSz5csV!+PFWeJ23UW80V8aSixH>R_Lpb?PS33aU0RP<`{{Awv9R-}QlF_Gn#`ZH&t2&p;y3*W%!w{D z_MVcxS|@%CQr@e99US&el~&jvjpEC5!SLEpG!pLO2OLkdUiMy}PBtPiqmz0CdxLE~ z@t|FlHBcv7AG;j$`!F=)llq`Jvv7|lsuk@|v>tYQlh9}N&&<%nTGJD1TaC}RL7fw= zi=9VKz0Kw?$vTD2NA00ixSPT*I{xUYwI^I3dq2yZIjf{-c4^V5Qz3xGo6r&ULWP&VF{0p7{LC0Hjh^`ZDoRRAisD`P{sQxC2EMg01pkC6adJJ_k+kEC%pt6=rQ3~y-Np<# zECq^#!}`jd2D{A&Al>houzNkfuie?OE0$|_sd)Kqw~`Dyd_zv`9NyRO>@0rq$v3fJ zbYD4spRPJX7dPwD&Uly&2(M0=vy4`|4uBt}-LM z0PM;$>_V{X&PZ<MVOO5v_Y<%ilY!r6*zL~< z?*`Zo9c6Vf8@Oju}=H(99W$JP}?8anZ|7F(E~p|8RYAF=FXcQ35QXXyMO z?Dk;)N4nofVCTw^dmMHXGwhy%U8c@Igk7dCKY?9-hJMe%Zd(Q}dtvu%M!vlSyImRS z{VnWjSxd%^7z4VV7B6-h|!GjJov~*e%E?SAWl9$M2kEmdRnT+n0ggNZ37} z5yvU8+mul@#>4K35q+^g19pcp>?XsmJOlf4VV9WN*Y6D2J(W=xX2I@ohAyQHFC)Dl zgx#~ae?Pq(l*29)7Z2>pGV)^y?9}%zQ~6O3yR8}NXolU644s$5PGrRUA=ue%-2_ou z=nyCrz%H;D6YPd#n6;nbB4ceU~l_t*8cWFKc+8% zasxM=a)s$;q>FAolr!6H$`w~!5m>pZPa0nZd~}buP4T)j;$-=@-7d+{H6Jfd?be*> zZ#?qLcC-EU0u$;p4ebludQ~ndyu(`89VqK?L)VBoNVn3$T;^{=h+!(NyNk5rIOJ1< z^0%9^xk9rpo^fyE(mnm~qy7-=^JY|w@vy~f~K@YW_yOk(6pTcqX zZt!H7s25D%Q0lo$h>JCzMa9K!?W>eO+YZr+p~7}i{!XI5-9pIrONd29(IC2Vlr+X5 zU=T0}{OciL_g&bRVV_2REF5iax^bcBVZU|R|6o5vj0e?#(o8wuHTu29_ZVMJf;<39 zGv$1@=ywv|M|@Y|Wh6v9D9w~JJpB&hJBjZmjv>V5pfpoXIsFb``_FfSjF+9VG*eDF z-RAQhz;}U^TMM3M%JFVUdo(`{0tNwtfI+|@U=T0}7z7Lg1_6VBLBJsJPmjRgVI~Z_ z;J^czThGJ1{27?<=Fs>$5T@dV8*{vTK7grH4&_7B)$?3Azb(Y_Q`Ga5Siq&+@^M&O z1HbbOCBGcwdip!ZrQEMX99U)(3$duop}%92vOfdQ^#2n6ko)Djkr4CFQ_mx?FircL zwSJz->iJ2`7t?-Wnc`O>em;-T&kN60&$UPl6)bRxlHS^9-fgz@uJ2fggF(4^N!Zz6_>80(T(fSo$pzL2mJk;xAEq8|2@4jhDuV-|=bZPr}8n+QT|3>KWCdsuA z;H~3%XOas4N*&G%a-C0zHPDm#`Dbd5xp+Q5Iz#arF+am8ob>>O_Sfq4b!qpj;7#cWHbd*74t|!|Otz40oPR?>y~qxh`i9YMkaG zd_W<*NI&zfN8?44U2h+WULzHe*&TTq#Zr&os?(t6B9 zJ~I4T{6P^Ar)m4Q@tgME^A$gBlHzyie7Q-7`;4xCkLvut&!yxJ07S+&LYMEkTK^%K zA7r>!YX7(D{JKHs;~K5sRXW{ILzwb@U2fjiatCz!Cuw)DE}ySVQu6m8Ga3I~TK{Xc z+xf;Le8ixbGhvgxp^XEmx!{=M=bnABNW-Wh)U2exHJ(k<; z(^&QVrVjrGt?$gq%KioDiy*{8aQqjS!9Sm8Y5tnV%cF60=y0d&a&)Cm=fk=jysh!O zOoxAyPRBXAT>ebE->CEFC1gHvcI)~uPsi7y(>F<%pXmsn>AzFQvtH|Wv2HIyaAP@| zr*XIn{we>8_TQz;>%}@BT6B8mY5bnidR}v`(&rlO?@iraJfrK^!eZsVT4^8u~r+wjNodZX6oN^L(^hkKL8dxVyI0qJBo4{EtH zbiH|Un6kf4hku>U|I>8&cv17GwfmI_m-%y#PLE&XAJp!5>3HVpblj-(?OKiFa>NHw z(WUJRb$Pf+%ipQPnW^=j2c@ZZt(JR6<9U^KzYA`3zg0i4*ZKQ`4#$J?3McWRj_(?c z&+Yp8Q7!+XPS2A%9N_>!3GqdEr70KUY9t()bdG$^qYce?ppk$zUN(zdlZ7jh_&EI~ zavHe&0nM(uR?4Af!WtGi_$NQ21I1u+^6*G5p9F)&&pe3{19dnixr8!`C(1=RzpHBxJ*&O-8%*)$|@Zkm} zq$!|pfFWF0Cul(rg^7HJXb|O8eG=k^RRaI2x8M(rOa7IA@?ysQ|_BByxsvuL6a}P?ho_<#@=U zh9qV3$P)7Rn8c!dSFx>Leu92)6AAc~;x6HwgryqhZMl@kA0`|{Q^1#y`v<|BK`TI= zpkB~M&=$~k&>f(ALAycEgI)&h2OS16!DB!!5ce{bfhs{vgAddJii4;Z_n~Y9-3HnP zdI}CW2i#*oF3=268K@G({TCge zI4A+y4B7^|4YUjN5a=n;v!H#T*FlFsd8o%uPzk6UR0C=S1wh@P4WLb+t)LyCouCIm zPk{D<4ube%EC7uMO#u~y7J#Zj&7c*aPEapsBZzm&+yUAR`T^*9(9591pnS9sV?Zv@ z3{V-U64U_lf#RS9XftRV=r+(U&_kf7K-`125A-@H4@KAsnh2T(Dgl*)YCx@^0H_kK@ z=w8rn&<{Y*gI)&h2j!#EjRCnpGeBjaN>BsH2kHRDK?xA|`fdZ=2HFLB2=o-_S!3rRJiMQspoySqpb}6ys0P#u3V^upbpvPQ$0#G%m8Po~t1#JXv0c{7}0lF8o8}tLv%b@+B!=U^T2-BEjMqq*%iM@sPo?Gmf z58w(h?sSLUIPJC%0uHg(YU>ELt%m&s?4Hd-BOF*CwrV}KR+qmM`>3q;u=JB(=zv>& zgQu>ksm7{kYHsw_Ek@rbzwm6hM`NKYf>s=R)$a(GL1Tk@|iM}p!)=I4tmk38z6_s z#9F!W9g>dqRGkNEZ>_be#~%$?fl#d5A8+fhLTy063P-x3XF;J0;r1fJ95F@iJB+RG z5>s`Yd@mJ>f&HI{c;H<59R%mSslmozEriE*A~O*W>$%k=3CfSXXyvP+ob5eYPqc$ntEmqDY)nSPVypSW>^p zs$aCkQ_*bId77<8ceBT;sIO~otgo>=b?!wq9t0s~Yx$f($4`KRLk~BL#Av~GxT@Y z)Yo~erS&x}wMhL0_?v(@az#UAT` zYTZltG@JU3koEm&@@y)?njzED++bC>Yibs`D=xAc8ol+6-sa_2U43J%y9Q~t<#I(< zId7eWh`On`5oFdfKs<`1?v>uAh8p*BWP6o&vDH-JuB-6^fcnNt4_htETi5JqtZ`R( zDiM^d^K8RbIw}lNA)oupL=SkqppevYsuBP7#r3l?eqkU^&oZ8(5zG!)~EZ213 zF6EWpQXcMFT!zQAHhC}cSj{T@$#|~R5uOSEep^>N%e-|gMHP&I;bEh$XlSagZ-jrQ zm;RA7U09e;`7+pY@2t!rR5)DVxxwUQ!PnAR}f0tw)o$wxI@r!J)XjF53KOqDGvPCVCW3*yLpX+hCUFJG7FbT!}=1!sxv zf59#tTb)#E=^T|7rmY&ao-N&Z2=_7_MxU|=IFX}xk=v;1yhR*3YgIa_vrZ_}z;xRx z^0^z&8aC8p_5NVr+L7L#^Ey-As6$-7XUJ)WKrYnPZC%_GjIM78M%yFNE`PW!SP{W3 z#lffylX7ftY}v)ZctuY%imOm@T(Awt1-*f!9Fm$vuDJt!iU7otadRx07GBeOT+!Rr zj2F5)#>0yICG&MJ0<3AM^456x0cC{|+Xt3CFxijzDP`P^i#@VkS?pmwW`6z*_9>sr z&Mr50eVic9mG9@B@WXfDs$d))HGH|Zdp**m`VIwnDff9lX5eY#uFi?+_qOcRrFA3_ zKIOoqN%aNN1yx7DelHWtlpJ5;{bh@En8p2MGdeT6k1<=zm-myGm&s;!HKZ@QFRRX! zH6kbLB2_^Y5>&p)y3DCFV{~hXpcxNFwFsh-dCq=~3zZnJe2GMxoKezfXC;MPMTDiNsrtvTO$f7cQj>- z*s(2h^$9ZrWL>U`wCvHBLlt&;pRk!R1D8XVHHb@-&$=o*?d_pJOnIWiATn)i(kR37 zOpd~cb}boBr+-xp?R&O3LjJgpVqkX_eD?S|BjHt-qm@+`HV-bN!pV#W)veRNmVI*G zF3k6k(sLgg<{ZAs{Q>P}^~6w-SU;F|G)F2AlslU8Fd1Rqs>@g!ZW;KGko^(Hn<0~i zzn000f3`T%@y`}M-EI7{`Om~ZTNt*CjeiP1rXv%7zSnO97L84FEpM$G@1B}^cO?fp z?D1B5cVljcbBa~KVF(CGO>%p0z#ceoj_+p7vCusPKjimKRs0#f=J)nQ^?We7+Tb$j`vS2>CUW6#t`kfBSUx{Nh5z@6`6sl&RUG;Sna=7%khi??StC?jpwN6A8P+kYyEGXrR?YFJqTCn@SfE6J;0aY zJgD(msP#HWhj*FwcOMEbq2j(?%X$F0kYTjTqV&bOy^d0M00Z_@GHuJxXW z`93CYSy=q6{%iE}D|Y$O@w}+wGy!hySoHf5UV*Z);qx)q1;izC5bKeOs3UhYn}D z)~`^n`3eVDxLhb1wz*pU$eWUfA0%m<0t=~?!d1>!c(F(%FlrGA?dAec00oz)W^IyBrQ@ zLIsQk3F;}OC@D>To{A2rcJMi`94WMgr8^Un05KlPX#rf}hwe$c z^1SkLxn}C3EsaYGB`8rYf1XS$7~Y+bX7UhLxk4@nxyjWmWeUK?gQkFrK`37G7+^E_ z3Q#Ag7qk(y1+*P>2k2hVZqW0fmqGhMhe1s1@mx1Ogz%UpPEh*VX*r(L*H63gY_Fm2 z!0*AWvku-QTGnpCrk*C{IN)nQvrZlA~N!)~{q@^i0 zr71T_Q#Yk4Nz;}*n$m`wOJ6CsH*GPc4NXb-zi&Uz*>mQckt|GTdo}jaIeV|Q*Is+= zwO?z$E=7UajHe&ZAf8j1TV)@P^Q%weS?(O`eXHd>>%(}Tz+=v}J_Gks=3D1r^Es6{ z*XMzMs`IYLq1l{s(Au?!Rj%=5Fy= zcpk#@B>aZ(T#Dy~0nFXv{Q%yNR59 zgLo=#S&Q9QO!uQv=AYH(}2j3O6wYTH@5q#f|?+5Tbgzr`O?#K5W zzWedLAKy>l{T;lIqa1V1!(-s*DLnV$c?i$#mm?qWJdEedcm}}Nwdnh-LOXrnT%`Sa zlxsZq;CT?wzxxu>J5W5{G$(ut(sw@aDYzEf7XV|puOrVGhWheW(7y+G$AM$PpJ^8@xAo$S_*(e|NFagv&xyn> zoSuL!rnRj=;R<^{vwKoa0MNdV?6JiB7T(Sr1&!CrfK5BZ$B?hhHi*c?kTQsKwhzH! zGdf4uES^I7^tTyFn-cp4w0CpPzh10~+tBPRX2hp6Vx0nQ&h4Og3}r>kGw>QP8qNa( z&=&Ow>W9VXa?a_efESmENsT7m*^zE#i+>35(jHS=G)|e8LEsD9J@FU#2j>IY1tyAy zGUSa+i#$_I(FNE=)p+NuD?!eS)06gE^4X>N^r5HicOk`Jp_Z{Thcbnty8BMsDA`<) zf5P)60&|%2kZF5P<?sfGoPQ&R*u@Gx?O-l-nDJ^xbPZs&4JS{$$VwK z&wOp*NoWD%ShMav1&<}ec6cfr8|9?FolHjiTsZX0Zi4ssIpLY6MtFE?zet0m&$*!{ zIOuOw@zbW+1mD&R45{aJyhC`j>>6czj#zu*FIx#~mhCxW?k!lh5*{R5&XMlyf^J8r zqL^VE3a7&MP&64y#NwzY#K(rvwmVbHM~azR zZ72_33l(TAa99uhI>LHz!qsZ#D8Qnx@+Ai@!jBa4)l4-zchn@Lb>?Y=p^O8?0l3Cx znjBnzF(3^x-;Y6NXhSMPvdkwkhlh&Au}q-^dV2k&yvJ5FOuS52%##%TwxFBR>VI0>xV5tO3J;*t_V__WO^no&2+(3$p zKXvVff^^WpmFHxtIB;H49y#R2)ot)&!WOFeag^6aW$W}=jmZ17GVa*Dg2VPvNDuO!C%AWIjJa!5!d`EwPj+7mU|} z-3GEy3Jh>kw$21;-T9KL&mwlMlFt@qunc$(&2kaTd7Qpu2*lV&J5sPS46FN;wAU&B zH=F+a7XH~r{4SJf>zybN_( zsEJ?c-^}kh>n;aAe~tV~|7L!%rV;q3#_u`nu0|L?ep!E;Fu(fiGOQ_P`HU+W;aqn} zRVXBvz#uO=*A0OF{$zM6Y7cXnW{T0mE7`S7-eFI_8(_=L;K-6PH z(R#}MMo7dxCE_OTJ#a_&N22i**Rx{8tJYT%b{w#{3ye>Q<)KLtC)Xy7s)d5Y{h3Bw zhtNi~j%%&ZN1YTFV7*?2b+%mVMca0}W#TXgu#U~C6)bDJ!o6n|aSsF|zjo)&1HJe& zQz&ifapSo6jG#DlP2$Eef-)TtheY zb=?8zoWRGp#>AIrCFN_Sx0|w-Nd?&{)0jX z1)qu^>EF!1^l#>0`g{4;>kN;h%s4g@PaUngFrvRBId8_*g#&9mYh`rMbYDxJ!|&b? zuiHj>=C^GhV)1l46i)jk&mvcFvz-S6y8kc;J2d+Qf`*BM9+K`0==M;aU9WIG?Z3v6 z=kGV-=#r}WeonTlwfvmwGtri0@FdTSr*SE3vqM^-EX(LTihUHKsdM^n^1gVrWXpS5 zJZS2^nnUNt|9(GWUm3TtMe zlqJtjUYsxSaGywap`O=hk{H`ses)=k%4dK4ccr z2LU(p8Z^B6(1g=M9|Z0q`e5Q{ebD;Nc>?I56dicc@)#6$Q7lO_lB;3Q37f;XUO=77 zPrK!1laiH|kJbTs$AxO84NWj}mi6F`DnAB995>0Og48WqX9iXHQl?rhAC?B2O1W6b z9vvJ^hDSJH9arHWlHrY*3}y4sF(9^w9NJJhmb+Vy-^@6uM0IsklGxhwm0%qpHk_{#OThQMPiJ6r~v;srGK1 z;lhR{lCF(_eW)`5bGuvE2$RC*9HgDFvjLOlcdndw!_jVVjsuhC%b1?HP+@)fQ84DG zq}#xbut!|v(47$7!|~e*27$puBEyS*vMx-Z#W=5Ic*$@QQ#tIkI(8N}PF7eVO3_z+HNz;v+g1OEw`8m$vWJ1x%$iz!swCar)86 za`@MU(Z^oUr_$SnK5`R&piM%`h+eHo;~YMq zCX3m{b}GG!qkq5DaGPcdVnm_k#5;tXumN^5J*PlBii6uIOJM`kV}rj%*#w@^R!e!@ za{>Ju+iD$V7y5gIdD~;%UlC=xR$rL5VH&eVPr;QsWT@M3-JkWrH#vsAT=u7Q-*ypv zqi5sV?sQ+*C#*;7-7vcE8yrS!KJ`NKsQS9HUUOs+-1X%gFgtyNc$~J_on&?9W3`?> z47^wAdefobEMr|>La1j0@O{!P^ZxEd!?@|zd|}`g6ptq_WgHJL4Zk5Tb=j++j&Dv= zD;dlF)-$3Xq3U6Ad)_R1_;c9QZO>qnix>kyykbqF9$zQw#Ym=7M{hAw#`Z07?~)!L z4glA{8wH_-%CH(KM6p>8GY6bEB+bD_+^GVl4l~8c(qXh@gloJJ122Xt3S99ACgat7 z4XqGhEIY)H8+el?X~xV&we1>P1u=Lbp2p`KvgS3JuLlO<_=MpO82H%NsH~|m%rotC z#!8<OQDtQNismXO}R7Cd7G2INCJy8c_N zY;q3oX7(df6LEVKbNDzk!7-bnOOAc>qJKI{oXPQhvGE~$1harxYlK4&lP>S$lYLTy$ZkV;@x z5&P3ufQDG3g#J3$I+6d;RtW$;``EPmjvAeG$M6d{>4t>uS8f7lnmz)2R~RlfjO4b9N1AU34Q)QBo0$_I8|F|##JP`jl#!cqIVjT7C>hGI0RPk+ zM$)V*5LU0Pcn05RqTTW<+n1?6*gdG9i6h!uW9~@ze>R{W?Z5-ezHDE0cKqetbJD+V;LCgGl)u1Vv+iBUXS63`9&dCsx`zj5 z&@TIK_&3KZ{hQ;J{>|}9e{Z~6Po75F&QftZ)2{H-@Cx)u!BgfOqSJ1pLS$Qr;~Q{R zgt6Sn-WyGfM@KPDOPS&_9OI*4Bgur3X!taCw zH!iM6Z?n8T5EuTahI@JynwPg~xH_2ub(1=A!R>b(^5D3qH@N)XDR6>kTXbLNh>+zw zv?AH#lcS?{YGiVJuUOkA^a?0eUFo2JHz}fz=^WC=nX2oUtN%#2%+~!`1?q?#i44O@NPR~TohqGO9dBEDWz?DYQj!a&- z-$#ehJqgZ55JuaghPk~eX#*zwK%hJ`mBNIy7E_3yY_FpFs-&qegJr9|%I~yGfP4H8pV^Dem9!yU{N7IMjtZt#tW_6d z{|U}2z8~KYVoaoe*k)p#0pvC-cZc?4SnkDv8Ndp4#ShT`JwNj4f94xIVyq2-@y9p1 zBMrak&NLP^+y=XGEj@!ZX}L^(zFbP%wQ4q9uH;L#S~1-{y-+CTj%@Ew%cBWv>AYRZ zgqW_cj61<-^L5Si^bj|e%*uqC*@%Nay!%Ep5C;5 zxLiG$-kz?dV?11DKA*#p5Bc<=Y#j#wT6(_5dEjn2cg=L$y}dnKw{G9j*Ox|0s_D#p z4#|X_nG-o&|E3d&HgL9@nGf;Mp;~D3k%8^6OOF+@)pD&oQx8oQYOr2}lJy0wHBR^S z^zKL_zzmj(V2(6XOixA9DZ#*45}&>O-F@4;`vwNUaIr9*req07q`Kjhsbbnk(TC=` zK+1wycyz~=KO>>*tQ<2Nzo&r+6L7=tw8~<(X4e)fl`_Pp^7@A@3ZWNVkIC^PWx=FB zcg3fa1TNvR&f?dDH@YPaztbuULocv6ZDINqk_dH!>x(gcEaZWy8SC30>{Pn(YU>Fi z;CBS_cv;Iy9f!^2Go^*fDJfi zbt8Dw!7C*l%7%0NEE6m@s5Y%jK64qX6#QOeJ)sH<_h7!Pw7LzSoZ1-j%`&zmV9A$gew5f4r<^gk~;I-@ih7p?B%BKg#rK zH@~@y|2y)7hB7WSYxtekdek-dRco)1ET|I~qNB_X26cjULig@#-X{}%zBsF&-$Rha z%UWN^gX>=D?w6wr{<_g+JtzeuY$8~?(C|C0x`Do^JaYOKQVgVwx-kgd;Mr-^4VaFt z%Rje;OXu-hFYc1y7yDjV(%kSnt+L2g7Q~YES4b3;1NVNiPeD1bFZz*d?)joj@T;s1 zM8J>ptm;#^`RBCC!P#y43JF4`kNd*0WJbt>`QCF@RYsVT2Q@=AZMN zK87ieaRq-Fe0l#SNoj(nOw^khOe#^W?T`57eki4_pF&|dVa(!D*x z&eGe{-P7GWuyuQ1cTaj@Uf5j@=BuTAaciGzd2#zb{=97x_eV5yC4J0^hF1KYPTLV| zTGBXgB%-x^ud+THlmPg*Gz_;&)Z#*i^-YMKHI>6{YhKT_HmS-X1m1K#q1j)a?NM7V zaSp*Ut(PVR@-ux}XI1})+vQ}~K!kdQETE;~iK;zUa)q7s7{9N$E z>o4-O&F+z|mU9@3rF2 zFT=z6{4l<*4viK{XuLvKyW8>Buz&os_x(GZg64kMmU@kFUw_MQBs7e7$59V; zxU0W-E0Zh2aj!e=yBhY1Uw-sT4a4M_b%O!>=E>uaXjsrZ3i;$67#zQnCe{6WQ&&H! z!v)PbFkF!Rov`n~sHVpP?BCw`^C9e-l4%ICRWlsVnbCGRrc>Lo3FBEe)DQAW*mKYB z#$QP@$i~ZXDTIsR&2TIm7nLsDhL=Sc_it%=5@yQt5x}m4pANU-eYfLuHyMt5(>Tu8 zu-_^Ec3Q&-*kQmv`jrnk;du5#zXAK=ck8dy;dqt=?Mj;FyJrW9D){6X4Vw+vb-#D; z2@T_U3}(3WjRPOhFrH^|zzFwCN4mx|jOR-97_jsEj&j;j#K&_aP%S#VeCOACQX0nd zHev?smeJqgHV6@p`|sXuz!K|zt5?H#ZV3DLI(_$zeB-Mc#`8Wl8L(^TsyAyG&+ed* zbhzLB*dez(0JhVBr5?EM<2u|R2ILgH4)@^Q5B!COalb8XyBhZ8tsnVWoD(J zYJ#P?AuHAiu5pLb#16RQ*Xa?DcNt1g^{Ores1=$e^ z<2@;?AD9NHmG%5ppLzf<5g+%Z1;Ijq>HK53e>ivVS9Q2ufa&xRX38wcZbe>#Y&nDl z*)|B{nmX1Up{~aM4PjhI76juuv>+JQ!Ue&&?kot#b#_58t_=)=aeZMB?05?p*Zl>B z3+ne#E?gTK6prirf?(WV5Cr48zaUspACJ87Oe-CZ?XLb2#x?grFs`)^f^kiI5bS9K zcCn5OZ^p;-m~=QV?70>&?vW1)$HpND#y#*sFz$N~f^n~V5R7}=gJ9g_9t7i_?jTrD zzm_r!8gmlHJzlylFvp{WaW7X8jQh}nV1q4S-0NkAGwYrpdmwoUvW*e;iS4?s>pDPp zTlBtP#!KkSmjK&>Z`M78-F)|+r!}nodhS7UVXt}PU4O4(QNTDBV>rtE#4ki{BTNr> z*wzeMgM;WkI6uO=5J?a$1cV?M&-Vy|4Wg0{g7MsrAQ%}Bg7N&0AlNYgG>kISKc zINnQ)qU#Ient9FVnIxuujF0Q)gJ4`c9|Yt2`5@S4)rJpt^$b!jci-_-4>3x{R|HIi zQ?UQ|;=%u^VRgV#aOiMf*!+VN8uoaLa8I;=J>`LYWyc?gsU-69G+>*J_`dPE|MNZ_ zANv|6pWkf%>`4t{e?sQ1Oy95k_{2YISPx(vuP_aa}9z+PwpTZO&QLGi6MV8mH-*G*1YxzGbM`MeY`t)C3H?KkiKJDq<$fNA|C z?8-mB(7H=_X0KooMYgV>C-=kdj>GZLtYqO{|Mvx$r>gSrhtS!uj2zvv(3?b zk=7vi6qSGqM;QHsU`%%qjC6uvp%$>sEnqz@U;`~+gDqeqEnx8$u>CDy2U@`9TEHqT zU`I3z`G@Mn`7w{4#?y(1`Dczh2z#al?D-ZjOX-Ur&CV7uqhEId#oPIjmx>Y29Fq{H z%L?Q3!j82Fr^}IFxVu|~V;R#j^Tv0)1?+(qu!mZ}9%%tP(E|2Z3)tft2AyC#sDG5_ z04h<@Hlm*J>I?UMX_z;U4j3>mP3|kx;k-1trccXrgJuM8@^W_z7}pdBg*)B?_CO2R zLoHyBw1Ayx0eh?k?C}<`CtARsY5{w?1?-s?u;*LA*q8}f`_v&k_d@4`w+`XGQ9-a{ zEns)HfZg2!cCUtkPp^JHuVFs*1RFoir?*V=;Q-_=YjB*_83N`f${t__ull)-Mw1BNfg%CtD1lXkkGN^OotG0Sg7dZUaoq+8gc|U^;zX*oOe4oyRY}2LKak2cO4hB!EJ$V#0w&T2S(|M*L?V8wE*RvThW-)Og(nCWY60tM0UHc}bt0y7 z(0`%zQLhcl?ZFuo!mr)&I~PWCEhB>Zxh-D>34?XcPR$3(r>ln_j=Hh zerp`RjqvLPP5v}5d|xU!JRdfqt=1mv$E><_r}eYeuUen8zGi(3z3%T~mG-||-^Xp9 z^4H$h(RPmdcRq6UY?Rvdm|eOMU;KL!-e+NrBJZ-~1(xzhmunsEgXdfD{1%>n#d95a zJB;Ty@$lZroAB^n$Unhz71GRh`%yeE;<*td-;C#zc#a`+dqDP4ygQ&Mw;*Fbg6DEr zzwU#6d=t+H;C~VP{ta?sdASOHSv+q-xDR6h`7Jyfpt!#R*!SQ!i#H#-O?*v{v~)aw zhwmUB=9a*NH-5%TzWCOBlE3}nk7?BLa_;m=Jmi-=GVP?Lc{I~Z`7kX(eC|eAzi?*S zpQH>ye;*z{o`YyVyi6G|{p8u?LGx(Je-3%-jr#@^aLQ22if7AHPCC3P8MzOcP3;kFsPm!JJ$r>&jOV_J~d?{D#K6qO?T&WCY>Y4OtIg35h zsr-B;U7C;dZ}0D}&x>`MOIhe!z@F5FTpnwF&BeZ4cPcJ|>YiKDf=^9FZ-JjKl$RN@ zmcce~+zE1Unc?%*stozk63??cmdQcoV77Ms>EI!Yi(!xv_TiVnOr}=qU1mD6)uXuF z=(HxpP^p)eJz6yKvNCzr@9E$aS5p;Av!{cS=1^T0SX*W$9NE^h<0S;O56v81X7J)% zrZ%_4u+8UOWS6?pK-V12^^ca|VJB0X7Jl>84SiMxtE@v=bq7wGkoiI_t4^r!>}<)@ z=9_m_F-Y_XPQkzl6ybQRmR8I2xgDaGJD3Ki>4P<+ zwPo2tLH^*tpxF|X#W#l*6Dp2O;%V3~Avh}iGOPXNMqjEgDezm$N~+(I^YG2}-CkF7g!ho?V;E z;83GeC*bUCovpDb9x0p1_ zQzwP(gwqh6qBzVvaYb6n9}Y@LgEIICVs@dBLz04m`=@{{p(6+N(QtdIx*fJVP%;f{ z1y@4lDtjlsvTa2{cOy?Zpi$-E;Hl+Attogqo{MwhlQ)M8C0v!gw06rQLqw0GuU<+5 z<}-En?tB>!){6XG+C9W5F!vk7`|C8@PF_2^G#>nEIEPv)Xw zuP|QIaQ)(oXB*!Dto&9aup)sK39Lw9MFJ}lSdqYr1Xd)lB7qeNtVm!*0{?v^pltvj z=c2czjI#CoqF$LGrz(R?8x2-Rf0JGCT#>)Q;MB~)OJHC&x3uXNfA*Jbar6nkm{ol- z<`*$WFBTjZzr$qO!kXPc;FK(;jag?J!}N5>5$^?8A~H6xFlE0prNP~@6xLZps+A+qK93T}v~hP0Spw-m#k zKf|YJ4Q?Qk0dHKQ;cHb~Lf+b##C*v!3K`t#Sy>VjK4o*sQ?jkpEr;b~K@2Pwj+gaj zVbT}N$xfXJ?7c1Kk%J>I)G~JFP^M7KOv^*_12VCZf>u}B@P##3AAOg_HHIro?fmbx zX=+MWmfCUUr0!X)EVaWOKdNSO&XLtR)4aUPS;ex%6KR7f={Z?rRm*aEhAT_$*ovw3 zkG>7zB6X;|3~FVmoztk80%@8e^p$W!SHq{3|F5*v&eH+^e`K|sH`RI#_e&~SE34GR zDm8a-qK6Ah>t{Cg_GH0aY>`=Tb*I)uEn|^b!>B`_LvFWN;I#xM6gU5^R%o5_`l^6( z_rqJ}WGb2dUUYR)>@?oG=-Z$KtB((lD@&J-rqvRr)4Fu&-7V~|cVL6rH?TpBhc4fS z6OszXZr;bS+3x4Cscbtog4VF%@&6hpD1C#Af$+NpVLu7@xAFV~HlOL=Td{cP<8Xfu z;nsro6I@V)-$xA^(noGa)!$cw?s?d~{T0OfGl+jRc|h395zjlZiH&QLE(4D|0B#Cy z^Y^dVAo+Q0YC8*?;q>n?_~P$IJfC4;^}7W0lZq#L{VtxjA^e9B_us1BeVgK8gObDN5Oy!*#Y6nQ>XD5OZ@%Avbp9b|{0Z{M z{KZYj%J+%{RwS?@ffWg?NMJ<*D-!sBTmt{{?8)|vI?xRbC+wkEGQ4{kA~x^iMZ8mt+@!jy7oG<>Lzpt>zP>qlc{hjYIWZf-q&w< z3=Uc+OIFAE=YZEMMApXZRm4sAMz}kzWZ}(u%W(t{v%WCU-6T+T>G@WI&ckKbawV-sPfBI5!J2Dy# zk59(!J&B1)@?Qw%w=u zHHDK@3gwb2XY}i^B6FD%t~NCMR#~I@L-5hz&afsb*>WzgX_5A7E0w7olx0t*b8r6W z;c_(xI@BGE?AjBJysC2MU&I_=q=Dr$uxuSJ>5y5Wt-Ea6@lcwkw09q6!Jb^E6cB`7{IG3pd2IuKHp$y-#|bFH@X+nHym z#Q27db{-o;4q%F!rkp3PdJi_O@&iv4(!Opcq+O-C8KQiSA4%w(F>^WSn|W8 zqr1bAy>@IIRsDEG)b+AX@In;L1D^C`;P$3x8h%VqR^iTAyoKXVCLcdh<7n#9@u^q> z37XovbLXywQYkZ^&u!s4n=K1BGIc4h=U_l^uy^vTHrXa^6!A2cms`P0rxh=ki&F1z zhP%s(6!V$VLS;|2yik$;KL-B|4gQf#DVr}wut|LyC;aGg#59MjL?)Xb!Ud(WoZ1Mx z*$QXtg+rM-ifW_`OX-oiD2qA3daU6B&gm$;Swc0%lUgC~LX0~Qgj&n_NM0BbiB@9MMi~87MZCG7^dsUE3 zyj(9wAFVUaXP&f)xxiy{ zY+LA~;f4;53mpvVvt@9W%HhC%TN4!YblXzZJovONHNd=W3;7`LbsY{VbJ~_tQ%tgC zsoqi(6nwC+!?s%Xqesh!Rb4`Ba;G&?n4PmuUX3{05$7QzPV^tfdiw^#G6L}lYQcS5 zc5QLWMy8lY+bd=wYl=4?2q>}sK7#nz?rry%{r+TlDryf;B*wz3B{F?LgMF#3pux0- z(3djZ$J?xvcdRng9`79~&pZ7T*)NIrdHuSq_*Spq1}on0^$S_?ZC=04R(!kZw-J2x zSgMwmRfscY>9@v?L~2!0=UxuH0V|oGjno|XPP&I&_b$4luKPy1hg~=7<^1d(*S(wW zq;!*yAuB35P<0j4KVl74dz3!V9f!NuaPNn^&u|}rd#mA|gL}K-uE2f0;XZ=)>xkh# zW+k$w`%Wv7Gu?MviD}b)ua&4(jPS<+H{A~aUNGPffu8Ap#7Ye4`i$v2VI_8$?#HY| zubKYG;WpF%1l(r&pMu*=|I={y8}UB__cp`*yp6 zvCy`v`Qkl?p|;WdYzBivl~>g9<8Axr=X+$GP4`1|_qy&AboaUL$LZecx}T!E-*rDj z_cqsUwZpyLb$8Kyz3UFqJ>a@~=-%PF2kC}1nJ)4d7j8M0q5FVv%drgI72)3M;2#t2 ze#d>caBmZC-tTC2Oy#rnay5~kWkco2i}`wdm4vaRRnY;{_1y!jhVs)3v)Wt8ocIr| z8qL(|yQ}DU&85n29ufA40UNHC=LyyHP6$}^NH$+#11f_W<>|3TxDI}j{rW-FuWw^I z)bH_Cjh$@O<3_C}$4EY7oF$KuShv0daj|aI^}n0}eA7a?F7u4;RaP}WkN9-`|KkRK zot9n96%N^TS&PeWaCbh&8661A{weE~#=d!n^^>5%_<8Rp<7Yq7CoSgK!0ijlxcp&= zn{@9`bl>Ptx1l9mWQ;DG%Vs2z2fF>{9iif9wBM8|Z7=TxEXaO9{@9McONR#$Z#&)` zwQ4e@p{ON)I$!0iu$!;4U6=Vvy=w;#cNsjOT`x9dtdp~__aR-<9%Hq?*9b$t*^1Ag z)WAx@;eO68EfkBDdQ~e(3j`t00Gm;CeH?ejB?6ngk}krUHY%G9RG%Pkkk2{E-aD9!dcoW7>>H#<-)?bTs2>-$?`** z8?5n#`RRN$o~dG7iAqVq-Upf?H(U%S`c$#zM)bKU2as+5Swp_}!p^vKIka`Lzaabk z?Oi{oWb#HOgZB%%PFGAUFx2e``^hZVWzkKWpSH6LReK&yw5r1v0AK6Ci&>jFUCGR{ zy<)!<<-Yyr4ZfjEBHI-~Zj`Vq3)8S`Hh29DAaavqlr~XE>2&;pN{6;NYX4tU{UQoBNAy2m#4Z5`puuk1KR1osPbo`PC$FS5tLpPSdM?g9A z=97O0sdRi)r6a(uBWTSp6zhfQqxHPaoHfWb0zgsPseW0}yjscTevw9K4$r#+4$Ire z;MZx*PisHMPkH=`z;)zdre#TEjaxy-rwx*Ag|NxBu89LsMA~#a@o~+gPdo9efCaS^ z!iPtcR4lM~Yv}KWJMc!!+WzTfYfE#zlNthTG0Z`mEoAze~5x`jo&^{RF{Zd)FiI zQ@n~WA5vj@MBHuGr&XBO5D(NfAD@Mrk4wMZ`W=NE^5Fh1+#HxokG#QOq~Ql61dWi zOME_V*mmp7fL{i>Xg{pi;+y%&Hfq26K8`o>W!|l}{seAa-iT{i82_WOs;lxQ`+&3o z2+xxohqpr)A4fR->olx}nOU!84L*ak$(wf3)^V_$e?`!j_D0!%dHq5rCwb_D?F@4n ztG@~yv{j?w#GWXu$EoO^sF-(4HF_cTXTi4_f9^0iz(h(uh2zSN_CI%+DRls-_jUj1 z>ka9(hhw8rOo1v}wRRyU%7<-WqYcb8D+bBuvIhQS_k(iyhKLt-5~LY&U;XEBuWFXJ zVWXDv{-*|d|8?xpO!E^+<8o}xSn=5Y7e+oU*VfED_h}1sF3YM_yO8HB``<*oEYrFy zT_Fm`3{De7M=B$2IK;6m`qiro**ffhGEe^({5!2-VZcfar-Z(;j7l0#9U|(3CxL6$ z2T#Gx`2PxTS>JVvI-D`dx~IMCZxoE>#!XjaAz`BY$_;7%oeHn(t8c^Y)*)@y-@{G3 zr#*PAe@wi8fSY=3@Q@shB~$iDG(4n>uIU3wX#4GV5Ei{QWeAbuU$%+=DEtW%{UFhk z!`ZPjWlW-@YcHmkJ)T0oJN@&R3j&7nXf+Es!oMnmH~Ojk{%6EXd2?RXO^@UQe8$Jr zFa;kXK92Q#@M^Z5NTp(tVy0FbDdek}YIg3Zmw`o)1bwzK&w?l2#{7%o@9nA{ct*&n z(wG)i$8QANomOdKo>q_yx0>(H)bi3Ucv8?gJeRM!_2dRCQ^$U{>4iFw)VSa|;9Y7} zL_!SyPbQFVtT1l>R}sII&nC-ONn$+SAR^0x;YcmVb`_9f`M|wWPTkIS6jr0D;Z$b2 zsMd9`?d!B^6`am2>iO>ir_16TpLLS`D%RD{8@z3{Hrb6r+GJz?teV-4er(O|>lZq) z2#$wG+?jPsJburI$Nw;Rymk>D2bRF&fQLs2?v!}^zQH5Q66N>8pRk;mY4@E z$_0)&C}Pw+F?|~>d!yxS2Bor3lG3HZ7X_)4<3|h2?RA-G!#B(99Sv<`4JYtt>R1_L z^aIK>GdN{l>-I(nr_;*jCZw+zhp;@YwfxHy%ff{|Wr1y5J9t1jN#=_)xUXK0^E=?D ze{R``_$F-WX>adhohjP{x4fV)bxQfX8oYVS%Nm2)n;AFH$Tx&p}($^FT?k>M))6r+b?{`3E$p@ z%oXwLvHeECIG$||*KS>*!ZpL(b&?yc)#rDhGx-|e@_jkpv`1{B8}BRe*6Cwhq{TGw z5kFj-_*(Vd6pvx+VIP@cm|o&tt!M}t;o@*DBR`l<|M`m7YY>*aUW>Pg6a5_0*0g9R z;O|q=Z|g#=Gy%+l?w^N|^HuoP`AS{jJO#I)-V55g z5tcvOK9tW6<%>h?b_2E=5^uLAg`S>mUDbY_!t23%gC%s_;eslz9a>LYlntWRQTr5f zj)qI84tsNO*|0IJDB0C|yP_O4(82P@XSa23|*l<&|jA&ew$@!JKQ2~ z5sOZ3-eX$QW|va}O!zwke*!Z*Xr@*>N`0C1^iyYOb2xWSL6N5{#N z*6~4nJG?{3HSdhu3)6gQ9S3ARTsN>YRajC3HRlSfkEg&^81={=B+OeL535993{bhnuNWnVWoFecBzYo78Kk zrgv1^@o{NT@AiNft#|x3^)3dt)(yf&@KEn==9{0;JNj$A8^yP&cVlq-g&$Ypn_+HU z44a6ki}wPTc|XB7;*9&z^ynRV(t4M~x5GR1PV>&Vy)ey}*1HtrMBI})PUxLUOY7bH zo9fmM>-7lJm=RK!67U!Grjs91kEY;D)|6vZgCe zho?pzVYs!(W$Fvt4`p{3-#YKp@Hg}R$Kcla%P?=iL*02J-}p7d%sNN*8_aO84Gib% zjA*|>+XgOm<$!u;)O#9lod&HRIrus8KtBTc^XM4UOF1wdZD?ajV-^p8w72mWG$)2u z%PpYhoLDmeoiy2Y(0*a^sdev@(7iJ;2)Pw;vrW(9?PQ~DgRMOL8g=UeYew<iUk~cL}|g^Dkw%wO$fd!b6>{@Xb%ucl6gfU&Xhn^EJ5r!q-)J zKbTjq-FRI+(*4pmfe!1V1-$XH4$+PGVZ57Yd-Robwa&j8-%dQxd7VDe@WM3jx=wrx z<3!|d)p0^EO9K^rn?eO~)+^c(DPL`rSeW0cFhu^0D z{2bgmj|sa65B2B$eDf3fLw~J5_u|{spI?C6FZ>5o_-0sh+wI2d>Xxp@ejap~zrTn# zUe!074`a=jq{Zj)=F$VcC{1zL7aGY@*ctST-V2-Kpho4s;iMJGe{AJ+r=ha8u z{(elsJ^I*kOw4(lU_1Tt=5eTx4}ce~j~~bPTDUmB^Q-v2LM8)iPo<6S*9709+MSs3 ziL!=%57&|+3)>$QxRL<&pm^t#!Yq5NuqXXNqW@*`!FeXl$0wG+2ko%r<2MXGE`^QP zml6Ldrlp_?KKqn>-l9CvJmgtNy73+5dkS=|SJz`ZV4S3Dy7qEc`rmi1j)6@q%)(Zd2j?u8DVpg}ST5 zGW{+${HF6*s0w>HaZVtdm`N43Jn61x4%@EZ1=jBYhrhSG%whhl&H6n2v35s|EiP#L zeTC<(v#4up(S|;%;MBnlMoQUcI;0^rmj5NxQ%frUte?Js__VJ6A-<{qGpf986e;tY zKWv^KC$5-dcj_&7?)))9x8gt~bI+dSngQ6zH(r>3IIi6VG46eTOLb&3h7X^l9D3;+i~Ohcb{DmNwdj z8qD~0yPBWDvKCD5?K+&r_1$(oB<4RtSIdden>L{`T1xQ2cyzbD528T6a=nsVgKpdP zxjf=5E>PAV!TR$y%nLFP{to;q(qO5Gy-MWB<%Y~?R^yJ}DBNuO)E? z*|APvZr(QRKhSHzmy^fnEBY-fAH>f(`T0}GUtcnztA7|--7*b2|Nmi;{O3Mz=Kud) za{jkY@sd=b73a|1kDY@2J*EAJA$O;K&@%qVMPyu6GXAF}%h*3vOOmbR?&P~(QaM{n z{EJn@tc*lWiv3zILz!1O-6)eK@U)2Ty|lJx(YkR742l~3xbwT+tK*L0z6Z^bp{_oZ!u^E7DH<3*gtGFL8gx3<_bOB=wy z8GNGuRVYs{%!rufr|3g{=oIqKQ_^1EJX7US=gsqrznpE=Uxe=hv>-ciQWMYj>} z`EX}z3-e~Y7s9V#;H(!oa{no5Y=FBslOeZGdM<`v`B15>>AZlvx)grcxhlp947Z6m z`FX67apiE8^5bqi%I5nBw^@ek)3mr>XczntCuT-0ah4a>oVNeK(1$_Gj*W$}XJ=?4 zX{`O9Z1P3P*sjVK_hX@a%@nFwn5JY&Ka?k|otNVqx-nkLmvF|PUXzT?YtC(f~mH}z4Qnc=H z#urh&#E+}?3#Em8^hiF7Q`qHtOS$*82`8E74g=&V;qC6e)A2kGOvpLt@~p-V7al1W zi#RwfHz{rsMEGIUSF}yg#<&{189PvMx@3GJ8RL#^3J7~@-QBPT3_?Oau7_;_bi|SA ztV6lym2Z~oH6rh@niB8ND?OlYTGm)5JBNJ=hHkd2eby5*Nvsry5R5(8t1NEw;;yb_ zJu@$DqZ>hmXK{&RXj0|m(fR3e(bzXY_*$2y0Mov#>x3?G#?{2kggE9QQ&byM9QgS> z7q6PhV&xphcZDp&Qm=Tf-B}`COb6GAEB)bqBA>!wctc>^k7n*;n=0VyyG&8F4c^IYpbTP*5f2=I24h1<&2(LxC~ zM(S;TDy@WfSYw4!0DL3hQcoskBHS%y=#M-;iNd-7IA@A(p0MA#3s|D!F+rB)2SIEoHPQ-nEjRU`|ufadk@?zOWt{F1avWYv4eK z?UP}B;Y?q@g&VE5_NgeRghff`1I~m(-XNbSF+;XE3rhG)?RU?38brO6&mK&o7va=Z zLzWY@)BX=zI8)GDg(>}D9*rpas8O>A)slFvKZM6kIJUCP7ukb_-)wJD-kFn5nWG=tIQoqin0YGi>A!*cA`4Th zFfH|n{vnh@9CgxAPlP;Y#u5+bQ&y)7*i%neD&YNLRr6qdHSfQ2`hE!uCwc|hNO9DcM zOs-bri3!m^mGc6$p}q#ZI5t!x3g!c0ohb7))hFMGbgi|5+j8C4NMyKYJ>%4g7rOly z4RXo~&ZET@^6;8-Su4@o;r24Fr9-vuRGt>jTtNiQjR8&>k_yE)L z%#}XiQ_kdZE91gX@8kb4>KO8<`J(hn*;xh94zcm@l@@lA=|h;XETDcnldLS`X_r}HE%=*u%s7`LV);q6vL z(fJV%9mc}=^w}%J0#D|z35|iURK*S!N9G49fE)i%PgZX2qIL1^QKhbdBbaq;|({DmM+i4Yb z|H?VXo&H_$#~%HI^|Blb({BU(QiVFU&Aaty$jTkwZ@4$XeT(7VOt`9BS=Uh?uO*Jh zuZMV%@epmjJoS3WGSeO0(@!**NQ zX}w!hpV1jYT1O1IXn*!g;?`WUo{N<#3vRz?zwnz_sMFKv104|lQJnc(6=%L6JK87k zNB`z5UR;q#O~zy6!xQ_Y&X_*PM?IEjeS@?18^%22poKF*)H%#@ZzP<$?W(JvI{E5mP%HR0^fWqh4Hzesll6dwJ%#5u+qAay4N9yeH0wk-eb zYfc)neZpV1!4g2)S^jx;sjS00F50K$a7@{vuYjJBAG&w8%Ra(>5$ABRj80lf97W3R zg5;6mae9+;t}ET0bgOe+>F%Oio$E^X2D-P({s!G4y4AU^bZ@3xo$E?>58diqSGou2 zR_D6XJxI4Y*Ol%Oy4AU^bjRuL?GgD$_kQ7)=ep8;K)B_(u5`}{_f`kLBHaCs`-pJM zb6sx%{xOT!ea_~qv~*H5I$t5nW9Iq6aNlX39}M^1=J~;Ji^Za1AA2ZJnhWl}x_uHfLlJt3AuycMe+)u%+>mb6P zhI^}l{|wyD`N4qWykK#DFvpx5p|7_>KF+Vr-a9@qJ~c6lktVE(>bzLo3}GHk*b)UA z95|kB8Bi9AmMDTY%SReKvwX;LvmU4ER76Ld5vn}%aOckG2oCmWipDNyG? zN-21Jk#L?rhEmb4r77Q7cAT2S@$@`qROXc7fl%_Slnmn3Yxkz{%{;oTq3#y5W%58% zrK26t$xf@{Fd|QCk#$cNG`es`iW9Rcw+ypE`#Y_k)H|M?kTcRAYEJvI^kJqU9lLQZ zMM*aX&X^hcP|9gv#Vhrv(~{F3l%57_9nvr{Fh>~n`BtG^&KPOHx@tMr^zYHh3~7ad z9OAf(aW04qZC+o>zA@H%&(D<96piAa{>Y!YN^TkazayJ4Bk>tRmom ziLsm1)3z?kL+h;Q6U*_3FyqTHoIBQg720J@oAXR2?HXw7b1vCFvo0QmA92_hqa}So z#NXaU{Ux7QVeSfj2GQ>oVem~{(msqgY5W-8q``4NbK(fznunVejBlpm&C1QbD}Uy= zmDlo`{Jsrt%1q1)iZrYFMq~VSpGqUoVI%z?7h&XhXq%#kmw^2wKK$n?mtOafpPvF9 zIY#a5q73+BIvn01FuFegeO7jaL@HuOM)oFCdr_w-+kx<#O5jAgiDVLII}T4M80-ZC zHjzk7#&P;f3O5I_E@ik537Z^`jmH=gH_6zO$*8)|&I}hFvT^$l5CrTD87?+D8r>5f z<=pWaasD#(@10142r0Vys_K)on&iXqg%X1g_I;xWLw!I}#hPlmsV{_aEURI3hYUA$ zJA`mrw|VYmhp3y|yY5yrwC?;2+?1(28?()NAKa9G2g0mfE%$8S;|cR~Dh&0PvAkb| zk@`TMoIC>TUXvcyc+<|Q^2^5Ufp&N*92@0m*xoBu%+)&aO9l_j<71u)qb#T=x!-}LC$)^CdS57f+wz7X-wyM zRNsNvoEF0DaAFLzmY_}j;aQZ_pI?L=4LY&WSV~N^?(6sZYW>mm750&f{OY)fbeKO- z6`^0O^XSH{+0d^xvA2bKLVaT15{94HKj70BkS)#VM0kij#NpT;yoS^PstLuOUeyqc z1$H;CmTl5T5uF(H8*ORxoIC3^*u6Plsi)5bKK;*dW^iX?}$gjL!o`*EbLf>krH z-*SRYhBDF~x1za1T}&4_^1vJ(R-5qNuSmIku;9!cQ&yP6iz*AZ6oEl&&V@-sfB~ym zdluM985UEN+V-KRhg>-x(Rf4H>Bi2B7uBG7Oyg=CV~q!Sz0(VqTsb;+w}dyy;kq6VWo*qva7>Z+f=y- zSTP?g=gu}!9-<>^g_j`Z$@4Bh98aEakU0B?_xKhpr%Z<&yr6>R^1s=^6$}Lhz!`yO zTy!1U!jGcN=wDBpok(s|VJQ zdDf^SS7|?$qr_$1+3Dn`Y&$vr`DKG|XB=npyv(+foUZ&tqKjxQ^CYa1KG)0Sb{%D6w; zvDFFN0>=CB6ZQy&@4tQ+J706MJ8F+b$Ltxb+NNQ<*;};p-Kw3J_KR8_{h=&(^y2ba z(T6z$ap7*D{JbET@8Qz3t0wnpZMS<;?nEV^?15Djj&X!G@hx_sAa-14frDR z4(n`%zgFSzR_R#j=YhAs*VM zsAIH7}8^SD{WCY&qVu=ql2$N(%#hW z!eS*X-!I@MPSWad{na2|?~!n5#Y))hjSVwmZv^i=Aiu8$KQuxnY;i?8%qw<05lu$b zJ?GdQ;SYqEaRzRi=zY3r*EV6bh6d?1ZHkBvHXv;;cX7o!8HF1HKOCnJ_eMuf3+5_r zW&d*4bz@Fi+wdGeT%ydgv)#2>8<|dhvm&J?x7sgMQ~{MH(_jRq_iC(jr>xto$i$em zQVoxW_rU%;Ix#+ai{K0W`9|2*zTL4@BKrDCj2(s~pXlE=;>1Sn(b(=p80%|DA9t!X z!eLLG7~eA<9*ZVpd&WUV>H_X&Z^RqNyeh667HccSq^gSV7&Xs>i{-wNy+hI6lY6+A zLd3fYc>erDC5EF3CV>1ACt*+FGC3|-9Sh$~mt#k5f{8F^G=_ZJ8+0SPVZPt1X}f8# zg+54sB}b7qdwW0hMCF%}W_vg>F@_~HW8rb^NR#q6W#WO`iD)VugRM6nADS4$mzD)} zMa$9V754Vn1a7v$wKmWgrI#Ti9no;=W;-=9Ilk8xLZYm#RYJa_VN7{2r!;NpABR41 z)0}`{%)92ISF1W^6Uts9U*Xo%TBKYZ$yG5=0W$~A(}s-@OW{S~YlVT*hxVlp?PasQ z*ti2-v;>A5!PpjDh4{@r0q2`GqJm*N=+<2w)@Jw<|8>O2Jk=+h`p3M^HJ*q~&Q+r^7#<$OM+^Q9ipNb6u}rgEZKF zB&D!@L9F9$b>>mH6>cJsFQj6JT<5XgHQg3OSKR$D+Kt@nWiOpC1kD z*o%uXf}7tXQF{`!w)R<5$RDVjXm__De-;TWb7~PJ=Gmu}p5hegiQV?Z?weWBjYm^9 zc67*9Hi?N*vP1-;SK>t_yNFgQ)_so{gTFB+)%#Hy<=F~F=4We- zjWjM4{tgMjGyT^)G^E{}G&WdcMp zMiQ|&)`?33z93MN>-={hezutbcMYngdyZH7{;|@}>JnT9i-&eD)t5vht z&53(>ra3E$8l76io-R*ulRs|ir=frkVf>+m6u&25zqJkP5fo1=j}HmGS?|`2WB7_`jBx+oNmg-kx+VcQ9QjWkXwHxt-~7PjA{jT&^BW zZ%^0K81<*4M{sHxPR9zzV}8L9RKj0s_;j{(=c%`uftiue6%Z%;&cE`-xy0=Tue;`I^M2=Id!hP|aZ9WgW}t%O#-;IvOF#rK!(& zzCOG^eW<^CTe?`74vwFCS6P@Y7P9Gb<{%=+**O1ZX}!4h`p}kA8LK$Up)LEs|Gxd9 zEfalsAexDzTS8lg?6KXLb&T6`2`N1yiPY}VAqk2k`NoDFzJ^9e@d8+W5YgTALfT+@{k5j$=uK@{fFXqWdDBQvZqJ{M@4Myp1rdXDsL?_qLOUd5vH+R>wE0D~F;DzWh-u<;EG?T|R|(jI|`FpsxKQnhza z#zu$6!VyfGMs53sL)pXCgS85D`+IJB$5TT?F+JUXgLHwB0Wy#riHU@U$A-4|+w_rN z$=KK=c6lSy{QNj0X8`t1B=&|An8h3to}euh8wehc?z59a zdqs*ShKFO37)pvrm`M9>%!rGR;r&7dF@HOSQX~+NIf)x0@puYFXv_6|TegY)QAS=* zib5J4pTazQEDF)xazg_94hls?40>3zF&-JQledgxiy)_Aq2lP@P9j4>TlUPO;73PL z1w=EFLi`|l9`Jv&7BZ9Usi0)}I`+;pZ?%ICW0EH}Nw zsDManJEFK1X}q-p8heKE97O`iSMRnS#+U2EwHTGZAzJ3GBbl+D22MH14qJ1dt!9Rj$!FRA{rh`a#h`KtRn&8t^M2kkx)nkn|-ST zxaoO52Bv*Fwf=V3VKGJuD3A3O1I9%C0C&Rg7w=O#RZc*1m}eC)HEbjJT9o(&OJ_#JPuE|7|!nbqK)lWN&a4_X>q*v!*W(GKo$#CiXo=L}$+wZ%wtzup@ zQwxyWAGmnfq{Wq(cD+~=vDw&=Se(Y8iqx?_#orfQd~q{P=`gmGaYH_W*w|!;J8E!4 zj5y%ak@X+BVPuz;f z`eT=$20GL{olZjs{P|KlHYuCSRGelRHOr^Ya}$oc$G9$8=mOUm4Hb)HDBF%){?z4B z$Dh}SXyat@B2)r%(=t5iik>0&l0#l5Kei%_-UlY-aRM{WU)OR_X;gb7Ri4Wok|(>Y zHS50yx;LV3+=A)U4$PddS^sD7`3xpi&%+~q{!-yAB(%@B;PdTv)Sw92!L!Ol8hrt<`|*_vHjs8q@rBcR;san}~#u6*-|Ky4lM8$Pi6?jQ5?LZO&T z&*Q%so7gy}xRfulx9C6kG^rpBhqv~n=azyyTd2=1Os8x0VyjV@N!z%CFXSzw|bTkwPL{#f2PtU;e78&$Uue$X(`;U8HgEVzxmgigS1qDiI91z-b@B)9*z>=r zm4w4mj{TQm8EL2s{!1B2nCR1L8fh#8{|U_`Nb$>L95LEIZBqHqWFHo;W>z>h-V&82~QbM1<#xC zRPlTYb!8227QX)!=9NVZA~bO~+dpQJf<8QTJnnezf5T=iimj z9gfcnO+GI+`K-bMRnqxWCse2Map|1hT`FEAU}lKkwlDI((SYKX7~=YV!G{@_CDc z^9PDf)baU}!ug`(^G$_wmE-fj;KNkN{95K{G(VTFqkEmtlol#JTJk>RB{f!RiMCe! z4PtJ(4;cp0YWb+RN0%)c_2+5eU4m^7p9jyYg+_g+$>*P&eEzk`=ezJpf(}zE>3pvN z=Z(uNEy|q5nMrXdm7iV9M<&1ME0g~KM|J~+N)YW-HV_{ zUH`iqEDI-*!iT$1e-2XkDfmjCv*AOWTk%KwoTGg1b9~k*pLI8BoQsstUpqLLD4##P zM&ta5^7)_>>T>1tVaMkR<#R%W!pi*R)L1yOsEE_6(&{b5?Xenvyg}X+eL|@5E!6Q1hijg=)FP%NKZKinLx`3LMkAsUq>k?L}NLJ66hdkbu>;c$Ak` z7jn|#Xivk;i5gte?Fa67Jt9q#sk}ICUh9^KQ(1Ux_5y4-Yzb(>TmS{v>MrpLwTzuP z1goX8bIKcLH2?lqZ1Vzx8ss5)`XtjT@19mxdDqI`h?5~ti{OYmtedR+!F1di04<~I znZLFCoU$lV2oA45N?2ap(}(L7jk^dTp9VQ1L$WqT<-*L0>31m1e5IJD#Z_B4g{3je z>kQp|-$nYiNT7X{itPZ$Sn|8TRjb2SM|ViBV5Gm3zvKe*_v@VvjajdZpcQ_ zfM*>~K>8f3?@dgNe&{ zvImiOpy2Xj&^8gAJd$B$9*w`Wddi$dfbrHl!^Qc4K0LCAr)NI)FpaWIww#GzEguK& z6R72HLA`#asP_}_VJ&|FCiA4v6nrkn2A>bWRxN$rpm63KoC6By`wmWC`Euj!>rXMUTa#26*DjzN0wv37iyUKObM69;Zh#-(cRf7HG@IkYv6sMG$$@A z%0c(Dc`@gv=StkV#7GBw{Wd1uy^K0Ds<*qcX-Qk>$xq8XQPW@!6HcB4z}du#%L4R_ z&Yhs6YgD#J)cJS8??ceKEzr8NmOHOft!H6EE!5di`}Eqr-JoeNu@-Ra$ZE|euBRK~ zT4v7(6Y1Hsm~}TMiyFsp|DfV&98dl%q?y2)gz@rl9+z_95I?u3{CNdaCm|{nx99W= zfZH2l#ov&FAcr4 zXK@Rg>}xLxADu1L+jPSDwhw__Tv<2Y553*6TG~oBi2lgO;KTmN8AIGJzRVIV$`ZDa z=dv@iJ|%cHM!&8eA+nX)}GBhS9hZGitFInEI^ z^u=(quk`CXaM+FTxdJ|%`S}w((&tKrlNr`N*D9Y|6WXU6KEI0)oo8zwuBRsD`!Q&i zbl6{_&!dhHS9#Ot$e9{v5I*0B&%1wA`*3ylE;K7s@Rf9i;X@8T0bl7eu6%yq@p(Ob z-U=5R9Ep=ubmkqOeJa$)olu(3}n2?6a5=k;+8QHUjW|V!2T!aXj z$eu8Yv5hVJl09^76B$d&l6@O7wxpdx-OqomTRFD&THayj+a|OAo{MV@tMHEw&Fj>= z-EH4kpncO0t($gin`o}?_4KYCTKL{}^+%^CbPWq}y0CkY?;7`AAVHkbMk>?{37fcc}bUiNCiK zm6(sqqU--y;`!+zMp6BZI(0W%S{q+=fmPnj(ymNSK^yTRx;vG|X&5xjs=#!k6W|9>v8EGI4RXGBBjEayE?;ZUbNKjs8O<6)VH6#lz7AY z;PhPQSErqerP!8EwU0R7d1Wb{>K zqe|3&<^iX-%UZoT)~atit1UTMP1D&agljz>XB3Pp7T1P%GDfqL-cIQP9#N|g$*20K z)9w$A20dt11K+jLZ#*%IH0ssc>QFk1pXJnZxKpPR(zY#D8As6WaaMcDo>@7U44EQM z6UP`0ufnc@-&uA0z^cV`c0Al~v}&o<EUkoswR1`mzO?Dpj3^w&gx! ztbRRbl;wi-)d-{F;k=)>uN0BesM`wWQghNK?rp}KPRYho*K6!=Hj#VEVl?vst4gJK zEB-2@=e{>;#T3y;|=)+d8 zer>cf6@Bp@?fT59AoXwEVU=g56xhP5%v(lJMsa>I@-N|O4e~N(4ZOWe-ESfj5l&&a z_(yrK<)wF#7r;shv(JEh{(~^nHacI(X)*i+ zU1ncz9Q7GN(x=GSuFceUMOwuWNvmUc#~26hCFqw!d};*Mss5+8^-(RXr`oL0V1y=+x4l8B~;)2gyggZhxU^s+QHMEdz4S&?uY zQYaqYHvxyn1B5|r_+F^oZic3XoppYOH#m>jGZ}7 z#nM~(bL|ZmSuc$)UII6xccUXGQ!nQv?Tc8tnj!(0ldc+{3 z19Oq7pV3|KS*<`8w>EH^M*nwhV%4jM)fMh@Ejn*9*Gcs{V-mR zI64VADmer>{DkpX-0J72*{`;bQJy;3f^hhwAIEWj0a46tppSyMreTkk-zf78j93Cy{6k5({ z$sak&jbGS5l$h(c#;p+2j00_C~I6^z#s_MqGCvI;{96GTp`?$JMNI&9?fk zs8gaR&i}BdfE69BJUyL3(M27BZ^k5I(9A1)a zX6$EB2CKn=(lW+*WA0%%`f(mMAUkqVYqQfBLjKu9oucT&4y~Nhjz{O0;=SFBu^!B? zB=LhQIICMlI)zMj8q1s3vtq}J7@fs#Tw3aMtT5yEII~7iJAHH(9fqx2gWXsdWi@Gu zRjHZic>1vPNU1*d<#2PW5~Em;&$u|937vb0eqTg?(!YZ`SUo+RHTp458w&A>{4IFE zs3^Q2Vcfj|=Up3Ocm1uJlGYpwzgrdC$*T8D(!!on4aWW1^+t8A(FF8PK6G{i>h~K)`v=0&Idnr7pR6NG4UD#7 z1D55m+O`KDgnHw!2hoh<-O0$$JCnmu7H#(@@uAb+0!F7s8wGzY&DqYlqOQ+c8XeCneef*pTSeXNo#JLWEnuv) zJ&%4$fxdqSS(@)uo$-GlyA!5GG59@OD>I&-x9D-B!uW4RlNwEjhn^RZt(w?1WHb8# ztCl&8HnnDaTtq+pW;LP=x{baY@{v{l@$9D_i_b7t>dSa(w$`Z;_x9v*>@2eJ6JtFM zy0szP9UQ>@RgglAQ^~?k2bgZ^z8u~B1#-B_Cm~SKX59HEo^_zsxaeZB6c=;F(o{3;=?y{)&{#$9sQUgn0=}E3~rLJhjQ|8 zPVoMD40sH940sIOHv_5hSu=qP_(`d-ku#o^cB7B|YZ`rl?c4Mq{wB7oA3C`1F6{b3 z;_lN8TUq*4A;_|m(H7n>0$Vt)?cBSyUIv>$soF`M)a zzR>&l+aJBPdKATJ1cVOcKnM=sYevBpXNz-!AN7gcT zg57-_A8_|jY26B|14HnOxwk>n$SLe#n5!`Q20!Tw>N*TgfKwn2q`~(~57L2*AP2~G z?Xw1-EkFY>6pRD!fJiVNj0K;A9pE@P4fg&>--JtziS2gz{sw!%F>nOLfL!2SwIfp2l9ga!1r4UaE!P#CGk}W`n23ts~!IQ_7ib6a~YW{5_^rb znsI;_5MG~IX|-=Ee&%L)BTFn(8GICCiaEpqMTDIZaRvDe*c zTma|zG53L=Yy$96@sUE7GjFjBS&O8-T<72b_~o3Ll>3l)E|gep1!?v_5bKYjvinRBkp_X&Iw0xOJID?AzJ@||hj_*~2+9P7n7?fGn7kV4c})5 z%E#oU9=sno<%x2?&3AzQ}un z0n_U$1ANU71doFvpeXQ7Cl?2VRSE{>KzYDpA(a3=4t!h`1cY2F1bD2X0)VDn-^q~X zus@E+*YEj4B&MXvxh19sJi<^$0Da<76Kj$Z-W0+Vgt7y|ZxQ;6Fe^U$(vQzP zATRI-grdp^@`H*X1bF{E20R8l20R8l20R8l20R8l20R8l20R8l2L1{ImHtX$udK&_ z$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx$AHIx O$AHIx$H4yt1OEckJT{mB diff --git a/openssl/lib/libcrypto.lib b/openssl/lib/libcrypto.lib deleted file mode 100644 index f6efee6e5a39bf197172c680e0b747f6599cca66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1003434 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

mI`|0o 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�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 diff --git a/openssl/libcrypto-1_1-x64.dll b/openssl/libcrypto-1_1-x64.dll deleted file mode 100644 index 35bb8cbfe623cc2ab24e5cb3211ddf78fb0121f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2756728 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%0DgT*DJt3I$pss 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

>-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

BDnI6OYJYxV>VKJc9H9K+(V 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%0DBtErcOZ( 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�g1OFbIeZx` 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

A`#TSFgrdl{& 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

`dEv`fTmK#kcMIY0a0H=2g$vjqP}4cJEE+nj3`1 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