Latest update.
This commit is contained in:
-187
@@ -1,187 +0,0 @@
|
||||
# Ignore editor artefacts
|
||||
/.dir-locals.el
|
||||
|
||||
# Top level excludes
|
||||
/Makefile.orig
|
||||
/MINFO
|
||||
/TABLE
|
||||
/*.pc
|
||||
/rehash.time
|
||||
/inc.*
|
||||
/makefile.*
|
||||
/out.*
|
||||
/tmp.*
|
||||
/configdata.pm
|
||||
|
||||
# *all* Makefiles
|
||||
Makefile
|
||||
# ... except in demos
|
||||
!/demos/*/Makefile
|
||||
|
||||
# Links under apps
|
||||
/apps/CA.pl
|
||||
/apps/tsget
|
||||
/apps/tsget.pl
|
||||
/apps/md4.c
|
||||
|
||||
# Auto generated headers
|
||||
/crypto/buildinf.h
|
||||
/apps/progs.h
|
||||
/crypto/include/internal/*_conf.h
|
||||
/openssl/include/opensslconf.h
|
||||
/util/domd
|
||||
|
||||
# error code files
|
||||
/crypto/err/openssl.txt.old
|
||||
/engines/e_afalg.txt.old
|
||||
/engines/e_capi.txt.old
|
||||
/engines/e_dasync.txt.old
|
||||
/engines/e_ossltest.txt.old
|
||||
|
||||
# Executables
|
||||
/apps/openssl
|
||||
/test/sha256t
|
||||
/test/sha512t
|
||||
/test/gost2814789t
|
||||
/test/ssltest_old
|
||||
/test/*test
|
||||
/test/fips_aesavs
|
||||
/test/fips_desmovs
|
||||
/test/fips_dhvs
|
||||
/test/fips_drbgvs
|
||||
/test/fips_dssvs
|
||||
/test/fips_ecdhvs
|
||||
/test/fips_ecdsavs
|
||||
/test/fips_rngvs
|
||||
/test/fips_test_suite
|
||||
/test/ssltest_old
|
||||
/test/x509aux
|
||||
/test/v3ext
|
||||
/test/ossl_shim/ossl_shim
|
||||
|
||||
# Certain files that get created by tests on the fly
|
||||
/test/test-runs
|
||||
/test/buildtest_*
|
||||
|
||||
# Fuzz stuff.
|
||||
# Anything without an extension is an executable on Unix, so we keep files
|
||||
# with extensions. And we keep the corpora subddir versioned as well.
|
||||
# Anything more generic with extensions that should be ignored will be taken
|
||||
# care of by general ignores for those extensions (*.o, *.obj, *.exe, ...)
|
||||
/fuzz/*
|
||||
!/fuzz/README*
|
||||
!/fuzz/corpora
|
||||
!/fuzz/*.*
|
||||
|
||||
# Misc auto generated files
|
||||
/include/openssl/opensslconf.h
|
||||
/tools/c_rehash
|
||||
/tools/c_rehash.pl
|
||||
/util/shlib_wrap.sh
|
||||
/tags
|
||||
/TAGS
|
||||
/libcrypto.map
|
||||
/libssl.map
|
||||
|
||||
# Windows (legacy)
|
||||
/tmp32
|
||||
/tmp32.dbg
|
||||
/tmp32dll
|
||||
/tmp32dll.dbg
|
||||
/out32
|
||||
/out32.dbg
|
||||
/out32dll
|
||||
/out32dll.dbg
|
||||
/inc32
|
||||
/MINFO
|
||||
/ms/.rnd
|
||||
/ms/bcb.mak
|
||||
/ms/libeay32.def
|
||||
/ms/nt.mak
|
||||
/ms/ntdll.mak
|
||||
/ms/ssleay32.def
|
||||
/ms/version32.rc
|
||||
|
||||
# Files created on other branches that are not held in git, and are not
|
||||
# needed on this branch
|
||||
/include/openssl/asn1_mac.h
|
||||
/include/openssl/des_old.h
|
||||
/include/openssl/fips.h
|
||||
/include/openssl/fips_rand.h
|
||||
/include/openssl/krb5_asn.h
|
||||
/include/openssl/kssl.h
|
||||
/include/openssl/pq_compat.h
|
||||
/include/openssl/ssl23.h
|
||||
/include/openssl/tmdiff.h
|
||||
/include/openssl/ui_compat.h
|
||||
/test/fips_aesavs.c
|
||||
/test/fips_desmovs.c
|
||||
/test/fips_dsatest.c
|
||||
/test/fips_dssvs.c
|
||||
/test/fips_hmactest.c
|
||||
/test/fips_randtest.c
|
||||
/test/fips_rngvs.c
|
||||
/test/fips_rsagtest.c
|
||||
/test/fips_rsastest.c
|
||||
/test/fips_rsavtest.c
|
||||
/test/fips_shatest.c
|
||||
/test/fips_test_suite.c
|
||||
/test/shatest.c
|
||||
|
||||
##### Generic patterns
|
||||
# Auto generated assembly language source files
|
||||
*.s
|
||||
!/crypto/*/asm/*.s
|
||||
/crypto/arm*.S
|
||||
/crypto/*/*.S
|
||||
*.asm
|
||||
!/crypto/*/asm/*.asm
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# editor artefacts
|
||||
*.swp
|
||||
.#*
|
||||
\#*#
|
||||
*~
|
||||
|
||||
# Certificate symbolic links
|
||||
*.0
|
||||
|
||||
# All kinds of libraries and executables
|
||||
*.a
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
*.dylib.*
|
||||
*.dll
|
||||
*.dll.*
|
||||
*.exe
|
||||
*.pyc
|
||||
*.exp
|
||||
*.lib
|
||||
*.pdb
|
||||
*.ilk
|
||||
*.def
|
||||
*.rc
|
||||
*.res
|
||||
|
||||
# Misc generated stuff
|
||||
Makefile.save
|
||||
/crypto/**/lib
|
||||
/engines/**/lib
|
||||
/ssl/**/lib
|
||||
*.bak
|
||||
cscope.*
|
||||
*.d
|
||||
pod2htmd.tmp
|
||||
|
||||
# Windows manifest files
|
||||
*.manifest
|
||||
doc-nits
|
||||
|
||||
*.orig
|
||||
*.rej
|
||||
|
||||
+1
-5
@@ -20,12 +20,8 @@ typedef enum OPTION_choice {
|
||||
const OPTIONS info_options[] = {
|
||||
{"help", OPT_HELP, '-', "Display this summary"},
|
||||
{"configdir", OPT_CONFIGDIR, '-', "Default configuration file directory"},
|
||||
{"c", OPT_CONFIGDIR, '-', "Default configuration file directory"},
|
||||
{"enginesdir", OPT_ENGINESDIR, '-', "Default engine module directory"},
|
||||
{"e", OPT_ENGINESDIR, '-', "Default engine module directory"},
|
||||
{"modulesdir", OPT_ENGINESDIR, '-',
|
||||
"Default module directory (other than engine modules)"},
|
||||
{"m", OPT_ENGINESDIR, '-',
|
||||
{"modulesdir", OPT_MODULESDIR, '-',
|
||||
"Default module directory (other than engine modules)"},
|
||||
{"dsoext", OPT_DSOEXT, '-', "Configured extension for modules"},
|
||||
{"dirnamesep", OPT_DIRNAMESEP, '-', "Directory-filename separator"},
|
||||
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* WARNING: do not edit!
|
||||
* Generated by apps/progs.pl
|
||||
*
|
||||
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include "function.h"
|
||||
|
||||
extern int asn1parse_main(int argc, char *argv[]);
|
||||
extern int ca_main(int argc, char *argv[]);
|
||||
extern int ciphers_main(int argc, char *argv[]);
|
||||
extern int cms_main(int argc, char *argv[]);
|
||||
extern int crl_main(int argc, char *argv[]);
|
||||
extern int crl2pkcs7_main(int argc, char *argv[]);
|
||||
extern int dgst_main(int argc, char *argv[]);
|
||||
extern int dhparam_main(int argc, char *argv[]);
|
||||
extern int dsa_main(int argc, char *argv[]);
|
||||
extern int dsaparam_main(int argc, char *argv[]);
|
||||
extern int ec_main(int argc, char *argv[]);
|
||||
extern int ecparam_main(int argc, char *argv[]);
|
||||
extern int enc_main(int argc, char *argv[]);
|
||||
extern int engine_main(int argc, char *argv[]);
|
||||
extern int errstr_main(int argc, char *argv[]);
|
||||
extern int fipsinstall_main(int argc, char *argv[]);
|
||||
extern int gendsa_main(int argc, char *argv[]);
|
||||
extern int genpkey_main(int argc, char *argv[]);
|
||||
extern int genrsa_main(int argc, char *argv[]);
|
||||
extern int help_main(int argc, char *argv[]);
|
||||
extern int info_main(int argc, char *argv[]);
|
||||
extern int kdf_main(int argc, char *argv[]);
|
||||
extern int list_main(int argc, char *argv[]);
|
||||
extern int mac_main(int argc, char *argv[]);
|
||||
extern int nseq_main(int argc, char *argv[]);
|
||||
extern int ocsp_main(int argc, char *argv[]);
|
||||
extern int passwd_main(int argc, char *argv[]);
|
||||
extern int pkcs12_main(int argc, char *argv[]);
|
||||
extern int pkcs7_main(int argc, char *argv[]);
|
||||
extern int pkcs8_main(int argc, char *argv[]);
|
||||
extern int pkey_main(int argc, char *argv[]);
|
||||
extern int pkeyparam_main(int argc, char *argv[]);
|
||||
extern int pkeyutl_main(int argc, char *argv[]);
|
||||
extern int prime_main(int argc, char *argv[]);
|
||||
extern int provider_main(int argc, char *argv[]);
|
||||
extern int rand_main(int argc, char *argv[]);
|
||||
extern int rehash_main(int argc, char *argv[]);
|
||||
extern int req_main(int argc, char *argv[]);
|
||||
extern int rsa_main(int argc, char *argv[]);
|
||||
extern int rsautl_main(int argc, char *argv[]);
|
||||
extern int s_client_main(int argc, char *argv[]);
|
||||
extern int s_server_main(int argc, char *argv[]);
|
||||
extern int s_time_main(int argc, char *argv[]);
|
||||
extern int sess_id_main(int argc, char *argv[]);
|
||||
extern int smime_main(int argc, char *argv[]);
|
||||
extern int speed_main(int argc, char *argv[]);
|
||||
extern int spkac_main(int argc, char *argv[]);
|
||||
extern int srp_main(int argc, char *argv[]);
|
||||
extern int storeutl_main(int argc, char *argv[]);
|
||||
extern int ts_main(int argc, char *argv[]);
|
||||
extern int verify_main(int argc, char *argv[]);
|
||||
extern int version_main(int argc, char *argv[]);
|
||||
extern int x509_main(int argc, char *argv[]);
|
||||
|
||||
extern const OPTIONS asn1parse_options[];
|
||||
extern const OPTIONS ca_options[];
|
||||
extern const OPTIONS ciphers_options[];
|
||||
extern const OPTIONS cms_options[];
|
||||
extern const OPTIONS crl_options[];
|
||||
extern const OPTIONS crl2pkcs7_options[];
|
||||
extern const OPTIONS dgst_options[];
|
||||
extern const OPTIONS dhparam_options[];
|
||||
extern const OPTIONS dsa_options[];
|
||||
extern const OPTIONS dsaparam_options[];
|
||||
extern const OPTIONS ec_options[];
|
||||
extern const OPTIONS ecparam_options[];
|
||||
extern const OPTIONS enc_options[];
|
||||
extern const OPTIONS engine_options[];
|
||||
extern const OPTIONS errstr_options[];
|
||||
extern const OPTIONS fipsinstall_options[];
|
||||
extern const OPTIONS gendsa_options[];
|
||||
extern const OPTIONS genpkey_options[];
|
||||
extern const OPTIONS genrsa_options[];
|
||||
extern const OPTIONS help_options[];
|
||||
extern const OPTIONS info_options[];
|
||||
extern const OPTIONS kdf_options[];
|
||||
extern const OPTIONS list_options[];
|
||||
extern const OPTIONS mac_options[];
|
||||
extern const OPTIONS nseq_options[];
|
||||
extern const OPTIONS ocsp_options[];
|
||||
extern const OPTIONS passwd_options[];
|
||||
extern const OPTIONS pkcs12_options[];
|
||||
extern const OPTIONS pkcs7_options[];
|
||||
extern const OPTIONS pkcs8_options[];
|
||||
extern const OPTIONS pkey_options[];
|
||||
extern const OPTIONS pkeyparam_options[];
|
||||
extern const OPTIONS pkeyutl_options[];
|
||||
extern const OPTIONS prime_options[];
|
||||
extern const OPTIONS provider_options[];
|
||||
extern const OPTIONS rand_options[];
|
||||
extern const OPTIONS rehash_options[];
|
||||
extern const OPTIONS req_options[];
|
||||
extern const OPTIONS rsa_options[];
|
||||
extern const OPTIONS rsautl_options[];
|
||||
extern const OPTIONS s_client_options[];
|
||||
extern const OPTIONS s_server_options[];
|
||||
extern const OPTIONS s_time_options[];
|
||||
extern const OPTIONS sess_id_options[];
|
||||
extern const OPTIONS smime_options[];
|
||||
extern const OPTIONS speed_options[];
|
||||
extern const OPTIONS spkac_options[];
|
||||
extern const OPTIONS srp_options[];
|
||||
extern const OPTIONS storeutl_options[];
|
||||
extern const OPTIONS ts_options[];
|
||||
extern const OPTIONS verify_options[];
|
||||
extern const OPTIONS version_options[];
|
||||
extern const OPTIONS x509_options[];
|
||||
|
||||
extern FUNCTION functions[];
|
||||
+33
-2
@@ -47,7 +47,7 @@ typedef enum OPTION_choice {
|
||||
OPT_CONNECT, OPT_CIPHER, OPT_CIPHERSUITES, OPT_CERT, OPT_NAMEOPT, OPT_KEY,
|
||||
OPT_CAPATH, OPT_CAFILE, OPT_NOCAPATH, OPT_NOCAFILE, OPT_NEW, OPT_REUSE,
|
||||
OPT_BUGS, OPT_VERIFY, OPT_TIME, OPT_SSL3,
|
||||
OPT_WWW
|
||||
OPT_WWW, OPT_TLS1, OPT_TLS1_1, OPT_TLS1_2, OPT_TLS1_3
|
||||
} OPTION_CHOICE;
|
||||
|
||||
const OPTIONS s_time_options[] = {
|
||||
@@ -75,6 +75,18 @@ const OPTIONS s_time_options[] = {
|
||||
{"www", OPT_WWW, 's', "Fetch specified page from the site"},
|
||||
#ifndef OPENSSL_NO_SSL3
|
||||
{"ssl3", OPT_SSL3, '-', "Just use SSLv3"},
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_TLS1
|
||||
{"tls1", OPT_TLS1, '-', "Just use TLSv1.0"},
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_TLS1_1
|
||||
{"tls1_1", OPT_TLS1_1, '-', "Just use TLSv1.1"},
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_TLS1_2
|
||||
{"tls1_2", OPT_TLS1_2, '-', "Just use TLSv1.2"},
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_TLS1_3
|
||||
{"tls1_3", OPT_TLS1_3, '-', "Just use TLSv1.3"},
|
||||
#endif
|
||||
{NULL}
|
||||
};
|
||||
@@ -101,7 +113,7 @@ int s_time_main(int argc, char **argv)
|
||||
int maxtime = SECONDS, nConn = 0, perform = 3, ret = 1, i, st_bugs = 0;
|
||||
long bytes_read = 0, finishtime = 0;
|
||||
OPTION_CHOICE o;
|
||||
int max_version = 0, ver, buf_len;
|
||||
int min_version = 0, max_version = 0, ver, buf_len;
|
||||
size_t buf_size;
|
||||
|
||||
meth = TLS_client_method();
|
||||
@@ -177,8 +189,25 @@ int s_time_main(int argc, char **argv)
|
||||
}
|
||||
break;
|
||||
case OPT_SSL3:
|
||||
min_version = SSL3_VERSION;
|
||||
max_version = SSL3_VERSION;
|
||||
break;
|
||||
case OPT_TLS1:
|
||||
min_version = TLS1_VERSION;
|
||||
max_version = TLS1_VERSION;
|
||||
break;
|
||||
case OPT_TLS1_1:
|
||||
min_version = TLS1_1_VERSION;
|
||||
max_version = TLS1_1_VERSION;
|
||||
break;
|
||||
case OPT_TLS1_2:
|
||||
min_version = TLS1_2_VERSION;
|
||||
max_version = TLS1_2_VERSION;
|
||||
break;
|
||||
case OPT_TLS1_3:
|
||||
min_version = TLS1_3_VERSION;
|
||||
max_version = TLS1_3_VERSION;
|
||||
break;
|
||||
}
|
||||
}
|
||||
argc = opt_num_rest();
|
||||
@@ -193,6 +222,8 @@ int s_time_main(int argc, char **argv)
|
||||
|
||||
SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
|
||||
SSL_CTX_set_quiet_shutdown(ctx, 1);
|
||||
if (SSL_CTX_set_min_proto_version(ctx, min_version) == 0)
|
||||
goto end;
|
||||
if (SSL_CTX_set_max_proto_version(ctx, max_version) == 0)
|
||||
goto end;
|
||||
|
||||
|
||||
+2
-2
@@ -37,8 +37,8 @@ int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u),
|
||||
|
||||
if (indent < 0)
|
||||
indent = 0;
|
||||
else if (indent > 128)
|
||||
indent = 128;
|
||||
else if (indent > 64)
|
||||
indent = 64;
|
||||
|
||||
dump_width = DUMP_WIDTH_LESS_INDENT(indent);
|
||||
rows = len / dump_width;
|
||||
|
||||
@@ -82,6 +82,7 @@ SOURCE[../providers/fips]=$UTIL_COMMON
|
||||
DEFINE[../providers/fips]=$UTIL_DEFINE
|
||||
|
||||
|
||||
DEPEND[info.o]=buildinf.h
|
||||
DEPEND[cversion.o]=buildinf.h
|
||||
GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC) $(LIB_CFLAGS) $(CPPFLAGS_Q)" "$(PLATFORM)"
|
||||
DEPEND[buildinf.h]=../configdata.pm
|
||||
|
||||
@@ -336,6 +336,10 @@ static int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype)
|
||||
int ret = 0;
|
||||
const char *ktype = NULL;
|
||||
const BIGNUM *priv_key, *pub_key;
|
||||
int mod_len = 0;
|
||||
|
||||
if (x->p != NULL)
|
||||
mod_len = BN_num_bits(x->p);
|
||||
|
||||
if (ptype == 2)
|
||||
priv_key = x->priv_key;
|
||||
@@ -360,6 +364,9 @@ static int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype)
|
||||
if (BIO_printf(bp, "%s: (%d bit)\n", ktype, BN_num_bits(x->p))
|
||||
<= 0)
|
||||
goto err;
|
||||
} else {
|
||||
if (BIO_printf(bp, "Public-Key: (%d bit)\n", mod_len) <= 0)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!ASN1_bn_print(bp, "priv:", priv_key, NULL, off))
|
||||
|
||||
@@ -0,0 +1,3303 @@
|
||||
# Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
# this file except in compliance with the License. You can obtain a copy
|
||||
# in the file LICENSE in the source distribution or at
|
||||
# https://www.openssl.org/source/license.html
|
||||
|
||||
# Function codes
|
||||
ASN1_F_A2D_ASN1_OBJECT:100:a2d_ASN1_OBJECT
|
||||
ASN1_F_A2I_ASN1_INTEGER:102:a2i_ASN1_INTEGER
|
||||
ASN1_F_A2I_ASN1_STRING:103:a2i_ASN1_STRING
|
||||
ASN1_F_APPEND_EXP:176:append_exp
|
||||
ASN1_F_ASN1_BIO_INIT:113:asn1_bio_init
|
||||
ASN1_F_ASN1_BIT_STRING_SET_BIT:183:ASN1_BIT_STRING_set_bit
|
||||
ASN1_F_ASN1_CB:177:asn1_cb
|
||||
ASN1_F_ASN1_CHECK_TLEN:104:asn1_check_tlen
|
||||
ASN1_F_ASN1_COLLECT:106:asn1_collect
|
||||
ASN1_F_ASN1_D2I_EX_PRIMITIVE:108:asn1_d2i_ex_primitive
|
||||
ASN1_F_ASN1_D2I_FP:109:ASN1_d2i_fp
|
||||
ASN1_F_ASN1_D2I_READ_BIO:107:asn1_d2i_read_bio
|
||||
ASN1_F_ASN1_DIGEST:184:ASN1_digest
|
||||
ASN1_F_ASN1_DO_ADB:110:asn1_do_adb
|
||||
ASN1_F_ASN1_DO_LOCK:233:asn1_do_lock
|
||||
ASN1_F_ASN1_DUP:111:ASN1_dup
|
||||
ASN1_F_ASN1_ENC_SAVE:115:asn1_enc_save
|
||||
ASN1_F_ASN1_EX_C2I:204:asn1_ex_c2i
|
||||
ASN1_F_ASN1_FIND_END:190:asn1_find_end
|
||||
ASN1_F_ASN1_GENERALIZEDTIME_ADJ:216:ASN1_GENERALIZEDTIME_adj
|
||||
ASN1_F_ASN1_GENERATE_V3:178:ASN1_generate_v3
|
||||
ASN1_F_ASN1_GET_INT64:224:asn1_get_int64
|
||||
ASN1_F_ASN1_GET_OBJECT:114:ASN1_get_object
|
||||
ASN1_F_ASN1_GET_UINT64:225:asn1_get_uint64
|
||||
ASN1_F_ASN1_I2D_BIO:116:ASN1_i2d_bio
|
||||
ASN1_F_ASN1_I2D_FP:117:ASN1_i2d_fp
|
||||
ASN1_F_ASN1_ITEM_D2I_FP:206:ASN1_item_d2i_fp
|
||||
ASN1_F_ASN1_ITEM_DUP:191:ASN1_item_dup
|
||||
ASN1_F_ASN1_ITEM_EMBED_D2I:120:asn1_item_embed_d2i
|
||||
ASN1_F_ASN1_ITEM_EMBED_NEW:121:asn1_item_embed_new
|
||||
ASN1_F_ASN1_ITEM_FLAGS_I2D:118:asn1_item_flags_i2d
|
||||
ASN1_F_ASN1_ITEM_I2D_BIO:192:ASN1_item_i2d_bio
|
||||
ASN1_F_ASN1_ITEM_I2D_FP:193:ASN1_item_i2d_fp
|
||||
ASN1_F_ASN1_ITEM_PACK:198:ASN1_item_pack
|
||||
ASN1_F_ASN1_ITEM_SIGN:195:ASN1_item_sign
|
||||
ASN1_F_ASN1_ITEM_SIGN_CTX:220:ASN1_item_sign_ctx
|
||||
ASN1_F_ASN1_ITEM_UNPACK:199:ASN1_item_unpack
|
||||
ASN1_F_ASN1_ITEM_VERIFY:197:ASN1_item_verify
|
||||
ASN1_F_ASN1_MBSTRING_NCOPY:122:ASN1_mbstring_ncopy
|
||||
ASN1_F_ASN1_OBJECT_NEW:123:ASN1_OBJECT_new
|
||||
ASN1_F_ASN1_OUTPUT_DATA:214:asn1_output_data
|
||||
ASN1_F_ASN1_PCTX_NEW:205:ASN1_PCTX_new
|
||||
ASN1_F_ASN1_PRIMITIVE_NEW:119:asn1_primitive_new
|
||||
ASN1_F_ASN1_SCTX_NEW:221:ASN1_SCTX_new
|
||||
ASN1_F_ASN1_SIGN:128:ASN1_sign
|
||||
ASN1_F_ASN1_STR2TYPE:179:asn1_str2type
|
||||
ASN1_F_ASN1_STRING_GET_INT64:227:asn1_string_get_int64
|
||||
ASN1_F_ASN1_STRING_GET_UINT64:230:asn1_string_get_uint64
|
||||
ASN1_F_ASN1_STRING_SET:186:ASN1_STRING_set
|
||||
ASN1_F_ASN1_STRING_TABLE_ADD:129:ASN1_STRING_TABLE_add
|
||||
ASN1_F_ASN1_STRING_TO_BN:228:asn1_string_to_bn
|
||||
ASN1_F_ASN1_STRING_TYPE_NEW:130:ASN1_STRING_type_new
|
||||
ASN1_F_ASN1_TEMPLATE_EX_D2I:132:asn1_template_ex_d2i
|
||||
ASN1_F_ASN1_TEMPLATE_NEW:133:asn1_template_new
|
||||
ASN1_F_ASN1_TEMPLATE_NOEXP_D2I:131:asn1_template_noexp_d2i
|
||||
ASN1_F_ASN1_TIME_ADJ:217:ASN1_TIME_adj
|
||||
ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING:134:ASN1_TYPE_get_int_octetstring
|
||||
ASN1_F_ASN1_TYPE_GET_OCTETSTRING:135:ASN1_TYPE_get_octetstring
|
||||
ASN1_F_ASN1_UTCTIME_ADJ:218:ASN1_UTCTIME_adj
|
||||
ASN1_F_ASN1_VERIFY:137:ASN1_verify
|
||||
ASN1_F_B64_READ_ASN1:209:b64_read_asn1
|
||||
ASN1_F_B64_WRITE_ASN1:210:B64_write_ASN1
|
||||
ASN1_F_BIO_NEW_NDEF:208:BIO_new_NDEF
|
||||
ASN1_F_BITSTR_CB:180:bitstr_cb
|
||||
ASN1_F_BN_TO_ASN1_STRING:229:bn_to_asn1_string
|
||||
ASN1_F_C2I_ASN1_BIT_STRING:189:c2i_ASN1_BIT_STRING
|
||||
ASN1_F_C2I_ASN1_INTEGER:194:c2i_ASN1_INTEGER
|
||||
ASN1_F_C2I_ASN1_OBJECT:196:c2i_ASN1_OBJECT
|
||||
ASN1_F_C2I_IBUF:226:c2i_ibuf
|
||||
ASN1_F_C2I_UINT64_INT:101:c2i_uint64_int
|
||||
ASN1_F_COLLECT_DATA:140:collect_data
|
||||
ASN1_F_D2I_ASN1_OBJECT:147:d2i_ASN1_OBJECT
|
||||
ASN1_F_D2I_ASN1_UINTEGER:150:d2i_ASN1_UINTEGER
|
||||
ASN1_F_D2I_AUTOPRIVATEKEY:207:d2i_AutoPrivateKey
|
||||
ASN1_F_D2I_KEYPARAMS:144:d2i_KeyParams
|
||||
ASN1_F_D2I_PRIVATEKEY:154:d2i_PrivateKey
|
||||
ASN1_F_D2I_PUBLICKEY:155:d2i_PublicKey
|
||||
ASN1_F_DO_BUF:142:do_buf
|
||||
ASN1_F_DO_CREATE:124:do_create
|
||||
ASN1_F_DO_DUMP:125:do_dump
|
||||
ASN1_F_DO_TCREATE:222:do_tcreate
|
||||
ASN1_F_I2A_ASN1_OBJECT:126:i2a_ASN1_OBJECT
|
||||
ASN1_F_I2D_ASN1_BIO_STREAM:211:i2d_ASN1_bio_stream
|
||||
ASN1_F_I2D_ASN1_OBJECT:143:i2d_ASN1_OBJECT
|
||||
ASN1_F_I2D_DSA_PUBKEY:161:i2d_DSA_PUBKEY
|
||||
ASN1_F_I2D_EC_PUBKEY:181:i2d_EC_PUBKEY
|
||||
ASN1_F_I2D_KEYPARAMS:145:i2d_KeyParams
|
||||
ASN1_F_I2D_PRIVATEKEY:163:i2d_PrivateKey
|
||||
ASN1_F_I2D_PUBLICKEY:164:i2d_PublicKey
|
||||
ASN1_F_I2D_RSA_PUBKEY:165:i2d_RSA_PUBKEY
|
||||
ASN1_F_LONG_C2I:166:long_c2i
|
||||
ASN1_F_NDEF_PREFIX:127:ndef_prefix
|
||||
ASN1_F_NDEF_SUFFIX:136:ndef_suffix
|
||||
ASN1_F_OID_MODULE_INIT:174:oid_module_init
|
||||
ASN1_F_PARSE_TAGGING:182:parse_tagging
|
||||
ASN1_F_PKCS5_PBE2_SET_IV:167:PKCS5_pbe2_set_iv
|
||||
ASN1_F_PKCS5_PBE2_SET_SCRYPT:231:PKCS5_pbe2_set_scrypt
|
||||
ASN1_F_PKCS5_PBE_SET:202:PKCS5_pbe_set
|
||||
ASN1_F_PKCS5_PBE_SET0_ALGOR:215:PKCS5_pbe_set0_algor
|
||||
ASN1_F_PKCS5_PBKDF2_SET:219:PKCS5_pbkdf2_set
|
||||
ASN1_F_PKCS5_SCRYPT_SET:232:pkcs5_scrypt_set
|
||||
ASN1_F_SMIME_READ_ASN1:212:SMIME_read_ASN1
|
||||
ASN1_F_SMIME_TEXT:213:SMIME_text
|
||||
ASN1_F_STABLE_GET:138:stable_get
|
||||
ASN1_F_STBL_MODULE_INIT:223:stbl_module_init
|
||||
ASN1_F_UINT32_C2I:105:uint32_c2i
|
||||
ASN1_F_UINT32_NEW:139:uint32_new
|
||||
ASN1_F_UINT64_C2I:112:uint64_c2i
|
||||
ASN1_F_UINT64_NEW:141:uint64_new
|
||||
ASN1_F_X509_CRL_ADD0_REVOKED:169:X509_CRL_add0_revoked
|
||||
ASN1_F_X509_INFO_NEW:170:X509_INFO_new
|
||||
ASN1_F_X509_NAME_ENCODE:203:x509_name_encode
|
||||
ASN1_F_X509_NAME_EX_D2I:158:x509_name_ex_d2i
|
||||
ASN1_F_X509_NAME_EX_NEW:171:x509_name_ex_new
|
||||
ASN1_F_X509_PKEY_NEW:173:X509_PKEY_new
|
||||
ASYNC_F_ASYNC_CTX_NEW:100:async_ctx_new
|
||||
ASYNC_F_ASYNC_INIT_THREAD:101:ASYNC_init_thread
|
||||
ASYNC_F_ASYNC_JOB_NEW:102:async_job_new
|
||||
ASYNC_F_ASYNC_PAUSE_JOB:103:ASYNC_pause_job
|
||||
ASYNC_F_ASYNC_START_FUNC:104:async_start_func
|
||||
ASYNC_F_ASYNC_START_JOB:105:ASYNC_start_job
|
||||
ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD:106:ASYNC_WAIT_CTX_set_wait_fd
|
||||
BIO_F_ACPT_STATE:100:acpt_state
|
||||
BIO_F_ADDRINFO_WRAP:148:addrinfo_wrap
|
||||
BIO_F_ADDR_STRINGS:134:addr_strings
|
||||
BIO_F_BIO_ACCEPT:101:BIO_accept
|
||||
BIO_F_BIO_ACCEPT_EX:137:BIO_accept_ex
|
||||
BIO_F_BIO_ACCEPT_NEW:152:BIO_ACCEPT_new
|
||||
BIO_F_BIO_ADDR_NEW:144:BIO_ADDR_new
|
||||
BIO_F_BIO_BIND:147:BIO_bind
|
||||
BIO_F_BIO_CALLBACK_CTRL:131:BIO_callback_ctrl
|
||||
BIO_F_BIO_CONNECT:138:BIO_connect
|
||||
BIO_F_BIO_CONNECT_NEW:153:BIO_CONNECT_new
|
||||
BIO_F_BIO_CTRL:103:BIO_ctrl
|
||||
BIO_F_BIO_GETS:104:BIO_gets
|
||||
BIO_F_BIO_GET_HOST_IP:106:BIO_get_host_ip
|
||||
BIO_F_BIO_GET_NEW_INDEX:102:BIO_get_new_index
|
||||
BIO_F_BIO_GET_PORT:107:BIO_get_port
|
||||
BIO_F_BIO_LISTEN:139:BIO_listen
|
||||
BIO_F_BIO_LOOKUP:135:BIO_lookup
|
||||
BIO_F_BIO_LOOKUP_EX:143:BIO_lookup_ex
|
||||
BIO_F_BIO_MAKE_PAIR:121:bio_make_pair
|
||||
BIO_F_BIO_METH_NEW:146:BIO_meth_new
|
||||
BIO_F_BIO_NEW:108:BIO_new
|
||||
BIO_F_BIO_NEW_DGRAM_SCTP:145:BIO_new_dgram_sctp
|
||||
BIO_F_BIO_NEW_FILE:109:BIO_new_file
|
||||
BIO_F_BIO_NEW_MEM_BUF:126:BIO_new_mem_buf
|
||||
BIO_F_BIO_NREAD:123:BIO_nread
|
||||
BIO_F_BIO_NREAD0:124:BIO_nread0
|
||||
BIO_F_BIO_NWRITE:125:BIO_nwrite
|
||||
BIO_F_BIO_NWRITE0:122:BIO_nwrite0
|
||||
BIO_F_BIO_PARSE_HOSTSERV:136:BIO_parse_hostserv
|
||||
BIO_F_BIO_PUTS:110:BIO_puts
|
||||
BIO_F_BIO_READ:111:BIO_read
|
||||
BIO_F_BIO_READ_EX:105:BIO_read_ex
|
||||
BIO_F_BIO_READ_INTERN:120:bio_read_intern
|
||||
BIO_F_BIO_SOCKET:140:BIO_socket
|
||||
BIO_F_BIO_SOCKET_NBIO:142:BIO_socket_nbio
|
||||
BIO_F_BIO_SOCK_INFO:141:BIO_sock_info
|
||||
BIO_F_BIO_SOCK_INIT:112:BIO_sock_init
|
||||
BIO_F_BIO_WRITE:113:BIO_write
|
||||
BIO_F_BIO_WRITE_EX:119:BIO_write_ex
|
||||
BIO_F_BIO_WRITE_INTERN:128:bio_write_intern
|
||||
BIO_F_BUFFER_CTRL:114:buffer_ctrl
|
||||
BIO_F_CONN_CTRL:127:conn_ctrl
|
||||
BIO_F_CONN_STATE:115:conn_state
|
||||
BIO_F_DGRAM_SCTP_NEW:149:dgram_sctp_new
|
||||
BIO_F_DGRAM_SCTP_READ:132:dgram_sctp_read
|
||||
BIO_F_DGRAM_SCTP_WRITE:133:dgram_sctp_write
|
||||
BIO_F_DOAPR_OUTCH:150:doapr_outch
|
||||
BIO_F_FILE_CTRL:116:file_ctrl
|
||||
BIO_F_FILE_READ:130:file_read
|
||||
BIO_F_LINEBUFFER_CTRL:129:linebuffer_ctrl
|
||||
BIO_F_LINEBUFFER_NEW:151:linebuffer_new
|
||||
BIO_F_MEM_WRITE:117:mem_write
|
||||
BIO_F_NBIOF_NEW:154:nbiof_new
|
||||
BIO_F_SLG_WRITE:155:slg_write
|
||||
BIO_F_SSL_NEW:118:SSL_new
|
||||
BN_F_BNRAND:127:bnrand
|
||||
BN_F_BNRAND_RANGE:138:bnrand_range
|
||||
BN_F_BN_BLINDING_CONVERT_EX:100:BN_BLINDING_convert_ex
|
||||
BN_F_BN_BLINDING_CREATE_PARAM:128:BN_BLINDING_create_param
|
||||
BN_F_BN_BLINDING_INVERT_EX:101:BN_BLINDING_invert_ex
|
||||
BN_F_BN_BLINDING_NEW:102:BN_BLINDING_new
|
||||
BN_F_BN_BLINDING_UPDATE:103:BN_BLINDING_update
|
||||
BN_F_BN_BN2DEC:104:BN_bn2dec
|
||||
BN_F_BN_BN2HEX:105:BN_bn2hex
|
||||
BN_F_BN_COMPUTE_WNAF:142:bn_compute_wNAF
|
||||
BN_F_BN_CTX_GET:116:BN_CTX_get
|
||||
BN_F_BN_CTX_NEW:106:BN_CTX_new
|
||||
BN_F_BN_CTX_NEW_EX:151:BN_CTX_new_ex
|
||||
BN_F_BN_CTX_START:129:BN_CTX_start
|
||||
BN_F_BN_DIV:107:BN_div
|
||||
BN_F_BN_DIV_RECP:130:BN_div_recp
|
||||
BN_F_BN_EXP:123:BN_exp
|
||||
BN_F_BN_EXPAND_INTERNAL:120:bn_expand_internal
|
||||
BN_F_BN_GENCB_NEW:143:BN_GENCB_new
|
||||
BN_F_BN_GENERATE_DSA_NONCE:140:BN_generate_dsa_nonce
|
||||
BN_F_BN_GENERATE_PRIME_EX:141:BN_generate_prime_ex
|
||||
BN_F_BN_GENERATE_PRIME_EX2:152:BN_generate_prime_ex2
|
||||
BN_F_BN_GF2M_MOD:131:BN_GF2m_mod
|
||||
BN_F_BN_GF2M_MOD_EXP:132:BN_GF2m_mod_exp
|
||||
BN_F_BN_GF2M_MOD_MUL:133:BN_GF2m_mod_mul
|
||||
BN_F_BN_GF2M_MOD_SOLVE_QUAD:134:BN_GF2m_mod_solve_quad
|
||||
BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR:135:BN_GF2m_mod_solve_quad_arr
|
||||
BN_F_BN_GF2M_MOD_SQR:136:BN_GF2m_mod_sqr
|
||||
BN_F_BN_GF2M_MOD_SQRT:137:BN_GF2m_mod_sqrt
|
||||
BN_F_BN_LSHIFT:145:BN_lshift
|
||||
BN_F_BN_MOD_EXP2_MONT:118:BN_mod_exp2_mont
|
||||
BN_F_BN_MOD_EXP_MONT:109:BN_mod_exp_mont
|
||||
BN_F_BN_MOD_EXP_MONT_CONSTTIME:124:BN_mod_exp_mont_consttime
|
||||
BN_F_BN_MOD_EXP_MONT_WORD:117:BN_mod_exp_mont_word
|
||||
BN_F_BN_MOD_EXP_RECP:125:BN_mod_exp_recp
|
||||
BN_F_BN_MOD_EXP_SIMPLE:126:BN_mod_exp_simple
|
||||
BN_F_BN_MOD_INVERSE:110:BN_mod_inverse
|
||||
BN_F_BN_MOD_INVERSE_NO_BRANCH:139:BN_mod_inverse_no_branch
|
||||
BN_F_BN_MOD_LSHIFT_QUICK:119:BN_mod_lshift_quick
|
||||
BN_F_BN_MOD_SQRT:121:BN_mod_sqrt
|
||||
BN_F_BN_MONT_CTX_NEW:149:BN_MONT_CTX_new
|
||||
BN_F_BN_MPI2BN:112:BN_mpi2bn
|
||||
BN_F_BN_NEW:113:BN_new
|
||||
BN_F_BN_POOL_GET:147:BN_POOL_get
|
||||
BN_F_BN_RAND:114:BN_rand
|
||||
BN_F_BN_RAND_RANGE:122:BN_rand_range
|
||||
BN_F_BN_RECP_CTX_NEW:150:BN_RECP_CTX_new
|
||||
BN_F_BN_RSHIFT:146:BN_rshift
|
||||
BN_F_BN_SET_WORDS:144:bn_set_words
|
||||
BN_F_BN_STACK_PUSH:148:BN_STACK_push
|
||||
BN_F_BN_USUB:115:BN_usub
|
||||
BUF_F_BUF_MEM_GROW:100:BUF_MEM_grow
|
||||
BUF_F_BUF_MEM_GROW_CLEAN:105:BUF_MEM_grow_clean
|
||||
BUF_F_BUF_MEM_NEW:101:BUF_MEM_new
|
||||
CMS_F_CHECK_CONTENT:99:check_content
|
||||
CMS_F_CMS_ADD0_CERT:164:CMS_add0_cert
|
||||
CMS_F_CMS_ADD0_RECIPIENT_KEY:100:CMS_add0_recipient_key
|
||||
CMS_F_CMS_ADD0_RECIPIENT_PASSWORD:165:CMS_add0_recipient_password
|
||||
CMS_F_CMS_ADD1_RECEIPTREQUEST:158:CMS_add1_ReceiptRequest
|
||||
CMS_F_CMS_ADD1_RECIPIENT_CERT:101:CMS_add1_recipient_cert
|
||||
CMS_F_CMS_ADD1_SIGNER:102:CMS_add1_signer
|
||||
CMS_F_CMS_ADD1_SIGNINGTIME:103:cms_add1_signingTime
|
||||
CMS_F_CMS_ADD1_SIGNING_CERT:181:cms_add1_signing_cert
|
||||
CMS_F_CMS_ADD1_SIGNING_CERT_V2:182:cms_add1_signing_cert_v2
|
||||
CMS_F_CMS_COMPRESS:104:CMS_compress
|
||||
CMS_F_CMS_COMPRESSEDDATA_CREATE:105:cms_CompressedData_create
|
||||
CMS_F_CMS_COMPRESSEDDATA_INIT_BIO:106:cms_CompressedData_init_bio
|
||||
CMS_F_CMS_COPY_CONTENT:107:cms_copy_content
|
||||
CMS_F_CMS_COPY_MESSAGEDIGEST:108:cms_copy_messageDigest
|
||||
CMS_F_CMS_DATA:109:CMS_data
|
||||
CMS_F_CMS_DATAFINAL:110:CMS_dataFinal
|
||||
CMS_F_CMS_DATAINIT:111:CMS_dataInit
|
||||
CMS_F_CMS_DECRYPT:112:CMS_decrypt
|
||||
CMS_F_CMS_DECRYPT_SET1_KEY:113:CMS_decrypt_set1_key
|
||||
CMS_F_CMS_DECRYPT_SET1_PASSWORD:166:CMS_decrypt_set1_password
|
||||
CMS_F_CMS_DECRYPT_SET1_PKEY:114:CMS_decrypt_set1_pkey
|
||||
CMS_F_CMS_DIGESTALGORITHM_FIND_CTX:115:cms_DigestAlgorithm_find_ctx
|
||||
CMS_F_CMS_DIGESTALGORITHM_INIT_BIO:116:cms_DigestAlgorithm_init_bio
|
||||
CMS_F_CMS_DIGESTEDDATA_DO_FINAL:117:cms_DigestedData_do_final
|
||||
CMS_F_CMS_DIGEST_VERIFY:118:CMS_digest_verify
|
||||
CMS_F_CMS_ENCODE_RECEIPT:161:cms_encode_Receipt
|
||||
CMS_F_CMS_ENCRYPT:119:CMS_encrypt
|
||||
CMS_F_CMS_ENCRYPTEDCONTENT_INIT:179:cms_EncryptedContent_init
|
||||
CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO:120:cms_EncryptedContent_init_bio
|
||||
CMS_F_CMS_ENCRYPTEDDATA_DECRYPT:121:CMS_EncryptedData_decrypt
|
||||
CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT:122:CMS_EncryptedData_encrypt
|
||||
CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY:123:CMS_EncryptedData_set1_key
|
||||
CMS_F_CMS_ENVELOPEDDATA_CREATE:124:CMS_EnvelopedData_create
|
||||
CMS_F_CMS_ENVELOPEDDATA_INIT_BIO:125:cms_EnvelopedData_init_bio
|
||||
CMS_F_CMS_ENVELOPED_DATA_INIT:126:cms_enveloped_data_init
|
||||
CMS_F_CMS_ENV_ASN1_CTRL:171:cms_env_asn1_ctrl
|
||||
CMS_F_CMS_FINAL:127:CMS_final
|
||||
CMS_F_CMS_GET0_CERTIFICATE_CHOICES:128:cms_get0_certificate_choices
|
||||
CMS_F_CMS_GET0_CONTENT:129:CMS_get0_content
|
||||
CMS_F_CMS_GET0_ECONTENT_TYPE:130:cms_get0_econtent_type
|
||||
CMS_F_CMS_GET0_ENVELOPED:131:cms_get0_enveloped
|
||||
CMS_F_CMS_GET0_REVOCATION_CHOICES:132:cms_get0_revocation_choices
|
||||
CMS_F_CMS_GET0_SIGNED:133:cms_get0_signed
|
||||
CMS_F_CMS_MSGSIGDIGEST_ADD1:162:cms_msgSigDigest_add1
|
||||
CMS_F_CMS_RECEIPTREQUEST_CREATE0:159:CMS_ReceiptRequest_create0
|
||||
CMS_F_CMS_RECEIPT_VERIFY:160:cms_Receipt_verify
|
||||
CMS_F_CMS_RECIPIENTINFO_DECRYPT:134:CMS_RecipientInfo_decrypt
|
||||
CMS_F_CMS_RECIPIENTINFO_ENCRYPT:169:CMS_RecipientInfo_encrypt
|
||||
CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT:178:cms_RecipientInfo_kari_encrypt
|
||||
CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG:175:CMS_RecipientInfo_kari_get0_alg
|
||||
CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID:173:\
|
||||
CMS_RecipientInfo_kari_get0_orig_id
|
||||
CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS:172:CMS_RecipientInfo_kari_get0_reks
|
||||
CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP:174:CMS_RecipientInfo_kari_orig_id_cmp
|
||||
CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT:135:cms_RecipientInfo_kekri_decrypt
|
||||
CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT:136:cms_RecipientInfo_kekri_encrypt
|
||||
CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID:137:CMS_RecipientInfo_kekri_get0_id
|
||||
CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP:138:CMS_RecipientInfo_kekri_id_cmp
|
||||
CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP:139:CMS_RecipientInfo_ktri_cert_cmp
|
||||
CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT:140:cms_RecipientInfo_ktri_decrypt
|
||||
CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT:141:cms_RecipientInfo_ktri_encrypt
|
||||
CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS:142:CMS_RecipientInfo_ktri_get0_algs
|
||||
CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID:143:\
|
||||
CMS_RecipientInfo_ktri_get0_signer_id
|
||||
CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT:167:cms_RecipientInfo_pwri_crypt
|
||||
CMS_F_CMS_RECIPIENTINFO_SET0_KEY:144:CMS_RecipientInfo_set0_key
|
||||
CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD:168:CMS_RecipientInfo_set0_password
|
||||
CMS_F_CMS_RECIPIENTINFO_SET0_PKEY:145:CMS_RecipientInfo_set0_pkey
|
||||
CMS_F_CMS_SD_ASN1_CTRL:170:cms_sd_asn1_ctrl
|
||||
CMS_F_CMS_SET1_IAS:176:cms_set1_ias
|
||||
CMS_F_CMS_SET1_KEYID:177:cms_set1_keyid
|
||||
CMS_F_CMS_SET1_SIGNERIDENTIFIER:146:cms_set1_SignerIdentifier
|
||||
CMS_F_CMS_SET_DETACHED:147:CMS_set_detached
|
||||
CMS_F_CMS_SIGN:148:CMS_sign
|
||||
CMS_F_CMS_SIGNED_DATA_INIT:149:cms_signed_data_init
|
||||
CMS_F_CMS_SIGNERINFO_CONTENT_SIGN:150:cms_SignerInfo_content_sign
|
||||
CMS_F_CMS_SIGNERINFO_SIGN:151:CMS_SignerInfo_sign
|
||||
CMS_F_CMS_SIGNERINFO_VERIFY:152:CMS_SignerInfo_verify
|
||||
CMS_F_CMS_SIGNERINFO_VERIFY_CERT:153:cms_signerinfo_verify_cert
|
||||
CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT:154:CMS_SignerInfo_verify_content
|
||||
CMS_F_CMS_SIGN_RECEIPT:163:CMS_sign_receipt
|
||||
CMS_F_CMS_SI_CHECK_ATTRIBUTES:183:CMS_si_check_attributes
|
||||
CMS_F_CMS_STREAM:155:CMS_stream
|
||||
CMS_F_CMS_UNCOMPRESS:156:CMS_uncompress
|
||||
CMS_F_CMS_VERIFY:157:CMS_verify
|
||||
CMS_F_KEK_UNWRAP_KEY:180:kek_unwrap_key
|
||||
COMP_F_BIO_ZLIB_FLUSH:99:bio_zlib_flush
|
||||
COMP_F_BIO_ZLIB_NEW:100:bio_zlib_new
|
||||
COMP_F_BIO_ZLIB_READ:101:bio_zlib_read
|
||||
COMP_F_BIO_ZLIB_WRITE:102:bio_zlib_write
|
||||
COMP_F_COMP_CTX_NEW:103:COMP_CTX_new
|
||||
CONF_F_CONF_DUMP_FP:104:CONF_dump_fp
|
||||
CONF_F_CONF_LOAD:100:CONF_load
|
||||
CONF_F_CONF_LOAD_FP:103:CONF_load_fp
|
||||
CONF_F_CONF_PARSE_LIST:119:CONF_parse_list
|
||||
CONF_F_DEF_LOAD:120:def_load
|
||||
CONF_F_DEF_LOAD_BIO:121:def_load_bio
|
||||
CONF_F_GET_NEXT_FILE:107:get_next_file
|
||||
CONF_F_MODULE_ADD:122:module_add
|
||||
CONF_F_MODULE_INIT:115:module_init
|
||||
CONF_F_MODULE_LOAD_DSO:117:module_load_dso
|
||||
CONF_F_MODULE_RUN:118:module_run
|
||||
CONF_F_NCONF_DUMP_BIO:105:NCONF_dump_bio
|
||||
CONF_F_NCONF_DUMP_FP:106:NCONF_dump_fp
|
||||
CONF_F_NCONF_GET_NUMBER_E:112:NCONF_get_number_e
|
||||
CONF_F_NCONF_GET_SECTION:108:NCONF_get_section
|
||||
CONF_F_NCONF_GET_STRING:109:NCONF_get_string
|
||||
CONF_F_NCONF_LOAD:113:NCONF_load
|
||||
CONF_F_NCONF_LOAD_BIO:110:NCONF_load_bio
|
||||
CONF_F_NCONF_LOAD_FP:114:NCONF_load_fp
|
||||
CONF_F_NCONF_NEW:111:NCONF_new
|
||||
CONF_F_PROCESS_INCLUDE:116:process_include
|
||||
CONF_F_SSL_MODULE_INIT:123:ssl_module_init
|
||||
CONF_F_STR_COPY:101:str_copy
|
||||
CRMF_F_CRMF_POPOSIGNINGKEY_INIT:100:CRMF_poposigningkey_init
|
||||
CRMF_F_OSSL_CRMF_CERTID_GEN:101:OSSL_CRMF_CERTID_gen
|
||||
CRMF_F_OSSL_CRMF_CERTTEMPLATE_FILL:102:OSSL_CRMF_CERTTEMPLATE_fill
|
||||
CRMF_F_OSSL_CRMF_ENCRYPTEDVALUE_GET1_ENCCERT:103:\
|
||||
OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert
|
||||
CRMF_F_OSSL_CRMF_MSGS_VERIFY_POPO:104:OSSL_CRMF_MSGS_verify_popo
|
||||
CRMF_F_OSSL_CRMF_MSG_CREATE_POPO:105:OSSL_CRMF_MSG_create_popo
|
||||
CRMF_F_OSSL_CRMF_MSG_GET0_TMPL:106:OSSL_CRMF_MSG_get0_tmpl
|
||||
CRMF_F_OSSL_CRMF_MSG_GET_CERTREQID:107:OSSL_CRMF_MSG_get_certReqId
|
||||
CRMF_F_OSSL_CRMF_MSG_PKIPUBLICATIONINFO_PUSH0_SINGLEPUBINFO:108:\
|
||||
OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo
|
||||
CRMF_F_OSSL_CRMF_MSG_PUSH0_EXTENSION:109:OSSL_CRMF_MSG_push0_extension
|
||||
CRMF_F_OSSL_CRMF_MSG_PUSH0_REGCTRL:110:OSSL_CRMF_MSG_push0_regCtrl
|
||||
CRMF_F_OSSL_CRMF_MSG_PUSH0_REGINFO:111:OSSL_CRMF_MSG_push0_regInfo
|
||||
CRMF_F_OSSL_CRMF_MSG_SET0_EXTENSIONS:112:OSSL_CRMF_MSG_set0_extensions
|
||||
CRMF_F_OSSL_CRMF_MSG_SET0_SINGLEPUBINFO:113:OSSL_CRMF_MSG_set0_SinglePubInfo
|
||||
CRMF_F_OSSL_CRMF_MSG_SET_CERTREQID:114:OSSL_CRMF_MSG_set_certReqId
|
||||
CRMF_F_OSSL_CRMF_MSG_SET_PKIPUBLICATIONINFO_ACTION:115:\
|
||||
OSSL_CRMF_MSG_set_PKIPublicationInfo_action
|
||||
CRMF_F_OSSL_CRMF_MSG_SET_VALIDITY:116:OSSL_CRMF_MSG_set_validity
|
||||
CRMF_F_OSSL_CRMF_PBMP_NEW:117:OSSL_CRMF_pbmp_new
|
||||
CRMF_F_OSSL_CRMF_PBM_NEW:118:OSSL_CRMF_pbm_new
|
||||
CRYPTO_F_CMAC_CTX_NEW:120:CMAC_CTX_new
|
||||
CRYPTO_F_CRYPTO_DUP_EX_DATA:110:CRYPTO_dup_ex_data
|
||||
CRYPTO_F_CRYPTO_FREE_EX_DATA:111:CRYPTO_free_ex_data
|
||||
CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX:100:CRYPTO_get_ex_new_index
|
||||
CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX_EX:141:crypto_get_ex_new_index_ex
|
||||
CRYPTO_F_CRYPTO_MEMDUP:115:CRYPTO_memdup
|
||||
CRYPTO_F_CRYPTO_NEW_EX_DATA:112:CRYPTO_new_ex_data
|
||||
CRYPTO_F_CRYPTO_NEW_EX_DATA_EX:142:crypto_new_ex_data_ex
|
||||
CRYPTO_F_CRYPTO_OCB128_COPY_CTX:121:CRYPTO_ocb128_copy_ctx
|
||||
CRYPTO_F_CRYPTO_OCB128_INIT:122:CRYPTO_ocb128_init
|
||||
CRYPTO_F_CRYPTO_SET_EX_DATA:102:CRYPTO_set_ex_data
|
||||
CRYPTO_F_FIPS_MODE_SET:109:FIPS_mode_set
|
||||
CRYPTO_F_GET_AND_LOCK:113:get_and_lock
|
||||
CRYPTO_F_GET_PROVIDER_STORE:133:get_provider_store
|
||||
CRYPTO_F_OPENSSL_ATEXIT:114:OPENSSL_atexit
|
||||
CRYPTO_F_OPENSSL_BUF2HEXSTR:117:OPENSSL_buf2hexstr
|
||||
CRYPTO_F_OPENSSL_BUF2HEXSTR_EX:153:
|
||||
CRYPTO_F_OPENSSL_FOPEN:119:openssl_fopen
|
||||
CRYPTO_F_OPENSSL_HEXSTR2BUF:118:OPENSSL_hexstr2buf
|
||||
CRYPTO_F_OPENSSL_HEXSTR2BUF_EX:154:
|
||||
CRYPTO_F_OPENSSL_INIT_CRYPTO:116:OPENSSL_init_crypto
|
||||
CRYPTO_F_OPENSSL_LH_NEW:126:OPENSSL_LH_new
|
||||
CRYPTO_F_OPENSSL_SK_DEEP_COPY:127:OPENSSL_sk_deep_copy
|
||||
CRYPTO_F_OPENSSL_SK_DUP:128:OPENSSL_sk_dup
|
||||
CRYPTO_F_OSSL_PARAM_BLD_PUSH_BN:143:
|
||||
CRYPTO_F_OSSL_PARAM_BLD_PUSH_OCTET_PTR:144:
|
||||
CRYPTO_F_OSSL_PARAM_BLD_PUSH_OCTET_STRING:145:
|
||||
CRYPTO_F_OSSL_PARAM_BLD_PUSH_UTF8_PTR:146:
|
||||
CRYPTO_F_OSSL_PARAM_BLD_PUSH_UTF8_STRING:147:
|
||||
CRYPTO_F_OSSL_PARAM_BLD_TO_PARAM:148:
|
||||
CRYPTO_F_OSSL_PARAM_BLD_TO_PARAM_EX:149:
|
||||
CRYPTO_F_OSSL_PARAM_TYPE_TO_PARAM:150:
|
||||
CRYPTO_F_OSSL_PROVIDER_ACTIVATE:130:ossl_provider_activate
|
||||
CRYPTO_F_OSSL_PROVIDER_ADD_BUILTIN:132:OSSL_PROVIDER_add_builtin
|
||||
CRYPTO_F_OSSL_PROVIDER_ADD_PARAMETER:139:ossl_provider_add_parameter
|
||||
CRYPTO_F_OSSL_PROVIDER_NEW:131:ossl_provider_new
|
||||
CRYPTO_F_OSSL_PROVIDER_SET_MODULE_PATH:140:ossl_provider_set_module_path
|
||||
CRYPTO_F_PARAM_PUSH:151:
|
||||
CRYPTO_F_PARAM_PUSH_NUM:152:
|
||||
CRYPTO_F_PKEY_HMAC_INIT:123:pkey_hmac_init
|
||||
CRYPTO_F_PKEY_POLY1305_INIT:124:pkey_poly1305_init
|
||||
CRYPTO_F_PKEY_SIPHASH_INIT:125:pkey_siphash_init
|
||||
CRYPTO_F_PROVIDER_ACTIVATE:134:provider_activate
|
||||
CRYPTO_F_PROVIDER_CONF_INIT:137:provider_conf_init
|
||||
CRYPTO_F_PROVIDER_CONF_LOAD:138:provider_conf_load
|
||||
CRYPTO_F_PROVIDER_NEW:135:provider_new
|
||||
CRYPTO_F_PROVIDER_STORE_NEW:136:provider_store_new
|
||||
CRYPTO_F_SK_RESERVE:129:sk_reserve
|
||||
CT_F_CTLOG_NEW:117:CTLOG_new
|
||||
CT_F_CTLOG_NEW_FROM_BASE64:118:CTLOG_new_from_base64
|
||||
CT_F_CTLOG_NEW_FROM_CONF:119:ctlog_new_from_conf
|
||||
CT_F_CTLOG_STORE_LOAD_CTX_NEW:122:ctlog_store_load_ctx_new
|
||||
CT_F_CTLOG_STORE_LOAD_FILE:123:CTLOG_STORE_load_file
|
||||
CT_F_CTLOG_STORE_LOAD_LOG:130:ctlog_store_load_log
|
||||
CT_F_CTLOG_STORE_NEW:131:CTLOG_STORE_new
|
||||
CT_F_CT_BASE64_DECODE:124:ct_base64_decode
|
||||
CT_F_CT_POLICY_EVAL_CTX_NEW:133:CT_POLICY_EVAL_CTX_new
|
||||
CT_F_CT_V1_LOG_ID_FROM_PKEY:125:ct_v1_log_id_from_pkey
|
||||
CT_F_I2O_SCT:107:i2o_SCT
|
||||
CT_F_I2O_SCT_LIST:108:i2o_SCT_LIST
|
||||
CT_F_I2O_SCT_SIGNATURE:109:i2o_SCT_signature
|
||||
CT_F_O2I_SCT:110:o2i_SCT
|
||||
CT_F_O2I_SCT_LIST:111:o2i_SCT_LIST
|
||||
CT_F_O2I_SCT_SIGNATURE:112:o2i_SCT_signature
|
||||
CT_F_SCT_CTX_NEW:126:SCT_CTX_new
|
||||
CT_F_SCT_CTX_VERIFY:128:SCT_CTX_verify
|
||||
CT_F_SCT_NEW:100:SCT_new
|
||||
CT_F_SCT_NEW_FROM_BASE64:127:SCT_new_from_base64
|
||||
CT_F_SCT_SET0_LOG_ID:101:SCT_set0_log_id
|
||||
CT_F_SCT_SET1_EXTENSIONS:114:SCT_set1_extensions
|
||||
CT_F_SCT_SET1_LOG_ID:115:SCT_set1_log_id
|
||||
CT_F_SCT_SET1_SIGNATURE:116:SCT_set1_signature
|
||||
CT_F_SCT_SET_LOG_ENTRY_TYPE:102:SCT_set_log_entry_type
|
||||
CT_F_SCT_SET_SIGNATURE_NID:103:SCT_set_signature_nid
|
||||
CT_F_SCT_SET_VERSION:104:SCT_set_version
|
||||
DH_F_COMPUTE_KEY:102:compute_key
|
||||
DH_F_DHPARAMS_PRINT_FP:101:DHparams_print_fp
|
||||
DH_F_DH_BUF2KEY:126:dh_buf2key
|
||||
DH_F_DH_BUILTIN_GENPARAMS:106:dh_builtin_genparams
|
||||
DH_F_DH_CHECK_EX:121:DH_check_ex
|
||||
DH_F_DH_CHECK_PARAMS_EX:122:DH_check_params_ex
|
||||
DH_F_DH_CHECK_PUB_KEY_EX:123:DH_check_pub_key_ex
|
||||
DH_F_DH_CMS_DECRYPT:114:dh_cms_decrypt
|
||||
DH_F_DH_CMS_SET_PEERKEY:115:dh_cms_set_peerkey
|
||||
DH_F_DH_CMS_SET_SHARED_INFO:116:dh_cms_set_shared_info
|
||||
DH_F_DH_KEY2BUF:127:dh_key2buf
|
||||
DH_F_DH_METH_DUP:117:DH_meth_dup
|
||||
DH_F_DH_METH_NEW:118:DH_meth_new
|
||||
DH_F_DH_METH_SET1_NAME:119:DH_meth_set1_name
|
||||
DH_F_DH_NEW_BY_NID:104:DH_new_by_nid
|
||||
DH_F_DH_NEW_METHOD:105:DH_new_method
|
||||
DH_F_DH_PARAM_DECODE:107:dh_param_decode
|
||||
DH_F_DH_PKEY_PUBLIC_CHECK:124:dh_pkey_public_check
|
||||
DH_F_DH_PRIV_DECODE:110:dh_priv_decode
|
||||
DH_F_DH_PRIV_ENCODE:111:dh_priv_encode
|
||||
DH_F_DH_PUB_DECODE:108:dh_pub_decode
|
||||
DH_F_DH_PUB_ENCODE:109:dh_pub_encode
|
||||
DH_F_DO_DH_PRINT:100:do_dh_print
|
||||
DH_F_GENERATE_KEY:103:generate_key
|
||||
DH_F_PKEY_DH_CTRL_STR:120:pkey_dh_ctrl_str
|
||||
DH_F_PKEY_DH_DERIVE:112:pkey_dh_derive
|
||||
DH_F_PKEY_DH_INIT:125:pkey_dh_init
|
||||
DH_F_PKEY_DH_KEYGEN:113:pkey_dh_keygen
|
||||
DSA_F_DSAPARAMS_PRINT:100:DSAparams_print
|
||||
DSA_F_DSAPARAMS_PRINT_FP:101:DSAparams_print_fp
|
||||
DSA_F_DSA_BUILTIN_PARAMGEN:125:dsa_builtin_paramgen
|
||||
DSA_F_DSA_BUILTIN_PARAMGEN2:126:dsa_builtin_paramgen2
|
||||
DSA_F_DSA_DO_SIGN:112:DSA_do_sign
|
||||
DSA_F_DSA_DO_VERIFY:113:DSA_do_verify
|
||||
DSA_F_DSA_METH_DUP:127:DSA_meth_dup
|
||||
DSA_F_DSA_METH_NEW:128:DSA_meth_new
|
||||
DSA_F_DSA_METH_SET1_NAME:129:DSA_meth_set1_name
|
||||
DSA_F_DSA_NEW_METHOD:103:DSA_new_method
|
||||
DSA_F_DSA_PARAM_DECODE:119:dsa_param_decode
|
||||
DSA_F_DSA_PRINT_FP:105:DSA_print_fp
|
||||
DSA_F_DSA_PRIV_DECODE:115:dsa_priv_decode
|
||||
DSA_F_DSA_PRIV_ENCODE:116:dsa_priv_encode
|
||||
DSA_F_DSA_PUB_DECODE:117:dsa_pub_decode
|
||||
DSA_F_DSA_PUB_ENCODE:118:dsa_pub_encode
|
||||
DSA_F_DSA_SIGN:106:DSA_sign
|
||||
DSA_F_DSA_SIGN_SETUP:107:DSA_sign_setup
|
||||
DSA_F_DSA_SIG_NEW:102:DSA_SIG_new
|
||||
DSA_F_OLD_DSA_PRIV_DECODE:122:old_dsa_priv_decode
|
||||
DSA_F_PKEY_DSA_CTRL:120:pkey_dsa_ctrl
|
||||
DSA_F_PKEY_DSA_CTRL_STR:104:pkey_dsa_ctrl_str
|
||||
DSA_F_PKEY_DSA_KEYGEN:121:pkey_dsa_keygen
|
||||
DSO_F_DLFCN_BIND_FUNC:100:dlfcn_bind_func
|
||||
DSO_F_DLFCN_LOAD:102:dlfcn_load
|
||||
DSO_F_DLFCN_MERGER:130:dlfcn_merger
|
||||
DSO_F_DLFCN_NAME_CONVERTER:123:dlfcn_name_converter
|
||||
DSO_F_DLFCN_UNLOAD:103:dlfcn_unload
|
||||
DSO_F_DL_BIND_FUNC:104:dl_bind_func
|
||||
DSO_F_DL_LOAD:106:dl_load
|
||||
DSO_F_DL_MERGER:131:dl_merger
|
||||
DSO_F_DL_NAME_CONVERTER:124:dl_name_converter
|
||||
DSO_F_DL_UNLOAD:107:dl_unload
|
||||
DSO_F_DSO_BIND_FUNC:108:DSO_bind_func
|
||||
DSO_F_DSO_CONVERT_FILENAME:126:DSO_convert_filename
|
||||
DSO_F_DSO_CTRL:110:DSO_ctrl
|
||||
DSO_F_DSO_FREE:111:DSO_free
|
||||
DSO_F_DSO_GET_FILENAME:127:DSO_get_filename
|
||||
DSO_F_DSO_GLOBAL_LOOKUP:139:DSO_global_lookup
|
||||
DSO_F_DSO_LOAD:112:DSO_load
|
||||
DSO_F_DSO_MERGE:132:DSO_merge
|
||||
DSO_F_DSO_NEW_METHOD:113:DSO_new_method
|
||||
DSO_F_DSO_PATHBYADDR:105:DSO_pathbyaddr
|
||||
DSO_F_DSO_SET_FILENAME:129:DSO_set_filename
|
||||
DSO_F_DSO_UP_REF:114:DSO_up_ref
|
||||
DSO_F_VMS_BIND_SYM:115:vms_bind_sym
|
||||
DSO_F_VMS_LOAD:116:vms_load
|
||||
DSO_F_VMS_MERGER:133:vms_merger
|
||||
DSO_F_VMS_UNLOAD:117:vms_unload
|
||||
DSO_F_WIN32_BIND_FUNC:101:win32_bind_func
|
||||
DSO_F_WIN32_GLOBALLOOKUP:142:win32_globallookup
|
||||
DSO_F_WIN32_JOINER:135:win32_joiner
|
||||
DSO_F_WIN32_LOAD:120:win32_load
|
||||
DSO_F_WIN32_MERGER:134:win32_merger
|
||||
DSO_F_WIN32_NAME_CONVERTER:125:win32_name_converter
|
||||
DSO_F_WIN32_PATHBYADDR:109:*
|
||||
DSO_F_WIN32_SPLITTER:136:win32_splitter
|
||||
DSO_F_WIN32_UNLOAD:121:win32_unload
|
||||
EC_F_BN_TO_FELEM:224:BN_to_felem
|
||||
EC_F_D2I_ECPARAMETERS:144:d2i_ECParameters
|
||||
EC_F_D2I_ECPKPARAMETERS:145:d2i_ECPKParameters
|
||||
EC_F_D2I_ECPRIVATEKEY:146:d2i_ECPrivateKey
|
||||
EC_F_DO_EC_KEY_PRINT:221:do_EC_KEY_print
|
||||
EC_F_ECDH_CMS_DECRYPT:238:ecdh_cms_decrypt
|
||||
EC_F_ECDH_CMS_SET_SHARED_INFO:239:ecdh_cms_set_shared_info
|
||||
EC_F_ECDH_COMPUTE_KEY:246:ECDH_compute_key
|
||||
EC_F_ECDH_SIMPLE_COMPUTE_KEY:257:ecdh_simple_compute_key
|
||||
EC_F_ECDSA_DO_SIGN_EX:251:ECDSA_do_sign_ex
|
||||
EC_F_ECDSA_DO_VERIFY:252:ECDSA_do_verify
|
||||
EC_F_ECDSA_S390X_NISTP_SIGN_SIG:313:ecdsa_s390x_nistp_sign_sig
|
||||
EC_F_ECDSA_S390X_NISTP_VERIFY_SIG:314:ecdsa_s390x_nistp_verify_sig
|
||||
EC_F_ECDSA_SIGN_EX:254:ECDSA_sign_ex
|
||||
EC_F_ECDSA_SIGN_SETUP:248:ECDSA_sign_setup
|
||||
EC_F_ECDSA_SIG_NEW:265:ECDSA_SIG_new
|
||||
EC_F_ECDSA_SIMPLE_SIGN_SETUP:310:ecdsa_simple_sign_setup
|
||||
EC_F_ECDSA_SIMPLE_SIGN_SIG:311:ecdsa_simple_sign_sig
|
||||
EC_F_ECDSA_SIMPLE_VERIFY_SIG:312:ecdsa_simple_verify_sig
|
||||
EC_F_ECDSA_VERIFY:253:ECDSA_verify
|
||||
EC_F_ECD_ITEM_VERIFY:270:ecd_item_verify
|
||||
EC_F_ECKEY_PARAM2TYPE:223:eckey_param2type
|
||||
EC_F_ECKEY_PARAM_DECODE:212:eckey_param_decode
|
||||
EC_F_ECKEY_PRIV_DECODE:213:eckey_priv_decode
|
||||
EC_F_ECKEY_PRIV_ENCODE:214:eckey_priv_encode
|
||||
EC_F_ECKEY_PUB_DECODE:215:eckey_pub_decode
|
||||
EC_F_ECKEY_PUB_ENCODE:216:eckey_pub_encode
|
||||
EC_F_ECKEY_TYPE2PARAM:220:eckey_type2param
|
||||
EC_F_ECPARAMETERS_PRINT:147:ECParameters_print
|
||||
EC_F_ECPARAMETERS_PRINT_FP:148:ECParameters_print_fp
|
||||
EC_F_ECPKPARAMETERS_PRINT:149:ECPKParameters_print
|
||||
EC_F_ECPKPARAMETERS_PRINT_FP:150:ECPKParameters_print_fp
|
||||
EC_F_ECP_NISTZ256_GET_AFFINE:240:ecp_nistz256_get_affine
|
||||
EC_F_ECP_NISTZ256_INV_MOD_ORD:275:ecp_nistz256_inv_mod_ord
|
||||
EC_F_ECP_NISTZ256_MULT_PRECOMPUTE:243:ecp_nistz256_mult_precompute
|
||||
EC_F_ECP_NISTZ256_POINTS_MUL:241:ecp_nistz256_points_mul
|
||||
EC_F_ECP_NISTZ256_PRE_COMP_NEW:244:ecp_nistz256_pre_comp_new
|
||||
EC_F_ECP_NISTZ256_WINDOWED_MUL:242:ecp_nistz256_windowed_mul
|
||||
EC_F_ECX_KEY_OP:266:ecx_key_op
|
||||
EC_F_ECX_PRIV_ENCODE:267:ecx_priv_encode
|
||||
EC_F_ECX_PUB_ENCODE:268:ecx_pub_encode
|
||||
EC_F_EC_ASN1_GROUP2CURVE:153:ec_asn1_group2curve
|
||||
EC_F_EC_ASN1_GROUP2FIELDID:154:ec_asn1_group2fieldid
|
||||
EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY:208:ec_GF2m_montgomery_point_multiply
|
||||
EC_F_EC_GF2M_SIMPLE_FIELD_INV:296:ec_GF2m_simple_field_inv
|
||||
EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT:159:\
|
||||
ec_GF2m_simple_group_check_discriminant
|
||||
EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE:195:ec_GF2m_simple_group_set_curve
|
||||
EC_F_EC_GF2M_SIMPLE_LADDER_POST:285:ec_GF2m_simple_ladder_post
|
||||
EC_F_EC_GF2M_SIMPLE_LADDER_PRE:288:ec_GF2m_simple_ladder_pre
|
||||
EC_F_EC_GF2M_SIMPLE_OCT2POINT:160:ec_GF2m_simple_oct2point
|
||||
EC_F_EC_GF2M_SIMPLE_POINT2OCT:161:ec_GF2m_simple_point2oct
|
||||
EC_F_EC_GF2M_SIMPLE_POINTS_MUL:289:ec_GF2m_simple_points_mul
|
||||
EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES:162:\
|
||||
ec_GF2m_simple_point_get_affine_coordinates
|
||||
EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES:163:\
|
||||
ec_GF2m_simple_point_set_affine_coordinates
|
||||
EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES:164:\
|
||||
ec_GF2m_simple_set_compressed_coordinates
|
||||
EC_F_EC_GFP_MONT_FIELD_DECODE:133:ec_GFp_mont_field_decode
|
||||
EC_F_EC_GFP_MONT_FIELD_ENCODE:134:ec_GFp_mont_field_encode
|
||||
EC_F_EC_GFP_MONT_FIELD_INV:297:ec_GFp_mont_field_inv
|
||||
EC_F_EC_GFP_MONT_FIELD_MUL:131:ec_GFp_mont_field_mul
|
||||
EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE:209:ec_GFp_mont_field_set_to_one
|
||||
EC_F_EC_GFP_MONT_FIELD_SQR:132:ec_GFp_mont_field_sqr
|
||||
EC_F_EC_GFP_MONT_GROUP_SET_CURVE:189:ec_GFp_mont_group_set_curve
|
||||
EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE:225:ec_GFp_nistp224_group_set_curve
|
||||
EC_F_EC_GFP_NISTP224_POINTS_MUL:228:ec_GFp_nistp224_points_mul
|
||||
EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES:226:\
|
||||
ec_GFp_nistp224_point_get_affine_coordinates
|
||||
EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE:230:ec_GFp_nistp256_group_set_curve
|
||||
EC_F_EC_GFP_NISTP256_POINTS_MUL:231:ec_GFp_nistp256_points_mul
|
||||
EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES:232:\
|
||||
ec_GFp_nistp256_point_get_affine_coordinates
|
||||
EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE:233:ec_GFp_nistp521_group_set_curve
|
||||
EC_F_EC_GFP_NISTP521_POINTS_MUL:234:ec_GFp_nistp521_points_mul
|
||||
EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES:235:\
|
||||
ec_GFp_nistp521_point_get_affine_coordinates
|
||||
EC_F_EC_GFP_NIST_FIELD_MUL:200:ec_GFp_nist_field_mul
|
||||
EC_F_EC_GFP_NIST_FIELD_SQR:201:ec_GFp_nist_field_sqr
|
||||
EC_F_EC_GFP_NIST_GROUP_SET_CURVE:202:ec_GFp_nist_group_set_curve
|
||||
EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES:287:ec_GFp_simple_blind_coordinates
|
||||
EC_F_EC_GFP_SIMPLE_FIELD_INV:298:ec_GFp_simple_field_inv
|
||||
EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT:165:\
|
||||
ec_GFp_simple_group_check_discriminant
|
||||
EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE:166:ec_GFp_simple_group_set_curve
|
||||
EC_F_EC_GFP_SIMPLE_MAKE_AFFINE:102:ec_GFp_simple_make_affine
|
||||
EC_F_EC_GFP_SIMPLE_OCT2POINT:103:ec_GFp_simple_oct2point
|
||||
EC_F_EC_GFP_SIMPLE_POINT2OCT:104:ec_GFp_simple_point2oct
|
||||
EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE:137:ec_GFp_simple_points_make_affine
|
||||
EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES:167:\
|
||||
ec_GFp_simple_point_get_affine_coordinates
|
||||
EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES:168:\
|
||||
ec_GFp_simple_point_set_affine_coordinates
|
||||
EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES:169:\
|
||||
ec_GFp_simple_set_compressed_coordinates
|
||||
EC_F_EC_GROUP_CHECK:170:EC_GROUP_check
|
||||
EC_F_EC_GROUP_CHECK_DISCRIMINANT:171:EC_GROUP_check_discriminant
|
||||
EC_F_EC_GROUP_CHECK_NAMED_CURVE:299:EC_GROUP_check_named_curve
|
||||
EC_F_EC_GROUP_COPY:106:EC_GROUP_copy
|
||||
EC_F_EC_GROUP_GET_CURVE:291:EC_GROUP_get_curve
|
||||
EC_F_EC_GROUP_GET_CURVE_GF2M:172:EC_GROUP_get_curve_GF2m
|
||||
EC_F_EC_GROUP_GET_CURVE_GFP:130:EC_GROUP_get_curve_GFp
|
||||
EC_F_EC_GROUP_GET_DEGREE:173:EC_GROUP_get_degree
|
||||
EC_F_EC_GROUP_GET_ECPARAMETERS:261:EC_GROUP_get_ecparameters
|
||||
EC_F_EC_GROUP_GET_ECPKPARAMETERS:262:EC_GROUP_get_ecpkparameters
|
||||
EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS:193:EC_GROUP_get_pentanomial_basis
|
||||
EC_F_EC_GROUP_GET_TRINOMIAL_BASIS:194:EC_GROUP_get_trinomial_basis
|
||||
EC_F_EC_GROUP_NEW:108:EC_GROUP_new
|
||||
EC_F_EC_GROUP_NEW_BY_CURVE_NAME:174:EC_GROUP_new_by_curve_name
|
||||
EC_F_EC_GROUP_NEW_BY_CURVE_NAME_EX:301:EC_GROUP_new_by_curve_name_ex
|
||||
EC_F_EC_GROUP_NEW_EX:302:EC_GROUP_new_ex
|
||||
EC_F_EC_GROUP_NEW_FROM_DATA:175:ec_group_new_from_data
|
||||
EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS:263:EC_GROUP_new_from_ecparameters
|
||||
EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS:264:EC_GROUP_new_from_ecpkparameters
|
||||
EC_F_EC_GROUP_SET_CURVE:292:EC_GROUP_set_curve
|
||||
EC_F_EC_GROUP_SET_CURVE_GF2M:176:EC_GROUP_set_curve_GF2m
|
||||
EC_F_EC_GROUP_SET_CURVE_GFP:109:EC_GROUP_set_curve_GFp
|
||||
EC_F_EC_GROUP_SET_GENERATOR:111:EC_GROUP_set_generator
|
||||
EC_F_EC_GROUP_SET_SEED:286:EC_GROUP_set_seed
|
||||
EC_F_EC_KEY_CHECK_KEY:177:EC_KEY_check_key
|
||||
EC_F_EC_KEY_COPY:178:EC_KEY_copy
|
||||
EC_F_EC_KEY_GENERATE_KEY:179:EC_KEY_generate_key
|
||||
EC_F_EC_KEY_NEW:182:EC_KEY_new
|
||||
EC_F_EC_KEY_NEW_METHOD:245:EC_KEY_new_method
|
||||
EC_F_EC_KEY_NEW_METHOD_INT:300:ec_key_new_method_int
|
||||
EC_F_EC_KEY_OCT2PRIV:255:EC_KEY_oct2priv
|
||||
EC_F_EC_KEY_PRINT:180:EC_KEY_print
|
||||
EC_F_EC_KEY_PRINT_FP:181:EC_KEY_print_fp
|
||||
EC_F_EC_KEY_PRIV2BUF:279:EC_KEY_priv2buf
|
||||
EC_F_EC_KEY_PRIV2OCT:256:EC_KEY_priv2oct
|
||||
EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES:229:\
|
||||
EC_KEY_set_public_key_affine_coordinates
|
||||
EC_F_EC_KEY_SIMPLE_CHECK_KEY:258:ec_key_simple_check_key
|
||||
EC_F_EC_KEY_SIMPLE_OCT2PRIV:259:ec_key_simple_oct2priv
|
||||
EC_F_EC_KEY_SIMPLE_PRIV2OCT:260:ec_key_simple_priv2oct
|
||||
EC_F_EC_PKEY_CHECK:273:ec_pkey_check
|
||||
EC_F_EC_PKEY_PARAM_CHECK:274:ec_pkey_param_check
|
||||
EC_F_EC_POINTS_MAKE_AFFINE:136:EC_POINTs_make_affine
|
||||
EC_F_EC_POINTS_MUL:290:EC_POINTs_mul
|
||||
EC_F_EC_POINT_ADD:112:EC_POINT_add
|
||||
EC_F_EC_POINT_BN2POINT:280:EC_POINT_bn2point
|
||||
EC_F_EC_POINT_CMP:113:EC_POINT_cmp
|
||||
EC_F_EC_POINT_COPY:114:EC_POINT_copy
|
||||
EC_F_EC_POINT_DBL:115:EC_POINT_dbl
|
||||
EC_F_EC_POINT_GET_AFFINE_COORDINATES:293:EC_POINT_get_affine_coordinates
|
||||
EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M:183:\
|
||||
EC_POINT_get_affine_coordinates_GF2m
|
||||
EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP:116:EC_POINT_get_affine_coordinates_GFp
|
||||
EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP:117:\
|
||||
EC_POINT_get_Jprojective_coordinates_GFp
|
||||
EC_F_EC_POINT_INVERT:210:EC_POINT_invert
|
||||
EC_F_EC_POINT_IS_AT_INFINITY:118:EC_POINT_is_at_infinity
|
||||
EC_F_EC_POINT_IS_ON_CURVE:119:EC_POINT_is_on_curve
|
||||
EC_F_EC_POINT_MAKE_AFFINE:120:EC_POINT_make_affine
|
||||
EC_F_EC_POINT_NEW:121:EC_POINT_new
|
||||
EC_F_EC_POINT_OCT2POINT:122:EC_POINT_oct2point
|
||||
EC_F_EC_POINT_POINT2BUF:281:EC_POINT_point2buf
|
||||
EC_F_EC_POINT_POINT2OCT:123:EC_POINT_point2oct
|
||||
EC_F_EC_POINT_SET_AFFINE_COORDINATES:294:EC_POINT_set_affine_coordinates
|
||||
EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M:185:\
|
||||
EC_POINT_set_affine_coordinates_GF2m
|
||||
EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP:124:EC_POINT_set_affine_coordinates_GFp
|
||||
EC_F_EC_POINT_SET_COMPRESSED_COORDINATES:295:EC_POINT_set_compressed_coordinates
|
||||
EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M:186:\
|
||||
EC_POINT_set_compressed_coordinates_GF2m
|
||||
EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP:125:\
|
||||
EC_POINT_set_compressed_coordinates_GFp
|
||||
EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP:126:\
|
||||
EC_POINT_set_Jprojective_coordinates_GFp
|
||||
EC_F_EC_POINT_SET_TO_INFINITY:127:EC_POINT_set_to_infinity
|
||||
EC_F_EC_PRE_COMP_NEW:196:ec_pre_comp_new
|
||||
EC_F_EC_SCALAR_MUL_LADDER:284:ec_scalar_mul_ladder
|
||||
EC_F_EC_WNAF_MUL:187:ec_wNAF_mul
|
||||
EC_F_EC_WNAF_PRECOMPUTE_MULT:188:ec_wNAF_precompute_mult
|
||||
EC_F_I2D_ECPARAMETERS:190:i2d_ECParameters
|
||||
EC_F_I2D_ECPKPARAMETERS:191:i2d_ECPKParameters
|
||||
EC_F_I2D_ECPRIVATEKEY:192:i2d_ECPrivateKey
|
||||
EC_F_I2O_ECPUBLICKEY:151:i2o_ECPublicKey
|
||||
EC_F_NISTP224_PRE_COMP_NEW:227:nistp224_pre_comp_new
|
||||
EC_F_NISTP256_PRE_COMP_NEW:236:nistp256_pre_comp_new
|
||||
EC_F_NISTP521_PRE_COMP_NEW:237:nistp521_pre_comp_new
|
||||
EC_F_O2I_ECPUBLICKEY:152:o2i_ECPublicKey
|
||||
EC_F_OLD_EC_PRIV_DECODE:222:old_ec_priv_decode
|
||||
EC_F_OSSL_ECDH_COMPUTE_KEY:247:ossl_ecdh_compute_key
|
||||
EC_F_OSSL_ECDSA_SIGN_SETUP:300:ossl_ecdsa_sign_setup
|
||||
EC_F_OSSL_ECDSA_SIGN_SIG:249:ossl_ecdsa_sign_sig
|
||||
EC_F_OSSL_ECDSA_VERIFY_SIG:250:ossl_ecdsa_verify_sig
|
||||
EC_F_PKEY_ECD_CTRL:271:pkey_ecd_ctrl
|
||||
EC_F_PKEY_ECD_DIGESTSIGN:272:pkey_ecd_digestsign
|
||||
EC_F_PKEY_ECD_DIGESTSIGN25519:276:pkey_ecd_digestsign25519
|
||||
EC_F_PKEY_ECD_DIGESTSIGN448:277:pkey_ecd_digestsign448
|
||||
EC_F_PKEY_ECX_DERIVE:269:pkey_ecx_derive
|
||||
EC_F_PKEY_EC_CTRL:197:pkey_ec_ctrl
|
||||
EC_F_PKEY_EC_CTRL_STR:198:pkey_ec_ctrl_str
|
||||
EC_F_PKEY_EC_DERIVE:217:pkey_ec_derive
|
||||
EC_F_PKEY_EC_INIT:282:pkey_ec_init
|
||||
EC_F_PKEY_EC_KDF_DERIVE:283:pkey_ec_kdf_derive
|
||||
EC_F_PKEY_EC_KEYGEN:199:pkey_ec_keygen
|
||||
EC_F_PKEY_EC_PARAMGEN:219:pkey_ec_paramgen
|
||||
EC_F_PKEY_EC_SIGN:218:pkey_ec_sign
|
||||
EC_F_VALIDATE_ECX_DERIVE:278:validate_ecx_derive
|
||||
ENGINE_F_DIGEST_UPDATE:198:digest_update
|
||||
ENGINE_F_DYNAMIC_CTRL:180:dynamic_ctrl
|
||||
ENGINE_F_DYNAMIC_GET_DATA_CTX:181:dynamic_get_data_ctx
|
||||
ENGINE_F_DYNAMIC_LOAD:182:dynamic_load
|
||||
ENGINE_F_DYNAMIC_SET_DATA_CTX:183:dynamic_set_data_ctx
|
||||
ENGINE_F_ENGINE_ADD:105:ENGINE_add
|
||||
ENGINE_F_ENGINE_BY_ID:106:ENGINE_by_id
|
||||
ENGINE_F_ENGINE_CMD_IS_EXECUTABLE:170:ENGINE_cmd_is_executable
|
||||
ENGINE_F_ENGINE_CTRL:142:ENGINE_ctrl
|
||||
ENGINE_F_ENGINE_CTRL_CMD:178:ENGINE_ctrl_cmd
|
||||
ENGINE_F_ENGINE_CTRL_CMD_STRING:171:ENGINE_ctrl_cmd_string
|
||||
ENGINE_F_ENGINE_FINISH:107:ENGINE_finish
|
||||
ENGINE_F_ENGINE_GET_CIPHER:185:ENGINE_get_cipher
|
||||
ENGINE_F_ENGINE_GET_DIGEST:186:ENGINE_get_digest
|
||||
ENGINE_F_ENGINE_GET_FIRST:195:ENGINE_get_first
|
||||
ENGINE_F_ENGINE_GET_LAST:196:ENGINE_get_last
|
||||
ENGINE_F_ENGINE_GET_NEXT:115:ENGINE_get_next
|
||||
ENGINE_F_ENGINE_GET_PKEY_ASN1_METH:193:ENGINE_get_pkey_asn1_meth
|
||||
ENGINE_F_ENGINE_GET_PKEY_METH:192:ENGINE_get_pkey_meth
|
||||
ENGINE_F_ENGINE_GET_PREV:116:ENGINE_get_prev
|
||||
ENGINE_F_ENGINE_INIT:119:ENGINE_init
|
||||
ENGINE_F_ENGINE_LIST_ADD:120:engine_list_add
|
||||
ENGINE_F_ENGINE_LIST_REMOVE:121:engine_list_remove
|
||||
ENGINE_F_ENGINE_LOAD_PRIVATE_KEY:150:ENGINE_load_private_key
|
||||
ENGINE_F_ENGINE_LOAD_PUBLIC_KEY:151:ENGINE_load_public_key
|
||||
ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT:194:ENGINE_load_ssl_client_cert
|
||||
ENGINE_F_ENGINE_NEW:122:ENGINE_new
|
||||
ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR:197:ENGINE_pkey_asn1_find_str
|
||||
ENGINE_F_ENGINE_REMOVE:123:ENGINE_remove
|
||||
ENGINE_F_ENGINE_SET_DEFAULT_STRING:189:ENGINE_set_default_string
|
||||
ENGINE_F_ENGINE_SET_ID:129:ENGINE_set_id
|
||||
ENGINE_F_ENGINE_SET_NAME:130:ENGINE_set_name
|
||||
ENGINE_F_ENGINE_TABLE_REGISTER:184:engine_table_register
|
||||
ENGINE_F_ENGINE_UNLOCKED_FINISH:191:engine_unlocked_finish
|
||||
ENGINE_F_ENGINE_UP_REF:190:ENGINE_up_ref
|
||||
ENGINE_F_INT_CLEANUP_ITEM:199:int_cleanup_item
|
||||
ENGINE_F_INT_CTRL_HELPER:172:int_ctrl_helper
|
||||
ENGINE_F_INT_ENGINE_CONFIGURE:188:int_engine_configure
|
||||
ENGINE_F_INT_ENGINE_MODULE_INIT:187:int_engine_module_init
|
||||
ENGINE_F_OSSL_HMAC_INIT:200:ossl_hmac_init
|
||||
ESS_F_ESS_CERT_ID_NEW_INIT:100:ESS_CERT_ID_new_init
|
||||
ESS_F_ESS_CERT_ID_V2_NEW_INIT:101:ESS_CERT_ID_V2_new_init
|
||||
ESS_F_ESS_SIGNING_CERT_ADD:104:ESS_SIGNING_CERT_add
|
||||
ESS_F_ESS_SIGNING_CERT_NEW_INIT:102:ESS_SIGNING_CERT_new_init
|
||||
ESS_F_ESS_SIGNING_CERT_V2_ADD:105:ESS_SIGNING_CERT_V2_add
|
||||
ESS_F_ESS_SIGNING_CERT_V2_NEW_INIT:103:ESS_SIGNING_CERT_V2_new_init
|
||||
EVP_F_AESNI_INIT_KEY:165:aesni_init_key
|
||||
EVP_F_AESNI_XTS_INIT_KEY:233:aesni_xts_init_key
|
||||
EVP_F_AES_GCM_CTRL:196:aes_gcm_ctrl
|
||||
EVP_F_AES_GCM_TLS_CIPHER:207:aes_gcm_tls_cipher
|
||||
EVP_F_AES_INIT_KEY:133:aes_init_key
|
||||
EVP_F_AES_OCB_CIPHER:169:aes_ocb_cipher
|
||||
EVP_F_AES_T4_INIT_KEY:178:aes_t4_init_key
|
||||
EVP_F_AES_T4_XTS_INIT_KEY:234:aes_t4_xts_init_key
|
||||
EVP_F_AES_WRAP_CIPHER:170:aes_wrap_cipher
|
||||
EVP_F_AES_XTS_CIPHER:229:aes_xts_cipher
|
||||
EVP_F_AES_XTS_INIT_KEY:235:aes_xts_init_key
|
||||
EVP_F_ALG_MODULE_INIT:177:alg_module_init
|
||||
EVP_F_ARIA_CCM_INIT_KEY:175:aria_ccm_init_key
|
||||
EVP_F_ARIA_GCM_CTRL:197:aria_gcm_ctrl
|
||||
EVP_F_ARIA_GCM_INIT_KEY:176:aria_gcm_init_key
|
||||
EVP_F_ARIA_INIT_KEY:185:aria_init_key
|
||||
EVP_F_B64_NEW:198:b64_new
|
||||
EVP_F_CAMELLIA_INIT_KEY:159:camellia_init_key
|
||||
EVP_F_CHACHA20_POLY1305_CTRL:182:chacha20_poly1305_ctrl
|
||||
EVP_F_CMLL_T4_INIT_KEY:179:cmll_t4_init_key
|
||||
EVP_F_DES_EDE3_WRAP_CIPHER:171:des_ede3_wrap_cipher
|
||||
EVP_F_DO_SIGVER_INIT:161:do_sigver_init
|
||||
EVP_F_ENC_NEW:199:enc_new
|
||||
EVP_F_EVP_CIPHERINIT_EX:123:EVP_CipherInit_ex
|
||||
EVP_F_EVP_CIPHER_ASN1_TO_PARAM:204:EVP_CIPHER_asn1_to_param
|
||||
EVP_F_EVP_CIPHER_CTX_COPY:163:EVP_CIPHER_CTX_copy
|
||||
EVP_F_EVP_CIPHER_CTX_CTRL:124:EVP_CIPHER_CTX_ctrl
|
||||
EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH:122:EVP_CIPHER_CTX_set_key_length
|
||||
EVP_F_EVP_CIPHER_CTX_SET_PADDING:237:EVP_CIPHER_CTX_set_padding
|
||||
EVP_F_EVP_CIPHER_FROM_DISPATCH:238:evp_cipher_from_dispatch
|
||||
EVP_F_EVP_CIPHER_MODE:239:EVP_CIPHER_mode
|
||||
EVP_F_EVP_CIPHER_PARAM_TO_ASN1:205:EVP_CIPHER_param_to_asn1
|
||||
EVP_F_EVP_DECRYPTFINAL_EX:101:EVP_DecryptFinal_ex
|
||||
EVP_F_EVP_DECRYPTUPDATE:166:EVP_DecryptUpdate
|
||||
EVP_F_EVP_DIGESTFINALXOF:174:EVP_DigestFinalXOF
|
||||
EVP_F_EVP_DIGESTFINAL_EX:230:EVP_DigestFinal_ex
|
||||
EVP_F_EVP_DIGESTINIT_EX:128:EVP_DigestInit_ex
|
||||
EVP_F_EVP_DIGESTUPDATE:231:EVP_DigestUpdate
|
||||
EVP_F_EVP_ENCRYPTDECRYPTUPDATE:219:evp_EncryptDecryptUpdate
|
||||
EVP_F_EVP_ENCRYPTFINAL_EX:127:EVP_EncryptFinal_ex
|
||||
EVP_F_EVP_ENCRYPTUPDATE:167:EVP_EncryptUpdate
|
||||
EVP_F_EVP_KDF_CTX_DUP:220:
|
||||
EVP_F_EVP_KDF_CTX_NEW:221:
|
||||
EVP_F_EVP_KEYEXCH_FETCH:245:EVP_KEYEXCH_fetch
|
||||
EVP_F_EVP_KEYEXCH_FROM_DISPATCH:244:evp_keyexch_from_dispatch
|
||||
EVP_F_EVP_MAC_CTRL:209:EVP_MAC_ctrl
|
||||
EVP_F_EVP_MAC_CTRL_STR:210:EVP_MAC_ctrl_str
|
||||
EVP_F_EVP_MAC_CTX_DUP:211:EVP_MAC_CTX_dup
|
||||
EVP_F_EVP_MAC_CTX_NEW:213:EVP_MAC_CTX_new
|
||||
EVP_F_EVP_MAC_INIT:212:EVP_MAC_init
|
||||
EVP_F_EVP_MD_BLOCK_SIZE:232:EVP_MD_block_size
|
||||
EVP_F_EVP_MD_CTX_COPY_EX:110:EVP_MD_CTX_copy_ex
|
||||
EVP_F_EVP_MD_SIZE:162:EVP_MD_size
|
||||
EVP_F_EVP_OPENINIT:102:EVP_OpenInit
|
||||
EVP_F_EVP_PBE_ALG_ADD:115:EVP_PBE_alg_add
|
||||
EVP_F_EVP_PBE_ALG_ADD_TYPE:160:EVP_PBE_alg_add_type
|
||||
EVP_F_EVP_PBE_CIPHERINIT:116:EVP_PBE_CipherInit
|
||||
EVP_F_EVP_PBE_SCRYPT:181:EVP_PBE_scrypt
|
||||
EVP_F_EVP_PKCS82PKEY:111:EVP_PKCS82PKEY
|
||||
EVP_F_EVP_PKEY2PKCS8:113:EVP_PKEY2PKCS8
|
||||
EVP_F_EVP_PKEY_ASN1_ADD0:188:EVP_PKEY_asn1_add0
|
||||
EVP_F_EVP_PKEY_CHECK:186:EVP_PKEY_check
|
||||
EVP_F_EVP_PKEY_COPY_PARAMETERS:103:EVP_PKEY_copy_parameters
|
||||
EVP_F_EVP_PKEY_CTX_CTRL:137:EVP_PKEY_CTX_ctrl
|
||||
EVP_F_EVP_PKEY_CTX_CTRL_STR:150:EVP_PKEY_CTX_ctrl_str
|
||||
EVP_F_EVP_PKEY_CTX_DUP:156:EVP_PKEY_CTX_dup
|
||||
EVP_F_EVP_PKEY_CTX_MD:168:EVP_PKEY_CTX_md
|
||||
EVP_F_EVP_PKEY_DECRYPT:104:EVP_PKEY_decrypt
|
||||
EVP_F_EVP_PKEY_DECRYPT_INIT:138:EVP_PKEY_decrypt_init
|
||||
EVP_F_EVP_PKEY_DECRYPT_OLD:151:EVP_PKEY_decrypt_old
|
||||
EVP_F_EVP_PKEY_DERIVE:153:EVP_PKEY_derive
|
||||
EVP_F_EVP_PKEY_DERIVE_INIT:154:EVP_PKEY_derive_init
|
||||
EVP_F_EVP_PKEY_DERIVE_INIT_EX:243:EVP_PKEY_derive_init_ex
|
||||
EVP_F_EVP_PKEY_DERIVE_SET_PEER:155:EVP_PKEY_derive_set_peer
|
||||
EVP_F_EVP_PKEY_ENCRYPT:105:EVP_PKEY_encrypt
|
||||
EVP_F_EVP_PKEY_ENCRYPT_INIT:139:EVP_PKEY_encrypt_init
|
||||
EVP_F_EVP_PKEY_ENCRYPT_OLD:152:EVP_PKEY_encrypt_old
|
||||
EVP_F_EVP_PKEY_GET0_DH:119:EVP_PKEY_get0_DH
|
||||
EVP_F_EVP_PKEY_GET0_DSA:120:EVP_PKEY_get0_DSA
|
||||
EVP_F_EVP_PKEY_GET0_EC_KEY:131:EVP_PKEY_get0_EC_KEY
|
||||
EVP_F_EVP_PKEY_GET0_HMAC:183:EVP_PKEY_get0_hmac
|
||||
EVP_F_EVP_PKEY_GET0_POLY1305:184:EVP_PKEY_get0_poly1305
|
||||
EVP_F_EVP_PKEY_GET0_RSA:121:EVP_PKEY_get0_RSA
|
||||
EVP_F_EVP_PKEY_GET0_SIPHASH:172:EVP_PKEY_get0_siphash
|
||||
EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY:202:EVP_PKEY_get_raw_private_key
|
||||
EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY:203:EVP_PKEY_get_raw_public_key
|
||||
EVP_F_EVP_PKEY_KEYGEN:146:EVP_PKEY_keygen
|
||||
EVP_F_EVP_PKEY_KEYGEN_INIT:147:EVP_PKEY_keygen_init
|
||||
EVP_F_EVP_PKEY_METH_ADD0:194:EVP_PKEY_meth_add0
|
||||
EVP_F_EVP_PKEY_METH_NEW:195:EVP_PKEY_meth_new
|
||||
EVP_F_EVP_PKEY_NEW:106:EVP_PKEY_new
|
||||
EVP_F_EVP_PKEY_NEW_CMAC_KEY:193:EVP_PKEY_new_CMAC_key
|
||||
EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY:191:EVP_PKEY_new_raw_private_key
|
||||
EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY:192:EVP_PKEY_new_raw_public_key
|
||||
EVP_F_EVP_PKEY_PARAMGEN:148:EVP_PKEY_paramgen
|
||||
EVP_F_EVP_PKEY_PARAMGEN_INIT:149:EVP_PKEY_paramgen_init
|
||||
EVP_F_EVP_PKEY_PARAM_CHECK:189:EVP_PKEY_param_check
|
||||
EVP_F_EVP_PKEY_PUBLIC_CHECK:190:EVP_PKEY_public_check
|
||||
EVP_F_EVP_PKEY_SET1_ENGINE:187:EVP_PKEY_set1_engine
|
||||
EVP_F_EVP_PKEY_SET_ALIAS_TYPE:206:EVP_PKEY_set_alias_type
|
||||
EVP_F_EVP_PKEY_SIGN:140:EVP_PKEY_sign
|
||||
EVP_F_EVP_PKEY_SIGN_INIT:141:EVP_PKEY_sign_init
|
||||
EVP_F_EVP_PKEY_VERIFY:142:EVP_PKEY_verify
|
||||
EVP_F_EVP_PKEY_VERIFY_INIT:143:EVP_PKEY_verify_init
|
||||
EVP_F_EVP_PKEY_VERIFY_RECOVER:144:EVP_PKEY_verify_recover
|
||||
EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT:145:EVP_PKEY_verify_recover_init
|
||||
EVP_F_EVP_SET_DEFAULT_PROPERTIES:236:EVP_set_default_properties
|
||||
EVP_F_EVP_SIGNFINAL:107:EVP_SignFinal
|
||||
EVP_F_EVP_VERIFYFINAL:108:EVP_VerifyFinal
|
||||
EVP_F_GMAC_CTRL:215:gmac_ctrl
|
||||
EVP_F_INT_CTX_NEW:157:int_ctx_new
|
||||
EVP_F_KMAC_CTRL:217:kmac_ctrl
|
||||
EVP_F_KMAC_INIT:218:kmac_init
|
||||
EVP_F_OK_NEW:200:ok_new
|
||||
EVP_F_PKCS5_PBE_KEYIVGEN:117:PKCS5_PBE_keyivgen
|
||||
EVP_F_PKCS5_V2_PBE_KEYIVGEN:118:PKCS5_v2_PBE_keyivgen
|
||||
EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN:164:PKCS5_v2_PBKDF2_keyivgen
|
||||
EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN:180:PKCS5_v2_scrypt_keyivgen
|
||||
EVP_F_PKEY_KDF_CTRL:227:pkey_kdf_ctrl
|
||||
EVP_F_PKEY_MAC_COPY:241:pkey_mac_copy
|
||||
EVP_F_PKEY_MAC_INIT:214:pkey_mac_init
|
||||
EVP_F_PKEY_SET_TYPE:158:pkey_set_type
|
||||
EVP_F_POLY1305_CTRL:216:poly1305_ctrl
|
||||
EVP_F_RC2_MAGIC_TO_METH:109:rc2_magic_to_meth
|
||||
EVP_F_RC5_CTRL:125:rc5_ctrl
|
||||
EVP_F_R_32_12_16_INIT_KEY:242:r_32_12_16_init_key
|
||||
EVP_F_S390X_AES_GCM_CTRL:201:s390x_aes_gcm_ctrl
|
||||
EVP_F_S390X_AES_GCM_TLS_CIPHER:208:s390x_aes_gcm_tls_cipher
|
||||
EVP_F_SCRYPT_ALG:228:scrypt_alg
|
||||
EVP_F_UPDATE:173:update
|
||||
OBJ_F_OBJ_ADD_OBJECT:105:OBJ_add_object
|
||||
OBJ_F_OBJ_ADD_SIGID:107:OBJ_add_sigid
|
||||
OBJ_F_OBJ_CREATE:100:OBJ_create
|
||||
OBJ_F_OBJ_DUP:101:OBJ_dup
|
||||
OBJ_F_OBJ_NAME_NEW_INDEX:106:OBJ_NAME_new_index
|
||||
OBJ_F_OBJ_NID2LN:102:OBJ_nid2ln
|
||||
OBJ_F_OBJ_NID2OBJ:103:OBJ_nid2obj
|
||||
OBJ_F_OBJ_NID2SN:104:OBJ_nid2sn
|
||||
OBJ_F_OBJ_TXT2OBJ:108:OBJ_txt2obj
|
||||
OCSP_F_D2I_OCSP_NONCE:102:d2i_ocsp_nonce
|
||||
OCSP_F_OCSP_BASIC_ADD1_STATUS:103:OCSP_basic_add1_status
|
||||
OCSP_F_OCSP_BASIC_SIGN:104:OCSP_basic_sign
|
||||
OCSP_F_OCSP_BASIC_SIGN_CTX:119:OCSP_basic_sign_ctx
|
||||
OCSP_F_OCSP_BASIC_VERIFY:105:OCSP_basic_verify
|
||||
OCSP_F_OCSP_CERT_ID_NEW:101:OCSP_cert_id_new
|
||||
OCSP_F_OCSP_CHECK_DELEGATED:106:ocsp_check_delegated
|
||||
OCSP_F_OCSP_CHECK_IDS:107:ocsp_check_ids
|
||||
OCSP_F_OCSP_CHECK_ISSUER:108:ocsp_check_issuer
|
||||
OCSP_F_OCSP_CHECK_VALIDITY:115:OCSP_check_validity
|
||||
OCSP_F_OCSP_MATCH_ISSUERID:109:ocsp_match_issuerid
|
||||
OCSP_F_OCSP_PARSE_URL:114:OCSP_parse_url
|
||||
OCSP_F_OCSP_REQUEST_SIGN:110:OCSP_request_sign
|
||||
OCSP_F_OCSP_REQUEST_VERIFY:116:OCSP_request_verify
|
||||
OCSP_F_OCSP_RESPONSE_GET1_BASIC:111:OCSP_response_get1_basic
|
||||
OCSP_F_PARSE_HTTP_LINE1:118:parse_http_line1
|
||||
OSSL_STORE_F_FILE_CTRL:129:file_ctrl
|
||||
OSSL_STORE_F_FILE_FIND:138:file_find
|
||||
OSSL_STORE_F_FILE_GET_PASS:118:file_get_pass
|
||||
OSSL_STORE_F_FILE_LOAD:119:file_load
|
||||
OSSL_STORE_F_FILE_LOAD_TRY_DECODE:124:file_load_try_decode
|
||||
OSSL_STORE_F_FILE_NAME_TO_URI:126:file_name_to_uri
|
||||
OSSL_STORE_F_FILE_OPEN:120:file_open
|
||||
OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO:127:ossl_store_attach_pem_bio
|
||||
OSSL_STORE_F_OSSL_STORE_EXPECT:130:OSSL_STORE_expect
|
||||
OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT:128:\
|
||||
ossl_store_file_attach_pem_bio_int
|
||||
OSSL_STORE_F_OSSL_STORE_FIND:131:OSSL_STORE_find
|
||||
OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT:100:ossl_store_get0_loader_int
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT:101:OSSL_STORE_INFO_get1_CERT
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL:102:OSSL_STORE_INFO_get1_CRL
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME:103:OSSL_STORE_INFO_get1_NAME
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION:135:\
|
||||
OSSL_STORE_INFO_get1_NAME_description
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS:104:OSSL_STORE_INFO_get1_PARAMS
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY:105:OSSL_STORE_INFO_get1_PKEY
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT:106:OSSL_STORE_INFO_new_CERT
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL:107:OSSL_STORE_INFO_new_CRL
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED:123:ossl_store_info_new_EMBEDDED
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME:109:OSSL_STORE_INFO_new_NAME
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS:110:OSSL_STORE_INFO_new_PARAMS
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY:111:OSSL_STORE_INFO_new_PKEY
|
||||
OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION:134:\
|
||||
OSSL_STORE_INFO_set0_NAME_description
|
||||
OSSL_STORE_F_OSSL_STORE_INIT_ONCE:112:ossl_store_init_once
|
||||
OSSL_STORE_F_OSSL_STORE_LOADER_NEW:113:OSSL_STORE_LOADER_new
|
||||
OSSL_STORE_F_OSSL_STORE_OPEN:114:OSSL_STORE_open
|
||||
OSSL_STORE_F_OSSL_STORE_OPEN_INT:115:*
|
||||
OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT:117:ossl_store_register_loader_int
|
||||
OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS:132:OSSL_STORE_SEARCH_by_alias
|
||||
OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL:133:\
|
||||
OSSL_STORE_SEARCH_by_issuer_serial
|
||||
OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT:136:\
|
||||
OSSL_STORE_SEARCH_by_key_fingerprint
|
||||
OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME:137:OSSL_STORE_SEARCH_by_name
|
||||
OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT:116:\
|
||||
ossl_store_unregister_loader_int
|
||||
OSSL_STORE_F_TRY_DECODE_PARAMS:121:try_decode_params
|
||||
OSSL_STORE_F_TRY_DECODE_PKCS12:122:try_decode_PKCS12
|
||||
OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED:125:try_decode_PKCS8Encrypted
|
||||
PEM_F_B2I_DSS:127:b2i_dss
|
||||
PEM_F_B2I_PVK_BIO:128:b2i_PVK_bio
|
||||
PEM_F_B2I_RSA:129:b2i_rsa
|
||||
PEM_F_CHECK_BITLEN_DSA:130:check_bitlen_dsa
|
||||
PEM_F_CHECK_BITLEN_RSA:131:check_bitlen_rsa
|
||||
PEM_F_D2I_PKCS8PRIVATEKEY_BIO:120:d2i_PKCS8PrivateKey_bio
|
||||
PEM_F_D2I_PKCS8PRIVATEKEY_FP:121:d2i_PKCS8PrivateKey_fp
|
||||
PEM_F_DO_B2I:132:do_b2i
|
||||
PEM_F_DO_B2I_BIO:133:do_b2i_bio
|
||||
PEM_F_DO_BLOB_HEADER:134:do_blob_header
|
||||
PEM_F_DO_I2B:146:do_i2b
|
||||
PEM_F_DO_PK8PKEY:126:do_pk8pkey
|
||||
PEM_F_DO_PK8PKEY_FP:125:do_pk8pkey_fp
|
||||
PEM_F_DO_PVK_BODY:135:do_PVK_body
|
||||
PEM_F_DO_PVK_HEADER:136:do_PVK_header
|
||||
PEM_F_GET_HEADER_AND_DATA:143:get_header_and_data
|
||||
PEM_F_GET_NAME:144:get_name
|
||||
PEM_F_I2B_PVK:137:i2b_PVK
|
||||
PEM_F_I2B_PVK_BIO:138:i2b_PVK_bio
|
||||
PEM_F_LOAD_IV:101:load_iv
|
||||
PEM_F_PEM_ASN1_READ:102:PEM_ASN1_read
|
||||
PEM_F_PEM_ASN1_READ_BIO:103:PEM_ASN1_read_bio
|
||||
PEM_F_PEM_ASN1_WRITE:104:PEM_ASN1_write
|
||||
PEM_F_PEM_ASN1_WRITE_BIO:105:PEM_ASN1_write_bio
|
||||
PEM_F_PEM_DEF_CALLBACK:100:PEM_def_callback
|
||||
PEM_F_PEM_DO_HEADER:106:PEM_do_header
|
||||
PEM_F_PEM_GET_EVP_CIPHER_INFO:107:PEM_get_EVP_CIPHER_INFO
|
||||
PEM_F_PEM_READ:108:PEM_read
|
||||
PEM_F_PEM_READ_BIO:109:PEM_read_bio
|
||||
PEM_F_PEM_READ_BIO_DHPARAMS:141:PEM_read_bio_DHparams
|
||||
PEM_F_PEM_READ_BIO_EX:145:PEM_read_bio_ex
|
||||
PEM_F_PEM_READ_BIO_PARAMETERS:140:PEM_read_bio_Parameters
|
||||
PEM_F_PEM_READ_BIO_PRIVATEKEY:123:PEM_read_bio_PrivateKey
|
||||
PEM_F_PEM_READ_DHPARAMS:142:PEM_read_DHparams
|
||||
PEM_F_PEM_READ_PRIVATEKEY:124:PEM_read_PrivateKey
|
||||
PEM_F_PEM_SIGNFINAL:112:PEM_SignFinal
|
||||
PEM_F_PEM_WRITE:113:PEM_write
|
||||
PEM_F_PEM_WRITE_BIO:114:PEM_write_bio
|
||||
PEM_F_PEM_WRITE_PRIVATEKEY:139:PEM_write_PrivateKey
|
||||
PEM_F_PEM_X509_INFO_READ:115:PEM_X509_INFO_read
|
||||
PEM_F_PEM_X509_INFO_READ_BIO:116:PEM_X509_INFO_read_bio
|
||||
PEM_F_PEM_X509_INFO_WRITE_BIO:117:PEM_X509_INFO_write_bio
|
||||
PKCS12_F_OPENSSL_ASC2UNI:121:OPENSSL_asc2uni
|
||||
PKCS12_F_OPENSSL_UNI2ASC:124:OPENSSL_uni2asc
|
||||
PKCS12_F_OPENSSL_UNI2UTF8:127:OPENSSL_uni2utf8
|
||||
PKCS12_F_OPENSSL_UTF82UNI:129:OPENSSL_utf82uni
|
||||
PKCS12_F_PKCS12_CREATE:105:PKCS12_create
|
||||
PKCS12_F_PKCS12_GEN_MAC:107:PKCS12_gen_mac
|
||||
PKCS12_F_PKCS12_INIT:109:PKCS12_init
|
||||
PKCS12_F_PKCS12_ITEM_DECRYPT_D2I:106:PKCS12_item_decrypt_d2i
|
||||
PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT:108:PKCS12_item_i2d_encrypt
|
||||
PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG:117:PKCS12_item_pack_safebag
|
||||
PKCS12_F_PKCS12_KEY_GEN_ASC:110:PKCS12_key_gen_asc
|
||||
PKCS12_F_PKCS12_KEY_GEN_UNI:111:PKCS12_key_gen_uni
|
||||
PKCS12_F_PKCS12_KEY_GEN_UTF8:116:PKCS12_key_gen_utf8
|
||||
PKCS12_F_PKCS12_NEWPASS:128:PKCS12_newpass
|
||||
PKCS12_F_PKCS12_PACK_P7DATA:114:PKCS12_pack_p7data
|
||||
PKCS12_F_PKCS12_PACK_P7ENCDATA:115:PKCS12_pack_p7encdata
|
||||
PKCS12_F_PKCS12_PARSE:118:PKCS12_parse
|
||||
PKCS12_F_PKCS12_PBE_CRYPT:119:PKCS12_pbe_crypt
|
||||
PKCS12_F_PKCS12_PBE_KEYIVGEN:120:PKCS12_PBE_keyivgen
|
||||
PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF:112:PKCS12_SAFEBAG_create0_p8inf
|
||||
PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8:113:PKCS12_SAFEBAG_create0_pkcs8
|
||||
PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT:133:\
|
||||
PKCS12_SAFEBAG_create_pkcs8_encrypt
|
||||
PKCS12_F_PKCS12_SETUP_MAC:122:PKCS12_setup_mac
|
||||
PKCS12_F_PKCS12_SET_MAC:123:PKCS12_set_mac
|
||||
PKCS12_F_PKCS12_UNPACK_AUTHSAFES:130:PKCS12_unpack_authsafes
|
||||
PKCS12_F_PKCS12_UNPACK_P7DATA:131:PKCS12_unpack_p7data
|
||||
PKCS12_F_PKCS12_VERIFY_MAC:126:PKCS12_verify_mac
|
||||
PKCS12_F_PKCS8_ENCRYPT:125:PKCS8_encrypt
|
||||
PKCS12_F_PKCS8_SET0_PBE:132:PKCS8_set0_pbe
|
||||
PKCS7_F_DO_PKCS7_SIGNED_ATTRIB:136:do_pkcs7_signed_attrib
|
||||
PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME:135:PKCS7_add0_attrib_signing_time
|
||||
PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP:118:PKCS7_add_attrib_smimecap
|
||||
PKCS7_F_PKCS7_ADD_CERTIFICATE:100:PKCS7_add_certificate
|
||||
PKCS7_F_PKCS7_ADD_CRL:101:PKCS7_add_crl
|
||||
PKCS7_F_PKCS7_ADD_RECIPIENT_INFO:102:PKCS7_add_recipient_info
|
||||
PKCS7_F_PKCS7_ADD_SIGNATURE:131:PKCS7_add_signature
|
||||
PKCS7_F_PKCS7_ADD_SIGNER:103:PKCS7_add_signer
|
||||
PKCS7_F_PKCS7_BIO_ADD_DIGEST:125:PKCS7_bio_add_digest
|
||||
PKCS7_F_PKCS7_COPY_EXISTING_DIGEST:138:pkcs7_copy_existing_digest
|
||||
PKCS7_F_PKCS7_CTRL:104:PKCS7_ctrl
|
||||
PKCS7_F_PKCS7_DATADECODE:112:PKCS7_dataDecode
|
||||
PKCS7_F_PKCS7_DATAFINAL:128:PKCS7_dataFinal
|
||||
PKCS7_F_PKCS7_DATAINIT:105:PKCS7_dataInit
|
||||
PKCS7_F_PKCS7_DATAVERIFY:107:PKCS7_dataVerify
|
||||
PKCS7_F_PKCS7_DECRYPT:114:PKCS7_decrypt
|
||||
PKCS7_F_PKCS7_DECRYPT_RINFO:133:pkcs7_decrypt_rinfo
|
||||
PKCS7_F_PKCS7_ENCODE_RINFO:132:pkcs7_encode_rinfo
|
||||
PKCS7_F_PKCS7_ENCRYPT:115:PKCS7_encrypt
|
||||
PKCS7_F_PKCS7_FINAL:134:PKCS7_final
|
||||
PKCS7_F_PKCS7_FIND_DIGEST:127:PKCS7_find_digest
|
||||
PKCS7_F_PKCS7_GET0_SIGNERS:124:PKCS7_get0_signers
|
||||
PKCS7_F_PKCS7_RECIP_INFO_SET:130:PKCS7_RECIP_INFO_set
|
||||
PKCS7_F_PKCS7_SET_CIPHER:108:PKCS7_set_cipher
|
||||
PKCS7_F_PKCS7_SET_CONTENT:109:PKCS7_set_content
|
||||
PKCS7_F_PKCS7_SET_DIGEST:126:PKCS7_set_digest
|
||||
PKCS7_F_PKCS7_SET_TYPE:110:PKCS7_set_type
|
||||
PKCS7_F_PKCS7_SIGN:116:PKCS7_sign
|
||||
PKCS7_F_PKCS7_SIGNATUREVERIFY:113:PKCS7_signatureVerify
|
||||
PKCS7_F_PKCS7_SIGNER_INFO_SET:129:PKCS7_SIGNER_INFO_set
|
||||
PKCS7_F_PKCS7_SIGNER_INFO_SIGN:139:PKCS7_SIGNER_INFO_sign
|
||||
PKCS7_F_PKCS7_SIGN_ADD_SIGNER:137:PKCS7_sign_add_signer
|
||||
PKCS7_F_PKCS7_SIMPLE_SMIMECAP:119:PKCS7_simple_smimecap
|
||||
PKCS7_F_PKCS7_VERIFY:117:PKCS7_verify
|
||||
PROP_F_OSSL_PARSE_PROPERTY:100:ossl_parse_property
|
||||
PROP_F_OSSL_PARSE_QUERY:101:ossl_parse_query
|
||||
PROP_F_PARSE_HEX:102:parse_hex
|
||||
PROP_F_PARSE_NAME:103:parse_name
|
||||
PROP_F_PARSE_NUMBER:104:parse_number
|
||||
PROP_F_PARSE_OCT:105:parse_oct
|
||||
PROP_F_PARSE_STRING:106:parse_string
|
||||
PROP_F_PARSE_UNQUOTED:107:parse_unquoted
|
||||
PROV_F_AESNI_INIT_KEY:101:aesni_init_key
|
||||
PROV_F_AES_BLOCK_FINAL:102:aes_block_final
|
||||
PROV_F_AES_BLOCK_UPDATE:103:aes_block_update
|
||||
PROV_F_AES_CIPHER:104:aes_cipher
|
||||
PROV_F_AES_DINIT:107:aes_dinit
|
||||
PROV_F_AES_DUPCTX:108:aes_dupctx
|
||||
PROV_F_AES_EINIT:109:aes_einit
|
||||
PROV_F_AES_GET_CTX_PARAMS:105:aes_get_ctx_params
|
||||
PROV_F_AES_INIT_KEY:110:aes_init_key
|
||||
PROV_F_AES_SET_CTX_PARAMS:106:aes_set_ctx_params
|
||||
PROV_F_AES_STREAM_UPDATE:111:aes_stream_update
|
||||
PROV_F_AES_T4_INIT_KEY:112:aes_t4_init_key
|
||||
PROV_F_BLAKE2_MAC_INIT:115:blake2_mac_init
|
||||
PROV_F_BLAKE2_MAC_SET_PARAMS:116:blake2_mac_set_params
|
||||
PROV_F_GMAC_SET_PARAMS:117:gmac_set_params
|
||||
PROV_F_KMAC_SET_PARAMS:118:kmac_set_params
|
||||
PROV_F_POLY1305_SET_PARAMS:119:poly1305_set_params
|
||||
PROV_F_PROV_AES_KEY_GENERIC_INIT:113:PROV_AES_KEY_generic_init
|
||||
PROV_F_TRAILINGDATA:114:trailingdata
|
||||
PROV_F_UNPADBLOCK:100:unpadblock
|
||||
RAND_F_DRBG_BYTES:101:drbg_bytes
|
||||
RAND_F_DRBG_CTR_INIT:125:drbg_ctr_init
|
||||
RAND_F_DRBG_GET_ENTROPY:105:drbg_get_entropy
|
||||
RAND_F_DRBG_SETUP:117:drbg_setup
|
||||
RAND_F_GET_ENTROPY:106:get_entropy
|
||||
RAND_F_RAND_BYTES:100:RAND_bytes
|
||||
RAND_F_RAND_BYTES_EX:126:rand_bytes_ex
|
||||
RAND_F_RAND_DRBG_ENABLE_LOCKING:119:rand_drbg_enable_locking
|
||||
RAND_F_RAND_DRBG_GENERATE:107:RAND_DRBG_generate
|
||||
RAND_F_RAND_DRBG_GET_ENTROPY:120:rand_drbg_get_entropy
|
||||
RAND_F_RAND_DRBG_GET_NONCE:123:rand_drbg_get_nonce
|
||||
RAND_F_RAND_DRBG_INSTANTIATE:108:RAND_DRBG_instantiate
|
||||
RAND_F_RAND_DRBG_NEW:109:RAND_DRBG_new
|
||||
RAND_F_RAND_DRBG_RESEED:110:RAND_DRBG_reseed
|
||||
RAND_F_RAND_DRBG_RESTART:102:rand_drbg_restart
|
||||
RAND_F_RAND_DRBG_SET:104:RAND_DRBG_set
|
||||
RAND_F_RAND_DRBG_SET_DEFAULTS:121:RAND_DRBG_set_defaults
|
||||
RAND_F_RAND_DRBG_UNINSTANTIATE:118:RAND_DRBG_uninstantiate
|
||||
RAND_F_RAND_LOAD_FILE:111:RAND_load_file
|
||||
RAND_F_RAND_POOL_ACQUIRE_ENTROPY:122:rand_pool_acquire_entropy
|
||||
RAND_F_RAND_POOL_ADD:103:rand_pool_add
|
||||
RAND_F_RAND_POOL_ADD_BEGIN:113:rand_pool_add_begin
|
||||
RAND_F_RAND_POOL_ADD_END:114:rand_pool_add_end
|
||||
RAND_F_RAND_POOL_ATTACH:124:rand_pool_attach
|
||||
RAND_F_RAND_POOL_BYTES_NEEDED:115:rand_pool_bytes_needed
|
||||
RAND_F_RAND_POOL_GROW:127:
|
||||
RAND_F_RAND_POOL_NEW:116:rand_pool_new
|
||||
RAND_F_RAND_WRITE_FILE:112:RAND_write_file
|
||||
RSA_F_CHECK_PADDING_MD:140:check_padding_md
|
||||
RSA_F_ENCODE_PKCS1:146:encode_pkcs1
|
||||
RSA_F_INT_RSA_VERIFY:145:int_rsa_verify
|
||||
RSA_F_OLD_RSA_PRIV_DECODE:147:old_rsa_priv_decode
|
||||
RSA_F_PKEY_PSS_INIT:165:pkey_pss_init
|
||||
RSA_F_PKEY_RSA_CTRL:143:pkey_rsa_ctrl
|
||||
RSA_F_PKEY_RSA_CTRL_STR:144:pkey_rsa_ctrl_str
|
||||
RSA_F_PKEY_RSA_SIGN:142:pkey_rsa_sign
|
||||
RSA_F_PKEY_RSA_VERIFY:149:pkey_rsa_verify
|
||||
RSA_F_PKEY_RSA_VERIFYRECOVER:141:pkey_rsa_verifyrecover
|
||||
RSA_F_RSA_ALGOR_TO_MD:156:rsa_algor_to_md
|
||||
RSA_F_RSA_BUILTIN_KEYGEN:129:rsa_builtin_keygen
|
||||
RSA_F_RSA_CHECK_KEY:123:RSA_check_key
|
||||
RSA_F_RSA_CHECK_KEY_EX:160:RSA_check_key_ex
|
||||
RSA_F_RSA_CMS_DECRYPT:159:rsa_cms_decrypt
|
||||
RSA_F_RSA_CMS_VERIFY:158:rsa_cms_verify
|
||||
RSA_F_RSA_FIPS186_4_GEN_PROB_PRIMES:168:rsa_fips186_4_gen_prob_primes
|
||||
RSA_F_RSA_ITEM_VERIFY:148:rsa_item_verify
|
||||
RSA_F_RSA_METH_DUP:161:RSA_meth_dup
|
||||
RSA_F_RSA_METH_NEW:162:RSA_meth_new
|
||||
RSA_F_RSA_METH_SET1_NAME:163:RSA_meth_set1_name
|
||||
RSA_F_RSA_MGF1_TO_MD:157:*
|
||||
RSA_F_RSA_MULTIP_INFO_NEW:166:rsa_multip_info_new
|
||||
RSA_F_RSA_NEW_METHOD:106:RSA_new_method
|
||||
RSA_F_RSA_NULL:124:*
|
||||
RSA_F_RSA_NULL_PRIVATE_DECRYPT:132:*
|
||||
RSA_F_RSA_NULL_PRIVATE_ENCRYPT:133:*
|
||||
RSA_F_RSA_NULL_PUBLIC_DECRYPT:134:*
|
||||
RSA_F_RSA_NULL_PUBLIC_ENCRYPT:135:*
|
||||
RSA_F_RSA_OSSL_PRIVATE_DECRYPT:101:rsa_ossl_private_decrypt
|
||||
RSA_F_RSA_OSSL_PRIVATE_ENCRYPT:102:rsa_ossl_private_encrypt
|
||||
RSA_F_RSA_OSSL_PUBLIC_DECRYPT:103:rsa_ossl_public_decrypt
|
||||
RSA_F_RSA_OSSL_PUBLIC_ENCRYPT:104:rsa_ossl_public_encrypt
|
||||
RSA_F_RSA_PADDING_ADD_NONE:107:RSA_padding_add_none
|
||||
RSA_F_RSA_PADDING_ADD_PKCS1_OAEP:121:RSA_padding_add_PKCS1_OAEP
|
||||
RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1:154:RSA_padding_add_PKCS1_OAEP_mgf1
|
||||
RSA_F_RSA_PADDING_ADD_PKCS1_PSS:125:RSA_padding_add_PKCS1_PSS
|
||||
RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1:152:RSA_padding_add_PKCS1_PSS_mgf1
|
||||
RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1:108:RSA_padding_add_PKCS1_type_1
|
||||
RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2:109:RSA_padding_add_PKCS1_type_2
|
||||
RSA_F_RSA_PADDING_ADD_SSLV23:110:RSA_padding_add_SSLv23
|
||||
RSA_F_RSA_PADDING_ADD_X931:127:RSA_padding_add_X931
|
||||
RSA_F_RSA_PADDING_CHECK_NONE:111:RSA_padding_check_none
|
||||
RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP:122:RSA_padding_check_PKCS1_OAEP
|
||||
RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1:153:RSA_padding_check_PKCS1_OAEP_mgf1
|
||||
RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1:112:RSA_padding_check_PKCS1_type_1
|
||||
RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2:113:RSA_padding_check_PKCS1_type_2
|
||||
RSA_F_RSA_PADDING_CHECK_SSLV23:114:RSA_padding_check_SSLv23
|
||||
RSA_F_RSA_PADDING_CHECK_X931:128:RSA_padding_check_X931
|
||||
RSA_F_RSA_PARAM_DECODE:164:rsa_param_decode
|
||||
RSA_F_RSA_PRINT:115:RSA_print
|
||||
RSA_F_RSA_PRINT_FP:116:RSA_print_fp
|
||||
RSA_F_RSA_PRIV_DECODE:150:rsa_priv_decode
|
||||
RSA_F_RSA_PRIV_ENCODE:138:rsa_priv_encode
|
||||
RSA_F_RSA_PSS_GET_PARAM:151:rsa_pss_get_param
|
||||
RSA_F_RSA_PSS_TO_CTX:155:rsa_pss_to_ctx
|
||||
RSA_F_RSA_PUB_DECODE:139:rsa_pub_decode
|
||||
RSA_F_RSA_SETUP_BLINDING:136:RSA_setup_blinding
|
||||
RSA_F_RSA_SIGN:117:RSA_sign
|
||||
RSA_F_RSA_SIGN_ASN1_OCTET_STRING:118:RSA_sign_ASN1_OCTET_STRING
|
||||
RSA_F_RSA_SP800_56B_CHECK_KEYPAIR:169:rsa_sp800_56b_check_keypair
|
||||
RSA_F_RSA_SP800_56B_CHECK_PUBLIC:170:rsa_sp800_56b_check_public
|
||||
RSA_F_RSA_SP800_56B_PAIRWISE_TEST:171:rsa_sp800_56b_pairwise_test
|
||||
RSA_F_RSA_SP800_56B_VALIDATE_STRENGTH:172:rsa_sp800_56b_validate_strength
|
||||
RSA_F_RSA_VERIFY:119:RSA_verify
|
||||
RSA_F_RSA_VERIFY_ASN1_OCTET_STRING:120:RSA_verify_ASN1_OCTET_STRING
|
||||
RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1:126:RSA_verify_PKCS1_PSS_mgf1
|
||||
RSA_F_SETUP_TBUF:167:setup_tbuf
|
||||
SM2_F_PKEY_SM2_COPY:115:pkey_sm2_copy
|
||||
SM2_F_PKEY_SM2_CTRL:109:pkey_sm2_ctrl
|
||||
SM2_F_PKEY_SM2_CTRL_STR:110:pkey_sm2_ctrl_str
|
||||
SM2_F_PKEY_SM2_DIGEST_CUSTOM:114:pkey_sm2_digest_custom
|
||||
SM2_F_PKEY_SM2_INIT:111:pkey_sm2_init
|
||||
SM2_F_PKEY_SM2_SIGN:112:pkey_sm2_sign
|
||||
SM2_F_SM2_COMPUTE_MSG_HASH:100:sm2_compute_msg_hash
|
||||
SM2_F_SM2_COMPUTE_USERID_DIGEST:101:sm2_compute_userid_digest
|
||||
SM2_F_SM2_COMPUTE_Z_DIGEST:113:sm2_compute_z_digest
|
||||
SM2_F_SM2_DECRYPT:102:sm2_decrypt
|
||||
SM2_F_SM2_ENCRYPT:103:sm2_encrypt
|
||||
SM2_F_SM2_PLAINTEXT_SIZE:104:sm2_plaintext_size
|
||||
SM2_F_SM2_SIGN:105:sm2_sign
|
||||
SM2_F_SM2_SIG_GEN:106:sm2_sig_gen
|
||||
SM2_F_SM2_SIG_VERIFY:107:sm2_sig_verify
|
||||
SM2_F_SM2_VERIFY:108:sm2_verify
|
||||
SSL_F_ADD_CLIENT_KEY_SHARE_EXT:438:*
|
||||
SSL_F_ADD_KEY_SHARE:512:add_key_share
|
||||
SSL_F_BYTES_TO_CIPHER_LIST:519:bytes_to_cipher_list
|
||||
SSL_F_CHECK_SUITEB_CIPHER_LIST:331:check_suiteb_cipher_list
|
||||
SSL_F_CIPHERSUITE_CB:622:ciphersuite_cb
|
||||
SSL_F_CONSTRUCT_CA_NAMES:552:construct_ca_names
|
||||
SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS:553:construct_key_exchange_tbs
|
||||
SSL_F_CONSTRUCT_STATEFUL_TICKET:636:construct_stateful_ticket
|
||||
SSL_F_CONSTRUCT_STATELESS_TICKET:637:construct_stateless_ticket
|
||||
SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH:539:create_synthetic_message_hash
|
||||
SSL_F_CREATE_TICKET_PREQUEL:638:create_ticket_prequel
|
||||
SSL_F_CT_MOVE_SCTS:345:ct_move_scts
|
||||
SSL_F_CT_STRICT:349:ct_strict
|
||||
SSL_F_CUSTOM_EXT_ADD:554:custom_ext_add
|
||||
SSL_F_CUSTOM_EXT_PARSE:555:custom_ext_parse
|
||||
SSL_F_D2I_SSL_SESSION:103:d2i_SSL_SESSION
|
||||
SSL_F_DANE_CTX_ENABLE:347:dane_ctx_enable
|
||||
SSL_F_DANE_MTYPE_SET:393:dane_mtype_set
|
||||
SSL_F_DANE_TLSA_ADD:394:dane_tlsa_add
|
||||
SSL_F_DERIVE_SECRET_KEY_AND_IV:514:derive_secret_key_and_iv
|
||||
SSL_F_DO_DTLS1_WRITE:245:do_dtls1_write
|
||||
SSL_F_DO_SSL3_WRITE:104:do_ssl3_write
|
||||
SSL_F_DTLS1_BUFFER_RECORD:247:dtls1_buffer_record
|
||||
SSL_F_DTLS1_CHECK_TIMEOUT_NUM:318:dtls1_check_timeout_num
|
||||
SSL_F_DTLS1_HM_FRAGMENT_NEW:623:dtls1_hm_fragment_new
|
||||
SSL_F_DTLS1_PREPROCESS_FRAGMENT:288:dtls1_preprocess_fragment
|
||||
SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS:424:dtls1_process_buffered_records
|
||||
SSL_F_DTLS1_PROCESS_RECORD:257:dtls1_process_record
|
||||
SSL_F_DTLS1_READ_BYTES:258:dtls1_read_bytes
|
||||
SSL_F_DTLS1_READ_FAILED:339:dtls1_read_failed
|
||||
SSL_F_DTLS1_RETRANSMIT_MESSAGE:390:dtls1_retransmit_message
|
||||
SSL_F_DTLS1_WRITE_APP_DATA_BYTES:268:dtls1_write_app_data_bytes
|
||||
SSL_F_DTLS1_WRITE_BYTES:545:dtls1_write_bytes
|
||||
SSL_F_DTLSV1_LISTEN:350:DTLSv1_listen
|
||||
SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC:371:dtls_construct_change_cipher_spec
|
||||
SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST:385:\
|
||||
dtls_construct_hello_verify_request
|
||||
SSL_F_DTLS_GET_REASSEMBLED_MESSAGE:370:dtls_get_reassembled_message
|
||||
SSL_F_DTLS_PROCESS_HELLO_VERIFY:386:dtls_process_hello_verify
|
||||
SSL_F_DTLS_RECORD_LAYER_NEW:635:DTLS_RECORD_LAYER_new
|
||||
SSL_F_DTLS_WAIT_FOR_DRY:592:dtls_wait_for_dry
|
||||
SSL_F_EARLY_DATA_COUNT_OK:532:early_data_count_ok
|
||||
SSL_F_FINAL_EARLY_DATA:556:final_early_data
|
||||
SSL_F_FINAL_EC_PT_FORMATS:485:final_ec_pt_formats
|
||||
SSL_F_FINAL_EMS:486:final_ems
|
||||
SSL_F_FINAL_KEY_SHARE:503:final_key_share
|
||||
SSL_F_FINAL_MAXFRAGMENTLEN:557:final_maxfragmentlen
|
||||
SSL_F_FINAL_RENEGOTIATE:483:final_renegotiate
|
||||
SSL_F_FINAL_SERVER_NAME:558:final_server_name
|
||||
SSL_F_FINAL_SIG_ALGS:497:final_sig_algs
|
||||
SSL_F_GET_CERT_VERIFY_TBS_DATA:588:get_cert_verify_tbs_data
|
||||
SSL_F_NSS_KEYLOG_INT:500:nss_keylog_int
|
||||
SSL_F_OPENSSL_INIT_SSL:342:OPENSSL_init_ssl
|
||||
SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION:436:*
|
||||
SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION:598:\
|
||||
ossl_statem_client13_write_transition
|
||||
SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE:430:*
|
||||
SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE:593:\
|
||||
ossl_statem_client_post_process_message
|
||||
SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE:594:ossl_statem_client_process_message
|
||||
SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION:417:ossl_statem_client_read_transition
|
||||
SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION:599:\
|
||||
ossl_statem_client_write_transition
|
||||
SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION:437:*
|
||||
SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION:600:\
|
||||
ossl_statem_server13_write_transition
|
||||
SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE:431:*
|
||||
SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE:601:\
|
||||
ossl_statem_server_post_process_message
|
||||
SSL_F_OSSL_STATEM_SERVER_POST_WORK:602:ossl_statem_server_post_work
|
||||
SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE:603:ossl_statem_server_process_message
|
||||
SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION:418:ossl_statem_server_read_transition
|
||||
SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION:604:\
|
||||
ossl_statem_server_write_transition
|
||||
SSL_F_PARSE_CA_NAMES:541:parse_ca_names
|
||||
SSL_F_PITEM_NEW:624:pitem_new
|
||||
SSL_F_PQUEUE_NEW:625:pqueue_new
|
||||
SSL_F_PROCESS_KEY_SHARE_EXT:439:*
|
||||
SSL_F_READ_STATE_MACHINE:352:read_state_machine
|
||||
SSL_F_SET_CLIENT_CIPHERSUITE:540:set_client_ciphersuite
|
||||
SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET:595:srp_generate_client_master_secret
|
||||
SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET:589:srp_generate_server_master_secret
|
||||
SSL_F_SRP_VERIFY_SERVER_PARAM:596:srp_verify_server_param
|
||||
SSL_F_SSL3_CHANGE_CIPHER_STATE:129:ssl3_change_cipher_state
|
||||
SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM:130:ssl3_check_cert_and_algorithm
|
||||
SSL_F_SSL3_CTRL:213:ssl3_ctrl
|
||||
SSL_F_SSL3_CTX_CTRL:133:ssl3_ctx_ctrl
|
||||
SSL_F_SSL3_DIGEST_CACHED_RECORDS:293:ssl3_digest_cached_records
|
||||
SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC:292:ssl3_do_change_cipher_spec
|
||||
SSL_F_SSL3_ENC:608:ssl3_enc
|
||||
SSL_F_SSL3_FINAL_FINISH_MAC:285:ssl3_final_finish_mac
|
||||
SSL_F_SSL3_FINISH_MAC:587:ssl3_finish_mac
|
||||
SSL_F_SSL3_GENERATE_KEY_BLOCK:238:ssl3_generate_key_block
|
||||
SSL_F_SSL3_GENERATE_MASTER_SECRET:388:ssl3_generate_master_secret
|
||||
SSL_F_SSL3_GET_RECORD:143:ssl3_get_record
|
||||
SSL_F_SSL3_INIT_FINISHED_MAC:397:ssl3_init_finished_mac
|
||||
SSL_F_SSL3_OUTPUT_CERT_CHAIN:147:ssl3_output_cert_chain
|
||||
SSL_F_SSL3_READ_BYTES:148:ssl3_read_bytes
|
||||
SSL_F_SSL3_READ_N:149:ssl3_read_n
|
||||
SSL_F_SSL3_SETUP_KEY_BLOCK:157:ssl3_setup_key_block
|
||||
SSL_F_SSL3_SETUP_READ_BUFFER:156:ssl3_setup_read_buffer
|
||||
SSL_F_SSL3_SETUP_WRITE_BUFFER:291:ssl3_setup_write_buffer
|
||||
SSL_F_SSL3_WRITE_BYTES:158:ssl3_write_bytes
|
||||
SSL_F_SSL3_WRITE_PENDING:159:ssl3_write_pending
|
||||
SSL_F_SSL_ADD_CERT_CHAIN:316:ssl_add_cert_chain
|
||||
SSL_F_SSL_ADD_CERT_TO_BUF:319:*
|
||||
SSL_F_SSL_ADD_CERT_TO_WPACKET:493:ssl_add_cert_to_wpacket
|
||||
SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT:298:*
|
||||
SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT:277:*
|
||||
SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT:307:*
|
||||
SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK:215:SSL_add_dir_cert_subjects_to_stack
|
||||
SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK:216:\
|
||||
SSL_add_file_cert_subjects_to_stack
|
||||
SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT:299:*
|
||||
SSL_F_SSL_ADD_SERVERHELLO_TLSEXT:278:*
|
||||
SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT:308:*
|
||||
SSL_F_SSL_BAD_METHOD:160:ssl_bad_method
|
||||
SSL_F_SSL_BUILD_CERT_CHAIN:332:ssl_build_cert_chain
|
||||
SSL_F_SSL_BYTES_TO_CIPHER_LIST:161:SSL_bytes_to_cipher_list
|
||||
SSL_F_SSL_CACHE_CIPHERLIST:520:ssl_cache_cipherlist
|
||||
SSL_F_SSL_CERT_ADD0_CHAIN_CERT:346:ssl_cert_add0_chain_cert
|
||||
SSL_F_SSL_CERT_DUP:221:ssl_cert_dup
|
||||
SSL_F_SSL_CERT_NEW:162:ssl_cert_new
|
||||
SSL_F_SSL_CERT_SET0_CHAIN:340:ssl_cert_set0_chain
|
||||
SSL_F_SSL_CHECK_PRIVATE_KEY:163:SSL_check_private_key
|
||||
SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT:280:*
|
||||
SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO:606:ssl_check_srp_ext_ClientHello
|
||||
SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG:279:ssl_check_srvr_ecc_cert_and_alg
|
||||
SSL_F_SSL_CHOOSE_CLIENT_VERSION:607:ssl_choose_client_version
|
||||
SSL_F_SSL_CIPHER_DESCRIPTION:626:SSL_CIPHER_description
|
||||
SSL_F_SSL_CIPHER_LIST_TO_BYTES:425:ssl_cipher_list_to_bytes
|
||||
SSL_F_SSL_CIPHER_PROCESS_RULESTR:230:ssl_cipher_process_rulestr
|
||||
SSL_F_SSL_CIPHER_STRENGTH_SORT:231:ssl_cipher_strength_sort
|
||||
SSL_F_SSL_CLEAR:164:SSL_clear
|
||||
SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT:627:\
|
||||
SSL_client_hello_get1_extensions_present
|
||||
SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD:165:SSL_COMP_add_compression_method
|
||||
SSL_F_SSL_CONF_CMD:334:SSL_CONF_cmd
|
||||
SSL_F_SSL_CREATE_CIPHER_LIST:166:ssl_create_cipher_list
|
||||
SSL_F_SSL_CTRL:232:SSL_ctrl
|
||||
SSL_F_SSL_CTX_CHECK_PRIVATE_KEY:168:SSL_CTX_check_private_key
|
||||
SSL_F_SSL_CTX_ENABLE_CT:398:SSL_CTX_enable_ct
|
||||
SSL_F_SSL_CTX_MAKE_PROFILES:309:ssl_ctx_make_profiles
|
||||
SSL_F_SSL_CTX_NEW:169:SSL_CTX_new
|
||||
SSL_F_SSL_CTX_SET_ALPN_PROTOS:343:SSL_CTX_set_alpn_protos
|
||||
SSL_F_SSL_CTX_SET_CIPHER_LIST:269:SSL_CTX_set_cipher_list
|
||||
SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE:290:SSL_CTX_set_client_cert_engine
|
||||
SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK:396:SSL_CTX_set_ct_validation_callback
|
||||
SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT:219:SSL_CTX_set_session_id_context
|
||||
SSL_F_SSL_CTX_SET_SSL_VERSION:170:SSL_CTX_set_ssl_version
|
||||
SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH:551:\
|
||||
SSL_CTX_set_tlsext_max_fragment_length
|
||||
SSL_F_SSL_CTX_USE_CERTIFICATE:171:SSL_CTX_use_certificate
|
||||
SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1:172:SSL_CTX_use_certificate_ASN1
|
||||
SSL_F_SSL_CTX_USE_CERTIFICATE_FILE:173:SSL_CTX_use_certificate_file
|
||||
SSL_F_SSL_CTX_USE_PRIVATEKEY:174:SSL_CTX_use_PrivateKey
|
||||
SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1:175:SSL_CTX_use_PrivateKey_ASN1
|
||||
SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE:176:SSL_CTX_use_PrivateKey_file
|
||||
SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT:272:SSL_CTX_use_psk_identity_hint
|
||||
SSL_F_SSL_CTX_USE_RSAPRIVATEKEY:177:SSL_CTX_use_RSAPrivateKey
|
||||
SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1:178:SSL_CTX_use_RSAPrivateKey_ASN1
|
||||
SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE:179:SSL_CTX_use_RSAPrivateKey_file
|
||||
SSL_F_SSL_CTX_USE_SERVERINFO:336:SSL_CTX_use_serverinfo
|
||||
SSL_F_SSL_CTX_USE_SERVERINFO_EX:543:SSL_CTX_use_serverinfo_ex
|
||||
SSL_F_SSL_CTX_USE_SERVERINFO_FILE:337:SSL_CTX_use_serverinfo_file
|
||||
SSL_F_SSL_DANE_DUP:403:ssl_dane_dup
|
||||
SSL_F_SSL_DANE_ENABLE:395:SSL_dane_enable
|
||||
SSL_F_SSL_DERIVE:590:ssl_derive
|
||||
SSL_F_SSL_DO_CONFIG:391:ssl_do_config
|
||||
SSL_F_SSL_DO_HANDSHAKE:180:SSL_do_handshake
|
||||
SSL_F_SSL_DUP_CA_LIST:408:SSL_dup_CA_list
|
||||
SSL_F_SSL_ENABLE_CT:402:SSL_enable_ct
|
||||
SSL_F_SSL_GENERATE_PKEY_GROUP:559:ssl_generate_pkey_group
|
||||
SSL_F_SSL_GENERATE_SESSION_ID:547:ssl_generate_session_id
|
||||
SSL_F_SSL_GET_NEW_SESSION:181:ssl_get_new_session
|
||||
SSL_F_SSL_GET_PREV_SESSION:217:ssl_get_prev_session
|
||||
SSL_F_SSL_GET_SERVER_CERT_INDEX:322:*
|
||||
SSL_F_SSL_GET_SIGN_PKEY:183:*
|
||||
SSL_F_SSL_HANDSHAKE_HASH:560:ssl_handshake_hash
|
||||
SSL_F_SSL_INIT_WBIO_BUFFER:184:ssl_init_wbio_buffer
|
||||
SSL_F_SSL_KEY_UPDATE:515:SSL_key_update
|
||||
SSL_F_SSL_LOAD_CLIENT_CA_FILE:185:SSL_load_client_CA_file
|
||||
SSL_F_SSL_LOG_MASTER_SECRET:498:*
|
||||
SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE:499:ssl_log_rsa_client_key_exchange
|
||||
SSL_F_SSL_MODULE_INIT:392:ssl_module_init
|
||||
SSL_F_SSL_NEW:186:SSL_new
|
||||
SSL_F_SSL_NEXT_PROTO_VALIDATE:565:ssl_next_proto_validate
|
||||
SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT:300:*
|
||||
SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT:302:*
|
||||
SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT:310:*
|
||||
SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT:301:*
|
||||
SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT:303:*
|
||||
SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT:311:*
|
||||
SSL_F_SSL_PEEK:270:SSL_peek
|
||||
SSL_F_SSL_PEEK_EX:432:SSL_peek_ex
|
||||
SSL_F_SSL_PEEK_INTERNAL:522:ssl_peek_internal
|
||||
SSL_F_SSL_READ:223:SSL_read
|
||||
SSL_F_SSL_READ_EARLY_DATA:529:SSL_read_early_data
|
||||
SSL_F_SSL_READ_EX:434:SSL_read_ex
|
||||
SSL_F_SSL_READ_INTERNAL:523:ssl_read_internal
|
||||
SSL_F_SSL_RENEGOTIATE:516:SSL_renegotiate
|
||||
SSL_F_SSL_RENEGOTIATE_ABBREVIATED:546:SSL_renegotiate_abbreviated
|
||||
SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT:320:*
|
||||
SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT:321:*
|
||||
SSL_F_SSL_SENDFILE:639:SSL_sendfile
|
||||
SSL_F_SSL_SESSION_DUP:348:ssl_session_dup
|
||||
SSL_F_SSL_SESSION_NEW:189:SSL_SESSION_new
|
||||
SSL_F_SSL_SESSION_PRINT_FP:190:SSL_SESSION_print_fp
|
||||
SSL_F_SSL_SESSION_SET1_ID:423:SSL_SESSION_set1_id
|
||||
SSL_F_SSL_SESSION_SET1_ID_CONTEXT:312:SSL_SESSION_set1_id_context
|
||||
SSL_F_SSL_SET_ALPN_PROTOS:344:SSL_set_alpn_protos
|
||||
SSL_F_SSL_SET_CERT:191:ssl_set_cert
|
||||
SSL_F_SSL_SET_CERT_AND_KEY:621:ssl_set_cert_and_key
|
||||
SSL_F_SSL_SET_CIPHER_LIST:271:SSL_set_cipher_list
|
||||
SSL_F_SSL_SET_CT_VALIDATION_CALLBACK:399:SSL_set_ct_validation_callback
|
||||
SSL_F_SSL_SET_FD:192:SSL_set_fd
|
||||
SSL_F_SSL_SET_PKEY:193:ssl_set_pkey
|
||||
SSL_F_SSL_SET_RFD:194:SSL_set_rfd
|
||||
SSL_F_SSL_SET_SESSION:195:SSL_set_session
|
||||
SSL_F_SSL_SET_SESSION_ID_CONTEXT:218:SSL_set_session_id_context
|
||||
SSL_F_SSL_SET_SESSION_TICKET_EXT:294:SSL_set_session_ticket_ext
|
||||
SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH:550:SSL_set_tlsext_max_fragment_length
|
||||
SSL_F_SSL_SET_WFD:196:SSL_set_wfd
|
||||
SSL_F_SSL_SHUTDOWN:224:SSL_shutdown
|
||||
SSL_F_SSL_SRP_CTX_INIT:313:SSL_SRP_CTX_init
|
||||
SSL_F_SSL_START_ASYNC_JOB:389:ssl_start_async_job
|
||||
SSL_F_SSL_UNDEFINED_FUNCTION:197:ssl_undefined_function
|
||||
SSL_F_SSL_UNDEFINED_VOID_FUNCTION:244:ssl_undefined_void_function
|
||||
SSL_F_SSL_USE_CERTIFICATE:198:SSL_use_certificate
|
||||
SSL_F_SSL_USE_CERTIFICATE_ASN1:199:SSL_use_certificate_ASN1
|
||||
SSL_F_SSL_USE_CERTIFICATE_FILE:200:SSL_use_certificate_file
|
||||
SSL_F_SSL_USE_PRIVATEKEY:201:SSL_use_PrivateKey
|
||||
SSL_F_SSL_USE_PRIVATEKEY_ASN1:202:SSL_use_PrivateKey_ASN1
|
||||
SSL_F_SSL_USE_PRIVATEKEY_FILE:203:SSL_use_PrivateKey_file
|
||||
SSL_F_SSL_USE_PSK_IDENTITY_HINT:273:SSL_use_psk_identity_hint
|
||||
SSL_F_SSL_USE_RSAPRIVATEKEY:204:SSL_use_RSAPrivateKey
|
||||
SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1:205:SSL_use_RSAPrivateKey_ASN1
|
||||
SSL_F_SSL_USE_RSAPRIVATEKEY_FILE:206:SSL_use_RSAPrivateKey_file
|
||||
SSL_F_SSL_VALIDATE_CT:400:ssl_validate_ct
|
||||
SSL_F_SSL_VERIFY_CERT_CHAIN:207:ssl_verify_cert_chain
|
||||
SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE:616:SSL_verify_client_post_handshake
|
||||
SSL_F_SSL_WRITE:208:SSL_write
|
||||
SSL_F_SSL_WRITE_EARLY_DATA:526:SSL_write_early_data
|
||||
SSL_F_SSL_WRITE_EARLY_FINISH:527:*
|
||||
SSL_F_SSL_WRITE_EX:433:SSL_write_ex
|
||||
SSL_F_SSL_WRITE_INTERNAL:524:ssl_write_internal
|
||||
SSL_F_STATE_MACHINE:353:state_machine
|
||||
SSL_F_TLS12_CHECK_PEER_SIGALG:333:tls12_check_peer_sigalg
|
||||
SSL_F_TLS12_COPY_SIGALGS:533:tls12_copy_sigalgs
|
||||
SSL_F_TLS13_CHANGE_CIPHER_STATE:440:tls13_change_cipher_state
|
||||
SSL_F_TLS13_ENC:609:tls13_enc
|
||||
SSL_F_TLS13_FINAL_FINISH_MAC:605:tls13_final_finish_mac
|
||||
SSL_F_TLS13_GENERATE_SECRET:591:tls13_generate_secret
|
||||
SSL_F_TLS13_HKDF_EXPAND:561:tls13_hkdf_expand
|
||||
SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA:617:\
|
||||
tls13_restore_handshake_digest_for_pha
|
||||
SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA:618:\
|
||||
tls13_save_handshake_digest_for_pha
|
||||
SSL_F_TLS13_SETUP_KEY_BLOCK:441:tls13_setup_key_block
|
||||
SSL_F_TLS1_CHANGE_CIPHER_STATE:209:tls1_change_cipher_state
|
||||
SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS:341:*
|
||||
SSL_F_TLS1_ENC:401:tls1_enc
|
||||
SSL_F_TLS1_EXPORT_KEYING_MATERIAL:314:tls1_export_keying_material
|
||||
SSL_F_TLS1_GET_CURVELIST:338:tls1_get_curvelist
|
||||
SSL_F_TLS1_PRF:284:tls1_PRF
|
||||
SSL_F_TLS1_SAVE_U16:628:tls1_save_u16
|
||||
SSL_F_TLS1_SETUP_KEY_BLOCK:211:tls1_setup_key_block
|
||||
SSL_F_TLS1_SET_GROUPS:629:tls1_set_groups
|
||||
SSL_F_TLS1_SET_RAW_SIGALGS:630:tls1_set_raw_sigalgs
|
||||
SSL_F_TLS1_SET_SERVER_SIGALGS:335:tls1_set_server_sigalgs
|
||||
SSL_F_TLS1_SET_SHARED_SIGALGS:631:tls1_set_shared_sigalgs
|
||||
SSL_F_TLS1_SET_SIGALGS:632:tls1_set_sigalgs
|
||||
SSL_F_TLS_CHOOSE_SIGALG:513:tls_choose_sigalg
|
||||
SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK:354:tls_client_key_exchange_post_work
|
||||
SSL_F_TLS_COLLECT_EXTENSIONS:435:tls_collect_extensions
|
||||
SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES:542:\
|
||||
tls_construct_certificate_authorities
|
||||
SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST:372:tls_construct_certificate_request
|
||||
SSL_F_TLS_CONSTRUCT_CERT_STATUS:429:*
|
||||
SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY:494:tls_construct_cert_status_body
|
||||
SSL_F_TLS_CONSTRUCT_CERT_VERIFY:496:tls_construct_cert_verify
|
||||
SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC:427:tls_construct_change_cipher_spec
|
||||
SSL_F_TLS_CONSTRUCT_CKE_DHE:404:tls_construct_cke_dhe
|
||||
SSL_F_TLS_CONSTRUCT_CKE_ECDHE:405:tls_construct_cke_ecdhe
|
||||
SSL_F_TLS_CONSTRUCT_CKE_GOST:406:tls_construct_cke_gost
|
||||
SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE:407:tls_construct_cke_psk_preamble
|
||||
SSL_F_TLS_CONSTRUCT_CKE_RSA:409:tls_construct_cke_rsa
|
||||
SSL_F_TLS_CONSTRUCT_CKE_SRP:410:tls_construct_cke_srp
|
||||
SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE:484:tls_construct_client_certificate
|
||||
SSL_F_TLS_CONSTRUCT_CLIENT_HELLO:487:tls_construct_client_hello
|
||||
SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE:488:tls_construct_client_key_exchange
|
||||
SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY:489:*
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_ALPN:466:tls_construct_ctos_alpn
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE:355:*
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_COOKIE:535:tls_construct_ctos_cookie
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA:530:tls_construct_ctos_early_data
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS:467:tls_construct_ctos_ec_pt_formats
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_EMS:468:tls_construct_ctos_ems
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_ETM:469:tls_construct_ctos_etm
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_HELLO:356:*
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE:357:*
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE:470:tls_construct_ctos_key_share
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN:549:tls_construct_ctos_maxfragmentlen
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_NPN:471:tls_construct_ctos_npn
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_PADDING:472:tls_construct_ctos_padding
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH:619:\
|
||||
tls_construct_ctos_post_handshake_auth
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_PSK:501:tls_construct_ctos_psk
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES:509:tls_construct_ctos_psk_kex_modes
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE:473:tls_construct_ctos_renegotiate
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_SCT:474:tls_construct_ctos_sct
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME:475:tls_construct_ctos_server_name
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET:476:tls_construct_ctos_session_ticket
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS:477:tls_construct_ctos_sig_algs
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_SRP:478:tls_construct_ctos_srp
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST:479:tls_construct_ctos_status_request
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS:480:\
|
||||
tls_construct_ctos_supported_groups
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS:481:\
|
||||
tls_construct_ctos_supported_versions
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP:482:tls_construct_ctos_use_srtp
|
||||
SSL_F_TLS_CONSTRUCT_CTOS_VERIFY:358:*
|
||||
SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS:443:tls_construct_encrypted_extensions
|
||||
SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA:536:tls_construct_end_of_early_data
|
||||
SSL_F_TLS_CONSTRUCT_EXTENSIONS:447:tls_construct_extensions
|
||||
SSL_F_TLS_CONSTRUCT_FINISHED:359:tls_construct_finished
|
||||
SSL_F_TLS_CONSTRUCT_HELLO_REQUEST:373:*
|
||||
SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST:510:tls_construct_hello_retry_request
|
||||
SSL_F_TLS_CONSTRUCT_KEY_UPDATE:517:tls_construct_key_update
|
||||
SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET:428:tls_construct_new_session_ticket
|
||||
SSL_F_TLS_CONSTRUCT_NEXT_PROTO:426:tls_construct_next_proto
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE:490:tls_construct_server_certificate
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_HELLO:491:tls_construct_server_hello
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE:492:tls_construct_server_key_exchange
|
||||
SSL_F_TLS_CONSTRUCT_STOC_ALPN:451:tls_construct_stoc_alpn
|
||||
SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE:374:*
|
||||
SSL_F_TLS_CONSTRUCT_STOC_COOKIE:613:tls_construct_stoc_cookie
|
||||
SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG:452:tls_construct_stoc_cryptopro_bug
|
||||
SSL_F_TLS_CONSTRUCT_STOC_DONE:375:*
|
||||
SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA:531:tls_construct_stoc_early_data
|
||||
SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO:525:*
|
||||
SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS:453:tls_construct_stoc_ec_pt_formats
|
||||
SSL_F_TLS_CONSTRUCT_STOC_EMS:454:tls_construct_stoc_ems
|
||||
SSL_F_TLS_CONSTRUCT_STOC_ETM:455:tls_construct_stoc_etm
|
||||
SSL_F_TLS_CONSTRUCT_STOC_HELLO:376:*
|
||||
SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE:377:*
|
||||
SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE:456:tls_construct_stoc_key_share
|
||||
SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN:548:tls_construct_stoc_maxfragmentlen
|
||||
SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG:457:tls_construct_stoc_next_proto_neg
|
||||
SSL_F_TLS_CONSTRUCT_STOC_PSK:504:tls_construct_stoc_psk
|
||||
SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE:458:tls_construct_stoc_renegotiate
|
||||
SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME:459:tls_construct_stoc_server_name
|
||||
SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET:460:tls_construct_stoc_session_ticket
|
||||
SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST:461:tls_construct_stoc_status_request
|
||||
SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS:544:\
|
||||
tls_construct_stoc_supported_groups
|
||||
SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS:611:\
|
||||
tls_construct_stoc_supported_versions
|
||||
SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP:462:tls_construct_stoc_use_srtp
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO:521:\
|
||||
tls_early_post_process_client_hello
|
||||
SSL_F_TLS_FINISH_HANDSHAKE:597:tls_finish_handshake
|
||||
SSL_F_TLS_GET_MESSAGE_BODY:351:tls_get_message_body
|
||||
SSL_F_TLS_GET_MESSAGE_HEADER:387:tls_get_message_header
|
||||
SSL_F_TLS_HANDLE_ALPN:562:tls_handle_alpn
|
||||
SSL_F_TLS_HANDLE_STATUS_REQUEST:563:tls_handle_status_request
|
||||
SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES:566:tls_parse_certificate_authorities
|
||||
SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT:449:*
|
||||
SSL_F_TLS_PARSE_CTOS_ALPN:567:tls_parse_ctos_alpn
|
||||
SSL_F_TLS_PARSE_CTOS_COOKIE:614:tls_parse_ctos_cookie
|
||||
SSL_F_TLS_PARSE_CTOS_EARLY_DATA:568:tls_parse_ctos_early_data
|
||||
SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS:569:tls_parse_ctos_ec_pt_formats
|
||||
SSL_F_TLS_PARSE_CTOS_EMS:570:tls_parse_ctos_ems
|
||||
SSL_F_TLS_PARSE_CTOS_KEY_SHARE:463:tls_parse_ctos_key_share
|
||||
SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN:571:tls_parse_ctos_maxfragmentlen
|
||||
SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH:620:tls_parse_ctos_post_handshake_auth
|
||||
SSL_F_TLS_PARSE_CTOS_PSK:505:tls_parse_ctos_psk
|
||||
SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES:572:tls_parse_ctos_psk_kex_modes
|
||||
SSL_F_TLS_PARSE_CTOS_RENEGOTIATE:464:tls_parse_ctos_renegotiate
|
||||
SSL_F_TLS_PARSE_CTOS_SERVER_NAME:573:tls_parse_ctos_server_name
|
||||
SSL_F_TLS_PARSE_CTOS_SESSION_TICKET:574:tls_parse_ctos_session_ticket
|
||||
SSL_F_TLS_PARSE_CTOS_SIG_ALGS:575:tls_parse_ctos_sig_algs
|
||||
SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT:615:tls_parse_ctos_sig_algs_cert
|
||||
SSL_F_TLS_PARSE_CTOS_SRP:576:tls_parse_ctos_srp
|
||||
SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST:577:tls_parse_ctos_status_request
|
||||
SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS:578:tls_parse_ctos_supported_groups
|
||||
SSL_F_TLS_PARSE_CTOS_USE_SRTP:465:tls_parse_ctos_use_srtp
|
||||
SSL_F_TLS_PARSE_STOC_ALPN:579:tls_parse_stoc_alpn
|
||||
SSL_F_TLS_PARSE_STOC_COOKIE:534:tls_parse_stoc_cookie
|
||||
SSL_F_TLS_PARSE_STOC_EARLY_DATA:538:tls_parse_stoc_early_data
|
||||
SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO:528:*
|
||||
SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS:580:tls_parse_stoc_ec_pt_formats
|
||||
SSL_F_TLS_PARSE_STOC_KEY_SHARE:445:tls_parse_stoc_key_share
|
||||
SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN:581:tls_parse_stoc_maxfragmentlen
|
||||
SSL_F_TLS_PARSE_STOC_NPN:582:tls_parse_stoc_npn
|
||||
SSL_F_TLS_PARSE_STOC_PSK:502:tls_parse_stoc_psk
|
||||
SSL_F_TLS_PARSE_STOC_RENEGOTIATE:448:tls_parse_stoc_renegotiate
|
||||
SSL_F_TLS_PARSE_STOC_SCT:564:tls_parse_stoc_sct
|
||||
SSL_F_TLS_PARSE_STOC_SERVER_NAME:583:tls_parse_stoc_server_name
|
||||
SSL_F_TLS_PARSE_STOC_SESSION_TICKET:584:tls_parse_stoc_session_ticket
|
||||
SSL_F_TLS_PARSE_STOC_STATUS_REQUEST:585:tls_parse_stoc_status_request
|
||||
SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS:612:tls_parse_stoc_supported_versions
|
||||
SSL_F_TLS_PARSE_STOC_USE_SRTP:446:tls_parse_stoc_use_srtp
|
||||
SSL_F_TLS_POST_PROCESS_CLIENT_HELLO:378:tls_post_process_client_hello
|
||||
SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE:384:\
|
||||
tls_post_process_client_key_exchange
|
||||
SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE:360:tls_prepare_client_certificate
|
||||
SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST:610:tls_process_as_hello_retry_request
|
||||
SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST:361:tls_process_certificate_request
|
||||
SSL_F_TLS_PROCESS_CERT_STATUS:362:*
|
||||
SSL_F_TLS_PROCESS_CERT_STATUS_BODY:495:tls_process_cert_status_body
|
||||
SSL_F_TLS_PROCESS_CERT_VERIFY:379:tls_process_cert_verify
|
||||
SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC:363:tls_process_change_cipher_spec
|
||||
SSL_F_TLS_PROCESS_CKE_DHE:411:tls_process_cke_dhe
|
||||
SSL_F_TLS_PROCESS_CKE_ECDHE:412:tls_process_cke_ecdhe
|
||||
SSL_F_TLS_PROCESS_CKE_GOST:413:tls_process_cke_gost
|
||||
SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE:414:tls_process_cke_psk_preamble
|
||||
SSL_F_TLS_PROCESS_CKE_RSA:415:tls_process_cke_rsa
|
||||
SSL_F_TLS_PROCESS_CKE_SRP:416:tls_process_cke_srp
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE:380:tls_process_client_certificate
|
||||
SSL_F_TLS_PROCESS_CLIENT_HELLO:381:tls_process_client_hello
|
||||
SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE:382:tls_process_client_key_exchange
|
||||
SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS:444:tls_process_encrypted_extensions
|
||||
SSL_F_TLS_PROCESS_END_OF_EARLY_DATA:537:tls_process_end_of_early_data
|
||||
SSL_F_TLS_PROCESS_FINISHED:364:tls_process_finished
|
||||
SSL_F_TLS_PROCESS_HELLO_REQ:507:tls_process_hello_req
|
||||
SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST:511:tls_process_hello_retry_request
|
||||
SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT:442:tls_process_initial_server_flight
|
||||
SSL_F_TLS_PROCESS_KEY_EXCHANGE:365:tls_process_key_exchange
|
||||
SSL_F_TLS_PROCESS_KEY_UPDATE:518:tls_process_key_update
|
||||
SSL_F_TLS_PROCESS_NEW_SESSION_TICKET:366:tls_process_new_session_ticket
|
||||
SSL_F_TLS_PROCESS_NEXT_PROTO:383:tls_process_next_proto
|
||||
SSL_F_TLS_PROCESS_SERVER_CERTIFICATE:367:tls_process_server_certificate
|
||||
SSL_F_TLS_PROCESS_SERVER_DONE:368:tls_process_server_done
|
||||
SSL_F_TLS_PROCESS_SERVER_HELLO:369:tls_process_server_hello
|
||||
SSL_F_TLS_PROCESS_SKE_DHE:419:tls_process_ske_dhe
|
||||
SSL_F_TLS_PROCESS_SKE_ECDHE:420:tls_process_ske_ecdhe
|
||||
SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE:421:tls_process_ske_psk_preamble
|
||||
SSL_F_TLS_PROCESS_SKE_SRP:422:tls_process_ske_srp
|
||||
SSL_F_TLS_PSK_DO_BINDER:506:tls_psk_do_binder
|
||||
SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT:450:*
|
||||
SSL_F_TLS_SETUP_HANDSHAKE:508:tls_setup_handshake
|
||||
SSL_F_USE_CERTIFICATE_CHAIN_FILE:220:use_certificate_chain_file
|
||||
SSL_F_WPACKET_INTERN_INIT_LEN:633:wpacket_intern_init_len
|
||||
SSL_F_WPACKET_START_SUB_PACKET_LEN__:634:WPACKET_start_sub_packet_len__
|
||||
SSL_F_WRITE_STATE_MACHINE:586:write_state_machine
|
||||
TS_F_DEF_SERIAL_CB:110:def_serial_cb
|
||||
TS_F_DEF_TIME_CB:111:def_time_cb
|
||||
TS_F_INT_TS_RESP_VERIFY_TOKEN:149:int_ts_RESP_verify_token
|
||||
TS_F_PKCS7_TO_TS_TST_INFO:148:PKCS7_to_TS_TST_INFO
|
||||
TS_F_TS_ACCURACY_SET_MICROS:115:TS_ACCURACY_set_micros
|
||||
TS_F_TS_ACCURACY_SET_MILLIS:116:TS_ACCURACY_set_millis
|
||||
TS_F_TS_ACCURACY_SET_SECONDS:117:TS_ACCURACY_set_seconds
|
||||
TS_F_TS_CHECK_IMPRINTS:100:ts_check_imprints
|
||||
TS_F_TS_CHECK_NONCES:101:ts_check_nonces
|
||||
TS_F_TS_CHECK_POLICY:102:ts_check_policy
|
||||
TS_F_TS_CHECK_SIGNING_CERTS:103:ts_check_signing_certs
|
||||
TS_F_TS_CHECK_STATUS_INFO:104:ts_check_status_info
|
||||
TS_F_TS_COMPUTE_IMPRINT:145:ts_compute_imprint
|
||||
TS_F_TS_CONF_INVALID:151:ts_CONF_invalid
|
||||
TS_F_TS_CONF_LOAD_CERT:153:TS_CONF_load_cert
|
||||
TS_F_TS_CONF_LOAD_CERTS:154:TS_CONF_load_certs
|
||||
TS_F_TS_CONF_LOAD_KEY:155:TS_CONF_load_key
|
||||
TS_F_TS_CONF_LOOKUP_FAIL:152:ts_CONF_lookup_fail
|
||||
TS_F_TS_CONF_SET_DEFAULT_ENGINE:146:TS_CONF_set_default_engine
|
||||
TS_F_TS_GET_STATUS_TEXT:105:ts_get_status_text
|
||||
TS_F_TS_MSG_IMPRINT_SET_ALGO:118:TS_MSG_IMPRINT_set_algo
|
||||
TS_F_TS_REQ_SET_MSG_IMPRINT:119:TS_REQ_set_msg_imprint
|
||||
TS_F_TS_REQ_SET_NONCE:120:TS_REQ_set_nonce
|
||||
TS_F_TS_REQ_SET_POLICY_ID:121:TS_REQ_set_policy_id
|
||||
TS_F_TS_RESP_CREATE_RESPONSE:122:TS_RESP_create_response
|
||||
TS_F_TS_RESP_CREATE_TST_INFO:123:ts_RESP_create_tst_info
|
||||
TS_F_TS_RESP_CTX_ADD_FAILURE_INFO:124:TS_RESP_CTX_add_failure_info
|
||||
TS_F_TS_RESP_CTX_ADD_MD:125:TS_RESP_CTX_add_md
|
||||
TS_F_TS_RESP_CTX_ADD_POLICY:126:TS_RESP_CTX_add_policy
|
||||
TS_F_TS_RESP_CTX_NEW:127:TS_RESP_CTX_new
|
||||
TS_F_TS_RESP_CTX_SET_ACCURACY:128:TS_RESP_CTX_set_accuracy
|
||||
TS_F_TS_RESP_CTX_SET_CERTS:129:TS_RESP_CTX_set_certs
|
||||
TS_F_TS_RESP_CTX_SET_DEF_POLICY:130:TS_RESP_CTX_set_def_policy
|
||||
TS_F_TS_RESP_CTX_SET_SIGNER_CERT:131:TS_RESP_CTX_set_signer_cert
|
||||
TS_F_TS_RESP_CTX_SET_STATUS_INFO:132:TS_RESP_CTX_set_status_info
|
||||
TS_F_TS_RESP_GET_POLICY:133:ts_RESP_get_policy
|
||||
TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION:134:TS_RESP_set_genTime_with_precision
|
||||
TS_F_TS_RESP_SET_STATUS_INFO:135:TS_RESP_set_status_info
|
||||
TS_F_TS_RESP_SET_TST_INFO:150:TS_RESP_set_tst_info
|
||||
TS_F_TS_RESP_SIGN:136:ts_RESP_sign
|
||||
TS_F_TS_RESP_VERIFY_SIGNATURE:106:TS_RESP_verify_signature
|
||||
TS_F_TS_TST_INFO_SET_ACCURACY:137:TS_TST_INFO_set_accuracy
|
||||
TS_F_TS_TST_INFO_SET_MSG_IMPRINT:138:TS_TST_INFO_set_msg_imprint
|
||||
TS_F_TS_TST_INFO_SET_NONCE:139:TS_TST_INFO_set_nonce
|
||||
TS_F_TS_TST_INFO_SET_POLICY_ID:140:TS_TST_INFO_set_policy_id
|
||||
TS_F_TS_TST_INFO_SET_SERIAL:141:TS_TST_INFO_set_serial
|
||||
TS_F_TS_TST_INFO_SET_TIME:142:TS_TST_INFO_set_time
|
||||
TS_F_TS_TST_INFO_SET_TSA:143:TS_TST_INFO_set_tsa
|
||||
TS_F_TS_VERIFY:108:*
|
||||
TS_F_TS_VERIFY_CERT:109:ts_verify_cert
|
||||
TS_F_TS_VERIFY_CTX_NEW:144:TS_VERIFY_CTX_new
|
||||
UI_F_CLOSE_CONSOLE:115:close_console
|
||||
UI_F_ECHO_CONSOLE:116:echo_console
|
||||
UI_F_GENERAL_ALLOCATE_BOOLEAN:108:general_allocate_boolean
|
||||
UI_F_GENERAL_ALLOCATE_PROMPT:109:general_allocate_prompt
|
||||
UI_F_NOECHO_CONSOLE:117:noecho_console
|
||||
UI_F_OPEN_CONSOLE:114:open_console
|
||||
UI_F_UI_CONSTRUCT_PROMPT:121:UI_construct_prompt
|
||||
UI_F_UI_CREATE_METHOD:112:UI_create_method
|
||||
UI_F_UI_CTRL:111:UI_ctrl
|
||||
UI_F_UI_DUP_ERROR_STRING:101:UI_dup_error_string
|
||||
UI_F_UI_DUP_INFO_STRING:102:UI_dup_info_string
|
||||
UI_F_UI_DUP_INPUT_BOOLEAN:110:UI_dup_input_boolean
|
||||
UI_F_UI_DUP_INPUT_STRING:103:UI_dup_input_string
|
||||
UI_F_UI_DUP_USER_DATA:118:UI_dup_user_data
|
||||
UI_F_UI_DUP_VERIFY_STRING:106:UI_dup_verify_string
|
||||
UI_F_UI_GET0_RESULT:107:UI_get0_result
|
||||
UI_F_UI_GET_RESULT_LENGTH:119:UI_get_result_length
|
||||
UI_F_UI_NEW_METHOD:104:UI_new_method
|
||||
UI_F_UI_PROCESS:113:UI_process
|
||||
UI_F_UI_SET_RESULT:105:UI_set_result
|
||||
UI_F_UI_SET_RESULT_EX:120:UI_set_result_ex
|
||||
X509V3_F_A2I_GENERAL_NAME:164:a2i_GENERAL_NAME
|
||||
X509V3_F_ADDR_VALIDATE_PATH_INTERNAL:166:addr_validate_path_internal
|
||||
X509V3_F_ASIDENTIFIERCHOICE_CANONIZE:161:ASIdentifierChoice_canonize
|
||||
X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL:162:ASIdentifierChoice_is_canonical
|
||||
X509V3_F_BIGNUM_TO_STRING:167:bignum_to_string
|
||||
X509V3_F_COPY_EMAIL:122:copy_email
|
||||
X509V3_F_COPY_ISSUER:123:copy_issuer
|
||||
X509V3_F_DO_DIRNAME:144:do_dirname
|
||||
X509V3_F_DO_EXT_I2D:135:do_ext_i2d
|
||||
X509V3_F_DO_EXT_NCONF:151:do_ext_nconf
|
||||
X509V3_F_GNAMES_FROM_SECTNAME:156:gnames_from_sectname
|
||||
X509V3_F_I2S_ASN1_ENUMERATED:121:i2s_ASN1_ENUMERATED
|
||||
X509V3_F_I2S_ASN1_IA5STRING:149:i2s_ASN1_IA5STRING
|
||||
X509V3_F_I2S_ASN1_INTEGER:120:i2s_ASN1_INTEGER
|
||||
X509V3_F_I2V_AUTHORITY_INFO_ACCESS:138:i2v_AUTHORITY_INFO_ACCESS
|
||||
X509V3_F_LEVEL_ADD_NODE:168:level_add_node
|
||||
X509V3_F_NOTICE_SECTION:132:notice_section
|
||||
X509V3_F_NREF_NOS:133:nref_nos
|
||||
X509V3_F_POLICY_CACHE_CREATE:169:policy_cache_create
|
||||
X509V3_F_POLICY_CACHE_NEW:170:policy_cache_new
|
||||
X509V3_F_POLICY_DATA_NEW:171:policy_data_new
|
||||
X509V3_F_POLICY_SECTION:131:policy_section
|
||||
X509V3_F_PROCESS_PCI_VALUE:150:process_pci_value
|
||||
X509V3_F_R2I_CERTPOL:130:r2i_certpol
|
||||
X509V3_F_R2I_PCI:155:r2i_pci
|
||||
X509V3_F_S2I_ASN1_IA5STRING:100:s2i_ASN1_IA5STRING
|
||||
X509V3_F_S2I_ASN1_INTEGER:108:s2i_ASN1_INTEGER
|
||||
X509V3_F_S2I_ASN1_OCTET_STRING:112:s2i_ASN1_OCTET_STRING
|
||||
X509V3_F_S2I_SKEY_ID:115:s2i_skey_id
|
||||
X509V3_F_SET_DIST_POINT_NAME:158:set_dist_point_name
|
||||
X509V3_F_SXNET_ADD_ID_ASC:125:SXNET_add_id_asc
|
||||
X509V3_F_SXNET_ADD_ID_INTEGER:126:SXNET_add_id_INTEGER
|
||||
X509V3_F_SXNET_ADD_ID_ULONG:127:SXNET_add_id_ulong
|
||||
X509V3_F_SXNET_GET_ID_ASC:128:SXNET_get_id_asc
|
||||
X509V3_F_SXNET_GET_ID_ULONG:129:SXNET_get_id_ulong
|
||||
X509V3_F_TREE_INIT:172:tree_init
|
||||
X509V3_F_V2I_ASIDENTIFIERS:163:v2i_ASIdentifiers
|
||||
X509V3_F_V2I_ASN1_BIT_STRING:101:v2i_ASN1_BIT_STRING
|
||||
X509V3_F_V2I_AUTHORITY_INFO_ACCESS:139:v2i_AUTHORITY_INFO_ACCESS
|
||||
X509V3_F_V2I_AUTHORITY_KEYID:119:v2i_AUTHORITY_KEYID
|
||||
X509V3_F_V2I_BASIC_CONSTRAINTS:102:v2i_BASIC_CONSTRAINTS
|
||||
X509V3_F_V2I_CRLD:134:v2i_crld
|
||||
X509V3_F_V2I_EXTENDED_KEY_USAGE:103:v2i_EXTENDED_KEY_USAGE
|
||||
X509V3_F_V2I_GENERAL_NAMES:118:v2i_GENERAL_NAMES
|
||||
X509V3_F_V2I_GENERAL_NAME_EX:117:v2i_GENERAL_NAME_ex
|
||||
X509V3_F_V2I_IDP:157:v2i_idp
|
||||
X509V3_F_V2I_IPADDRBLOCKS:159:v2i_IPAddrBlocks
|
||||
X509V3_F_V2I_ISSUER_ALT:153:v2i_issuer_alt
|
||||
X509V3_F_V2I_NAME_CONSTRAINTS:147:v2i_NAME_CONSTRAINTS
|
||||
X509V3_F_V2I_POLICY_CONSTRAINTS:146:v2i_POLICY_CONSTRAINTS
|
||||
X509V3_F_V2I_POLICY_MAPPINGS:145:v2i_POLICY_MAPPINGS
|
||||
X509V3_F_V2I_SUBJECT_ALT:154:v2i_subject_alt
|
||||
X509V3_F_V2I_TLS_FEATURE:165:v2i_TLS_FEATURE
|
||||
X509V3_F_V3_GENERIC_EXTENSION:116:v3_generic_extension
|
||||
X509V3_F_X509V3_ADD1_I2D:140:X509V3_add1_i2d
|
||||
X509V3_F_X509V3_ADD_VALUE:105:X509V3_add_value
|
||||
X509V3_F_X509V3_EXT_ADD:104:X509V3_EXT_add
|
||||
X509V3_F_X509V3_EXT_ADD_ALIAS:106:X509V3_EXT_add_alias
|
||||
X509V3_F_X509V3_EXT_I2D:136:X509V3_EXT_i2d
|
||||
X509V3_F_X509V3_EXT_NCONF:152:X509V3_EXT_nconf
|
||||
X509V3_F_X509V3_GET_SECTION:142:X509V3_get_section
|
||||
X509V3_F_X509V3_GET_STRING:143:X509V3_get_string
|
||||
X509V3_F_X509V3_GET_VALUE_BOOL:110:X509V3_get_value_bool
|
||||
X509V3_F_X509V3_PARSE_LIST:109:X509V3_parse_list
|
||||
X509V3_F_X509_PURPOSE_ADD:137:X509_PURPOSE_add
|
||||
X509V3_F_X509_PURPOSE_SET:141:X509_PURPOSE_set
|
||||
X509_F_ADD_CERT_DIR:100:add_cert_dir
|
||||
X509_F_BUILD_CHAIN:106:build_chain
|
||||
X509_F_BY_FILE_CTRL:101:by_file_ctrl
|
||||
X509_F_CHECK_NAME_CONSTRAINTS:149:check_name_constraints
|
||||
X509_F_CHECK_POLICY:145:check_policy
|
||||
X509_F_COMMON_VERIFY_SM2:165:common_verify_sm2
|
||||
X509_F_DANE_I2D:107:dane_i2d
|
||||
X509_F_DIR_CTRL:102:dir_ctrl
|
||||
X509_F_GET_CERT_BY_SUBJECT:103:get_cert_by_subject
|
||||
X509_F_I2D_X509_AUX:151:i2d_X509_AUX
|
||||
X509_F_LOOKUP_CERTS_SK:152:lookup_certs_sk
|
||||
X509_F_NETSCAPE_SPKI_B64_DECODE:129:NETSCAPE_SPKI_b64_decode
|
||||
X509_F_NETSCAPE_SPKI_B64_ENCODE:130:NETSCAPE_SPKI_b64_encode
|
||||
X509_F_NEW_DIR:153:new_dir
|
||||
X509_F_X509AT_ADD1_ATTR:135:X509at_add1_attr
|
||||
X509_F_X509V3_ADD_EXT:104:X509v3_add_ext
|
||||
X509_F_X509_ATTRIBUTE_CREATE_BY_NID:136:X509_ATTRIBUTE_create_by_NID
|
||||
X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ:137:X509_ATTRIBUTE_create_by_OBJ
|
||||
X509_F_X509_ATTRIBUTE_CREATE_BY_TXT:140:X509_ATTRIBUTE_create_by_txt
|
||||
X509_F_X509_ATTRIBUTE_GET0_DATA:139:X509_ATTRIBUTE_get0_data
|
||||
X509_F_X509_ATTRIBUTE_SET1_DATA:138:X509_ATTRIBUTE_set1_data
|
||||
X509_F_X509_CHECK_PRIVATE_KEY:128:X509_check_private_key
|
||||
X509_F_X509_CRL_DIFF:105:X509_CRL_diff
|
||||
X509_F_X509_CRL_METHOD_NEW:154:X509_CRL_METHOD_new
|
||||
X509_F_X509_CRL_PRINT_FP:147:X509_CRL_print_fp
|
||||
X509_F_X509_EXTENSION_CREATE_BY_NID:108:X509_EXTENSION_create_by_NID
|
||||
X509_F_X509_EXTENSION_CREATE_BY_OBJ:109:X509_EXTENSION_create_by_OBJ
|
||||
X509_F_X509_GET_PUBKEY_PARAMETERS:110:X509_get_pubkey_parameters
|
||||
X509_F_X509_LOAD_CERT_CRL_FILE:132:X509_load_cert_crl_file
|
||||
X509_F_X509_LOAD_CERT_FILE:111:X509_load_cert_file
|
||||
X509_F_X509_LOAD_CRL_FILE:112:X509_load_crl_file
|
||||
X509_F_X509_LOOKUP_METH_NEW:160:X509_LOOKUP_meth_new
|
||||
X509_F_X509_LOOKUP_NEW:155:X509_LOOKUP_new
|
||||
X509_F_X509_NAME_ADD_ENTRY:113:X509_NAME_add_entry
|
||||
X509_F_X509_NAME_CANON:156:x509_name_canon
|
||||
X509_F_X509_NAME_ENTRY_CREATE_BY_NID:114:X509_NAME_ENTRY_create_by_NID
|
||||
X509_F_X509_NAME_ENTRY_CREATE_BY_TXT:131:X509_NAME_ENTRY_create_by_txt
|
||||
X509_F_X509_NAME_ENTRY_SET_OBJECT:115:X509_NAME_ENTRY_set_object
|
||||
X509_F_X509_NAME_ONELINE:116:X509_NAME_oneline
|
||||
X509_F_X509_NAME_PRINT:117:X509_NAME_print
|
||||
X509_F_X509_OBJECT_NEW:150:X509_OBJECT_new
|
||||
X509_F_X509_PRINT_EX_FP:118:X509_print_ex_fp
|
||||
X509_F_X509_PUBKEY_DECODE:148:x509_pubkey_decode
|
||||
X509_F_X509_PUBKEY_GET0:119:X509_PUBKEY_get0
|
||||
X509_F_X509_PUBKEY_SET:120:X509_PUBKEY_set
|
||||
X509_F_X509_REQ_CHECK_PRIVATE_KEY:144:X509_REQ_check_private_key
|
||||
X509_F_X509_REQ_PRINT_EX:121:X509_REQ_print_ex
|
||||
X509_F_X509_REQ_PRINT_FP:122:X509_REQ_print_fp
|
||||
X509_F_X509_REQ_TO_X509:123:X509_REQ_to_X509
|
||||
X509_F_X509_REQ_VERIFY:163:X509_REQ_verify
|
||||
X509_F_X509_REQ_VERIFY_SM2:164:x509_req_verify_sm2
|
||||
X509_F_X509_STORE_ADD_CERT:124:X509_STORE_add_cert
|
||||
X509_F_X509_STORE_ADD_CRL:125:X509_STORE_add_crl
|
||||
X509_F_X509_STORE_ADD_LOOKUP:157:X509_STORE_add_lookup
|
||||
X509_F_X509_STORE_CTX_GET1_ISSUER:146:X509_STORE_CTX_get1_issuer
|
||||
X509_F_X509_STORE_CTX_INIT:143:X509_STORE_CTX_init
|
||||
X509_F_X509_STORE_CTX_NEW:142:X509_STORE_CTX_new
|
||||
X509_F_X509_STORE_CTX_PURPOSE_INHERIT:134:X509_STORE_CTX_purpose_inherit
|
||||
X509_F_X509_STORE_NEW:158:X509_STORE_new
|
||||
X509_F_X509_TO_X509_REQ:126:X509_to_X509_REQ
|
||||
X509_F_X509_TRUST_ADD:133:X509_TRUST_add
|
||||
X509_F_X509_TRUST_SET:141:X509_TRUST_set
|
||||
X509_F_X509_VERIFY:161:X509_verify
|
||||
X509_F_X509_VERIFY_CERT:127:X509_verify_cert
|
||||
X509_F_X509_VERIFY_PARAM_NEW:159:X509_VERIFY_PARAM_new
|
||||
X509_F_X509_VERIFY_SM2:162:x509_verify_sm2
|
||||
|
||||
#Reason codes
|
||||
ASN1_R_ADDING_OBJECT:171:adding object
|
||||
ASN1_R_ASN1_PARSE_ERROR:203:asn1 parse error
|
||||
ASN1_R_ASN1_SIG_PARSE_ERROR:204:asn1 sig parse error
|
||||
ASN1_R_AUX_ERROR:100:aux error
|
||||
ASN1_R_BAD_OBJECT_HEADER:102:bad object header
|
||||
ASN1_R_BMPSTRING_IS_WRONG_LENGTH:214:bmpstring is wrong length
|
||||
ASN1_R_BN_LIB:105:bn lib
|
||||
ASN1_R_BOOLEAN_IS_WRONG_LENGTH:106:boolean is wrong length
|
||||
ASN1_R_BUFFER_TOO_SMALL:107:buffer too small
|
||||
ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER:108:cipher has no object identifier
|
||||
ASN1_R_CONTEXT_NOT_INITIALISED:217:context not initialised
|
||||
ASN1_R_DATA_IS_WRONG:109:data is wrong
|
||||
ASN1_R_DECODE_ERROR:110:decode error
|
||||
ASN1_R_DEPTH_EXCEEDED:174:depth exceeded
|
||||
ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED:198:digest and key type not supported
|
||||
ASN1_R_ENCODE_ERROR:112:encode error
|
||||
ASN1_R_ERROR_GETTING_TIME:173:error getting time
|
||||
ASN1_R_ERROR_LOADING_SECTION:172:error loading section
|
||||
ASN1_R_ERROR_SETTING_CIPHER_PARAMS:114:error setting cipher params
|
||||
ASN1_R_EXPECTING_AN_INTEGER:115:expecting an integer
|
||||
ASN1_R_EXPECTING_AN_OBJECT:116:expecting an object
|
||||
ASN1_R_EXPLICIT_LENGTH_MISMATCH:119:explicit length mismatch
|
||||
ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED:120:explicit tag not constructed
|
||||
ASN1_R_FIELD_MISSING:121:field missing
|
||||
ASN1_R_FIRST_NUM_TOO_LARGE:122:first num too large
|
||||
ASN1_R_HEADER_TOO_LONG:123:header too long
|
||||
ASN1_R_ILLEGAL_BITSTRING_FORMAT:175:illegal bitstring format
|
||||
ASN1_R_ILLEGAL_BOOLEAN:176:illegal boolean
|
||||
ASN1_R_ILLEGAL_CHARACTERS:124:illegal characters
|
||||
ASN1_R_ILLEGAL_FORMAT:177:illegal format
|
||||
ASN1_R_ILLEGAL_HEX:178:illegal hex
|
||||
ASN1_R_ILLEGAL_IMPLICIT_TAG:179:illegal implicit tag
|
||||
ASN1_R_ILLEGAL_INTEGER:180:illegal integer
|
||||
ASN1_R_ILLEGAL_NEGATIVE_VALUE:226:illegal negative value
|
||||
ASN1_R_ILLEGAL_NESTED_TAGGING:181:illegal nested tagging
|
||||
ASN1_R_ILLEGAL_NULL:125:illegal null
|
||||
ASN1_R_ILLEGAL_NULL_VALUE:182:illegal null value
|
||||
ASN1_R_ILLEGAL_OBJECT:183:illegal object
|
||||
ASN1_R_ILLEGAL_OPTIONAL_ANY:126:illegal optional any
|
||||
ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE:170:illegal options on item template
|
||||
ASN1_R_ILLEGAL_PADDING:221:illegal padding
|
||||
ASN1_R_ILLEGAL_TAGGED_ANY:127:illegal tagged any
|
||||
ASN1_R_ILLEGAL_TIME_VALUE:184:illegal time value
|
||||
ASN1_R_ILLEGAL_ZERO_CONTENT:222:illegal zero content
|
||||
ASN1_R_INTEGER_NOT_ASCII_FORMAT:185:integer not ascii format
|
||||
ASN1_R_INTEGER_TOO_LARGE_FOR_LONG:128:integer too large for long
|
||||
ASN1_R_INVALID_BIT_STRING_BITS_LEFT:220:invalid bit string bits left
|
||||
ASN1_R_INVALID_BMPSTRING_LENGTH:129:invalid bmpstring length
|
||||
ASN1_R_INVALID_DIGIT:130:invalid digit
|
||||
ASN1_R_INVALID_MIME_TYPE:205:invalid mime type
|
||||
ASN1_R_INVALID_MODIFIER:186:invalid modifier
|
||||
ASN1_R_INVALID_NUMBER:187:invalid number
|
||||
ASN1_R_INVALID_OBJECT_ENCODING:216:invalid object encoding
|
||||
ASN1_R_INVALID_SCRYPT_PARAMETERS:227:invalid scrypt parameters
|
||||
ASN1_R_INVALID_SEPARATOR:131:invalid separator
|
||||
ASN1_R_INVALID_STRING_TABLE_VALUE:218:invalid string table value
|
||||
ASN1_R_INVALID_UNIVERSALSTRING_LENGTH:133:invalid universalstring length
|
||||
ASN1_R_INVALID_UTF8STRING:134:invalid utf8string
|
||||
ASN1_R_INVALID_VALUE:219:invalid value
|
||||
ASN1_R_LIST_ERROR:188:list error
|
||||
ASN1_R_MIME_NO_CONTENT_TYPE:206:mime no content type
|
||||
ASN1_R_MIME_PARSE_ERROR:207:mime parse error
|
||||
ASN1_R_MIME_SIG_PARSE_ERROR:208:mime sig parse error
|
||||
ASN1_R_MISSING_EOC:137:missing eoc
|
||||
ASN1_R_MISSING_SECOND_NUMBER:138:missing second number
|
||||
ASN1_R_MISSING_VALUE:189:missing value
|
||||
ASN1_R_MSTRING_NOT_UNIVERSAL:139:mstring not universal
|
||||
ASN1_R_MSTRING_WRONG_TAG:140:mstring wrong tag
|
||||
ASN1_R_NESTED_ASN1_STRING:197:nested asn1 string
|
||||
ASN1_R_NESTED_TOO_DEEP:201:nested too deep
|
||||
ASN1_R_NON_HEX_CHARACTERS:141:non hex characters
|
||||
ASN1_R_NOT_ASCII_FORMAT:190:not ascii format
|
||||
ASN1_R_NOT_ENOUGH_DATA:142:not enough data
|
||||
ASN1_R_NO_CONTENT_TYPE:209:no content type
|
||||
ASN1_R_NO_MATCHING_CHOICE_TYPE:143:no matching choice type
|
||||
ASN1_R_NO_MULTIPART_BODY_FAILURE:210:no multipart body failure
|
||||
ASN1_R_NO_MULTIPART_BOUNDARY:211:no multipart boundary
|
||||
ASN1_R_NO_SIG_CONTENT_TYPE:212:no sig content type
|
||||
ASN1_R_NULL_IS_WRONG_LENGTH:144:null is wrong length
|
||||
ASN1_R_OBJECT_NOT_ASCII_FORMAT:191:object not ascii format
|
||||
ASN1_R_ODD_NUMBER_OF_CHARS:145:odd number of chars
|
||||
ASN1_R_SECOND_NUMBER_TOO_LARGE:147:second number too large
|
||||
ASN1_R_SEQUENCE_LENGTH_MISMATCH:148:sequence length mismatch
|
||||
ASN1_R_SEQUENCE_NOT_CONSTRUCTED:149:sequence not constructed
|
||||
ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG:192:sequence or set needs config
|
||||
ASN1_R_SHORT_LINE:150:short line
|
||||
ASN1_R_SIG_INVALID_MIME_TYPE:213:sig invalid mime type
|
||||
ASN1_R_STREAMING_NOT_SUPPORTED:202:streaming not supported
|
||||
ASN1_R_STRING_TOO_LONG:151:string too long
|
||||
ASN1_R_STRING_TOO_SHORT:152:string too short
|
||||
ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD:154:\
|
||||
the asn1 object identifier is not known for this md
|
||||
ASN1_R_TIME_NOT_ASCII_FORMAT:193:time not ascii format
|
||||
ASN1_R_TOO_LARGE:223:too large
|
||||
ASN1_R_TOO_LONG:155:too long
|
||||
ASN1_R_TOO_SMALL:224:too small
|
||||
ASN1_R_TYPE_NOT_CONSTRUCTED:156:type not constructed
|
||||
ASN1_R_TYPE_NOT_PRIMITIVE:195:type not primitive
|
||||
ASN1_R_UNEXPECTED_EOC:159:unexpected eoc
|
||||
ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH:215:universalstring is wrong length
|
||||
ASN1_R_UNKNOWN_FORMAT:160:unknown format
|
||||
ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM:161:unknown message digest algorithm
|
||||
ASN1_R_UNKNOWN_OBJECT_TYPE:162:unknown object type
|
||||
ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE:163:unknown public key type
|
||||
ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM:199:unknown signature algorithm
|
||||
ASN1_R_UNKNOWN_TAG:194:unknown tag
|
||||
ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE:164:unsupported any defined by type
|
||||
ASN1_R_UNSUPPORTED_CIPHER:228:unsupported cipher
|
||||
ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE:167:unsupported public key type
|
||||
ASN1_R_UNSUPPORTED_TYPE:196:unsupported type
|
||||
ASN1_R_WRONG_INTEGER_TYPE:225:wrong integer type
|
||||
ASN1_R_WRONG_PUBLIC_KEY_TYPE:200:wrong public key type
|
||||
ASN1_R_WRONG_TAG:168:wrong tag
|
||||
ASYNC_R_FAILED_TO_SET_POOL:101:failed to set pool
|
||||
ASYNC_R_FAILED_TO_SWAP_CONTEXT:102:failed to swap context
|
||||
ASYNC_R_INIT_FAILED:105:init failed
|
||||
ASYNC_R_INVALID_POOL_SIZE:103:invalid pool size
|
||||
BIO_R_ACCEPT_ERROR:100:accept error
|
||||
BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET:141:addrinfo addr is not af inet
|
||||
BIO_R_AMBIGUOUS_HOST_OR_SERVICE:129:ambiguous host or service
|
||||
BIO_R_BAD_FOPEN_MODE:101:bad fopen mode
|
||||
BIO_R_BROKEN_PIPE:124:broken pipe
|
||||
BIO_R_CONNECT_ERROR:103:connect error
|
||||
BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET:107:gethostbyname addr is not af inet
|
||||
BIO_R_GETSOCKNAME_ERROR:132:getsockname error
|
||||
BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS:133:getsockname truncated address
|
||||
BIO_R_GETTING_SOCKTYPE:134:getting socktype
|
||||
BIO_R_INVALID_ARGUMENT:125:invalid argument
|
||||
BIO_R_INVALID_SOCKET:135:invalid socket
|
||||
BIO_R_IN_USE:123:in use
|
||||
BIO_R_LENGTH_TOO_LONG:102:length too long
|
||||
BIO_R_LISTEN_V6_ONLY:136:listen v6 only
|
||||
BIO_R_LOOKUP_RETURNED_NOTHING:142:lookup returned nothing
|
||||
BIO_R_MALFORMED_HOST_OR_SERVICE:130:malformed host or service
|
||||
BIO_R_NBIO_CONNECT_ERROR:110:nbio connect error
|
||||
BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED:143:\
|
||||
no accept addr or service specified
|
||||
BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED:144:no hostname or service specified
|
||||
BIO_R_NO_PORT_DEFINED:113:no port defined
|
||||
BIO_R_NO_SUCH_FILE:128:no such file
|
||||
BIO_R_NULL_PARAMETER:115:null parameter
|
||||
BIO_R_UNABLE_TO_BIND_SOCKET:117:unable to bind socket
|
||||
BIO_R_UNABLE_TO_CREATE_SOCKET:118:unable to create socket
|
||||
BIO_R_UNABLE_TO_KEEPALIVE:137:unable to keepalive
|
||||
BIO_R_UNABLE_TO_LISTEN_SOCKET:119:unable to listen socket
|
||||
BIO_R_UNABLE_TO_NODELAY:138:unable to nodelay
|
||||
BIO_R_UNABLE_TO_REUSEADDR:139:unable to reuseaddr
|
||||
BIO_R_UNAVAILABLE_IP_FAMILY:145:unavailable ip family
|
||||
BIO_R_UNINITIALIZED:120:uninitialized
|
||||
BIO_R_UNKNOWN_INFO_TYPE:140:unknown info type
|
||||
BIO_R_UNSUPPORTED_IP_FAMILY:146:unsupported ip family
|
||||
BIO_R_UNSUPPORTED_METHOD:121:unsupported method
|
||||
BIO_R_UNSUPPORTED_PROTOCOL_FAMILY:131:unsupported protocol family
|
||||
BIO_R_WRITE_TO_READ_ONLY_BIO:126:write to read only BIO
|
||||
BIO_R_WSASTARTUP:122:WSAStartup
|
||||
BN_R_ARG2_LT_ARG3:100:arg2 lt arg3
|
||||
BN_R_BAD_RECIPROCAL:101:bad reciprocal
|
||||
BN_R_BIGNUM_TOO_LONG:114:bignum too long
|
||||
BN_R_BITS_TOO_SMALL:118:bits too small
|
||||
BN_R_CALLED_WITH_EVEN_MODULUS:102:called with even modulus
|
||||
BN_R_DIV_BY_ZERO:103:div by zero
|
||||
BN_R_ENCODING_ERROR:104:encoding error
|
||||
BN_R_EXPAND_ON_STATIC_BIGNUM_DATA:105:expand on static bignum data
|
||||
BN_R_INPUT_NOT_REDUCED:110:input not reduced
|
||||
BN_R_INVALID_LENGTH:106:invalid length
|
||||
BN_R_INVALID_RANGE:115:invalid range
|
||||
BN_R_INVALID_SHIFT:119:invalid shift
|
||||
BN_R_NOT_A_SQUARE:111:not a square
|
||||
BN_R_NOT_INITIALIZED:107:not initialized
|
||||
BN_R_NO_INVERSE:108:no inverse
|
||||
BN_R_NO_SOLUTION:116:no solution
|
||||
BN_R_NO_SUITABLE_DIGEST:120:no suitable digest
|
||||
BN_R_PRIVATE_KEY_TOO_LARGE:117:private key too large
|
||||
BN_R_P_IS_NOT_PRIME:112:p is not prime
|
||||
BN_R_TOO_MANY_ITERATIONS:113:too many iterations
|
||||
BN_R_TOO_MANY_TEMPORARY_VARIABLES:109:too many temporary variables
|
||||
CMS_R_ADD_SIGNER_ERROR:99:add signer error
|
||||
CMS_R_ATTRIBUTE_ERROR:161:attribute error
|
||||
CMS_R_CERTIFICATE_ALREADY_PRESENT:175:certificate already present
|
||||
CMS_R_CERTIFICATE_HAS_NO_KEYID:160:certificate has no keyid
|
||||
CMS_R_CERTIFICATE_VERIFY_ERROR:100:certificate verify error
|
||||
CMS_R_CIPHER_INITIALISATION_ERROR:101:cipher initialisation error
|
||||
CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR:102:\
|
||||
cipher parameter initialisation error
|
||||
CMS_R_CMS_DATAFINAL_ERROR:103:cms datafinal error
|
||||
CMS_R_CMS_LIB:104:cms lib
|
||||
CMS_R_CONTENTIDENTIFIER_MISMATCH:170:contentidentifier mismatch
|
||||
CMS_R_CONTENT_NOT_FOUND:105:content not found
|
||||
CMS_R_CONTENT_TYPE_MISMATCH:171:content type mismatch
|
||||
CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA:106:content type not compressed data
|
||||
CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA:107:content type not enveloped data
|
||||
CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA:108:content type not signed data
|
||||
CMS_R_CONTENT_VERIFY_ERROR:109:content verify error
|
||||
CMS_R_CTRL_ERROR:110:ctrl error
|
||||
CMS_R_CTRL_FAILURE:111:ctrl failure
|
||||
CMS_R_DECRYPT_ERROR:112:decrypt error
|
||||
CMS_R_ERROR_GETTING_PUBLIC_KEY:113:error getting public key
|
||||
CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE:114:\
|
||||
error reading messagedigest attribute
|
||||
CMS_R_ERROR_SETTING_KEY:115:error setting key
|
||||
CMS_R_ERROR_SETTING_RECIPIENTINFO:116:error setting recipientinfo
|
||||
CMS_R_INVALID_ENCRYPTED_KEY_LENGTH:117:invalid encrypted key length
|
||||
CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER:176:invalid key encryption parameter
|
||||
CMS_R_INVALID_KEY_LENGTH:118:invalid key length
|
||||
CMS_R_MD_BIO_INIT_ERROR:119:md bio init error
|
||||
CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH:120:\
|
||||
messagedigest attribute wrong length
|
||||
CMS_R_MESSAGEDIGEST_WRONG_LENGTH:121:messagedigest wrong length
|
||||
CMS_R_MSGSIGDIGEST_ERROR:172:msgsigdigest error
|
||||
CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE:162:msgsigdigest verification failure
|
||||
CMS_R_MSGSIGDIGEST_WRONG_LENGTH:163:msgsigdigest wrong length
|
||||
CMS_R_NEED_ONE_SIGNER:164:need one signer
|
||||
CMS_R_NOT_A_SIGNED_RECEIPT:165:not a signed receipt
|
||||
CMS_R_NOT_ENCRYPTED_DATA:122:not encrypted data
|
||||
CMS_R_NOT_KEK:123:not kek
|
||||
CMS_R_NOT_KEY_AGREEMENT:181:not key agreement
|
||||
CMS_R_NOT_KEY_TRANSPORT:124:not key transport
|
||||
CMS_R_NOT_PWRI:177:not pwri
|
||||
CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE:125:not supported for this key type
|
||||
CMS_R_NO_CIPHER:126:no cipher
|
||||
CMS_R_NO_CONTENT:127:no content
|
||||
CMS_R_NO_CONTENT_TYPE:173:no content type
|
||||
CMS_R_NO_DEFAULT_DIGEST:128:no default digest
|
||||
CMS_R_NO_DIGEST_SET:129:no digest set
|
||||
CMS_R_NO_KEY:130:no key
|
||||
CMS_R_NO_KEY_OR_CERT:174:no key or cert
|
||||
CMS_R_NO_MATCHING_DIGEST:131:no matching digest
|
||||
CMS_R_NO_MATCHING_RECIPIENT:132:no matching recipient
|
||||
CMS_R_NO_MATCHING_SIGNATURE:166:no matching signature
|
||||
CMS_R_NO_MSGSIGDIGEST:167:no msgsigdigest
|
||||
CMS_R_NO_PASSWORD:178:no password
|
||||
CMS_R_NO_PRIVATE_KEY:133:no private key
|
||||
CMS_R_NO_PUBLIC_KEY:134:no public key
|
||||
CMS_R_NO_RECEIPT_REQUEST:168:no receipt request
|
||||
CMS_R_NO_SIGNERS:135:no signers
|
||||
CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:136:\
|
||||
private key does not match certificate
|
||||
CMS_R_RECEIPT_DECODE_ERROR:169:receipt decode error
|
||||
CMS_R_RECIPIENT_ERROR:137:recipient error
|
||||
CMS_R_SIGNER_CERTIFICATE_NOT_FOUND:138:signer certificate not found
|
||||
CMS_R_SIGNFINAL_ERROR:139:signfinal error
|
||||
CMS_R_SMIME_TEXT_ERROR:140:smime text error
|
||||
CMS_R_STORE_INIT_ERROR:141:store init error
|
||||
CMS_R_TYPE_NOT_COMPRESSED_DATA:142:type not compressed data
|
||||
CMS_R_TYPE_NOT_DATA:143:type not data
|
||||
CMS_R_TYPE_NOT_DIGESTED_DATA:144:type not digested data
|
||||
CMS_R_TYPE_NOT_ENCRYPTED_DATA:145:type not encrypted data
|
||||
CMS_R_TYPE_NOT_ENVELOPED_DATA:146:type not enveloped data
|
||||
CMS_R_UNABLE_TO_FINALIZE_CONTEXT:147:unable to finalize context
|
||||
CMS_R_UNKNOWN_CIPHER:148:unknown cipher
|
||||
CMS_R_UNKNOWN_DIGEST_ALGORITHM:149:unknown digest algorithm
|
||||
CMS_R_UNKNOWN_ID:150:unknown id
|
||||
CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM:151:unsupported compression algorithm
|
||||
CMS_R_UNSUPPORTED_CONTENT_TYPE:152:unsupported content type
|
||||
CMS_R_UNSUPPORTED_KEK_ALGORITHM:153:unsupported kek algorithm
|
||||
CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM:179:\
|
||||
unsupported key encryption algorithm
|
||||
CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE:155:unsupported recipientinfo type
|
||||
CMS_R_UNSUPPORTED_RECIPIENT_TYPE:154:unsupported recipient type
|
||||
CMS_R_UNSUPPORTED_TYPE:156:unsupported type
|
||||
CMS_R_UNWRAP_ERROR:157:unwrap error
|
||||
CMS_R_UNWRAP_FAILURE:180:unwrap failure
|
||||
CMS_R_VERIFICATION_FAILURE:158:verification failure
|
||||
CMS_R_WRAP_ERROR:159:wrap error
|
||||
COMP_R_ZLIB_DEFLATE_ERROR:99:zlib deflate error
|
||||
COMP_R_ZLIB_INFLATE_ERROR:100:zlib inflate error
|
||||
COMP_R_ZLIB_NOT_SUPPORTED:101:zlib not supported
|
||||
CONF_R_ERROR_LOADING_DSO:110:error loading dso
|
||||
CONF_R_LIST_CANNOT_BE_NULL:115:list cannot be null
|
||||
CONF_R_MISSING_CLOSE_SQUARE_BRACKET:100:missing close square bracket
|
||||
CONF_R_MISSING_EQUAL_SIGN:101:missing equal sign
|
||||
CONF_R_MISSING_INIT_FUNCTION:112:missing init function
|
||||
CONF_R_MODULE_INITIALIZATION_ERROR:109:module initialization error
|
||||
CONF_R_NO_CLOSE_BRACE:102:no close brace
|
||||
CONF_R_NO_CONF:105:no conf
|
||||
CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE:106:no conf or environment variable
|
||||
CONF_R_NO_SECTION:107:no section
|
||||
CONF_R_NO_SUCH_FILE:114:no such file
|
||||
CONF_R_NO_VALUE:108:no value
|
||||
CONF_R_NUMBER_TOO_LARGE:121:number too large
|
||||
CONF_R_RECURSIVE_DIRECTORY_INCLUDE:111:recursive directory include
|
||||
CONF_R_SSL_COMMAND_SECTION_EMPTY:117:ssl command section empty
|
||||
CONF_R_SSL_COMMAND_SECTION_NOT_FOUND:118:ssl command section not found
|
||||
CONF_R_SSL_SECTION_EMPTY:119:ssl section empty
|
||||
CONF_R_SSL_SECTION_NOT_FOUND:120:ssl section not found
|
||||
CONF_R_UNABLE_TO_CREATE_NEW_SECTION:103:unable to create new section
|
||||
CONF_R_UNKNOWN_MODULE_NAME:113:unknown module name
|
||||
CONF_R_VARIABLE_EXPANSION_TOO_LONG:116:variable expansion too long
|
||||
CONF_R_VARIABLE_HAS_NO_VALUE:104:variable has no value
|
||||
CRMF_R_BAD_PBM_ITERATIONCOUNT:100:bad pbm iterationcount
|
||||
CRMF_R_CRMFERROR:102:crmferror
|
||||
CRMF_R_ERROR:103:error
|
||||
CRMF_R_ERROR_DECODING_CERTIFICATE:104:error decoding certificate
|
||||
CRMF_R_ERROR_DECRYPTING_CERTIFICATE:105:error decrypting certificate
|
||||
CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY:106:error decrypting symmetric key
|
||||
CRMF_R_FAILURE_OBTAINING_RANDOM:107:failure obtaining random
|
||||
CRMF_R_ITERATIONCOUNT_BELOW_100:108:iterationcount below 100
|
||||
CRMF_R_MALFORMED_IV:101:malformed iv
|
||||
CRMF_R_NULL_ARGUMENT:109:null argument
|
||||
CRMF_R_SETTING_MAC_ALGOR_FAILURE:110:setting mac algor failure
|
||||
CRMF_R_SETTING_OWF_ALGOR_FAILURE:111:setting owf algor failure
|
||||
CRMF_R_UNSUPPORTED_ALGORITHM:112:unsupported algorithm
|
||||
CRMF_R_UNSUPPORTED_ALG_FOR_POPSIGNINGKEY:113:unsupported alg for popsigningkey
|
||||
CRMF_R_UNSUPPORTED_CIPHER:114:unsupported cipher
|
||||
CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO:115:\
|
||||
unsupported method for creating popo
|
||||
CRMF_R_UNSUPPORTED_POPO_METHOD:116:unsupported popo method
|
||||
CRMF_R_UNSUPPORTED_POPO_NOT_ACCEPTED:117:unsupported popo not accepted
|
||||
CRYPTO_R_FIPS_MODE_NOT_SUPPORTED:101:fips mode not supported
|
||||
CRYPTO_R_ILLEGAL_HEX_DIGIT:102:illegal hex digit
|
||||
CRYPTO_R_INSUFFICIENT_DATA_SPACE:106:insufficient data space
|
||||
CRYPTO_R_INSUFFICIENT_PARAM_SIZE:107:insufficient param size
|
||||
CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE:108:insufficient secure data space
|
||||
CRYPTO_R_INVALID_NULL_ARGUMENT:109:invalid null argument
|
||||
CRYPTO_R_INVALID_OSSL_PARAM_TYPE:110:invalid ossl param type
|
||||
CRYPTO_R_ODD_NUMBER_OF_DIGITS:103:odd number of digits
|
||||
CRYPTO_R_PROVIDER_ALREADY_EXISTS:104:provider already exists
|
||||
CRYPTO_R_PROVIDER_SECTION_ERROR:105:provider section error
|
||||
CRYPTO_R_SECURE_MALLOC_FAILURE:111:secure malloc failure
|
||||
CRYPTO_R_STRING_TOO_LONG:112:string too long
|
||||
CRYPTO_R_TOO_MANY_BYTES:113:too many bytes
|
||||
CRYPTO_R_TOO_MANY_RECORDS:114:too many records
|
||||
CRYPTO_R_TOO_SMALL_BUFFER:116:too small buffer
|
||||
CRYPTO_R_ZERO_LENGTH_NUMBER:115:zero length number
|
||||
CT_R_BASE64_DECODE_ERROR:108:base64 decode error
|
||||
CT_R_INVALID_LOG_ID_LENGTH:100:invalid log id length
|
||||
CT_R_LOG_CONF_INVALID:109:log conf invalid
|
||||
CT_R_LOG_CONF_INVALID_KEY:110:log conf invalid key
|
||||
CT_R_LOG_CONF_MISSING_DESCRIPTION:111:log conf missing description
|
||||
CT_R_LOG_CONF_MISSING_KEY:112:log conf missing key
|
||||
CT_R_LOG_KEY_INVALID:113:log key invalid
|
||||
CT_R_SCT_FUTURE_TIMESTAMP:116:sct future timestamp
|
||||
CT_R_SCT_INVALID:104:sct invalid
|
||||
CT_R_SCT_INVALID_SIGNATURE:107:sct invalid signature
|
||||
CT_R_SCT_LIST_INVALID:105:sct list invalid
|
||||
CT_R_SCT_LOG_ID_MISMATCH:114:sct log id mismatch
|
||||
CT_R_SCT_NOT_SET:106:sct not set
|
||||
CT_R_SCT_UNSUPPORTED_VERSION:115:sct unsupported version
|
||||
CT_R_UNRECOGNIZED_SIGNATURE_NID:101:unrecognized signature nid
|
||||
CT_R_UNSUPPORTED_ENTRY_TYPE:102:unsupported entry type
|
||||
CT_R_UNSUPPORTED_VERSION:103:unsupported version
|
||||
DH_R_BAD_GENERATOR:101:bad generator
|
||||
DH_R_BN_DECODE_ERROR:109:bn decode error
|
||||
DH_R_BN_ERROR:106:bn error
|
||||
DH_R_CHECK_INVALID_J_VALUE:115:check invalid j value
|
||||
DH_R_CHECK_INVALID_Q_VALUE:116:check invalid q value
|
||||
DH_R_CHECK_PUBKEY_INVALID:122:check pubkey invalid
|
||||
DH_R_CHECK_PUBKEY_TOO_LARGE:123:check pubkey too large
|
||||
DH_R_CHECK_PUBKEY_TOO_SMALL:124:check pubkey too small
|
||||
DH_R_CHECK_P_NOT_PRIME:117:check p not prime
|
||||
DH_R_CHECK_P_NOT_SAFE_PRIME:118:check p not safe prime
|
||||
DH_R_CHECK_Q_NOT_PRIME:119:check q not prime
|
||||
DH_R_DECODE_ERROR:104:decode error
|
||||
DH_R_INVALID_PARAMETER_NAME:110:invalid parameter name
|
||||
DH_R_INVALID_PARAMETER_NID:114:invalid parameter nid
|
||||
DH_R_INVALID_PUBKEY:102:invalid public key
|
||||
DH_R_KDF_PARAMETER_ERROR:112:kdf parameter error
|
||||
DH_R_KEYS_NOT_SET:108:keys not set
|
||||
DH_R_MISSING_PUBKEY:125:missing pubkey
|
||||
DH_R_MODULUS_TOO_LARGE:103:modulus too large
|
||||
DH_R_MODULUS_TOO_SMALL:126:modulus too small
|
||||
DH_R_NOT_SUITABLE_GENERATOR:120:not suitable generator
|
||||
DH_R_NO_PARAMETERS_SET:107:no parameters set
|
||||
DH_R_NO_PRIVATE_VALUE:100:no private value
|
||||
DH_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error
|
||||
DH_R_PEER_KEY_ERROR:111:peer key error
|
||||
DH_R_SHARED_INFO_ERROR:113:shared info error
|
||||
DH_R_UNABLE_TO_CHECK_GENERATOR:121:unable to check generator
|
||||
DSA_R_BAD_Q_VALUE:102:bad q value
|
||||
DSA_R_BN_DECODE_ERROR:108:bn decode error
|
||||
DSA_R_BN_ERROR:109:bn error
|
||||
DSA_R_DECODE_ERROR:104:decode error
|
||||
DSA_R_INVALID_DIGEST_TYPE:106:invalid digest type
|
||||
DSA_R_INVALID_PARAMETERS:112:invalid parameters
|
||||
DSA_R_MISSING_PARAMETERS:101:missing parameters
|
||||
DSA_R_MISSING_PRIVATE_KEY:111:missing private key
|
||||
DSA_R_MODULUS_TOO_LARGE:103:modulus too large
|
||||
DSA_R_NO_PARAMETERS_SET:107:no parameters set
|
||||
DSA_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error
|
||||
DSA_R_Q_NOT_PRIME:113:q not prime
|
||||
DSA_R_SEED_LEN_SMALL:110:seed_len is less than the length of q
|
||||
DSO_R_CTRL_FAILED:100:control command failed
|
||||
DSO_R_DSO_ALREADY_LOADED:110:dso already loaded
|
||||
DSO_R_EMPTY_FILE_STRUCTURE:113:empty file structure
|
||||
DSO_R_FAILURE:114:failure
|
||||
DSO_R_FILENAME_TOO_BIG:101:filename too big
|
||||
DSO_R_FINISH_FAILED:102:cleanup method function failed
|
||||
DSO_R_INCORRECT_FILE_SYNTAX:115:incorrect file syntax
|
||||
DSO_R_LOAD_FAILED:103:could not load the shared library
|
||||
DSO_R_NAME_TRANSLATION_FAILED:109:name translation failed
|
||||
DSO_R_NO_FILENAME:111:no filename
|
||||
DSO_R_NULL_HANDLE:104:a null shared library handle was used
|
||||
DSO_R_SET_FILENAME_FAILED:112:set filename failed
|
||||
DSO_R_STACK_ERROR:105:the meth_data stack is corrupt
|
||||
DSO_R_SYM_FAILURE:106:could not bind to the requested symbol name
|
||||
DSO_R_UNLOAD_FAILED:107:could not unload the shared library
|
||||
DSO_R_UNSUPPORTED:108:functionality not supported
|
||||
EC_R_ASN1_ERROR:115:asn1 error
|
||||
EC_R_BAD_SIGNATURE:156:bad signature
|
||||
EC_R_BIGNUM_OUT_OF_RANGE:144:bignum out of range
|
||||
EC_R_BUFFER_TOO_SMALL:100:buffer too small
|
||||
EC_R_CANNOT_INVERT:165:cannot invert
|
||||
EC_R_COORDINATES_OUT_OF_RANGE:146:coordinates out of range
|
||||
EC_R_CURVE_DOES_NOT_SUPPORT_ECDH:160:curve does not support ecdh
|
||||
EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA:170:curve does not support ecdsa
|
||||
EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING:159:curve does not support signing
|
||||
EC_R_D2I_ECPKPARAMETERS_FAILURE:117:d2i ecpkparameters failure
|
||||
EC_R_DECODE_ERROR:142:decode error
|
||||
EC_R_DISCRIMINANT_IS_ZERO:118:discriminant is zero
|
||||
EC_R_EC_GROUP_NEW_BY_NAME_FAILURE:119:ec group new by name failure
|
||||
EC_R_FIELD_TOO_LARGE:143:field too large
|
||||
EC_R_GF2M_NOT_SUPPORTED:147:gf2m not supported
|
||||
EC_R_GROUP2PKPARAMETERS_FAILURE:120:group2pkparameters failure
|
||||
EC_R_I2D_ECPKPARAMETERS_FAILURE:121:i2d ecpkparameters failure
|
||||
EC_R_INCOMPATIBLE_OBJECTS:101:incompatible objects
|
||||
EC_R_INVALID_ARGUMENT:112:invalid argument
|
||||
EC_R_INVALID_COMPRESSED_POINT:110:invalid compressed point
|
||||
EC_R_INVALID_COMPRESSION_BIT:109:invalid compression bit
|
||||
EC_R_INVALID_CURVE:141:invalid curve
|
||||
EC_R_INVALID_DIGEST:151:invalid digest
|
||||
EC_R_INVALID_DIGEST_TYPE:138:invalid digest type
|
||||
EC_R_INVALID_ENCODING:102:invalid encoding
|
||||
EC_R_INVALID_FIELD:103:invalid field
|
||||
EC_R_INVALID_FORM:104:invalid form
|
||||
EC_R_INVALID_GROUP_ORDER:122:invalid group order
|
||||
EC_R_INVALID_KEY:116:invalid key
|
||||
EC_R_INVALID_OUTPUT_LENGTH:161:invalid output length
|
||||
EC_R_INVALID_PEER_KEY:133:invalid peer key
|
||||
EC_R_INVALID_PENTANOMIAL_BASIS:132:invalid pentanomial basis
|
||||
EC_R_INVALID_PRIVATE_KEY:123:invalid private key
|
||||
EC_R_INVALID_TRINOMIAL_BASIS:137:invalid trinomial basis
|
||||
EC_R_KDF_PARAMETER_ERROR:148:kdf parameter error
|
||||
EC_R_KEYS_NOT_SET:140:keys not set
|
||||
EC_R_LADDER_POST_FAILURE:136:ladder post failure
|
||||
EC_R_LADDER_PRE_FAILURE:153:ladder pre failure
|
||||
EC_R_LADDER_STEP_FAILURE:162:ladder step failure
|
||||
EC_R_MISSING_PARAMETERS:124:missing parameters
|
||||
EC_R_MISSING_PRIVATE_KEY:125:missing private key
|
||||
EC_R_NEED_NEW_SETUP_VALUES:157:need new setup values
|
||||
EC_R_NOT_A_NIST_PRIME:135:not a NIST prime
|
||||
EC_R_NOT_IMPLEMENTED:126:not implemented
|
||||
EC_R_NOT_INITIALIZED:111:not initialized
|
||||
EC_R_NO_PARAMETERS_SET:139:no parameters set
|
||||
EC_R_NO_PRIVATE_VALUE:154:no private value
|
||||
EC_R_OPERATION_NOT_SUPPORTED:152:operation not supported
|
||||
EC_R_PASSED_NULL_PARAMETER:134:passed null parameter
|
||||
EC_R_PEER_KEY_ERROR:149:peer key error
|
||||
EC_R_PKPARAMETERS2GROUP_FAILURE:127:pkparameters2group failure
|
||||
EC_R_POINT_ARITHMETIC_FAILURE:155:point arithmetic failure
|
||||
EC_R_POINT_AT_INFINITY:106:point at infinity
|
||||
EC_R_POINT_COORDINATES_BLIND_FAILURE:163:point coordinates blind failure
|
||||
EC_R_POINT_IS_NOT_ON_CURVE:107:point is not on curve
|
||||
EC_R_RANDOM_NUMBER_GENERATION_FAILED:158:random number generation failed
|
||||
EC_R_SHARED_INFO_ERROR:150:shared info error
|
||||
EC_R_SLOT_FULL:108:slot full
|
||||
EC_R_UNDEFINED_GENERATOR:113:undefined generator
|
||||
EC_R_UNDEFINED_ORDER:128:undefined order
|
||||
EC_R_UNKNOWN_COFACTOR:164:unknown cofactor
|
||||
EC_R_UNKNOWN_GROUP:129:unknown group
|
||||
EC_R_UNKNOWN_ORDER:114:unknown order
|
||||
EC_R_UNSUPPORTED_FIELD:131:unsupported field
|
||||
EC_R_WRONG_CURVE_PARAMETERS:145:wrong curve parameters
|
||||
EC_R_WRONG_ORDER:130:wrong order
|
||||
ENGINE_R_ALREADY_LOADED:100:already loaded
|
||||
ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER:133:argument is not a number
|
||||
ENGINE_R_CMD_NOT_EXECUTABLE:134:cmd not executable
|
||||
ENGINE_R_COMMAND_TAKES_INPUT:135:command takes input
|
||||
ENGINE_R_COMMAND_TAKES_NO_INPUT:136:command takes no input
|
||||
ENGINE_R_CONFLICTING_ENGINE_ID:103:conflicting engine id
|
||||
ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED:119:ctrl command not implemented
|
||||
ENGINE_R_DSO_FAILURE:104:DSO failure
|
||||
ENGINE_R_DSO_NOT_FOUND:132:dso not found
|
||||
ENGINE_R_ENGINES_SECTION_ERROR:148:engines section error
|
||||
ENGINE_R_ENGINE_CONFIGURATION_ERROR:102:engine configuration error
|
||||
ENGINE_R_ENGINE_IS_NOT_IN_LIST:105:engine is not in the list
|
||||
ENGINE_R_ENGINE_SECTION_ERROR:149:engine section error
|
||||
ENGINE_R_FAILED_LOADING_PRIVATE_KEY:128:failed loading private key
|
||||
ENGINE_R_FAILED_LOADING_PUBLIC_KEY:129:failed loading public key
|
||||
ENGINE_R_FINISH_FAILED:106:finish failed
|
||||
ENGINE_R_ID_OR_NAME_MISSING:108:'id' or 'name' missing
|
||||
ENGINE_R_INIT_FAILED:109:init failed
|
||||
ENGINE_R_INTERNAL_LIST_ERROR:110:internal list error
|
||||
ENGINE_R_INVALID_ARGUMENT:143:invalid argument
|
||||
ENGINE_R_INVALID_CMD_NAME:137:invalid cmd name
|
||||
ENGINE_R_INVALID_CMD_NUMBER:138:invalid cmd number
|
||||
ENGINE_R_INVALID_INIT_VALUE:151:invalid init value
|
||||
ENGINE_R_INVALID_STRING:150:invalid string
|
||||
ENGINE_R_NOT_INITIALISED:117:not initialised
|
||||
ENGINE_R_NOT_LOADED:112:not loaded
|
||||
ENGINE_R_NO_CONTROL_FUNCTION:120:no control function
|
||||
ENGINE_R_NO_INDEX:144:no index
|
||||
ENGINE_R_NO_LOAD_FUNCTION:125:no load function
|
||||
ENGINE_R_NO_REFERENCE:130:no reference
|
||||
ENGINE_R_NO_SUCH_ENGINE:116:no such engine
|
||||
ENGINE_R_UNIMPLEMENTED_CIPHER:146:unimplemented cipher
|
||||
ENGINE_R_UNIMPLEMENTED_DIGEST:147:unimplemented digest
|
||||
ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD:101:unimplemented public key method
|
||||
ENGINE_R_VERSION_INCOMPATIBILITY:145:version incompatibility
|
||||
ESS_R_ESS_SIGNING_CERTIFICATE_ERROR:102:ess signing certificate error
|
||||
ESS_R_ESS_SIGNING_CERT_ADD_ERROR:100:ess signing cert add error
|
||||
ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR:101:ess signing cert v2 add error
|
||||
EVP_R_AES_KEY_SETUP_FAILED:143:aes key setup failed
|
||||
EVP_R_ARIA_KEY_SETUP_FAILED:176:aria key setup failed
|
||||
EVP_R_BAD_DECRYPT:100:bad decrypt
|
||||
EVP_R_BAD_KEY_LENGTH:195:bad key length
|
||||
EVP_R_BUFFER_TOO_SMALL:155:buffer too small
|
||||
EVP_R_CAMELLIA_KEY_SETUP_FAILED:157:camellia key setup failed
|
||||
EVP_R_CANNOT_GET_PARAMETERS:197:cannot get parameters
|
||||
EVP_R_CANNOT_SET_PARAMETERS:198:cannot set parameters
|
||||
EVP_R_CIPHER_NOT_GCM_MODE:184:cipher not gcm mode
|
||||
EVP_R_CIPHER_PARAMETER_ERROR:122:cipher parameter error
|
||||
EVP_R_COMMAND_NOT_SUPPORTED:147:command not supported
|
||||
EVP_R_COPY_ERROR:173:copy error
|
||||
EVP_R_CTRL_NOT_IMPLEMENTED:132:ctrl not implemented
|
||||
EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED:133:ctrl operation not implemented
|
||||
EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH:138:data not multiple of block length
|
||||
EVP_R_DECODE_ERROR:114:decode error
|
||||
EVP_R_DIFFERENT_KEY_TYPES:101:different key types
|
||||
EVP_R_DIFFERENT_PARAMETERS:153:different parameters
|
||||
EVP_R_ERROR_LOADING_SECTION:165:error loading section
|
||||
EVP_R_ERROR_SETTING_FIPS_MODE:166:error setting fips mode
|
||||
EVP_R_EXPECTING_AN_HMAC_KEY:174:expecting an hmac key
|
||||
EVP_R_EXPECTING_AN_RSA_KEY:127:expecting an rsa key
|
||||
EVP_R_EXPECTING_A_DH_KEY:128:expecting a dh key
|
||||
EVP_R_EXPECTING_A_DSA_KEY:129:expecting a dsa key
|
||||
EVP_R_EXPECTING_A_EC_KEY:142:expecting a ec key
|
||||
EVP_R_EXPECTING_A_POLY1305_KEY:164:expecting a poly1305 key
|
||||
EVP_R_EXPECTING_A_SIPHASH_KEY:175:expecting a siphash key
|
||||
EVP_R_FINAL_ERROR:188:final error
|
||||
EVP_R_FIPS_MODE_NOT_SUPPORTED:167:fips mode not supported
|
||||
EVP_R_GET_RAW_KEY_FAILED:182:get raw key failed
|
||||
EVP_R_ILLEGAL_SCRYPT_PARAMETERS:171:illegal scrypt parameters
|
||||
EVP_R_INITIALIZATION_ERROR:134:initialization error
|
||||
EVP_R_INPUT_NOT_INITIALIZED:111:input not initialized
|
||||
EVP_R_INVALID_CUSTOM_LENGTH:185:invalid custom length
|
||||
EVP_R_INVALID_DIGEST:152:invalid digest
|
||||
EVP_R_INVALID_FIPS_MODE:168:invalid fips mode
|
||||
EVP_R_INVALID_IV_LENGTH:194:invalid iv length
|
||||
EVP_R_INVALID_KEY:163:invalid key
|
||||
EVP_R_INVALID_KEY_LENGTH:130:invalid key length
|
||||
EVP_R_INVALID_OPERATION:148:invalid operation
|
||||
EVP_R_INVALID_PROVIDER_FUNCTIONS:193:invalid provider functions
|
||||
EVP_R_INVALID_SALT_LENGTH:186:invalid salt length
|
||||
EVP_R_KEYGEN_FAILURE:120:keygen failure
|
||||
EVP_R_KEY_SETUP_FAILED:180:key setup failed
|
||||
EVP_R_MEMORY_LIMIT_EXCEEDED:172:memory limit exceeded
|
||||
EVP_R_MESSAGE_DIGEST_IS_NULL:159:message digest is null
|
||||
EVP_R_METHOD_NOT_SUPPORTED:144:method not supported
|
||||
EVP_R_MISSING_PARAMETERS:103:missing parameters
|
||||
EVP_R_NOT_ABLE_TO_COPY_CTX:190:not able to copy ctx
|
||||
EVP_R_NOT_XOF_OR_INVALID_LENGTH:178:not XOF or invalid length
|
||||
EVP_R_NO_CIPHER_SET:131:no cipher set
|
||||
EVP_R_NO_DEFAULT_DIGEST:158:no default digest
|
||||
EVP_R_NO_DIGEST_SET:139:no digest set
|
||||
EVP_R_NO_KEYMGMT_AVAILABLE:199:no keymgmt available
|
||||
EVP_R_NO_KEYMGMT_PRESENT:196:no keymgmt present
|
||||
EVP_R_NO_KEY_SET:154:no key set
|
||||
EVP_R_NO_OPERATION_SET:149:no operation set
|
||||
EVP_R_ONLY_ONESHOT_SUPPORTED:177:only oneshot supported
|
||||
EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE:150:\
|
||||
operation not supported for this keytype
|
||||
EVP_R_OPERATON_NOT_INITIALIZED:151:operation not initialized
|
||||
EVP_R_PARAMETER_TOO_LARGE:187:parameter too large
|
||||
EVP_R_PARTIALLY_OVERLAPPING:162:partially overlapping buffers
|
||||
EVP_R_PBKDF2_ERROR:181:pbkdf2 error
|
||||
EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED:179:\
|
||||
pkey application asn1 method already registered
|
||||
EVP_R_PRIVATE_KEY_DECODE_ERROR:145:private key decode error
|
||||
EVP_R_PRIVATE_KEY_ENCODE_ERROR:146:private key encode error
|
||||
EVP_R_PUBLIC_KEY_NOT_RSA:106:public key not rsa
|
||||
EVP_R_TOO_MANY_RECORDS:183:too many records
|
||||
EVP_R_UNKNOWN_CIPHER:160:unknown cipher
|
||||
EVP_R_UNKNOWN_DIGEST:161:unknown digest
|
||||
EVP_R_UNKNOWN_OPTION:169:unknown option
|
||||
EVP_R_UNKNOWN_PBE_ALGORITHM:121:unknown pbe algorithm
|
||||
EVP_R_UNSUPPORTED_ALGORITHM:156:unsupported algorithm
|
||||
EVP_R_UNSUPPORTED_CIPHER:107:unsupported cipher
|
||||
EVP_R_UNSUPPORTED_KEYLENGTH:123:unsupported keylength
|
||||
EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION:124:\
|
||||
unsupported key derivation function
|
||||
EVP_R_UNSUPPORTED_KEY_SIZE:108:unsupported key size
|
||||
EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS:135:unsupported number of rounds
|
||||
EVP_R_UNSUPPORTED_PRF:125:unsupported prf
|
||||
EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM:118:unsupported private key algorithm
|
||||
EVP_R_UNSUPPORTED_SALT_TYPE:126:unsupported salt type
|
||||
EVP_R_UPDATE_ERROR:189:update error
|
||||
EVP_R_WRAP_MODE_NOT_ALLOWED:170:wrap mode not allowed
|
||||
EVP_R_WRONG_FINAL_BLOCK_LENGTH:109:wrong final block length
|
||||
EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE:191:xts data unit is too large
|
||||
EVP_R_XTS_DUPLICATED_KEYS:192:xts duplicated keys
|
||||
KDF_R_BAD_ENCODING:122:bad encoding
|
||||
KDF_R_BAD_LENGTH:123:bad length
|
||||
KDF_R_BOTH_MODE_AND_MODE_INT:127:both mode and mode int
|
||||
KDF_R_INVALID_DIGEST:100:invalid digest
|
||||
KDF_R_INVALID_ITERATION_COUNT:119:invalid iteration count
|
||||
KDF_R_INVALID_KEY_LEN:120:invalid key len
|
||||
KDF_R_INVALID_MAC_TYPE:116:invalid mac type
|
||||
KDF_R_INVALID_MODE:128:invalid mode
|
||||
KDF_R_INVALID_MODE_INT:129:invalid mode int
|
||||
KDF_R_MISSING_CEK_ALG:125:missing cek alg
|
||||
KDF_R_MISSING_ITERATION_COUNT:109:missing iteration count
|
||||
KDF_R_MISSING_KEY:104:missing key
|
||||
KDF_R_MISSING_MESSAGE_DIGEST:105:missing message digest
|
||||
KDF_R_MISSING_PARAMETER:101:missing parameter
|
||||
KDF_R_MISSING_PASS:110:missing pass
|
||||
KDF_R_MISSING_SALT:111:missing salt
|
||||
KDF_R_MISSING_SECRET:107:missing secret
|
||||
KDF_R_MISSING_SEED:106:missing seed
|
||||
KDF_R_MISSING_SESSION_ID:113:missing session id
|
||||
KDF_R_MISSING_TYPE:114:missing type
|
||||
KDF_R_MISSING_XCGHASH:115:missing xcghash
|
||||
KDF_R_NOT_SUPPORTED:118:not supported
|
||||
KDF_R_UNKNOWN_PARAMETER_TYPE:103:unknown parameter type
|
||||
KDF_R_UNSUPPORTED_CEK_ALG:126:unsupported cek alg
|
||||
KDF_R_UNSUPPORTED_MAC_TYPE:117:unsupported mac type
|
||||
KDF_R_VALUE_ERROR:108:value error
|
||||
KDF_R_VALUE_MISSING:102:value missing
|
||||
KDF_R_WRONG_OUTPUT_BUFFER_SIZE:112:wrong output buffer size
|
||||
OBJ_R_OID_EXISTS:102:oid exists
|
||||
OBJ_R_UNKNOWN_NID:101:unknown nid
|
||||
OCSP_R_CERTIFICATE_VERIFY_ERROR:101:certificate verify error
|
||||
OCSP_R_DIGEST_ERR:102:digest err
|
||||
OCSP_R_ERROR_IN_NEXTUPDATE_FIELD:122:error in nextupdate field
|
||||
OCSP_R_ERROR_IN_THISUPDATE_FIELD:123:error in thisupdate field
|
||||
OCSP_R_ERROR_PARSING_URL:121:error parsing url
|
||||
OCSP_R_MISSING_OCSPSIGNING_USAGE:103:missing ocspsigning usage
|
||||
OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE:124:nextupdate before thisupdate
|
||||
OCSP_R_NOT_BASIC_RESPONSE:104:not basic response
|
||||
OCSP_R_NO_CERTIFICATES_IN_CHAIN:105:no certificates in chain
|
||||
OCSP_R_NO_RESPONSE_DATA:108:no response data
|
||||
OCSP_R_NO_REVOKED_TIME:109:no revoked time
|
||||
OCSP_R_NO_SIGNER_KEY:130:no signer key
|
||||
OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:110:\
|
||||
private key does not match certificate
|
||||
OCSP_R_REQUEST_NOT_SIGNED:128:request not signed
|
||||
OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA:111:\
|
||||
response contains no revocation data
|
||||
OCSP_R_ROOT_CA_NOT_TRUSTED:112:root ca not trusted
|
||||
OCSP_R_SERVER_RESPONSE_ERROR:114:server response error
|
||||
OCSP_R_SERVER_RESPONSE_PARSE_ERROR:115:server response parse error
|
||||
OCSP_R_SIGNATURE_FAILURE:117:signature failure
|
||||
OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND:118:signer certificate not found
|
||||
OCSP_R_STATUS_EXPIRED:125:status expired
|
||||
OCSP_R_STATUS_NOT_YET_VALID:126:status not yet valid
|
||||
OCSP_R_STATUS_TOO_OLD:127:status too old
|
||||
OCSP_R_UNKNOWN_MESSAGE_DIGEST:119:unknown message digest
|
||||
OCSP_R_UNKNOWN_NID:120:unknown nid
|
||||
OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE:129:unsupported requestorname type
|
||||
OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE:107:ambiguous content type
|
||||
OSSL_STORE_R_BAD_PASSWORD_READ:115:bad password read
|
||||
OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC:113:error verifying pkcs12 mac
|
||||
OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST:121:\
|
||||
fingerprint size does not match digest
|
||||
OSSL_STORE_R_INVALID_SCHEME:106:invalid scheme
|
||||
OSSL_STORE_R_IS_NOT_A:112:is not a
|
||||
OSSL_STORE_R_LOADER_INCOMPLETE:116:loader incomplete
|
||||
OSSL_STORE_R_LOADING_STARTED:117:loading started
|
||||
OSSL_STORE_R_NOT_A_CERTIFICATE:100:not a certificate
|
||||
OSSL_STORE_R_NOT_A_CRL:101:not a crl
|
||||
OSSL_STORE_R_NOT_A_KEY:102:not a key
|
||||
OSSL_STORE_R_NOT_A_NAME:103:not a name
|
||||
OSSL_STORE_R_NOT_PARAMETERS:104:not parameters
|
||||
OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR:114:passphrase callback error
|
||||
OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE:108:path must be absolute
|
||||
OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES:119:\
|
||||
search only supported for directories
|
||||
OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED:109:\
|
||||
ui process interrupted or cancelled
|
||||
OSSL_STORE_R_UNREGISTERED_SCHEME:105:unregistered scheme
|
||||
OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE:110:unsupported content type
|
||||
OSSL_STORE_R_UNSUPPORTED_OPERATION:118:unsupported operation
|
||||
OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE:120:unsupported search type
|
||||
OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED:111:uri authority unsupported
|
||||
PEM_R_BAD_BASE64_DECODE:100:bad base64 decode
|
||||
PEM_R_BAD_DECRYPT:101:bad decrypt
|
||||
PEM_R_BAD_END_LINE:102:bad end line
|
||||
PEM_R_BAD_IV_CHARS:103:bad iv chars
|
||||
PEM_R_BAD_MAGIC_NUMBER:116:bad magic number
|
||||
PEM_R_BAD_PASSWORD_READ:104:bad password read
|
||||
PEM_R_BAD_VERSION_NUMBER:117:bad version number
|
||||
PEM_R_BIO_WRITE_FAILURE:118:bio write failure
|
||||
PEM_R_CIPHER_IS_NULL:127:cipher is null
|
||||
PEM_R_ERROR_CONVERTING_PRIVATE_KEY:115:error converting private key
|
||||
PEM_R_EXPECTING_PRIVATE_KEY_BLOB:119:expecting private key blob
|
||||
PEM_R_EXPECTING_PUBLIC_KEY_BLOB:120:expecting public key blob
|
||||
PEM_R_HEADER_TOO_LONG:128:header too long
|
||||
PEM_R_INCONSISTENT_HEADER:121:inconsistent header
|
||||
PEM_R_KEYBLOB_HEADER_PARSE_ERROR:122:keyblob header parse error
|
||||
PEM_R_KEYBLOB_TOO_SHORT:123:keyblob too short
|
||||
PEM_R_MISSING_DEK_IV:129:missing dek iv
|
||||
PEM_R_NOT_DEK_INFO:105:not dek info
|
||||
PEM_R_NOT_ENCRYPTED:106:not encrypted
|
||||
PEM_R_NOT_PROC_TYPE:107:not proc type
|
||||
PEM_R_NO_START_LINE:108:no start line
|
||||
PEM_R_PROBLEMS_GETTING_PASSWORD:109:problems getting password
|
||||
PEM_R_PVK_DATA_TOO_SHORT:124:pvk data too short
|
||||
PEM_R_PVK_TOO_SHORT:125:pvk too short
|
||||
PEM_R_READ_KEY:111:read key
|
||||
PEM_R_SHORT_HEADER:112:short header
|
||||
PEM_R_UNEXPECTED_DEK_IV:130:unexpected dek iv
|
||||
PEM_R_UNSUPPORTED_CIPHER:113:unsupported cipher
|
||||
PEM_R_UNSUPPORTED_ENCRYPTION:114:unsupported encryption
|
||||
PEM_R_UNSUPPORTED_KEY_COMPONENTS:126:unsupported key components
|
||||
PKCS12_R_CANT_PACK_STRUCTURE:100:cant pack structure
|
||||
PKCS12_R_CONTENT_TYPE_NOT_DATA:121:content type not data
|
||||
PKCS12_R_DECODE_ERROR:101:decode error
|
||||
PKCS12_R_ENCODE_ERROR:102:encode error
|
||||
PKCS12_R_ENCRYPT_ERROR:103:encrypt error
|
||||
PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE:120:error setting encrypted data type
|
||||
PKCS12_R_INVALID_NULL_ARGUMENT:104:invalid null argument
|
||||
PKCS12_R_INVALID_NULL_PKCS12_POINTER:105:invalid null pkcs12 pointer
|
||||
PKCS12_R_IV_GEN_ERROR:106:iv gen error
|
||||
PKCS12_R_KEY_GEN_ERROR:107:key gen error
|
||||
PKCS12_R_MAC_ABSENT:108:mac absent
|
||||
PKCS12_R_MAC_GENERATION_ERROR:109:mac generation error
|
||||
PKCS12_R_MAC_SETUP_ERROR:110:mac setup error
|
||||
PKCS12_R_MAC_STRING_SET_ERROR:111:mac string set error
|
||||
PKCS12_R_MAC_VERIFY_FAILURE:113:mac verify failure
|
||||
PKCS12_R_PARSE_ERROR:114:parse error
|
||||
PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR:115:pkcs12 algor cipherinit error
|
||||
PKCS12_R_PKCS12_CIPHERFINAL_ERROR:116:pkcs12 cipherfinal error
|
||||
PKCS12_R_PKCS12_PBE_CRYPT_ERROR:117:pkcs12 pbe crypt error
|
||||
PKCS12_R_UNKNOWN_DIGEST_ALGORITHM:118:unknown digest algorithm
|
||||
PKCS12_R_UNSUPPORTED_PKCS12_MODE:119:unsupported pkcs12 mode
|
||||
PKCS7_R_CERTIFICATE_VERIFY_ERROR:117:certificate verify error
|
||||
PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER:144:cipher has no object identifier
|
||||
PKCS7_R_CIPHER_NOT_INITIALIZED:116:cipher not initialized
|
||||
PKCS7_R_CONTENT_AND_DATA_PRESENT:118:content and data present
|
||||
PKCS7_R_CTRL_ERROR:152:ctrl error
|
||||
PKCS7_R_DECRYPT_ERROR:119:decrypt error
|
||||
PKCS7_R_DIGEST_FAILURE:101:digest failure
|
||||
PKCS7_R_ENCRYPTION_CTRL_FAILURE:149:encryption ctrl failure
|
||||
PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE:150:\
|
||||
encryption not supported for this key type
|
||||
PKCS7_R_ERROR_ADDING_RECIPIENT:120:error adding recipient
|
||||
PKCS7_R_ERROR_SETTING_CIPHER:121:error setting cipher
|
||||
PKCS7_R_INVALID_NULL_POINTER:143:invalid null pointer
|
||||
PKCS7_R_INVALID_SIGNED_DATA_TYPE:155:invalid signed data type
|
||||
PKCS7_R_NO_CONTENT:122:no content
|
||||
PKCS7_R_NO_DEFAULT_DIGEST:151:no default digest
|
||||
PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND:154:no matching digest type found
|
||||
PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE:115:no recipient matches certificate
|
||||
PKCS7_R_NO_SIGNATURES_ON_DATA:123:no signatures on data
|
||||
PKCS7_R_NO_SIGNERS:142:no signers
|
||||
PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE:104:\
|
||||
operation not supported on this type
|
||||
PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR:124:pkcs7 add signature error
|
||||
PKCS7_R_PKCS7_ADD_SIGNER_ERROR:153:pkcs7 add signer error
|
||||
PKCS7_R_PKCS7_DATASIGN:145:pkcs7 datasign
|
||||
PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:127:\
|
||||
private key does not match certificate
|
||||
PKCS7_R_SIGNATURE_FAILURE:105:signature failure
|
||||
PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND:128:signer certificate not found
|
||||
PKCS7_R_SIGNING_CTRL_FAILURE:147:signing ctrl failure
|
||||
PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE:148:\
|
||||
signing not supported for this key type
|
||||
PKCS7_R_SMIME_TEXT_ERROR:129:smime text error
|
||||
PKCS7_R_UNABLE_TO_FIND_CERTIFICATE:106:unable to find certificate
|
||||
PKCS7_R_UNABLE_TO_FIND_MEM_BIO:107:unable to find mem bio
|
||||
PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST:108:unable to find message digest
|
||||
PKCS7_R_UNKNOWN_DIGEST_TYPE:109:unknown digest type
|
||||
PKCS7_R_UNKNOWN_OPERATION:110:unknown operation
|
||||
PKCS7_R_UNSUPPORTED_CIPHER_TYPE:111:unsupported cipher type
|
||||
PKCS7_R_UNSUPPORTED_CONTENT_TYPE:112:unsupported content type
|
||||
PKCS7_R_WRONG_CONTENT_TYPE:113:wrong content type
|
||||
PKCS7_R_WRONG_PKCS7_TYPE:114:wrong pkcs7 type
|
||||
PROP_R_NAME_TOO_LONG:100:name too long
|
||||
PROP_R_NOT_AN_ASCII_CHARACTER:101:not an ascii character
|
||||
PROP_R_NOT_AN_HEXADECIMAL_DIGIT:102:not an hexadecimal digit
|
||||
PROP_R_NOT_AN_IDENTIFIER:103:not an identifier
|
||||
PROP_R_NOT_AN_OCTAL_DIGIT:104:not an octal digit
|
||||
PROP_R_NOT_A_DECIMAL_DIGIT:105:not a decimal digit
|
||||
PROP_R_NO_MATCHING_STRING_DELIMETER:106:no matching string delimeter
|
||||
PROP_R_NO_VALUE:107:no value
|
||||
PROP_R_PARSE_FAILED:108:parse failed
|
||||
PROP_R_STRING_TOO_LONG:109:string too long
|
||||
PROP_R_TRAILING_CHARACTERS:110:trailing characters
|
||||
PROV_R_AES_KEY_SETUP_FAILED:101:aes key setup failed
|
||||
PROV_R_BAD_DECRYPT:100:bad decrypt
|
||||
PROV_R_BAD_ENCODING:141:bad encoding
|
||||
PROV_R_BAD_LENGTH:142:bad length
|
||||
PROV_R_BOTH_MODE_AND_MODE_INT:127:both mode and mode int
|
||||
PROV_R_CIPHER_OPERATION_FAILED:102:cipher operation failed
|
||||
PROV_R_FAILED_TO_GENERATE_KEY:121:failed to generate key
|
||||
PROV_R_FAILED_TO_GET_PARAMETER:103:failed to get parameter
|
||||
PROV_R_FAILED_TO_SET_PARAMETER:104:failed to set parameter
|
||||
PROV_R_INAVLID_UKM_LENGTH:146:inavlid ukm length
|
||||
PROV_R_INVALID_AAD:108:invalid aad
|
||||
PROV_R_INVALID_CUSTOM_LENGTH:111:invalid custom length
|
||||
PROV_R_INVALID_DATA:115:invalid data
|
||||
PROV_R_INVALID_DIGEST:122:invalid digest
|
||||
PROV_R_INVALID_ITERATION_COUNT:123:invalid iteration count
|
||||
PROV_R_INVALID_IVLEN:116:invalid ivlen
|
||||
PROV_R_INVALID_IV_LENGTH:109:invalid iv length
|
||||
PROV_R_INVALID_KEYLEN:117:invalid keylen
|
||||
PROV_R_INVALID_KEY_LEN:124:invalid key len
|
||||
PROV_R_INVALID_KEY_LENGTH:105:invalid key length
|
||||
PROV_R_INVALID_MODE:125:invalid mode
|
||||
PROV_R_INVALID_MODE_INT:126:invalid mode int
|
||||
PROV_R_INVALID_SALT_LENGTH:112:invalid salt length
|
||||
PROV_R_INVALID_TAG:110:invalid tag
|
||||
PROV_R_INVALID_TAGLEN:118:invalid taglen
|
||||
PROV_R_MISSING_CEK_ALG:144:missing cek alg
|
||||
PROV_R_MISSING_KEY:128:missing key
|
||||
PROV_R_MISSING_MESSAGE_DIGEST:129:missing message digest
|
||||
PROV_R_MISSING_PASS:130:missing pass
|
||||
PROV_R_MISSING_SALT:131:missing salt
|
||||
PROV_R_MISSING_SECRET:132:missing secret
|
||||
PROV_R_MISSING_SEED:140:missing seed
|
||||
PROV_R_MISSING_SESSION_ID:133:missing session id
|
||||
PROV_R_MISSING_TYPE:134:missing type
|
||||
PROV_R_MISSING_XCGHASH:135:missing xcghash
|
||||
PROV_R_NOT_SUPPORTED:136:not supported
|
||||
PROV_R_NOT_XOF_OR_INVALID_LENGTH:113:not xof or invalid length
|
||||
PROV_R_NO_KEY_SET:114:no key set
|
||||
PROV_R_OUTPUT_BUFFER_TOO_SMALL:106:output buffer too small
|
||||
PROV_R_TAG_NOTSET:119:tag notset
|
||||
PROV_R_TAG_NOT_NEEDED:120:tag not needed
|
||||
PROV_R_UNABLE_TO_LOAD_SHA1:143:unable to load sha1
|
||||
PROV_R_UNABLE_TO_LOAD_SHA256:147:unable to load sha256
|
||||
PROV_R_UNSUPPORTED_CEK_ALG:145:unsupported cek alg
|
||||
PROV_R_UNSUPPORTED_MAC_TYPE:137:unsupported mac type
|
||||
PROV_R_VALUE_ERROR:138:value error
|
||||
PROV_R_WRONG_FINAL_BLOCK_LENGTH:107:wrong final block length
|
||||
PROV_R_WRONG_OUTPUT_BUFFER_SIZE:139:wrong output buffer size
|
||||
PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE:148:xts data unit is too large
|
||||
PROV_R_XTS_DUPLICATED_KEYS:149:xts duplicated keys
|
||||
RAND_R_ADDITIONAL_INPUT_TOO_LONG:102:additional input too long
|
||||
RAND_R_ALREADY_INSTANTIATED:103:already instantiated
|
||||
RAND_R_ARGUMENT_OUT_OF_RANGE:105:argument out of range
|
||||
RAND_R_CANNOT_OPEN_FILE:121:Cannot open file
|
||||
RAND_R_DERIVATION_FUNCTION_MANDATORY_FOR_FIPS:137:\
|
||||
derivation function mandatory for fips
|
||||
RAND_R_DRBG_ALREADY_INITIALIZED:129:drbg already initialized
|
||||
RAND_R_DRBG_NOT_INITIALISED:104:drbg not initialised
|
||||
RAND_R_ENTROPY_INPUT_TOO_LONG:106:entropy input too long
|
||||
RAND_R_ENTROPY_OUT_OF_RANGE:124:entropy out of range
|
||||
RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED:127:error entropy pool was ignored
|
||||
RAND_R_ERROR_INITIALISING_DRBG:107:error initialising drbg
|
||||
RAND_R_ERROR_INSTANTIATING_DRBG:108:error instantiating drbg
|
||||
RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT:109:error retrieving additional input
|
||||
RAND_R_ERROR_RETRIEVING_ENTROPY:110:error retrieving entropy
|
||||
RAND_R_ERROR_RETRIEVING_NONCE:111:error retrieving nonce
|
||||
RAND_R_FAILED_TO_CREATE_LOCK:126:failed to create lock
|
||||
RAND_R_FUNC_NOT_IMPLEMENTED:101:Function not implemented
|
||||
RAND_R_FWRITE_ERROR:123:Error writing file
|
||||
RAND_R_GENERATE_ERROR:112:generate error
|
||||
RAND_R_INTERNAL_ERROR:113:internal error
|
||||
RAND_R_IN_ERROR_STATE:114:in error state
|
||||
RAND_R_NOT_A_REGULAR_FILE:122:Not a regular file
|
||||
RAND_R_NOT_INSTANTIATED:115:not instantiated
|
||||
RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED:128:no drbg implementation selected
|
||||
RAND_R_PARENT_LOCKING_NOT_ENABLED:130:parent locking not enabled
|
||||
RAND_R_PARENT_STRENGTH_TOO_WEAK:131:parent strength too weak
|
||||
RAND_R_PERSONALISATION_STRING_TOO_LONG:116:personalisation string too long
|
||||
RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED:133:\
|
||||
prediction resistance not supported
|
||||
RAND_R_PRNG_NOT_SEEDED:100:PRNG not seeded
|
||||
RAND_R_RANDOM_POOL_OVERFLOW:125:random pool overflow
|
||||
RAND_R_RANDOM_POOL_UNDERFLOW:134:random pool underflow
|
||||
RAND_R_REQUEST_TOO_LARGE_FOR_DRBG:117:request too large for drbg
|
||||
RAND_R_RESEED_ERROR:118:reseed error
|
||||
RAND_R_SELFTEST_FAILURE:119:selftest failure
|
||||
RAND_R_TOO_LITTLE_NONCE_REQUESTED:135:too little nonce requested
|
||||
RAND_R_TOO_MUCH_NONCE_REQUESTED:136:too much nonce requested
|
||||
RAND_R_UNSUPPORTED_DRBG_FLAGS:132:unsupported drbg flags
|
||||
RAND_R_UNSUPPORTED_DRBG_TYPE:120:unsupported drbg type
|
||||
RSA_R_ALGORITHM_MISMATCH:100:algorithm mismatch
|
||||
RSA_R_BAD_E_VALUE:101:bad e value
|
||||
RSA_R_BAD_FIXED_HEADER_DECRYPT:102:bad fixed header decrypt
|
||||
RSA_R_BAD_PAD_BYTE_COUNT:103:bad pad byte count
|
||||
RSA_R_BAD_SIGNATURE:104:bad signature
|
||||
RSA_R_BLOCK_TYPE_IS_NOT_01:106:block type is not 01
|
||||
RSA_R_BLOCK_TYPE_IS_NOT_02:107:block type is not 02
|
||||
RSA_R_DATA_GREATER_THAN_MOD_LEN:108:data greater than mod len
|
||||
RSA_R_DATA_TOO_LARGE:109:data too large
|
||||
RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE:110:data too large for key size
|
||||
RSA_R_DATA_TOO_LARGE_FOR_MODULUS:132:data too large for modulus
|
||||
RSA_R_DATA_TOO_SMALL:111:data too small
|
||||
RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE:122:data too small for key size
|
||||
RSA_R_DIGEST_DOES_NOT_MATCH:158:digest does not match
|
||||
RSA_R_DIGEST_NOT_ALLOWED:145:digest not allowed
|
||||
RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY:112:digest too big for rsa key
|
||||
RSA_R_DMP1_NOT_CONGRUENT_TO_D:124:dmp1 not congruent to d
|
||||
RSA_R_DMQ1_NOT_CONGRUENT_TO_D:125:dmq1 not congruent to d
|
||||
RSA_R_D_E_NOT_CONGRUENT_TO_1:123:d e not congruent to 1
|
||||
RSA_R_FIRST_OCTET_INVALID:133:first octet invalid
|
||||
RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE:144:\
|
||||
illegal or unsupported padding mode
|
||||
RSA_R_INVALID_DIGEST:157:invalid digest
|
||||
RSA_R_INVALID_DIGEST_LENGTH:143:invalid digest length
|
||||
RSA_R_INVALID_HEADER:137:invalid header
|
||||
RSA_R_INVALID_KEYPAIR:171:invalid keypair
|
||||
RSA_R_INVALID_KEY_LENGTH:173:invalid key length
|
||||
RSA_R_INVALID_LABEL:160:invalid label
|
||||
RSA_R_INVALID_MESSAGE_LENGTH:131:invalid message length
|
||||
RSA_R_INVALID_MGF1_MD:156:invalid mgf1 md
|
||||
RSA_R_INVALID_MODULUS:174:invalid modulus
|
||||
RSA_R_INVALID_MULTI_PRIME_KEY:167:invalid multi prime key
|
||||
RSA_R_INVALID_OAEP_PARAMETERS:161:invalid oaep parameters
|
||||
RSA_R_INVALID_PADDING:138:invalid padding
|
||||
RSA_R_INVALID_PADDING_MODE:141:invalid padding mode
|
||||
RSA_R_INVALID_PSS_PARAMETERS:149:invalid pss parameters
|
||||
RSA_R_INVALID_PSS_SALTLEN:146:invalid pss saltlen
|
||||
RSA_R_INVALID_REQUEST:175:invalid request
|
||||
RSA_R_INVALID_SALT_LENGTH:150:invalid salt length
|
||||
RSA_R_INVALID_STRENGTH:176:invalid strength
|
||||
RSA_R_INVALID_TRAILER:139:invalid trailer
|
||||
RSA_R_INVALID_X931_DIGEST:142:invalid x931 digest
|
||||
RSA_R_IQMP_NOT_INVERSE_OF_Q:126:iqmp not inverse of q
|
||||
RSA_R_KEY_PRIME_NUM_INVALID:165:key prime num invalid
|
||||
RSA_R_KEY_SIZE_TOO_SMALL:120:key size too small
|
||||
RSA_R_LAST_OCTET_INVALID:134:last octet invalid
|
||||
RSA_R_MGF1_DIGEST_NOT_ALLOWED:152:mgf1 digest not allowed
|
||||
RSA_R_MISSING_PRIVATE_KEY:179:missing private key
|
||||
RSA_R_MODULUS_TOO_LARGE:105:modulus too large
|
||||
RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R:168:mp coefficient not inverse of r
|
||||
RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D:169:mp exponent not congruent to d
|
||||
RSA_R_MP_R_NOT_PRIME:170:mp r not prime
|
||||
RSA_R_NO_PUBLIC_EXPONENT:140:no public exponent
|
||||
RSA_R_NULL_BEFORE_BLOCK_MISSING:113:null before block missing
|
||||
RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES:172:n does not equal product of primes
|
||||
RSA_R_N_DOES_NOT_EQUAL_P_Q:127:n does not equal p q
|
||||
RSA_R_OAEP_DECODING_ERROR:121:oaep decoding error
|
||||
RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE:148:\
|
||||
operation not supported for this keytype
|
||||
RSA_R_PADDING_CHECK_FAILED:114:padding check failed
|
||||
RSA_R_PAIRWISE_TEST_FAILURE:177:pairwise test failure
|
||||
RSA_R_PKCS_DECODING_ERROR:159:pkcs decoding error
|
||||
RSA_R_PSS_SALTLEN_TOO_SMALL:164:pss saltlen too small
|
||||
RSA_R_PUB_EXPONENT_OUT_OF_RANGE:178:pub exponent out of range
|
||||
RSA_R_P_NOT_PRIME:128:p not prime
|
||||
RSA_R_Q_NOT_PRIME:129:q not prime
|
||||
RSA_R_RSA_OPERATIONS_NOT_SUPPORTED:130:rsa operations not supported
|
||||
RSA_R_SLEN_CHECK_FAILED:136:salt length check failed
|
||||
RSA_R_SLEN_RECOVERY_FAILED:135:salt length recovery failed
|
||||
RSA_R_SSLV3_ROLLBACK_ATTACK:115:sslv3 rollback attack
|
||||
RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD:116:\
|
||||
the asn1 object identifier is not known for this md
|
||||
RSA_R_UNKNOWN_ALGORITHM_TYPE:117:unknown algorithm type
|
||||
RSA_R_UNKNOWN_DIGEST:166:unknown digest
|
||||
RSA_R_UNKNOWN_MASK_DIGEST:151:unknown mask digest
|
||||
RSA_R_UNKNOWN_PADDING_TYPE:118:unknown padding type
|
||||
RSA_R_UNSUPPORTED_ENCRYPTION_TYPE:162:unsupported encryption type
|
||||
RSA_R_UNSUPPORTED_LABEL_SOURCE:163:unsupported label source
|
||||
RSA_R_UNSUPPORTED_MASK_ALGORITHM:153:unsupported mask algorithm
|
||||
RSA_R_UNSUPPORTED_MASK_PARAMETER:154:unsupported mask parameter
|
||||
RSA_R_UNSUPPORTED_SIGNATURE_TYPE:155:unsupported signature type
|
||||
RSA_R_VALUE_MISSING:147:value missing
|
||||
RSA_R_WRONG_SIGNATURE_LENGTH:119:wrong signature length
|
||||
SM2_R_ASN1_ERROR:100:asn1 error
|
||||
SM2_R_BAD_SIGNATURE:101:bad signature
|
||||
SM2_R_BUFFER_TOO_SMALL:107:buffer too small
|
||||
SM2_R_DIST_ID_TOO_LARGE:110:dist id too large
|
||||
SM2_R_ID_NOT_SET:112:id not set
|
||||
SM2_R_ID_TOO_LARGE:111:id too large
|
||||
SM2_R_INVALID_CURVE:108:invalid curve
|
||||
SM2_R_INVALID_DIGEST:102:invalid digest
|
||||
SM2_R_INVALID_DIGEST_TYPE:103:invalid digest type
|
||||
SM2_R_INVALID_ENCODING:104:invalid encoding
|
||||
SM2_R_INVALID_FIELD:105:invalid field
|
||||
SM2_R_NO_PARAMETERS_SET:109:no parameters set
|
||||
SM2_R_USER_ID_TOO_LARGE:106:user id too large
|
||||
SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY:291:\
|
||||
application data after close notify
|
||||
SSL_R_APP_DATA_IN_HANDSHAKE:100:app data in handshake
|
||||
SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT:272:\
|
||||
attempt to reuse session in different context
|
||||
SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE:143:\
|
||||
at least TLS 1.0 needed in FIPS mode
|
||||
SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE:158:\
|
||||
at least (D)TLS 1.2 needed in Suite B mode
|
||||
SSL_R_BAD_CHANGE_CIPHER_SPEC:103:bad change cipher spec
|
||||
SSL_R_BAD_CIPHER:186:bad cipher
|
||||
SSL_R_BAD_DATA:390:bad data
|
||||
SSL_R_BAD_DATA_RETURNED_BY_CALLBACK:106:bad data returned by callback
|
||||
SSL_R_BAD_DECOMPRESSION:107:bad decompression
|
||||
SSL_R_BAD_DH_VALUE:102:bad dh value
|
||||
SSL_R_BAD_DIGEST_LENGTH:111:bad digest length
|
||||
SSL_R_BAD_EARLY_DATA:233:bad early data
|
||||
SSL_R_BAD_ECC_CERT:304:bad ecc cert
|
||||
SSL_R_BAD_ECPOINT:306:bad ecpoint
|
||||
SSL_R_BAD_EXTENSION:110:bad extension
|
||||
SSL_R_BAD_HANDSHAKE_LENGTH:332:bad handshake length
|
||||
SSL_R_BAD_HANDSHAKE_STATE:236:bad handshake state
|
||||
SSL_R_BAD_HELLO_REQUEST:105:bad hello request
|
||||
SSL_R_BAD_HRR_VERSION:263:bad hrr version
|
||||
SSL_R_BAD_KEY_SHARE:108:bad key share
|
||||
SSL_R_BAD_KEY_UPDATE:122:bad key update
|
||||
SSL_R_BAD_LEGACY_VERSION:292:bad legacy version
|
||||
SSL_R_BAD_LENGTH:271:bad length
|
||||
SSL_R_BAD_PACKET:240:bad packet
|
||||
SSL_R_BAD_PACKET_LENGTH:115:bad packet length
|
||||
SSL_R_BAD_PROTOCOL_VERSION_NUMBER:116:bad protocol version number
|
||||
SSL_R_BAD_PSK:219:bad psk
|
||||
SSL_R_BAD_PSK_IDENTITY:114:bad psk identity
|
||||
SSL_R_BAD_RECORD_TYPE:443:bad record type
|
||||
SSL_R_BAD_RSA_ENCRYPT:119:bad rsa encrypt
|
||||
SSL_R_BAD_SIGNATURE:123:bad signature
|
||||
SSL_R_BAD_SRP_A_LENGTH:347:bad srp a length
|
||||
SSL_R_BAD_SRP_PARAMETERS:371:bad srp parameters
|
||||
SSL_R_BAD_SRTP_MKI_VALUE:352:bad srtp mki value
|
||||
SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST:353:bad srtp protection profile list
|
||||
SSL_R_BAD_SSL_FILETYPE:124:bad ssl filetype
|
||||
SSL_R_BAD_VALUE:384:bad value
|
||||
SSL_R_BAD_WRITE_RETRY:127:bad write retry
|
||||
SSL_R_BINDER_DOES_NOT_VERIFY:253:binder does not verify
|
||||
SSL_R_BIO_NOT_SET:128:bio not set
|
||||
SSL_R_BLOCK_CIPHER_PAD_IS_WRONG:129:block cipher pad is wrong
|
||||
SSL_R_BN_LIB:130:bn lib
|
||||
SSL_R_CALLBACK_FAILED:234:callback failed
|
||||
SSL_R_CANNOT_CHANGE_CIPHER:109:cannot change cipher
|
||||
SSL_R_CA_DN_LENGTH_MISMATCH:131:ca dn length mismatch
|
||||
SSL_R_CA_KEY_TOO_SMALL:397:ca key too small
|
||||
SSL_R_CA_MD_TOO_WEAK:398:ca md too weak
|
||||
SSL_R_CCS_RECEIVED_EARLY:133:ccs received early
|
||||
SSL_R_CERTIFICATE_VERIFY_FAILED:134:certificate verify failed
|
||||
SSL_R_CERT_CB_ERROR:377:cert cb error
|
||||
SSL_R_CERT_LENGTH_MISMATCH:135:cert length mismatch
|
||||
SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED:218:ciphersuite digest has changed
|
||||
SSL_R_CIPHER_CODE_WRONG_LENGTH:137:cipher code wrong length
|
||||
SSL_R_CIPHER_OR_HASH_UNAVAILABLE:138:cipher or hash unavailable
|
||||
SSL_R_CLIENTHELLO_TLSEXT:226:clienthello tlsext
|
||||
SSL_R_COMPRESSED_LENGTH_TOO_LONG:140:compressed length too long
|
||||
SSL_R_COMPRESSION_DISABLED:343:compression disabled
|
||||
SSL_R_COMPRESSION_FAILURE:141:compression failure
|
||||
SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE:307:\
|
||||
compression id not within private range
|
||||
SSL_R_COMPRESSION_LIBRARY_ERROR:142:compression library error
|
||||
SSL_R_CONNECTION_TYPE_NOT_SET:144:connection type not set
|
||||
SSL_R_CONTEXT_NOT_DANE_ENABLED:167:context not dane enabled
|
||||
SSL_R_COOKIE_GEN_CALLBACK_FAILURE:400:cookie gen callback failure
|
||||
SSL_R_COOKIE_MISMATCH:308:cookie mismatch
|
||||
SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED:206:\
|
||||
custom ext handler already installed
|
||||
SSL_R_DANE_ALREADY_ENABLED:172:dane already enabled
|
||||
SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL:173:dane cannot override mtype full
|
||||
SSL_R_DANE_NOT_ENABLED:175:dane not enabled
|
||||
SSL_R_DANE_TLSA_BAD_CERTIFICATE:180:dane tlsa bad certificate
|
||||
SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE:184:dane tlsa bad certificate usage
|
||||
SSL_R_DANE_TLSA_BAD_DATA_LENGTH:189:dane tlsa bad data length
|
||||
SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH:192:dane tlsa bad digest length
|
||||
SSL_R_DANE_TLSA_BAD_MATCHING_TYPE:200:dane tlsa bad matching type
|
||||
SSL_R_DANE_TLSA_BAD_PUBLIC_KEY:201:dane tlsa bad public key
|
||||
SSL_R_DANE_TLSA_BAD_SELECTOR:202:dane tlsa bad selector
|
||||
SSL_R_DANE_TLSA_NULL_DATA:203:dane tlsa null data
|
||||
SSL_R_DATA_BETWEEN_CCS_AND_FINISHED:145:data between ccs and finished
|
||||
SSL_R_DATA_LENGTH_TOO_LONG:146:data length too long
|
||||
SSL_R_DECRYPTION_FAILED:147:decryption failed
|
||||
SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC:281:\
|
||||
decryption failed or bad record mac
|
||||
SSL_R_DH_KEY_TOO_SMALL:394:dh key too small
|
||||
SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG:148:dh public value length is wrong
|
||||
SSL_R_DIGEST_CHECK_FAILED:149:digest check failed
|
||||
SSL_R_DTLS_MESSAGE_TOO_BIG:334:dtls message too big
|
||||
SSL_R_DUPLICATE_COMPRESSION_ID:309:duplicate compression id
|
||||
SSL_R_ECC_CERT_NOT_FOR_SIGNING:318:ecc cert not for signing
|
||||
SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE:374:ecdh required for suiteb mode
|
||||
SSL_R_EE_KEY_TOO_SMALL:399:ee key too small
|
||||
SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST:354:empty srtp protection profile list
|
||||
SSL_R_ENCRYPTED_LENGTH_TOO_LONG:150:encrypted length too long
|
||||
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST:151:error in received cipher list
|
||||
SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN:204:error setting tlsa base domain
|
||||
SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE:194:exceeds max fragment size
|
||||
SSL_R_EXCESSIVE_MESSAGE_SIZE:152:excessive message size
|
||||
SSL_R_EXTENSION_NOT_RECEIVED:279:extension not received
|
||||
SSL_R_EXTRA_DATA_IN_MESSAGE:153:extra data in message
|
||||
SSL_R_EXT_LENGTH_MISMATCH:163:ext length mismatch
|
||||
SSL_R_FAILED_TO_INIT_ASYNC:405:failed to init async
|
||||
SSL_R_FRAGMENTED_CLIENT_HELLO:401:fragmented client hello
|
||||
SSL_R_GOT_A_FIN_BEFORE_A_CCS:154:got a fin before a ccs
|
||||
SSL_R_HTTPS_PROXY_REQUEST:155:https proxy request
|
||||
SSL_R_HTTP_REQUEST:156:http request
|
||||
SSL_R_ILLEGAL_POINT_COMPRESSION:162:illegal point compression
|
||||
SSL_R_ILLEGAL_SUITEB_DIGEST:380:illegal Suite B digest
|
||||
SSL_R_INAPPROPRIATE_FALLBACK:373:inappropriate fallback
|
||||
SSL_R_INCONSISTENT_COMPRESSION:340:inconsistent compression
|
||||
SSL_R_INCONSISTENT_EARLY_DATA_ALPN:222:inconsistent early data alpn
|
||||
SSL_R_INCONSISTENT_EARLY_DATA_SNI:231:inconsistent early data sni
|
||||
SSL_R_INCONSISTENT_EXTMS:104:inconsistent extms
|
||||
SSL_R_INSUFFICIENT_SECURITY:241:insufficient security
|
||||
SSL_R_INVALID_ALERT:205:invalid alert
|
||||
SSL_R_INVALID_CCS_MESSAGE:260:invalid ccs message
|
||||
SSL_R_INVALID_CERTIFICATE_OR_ALG:238:invalid certificate or alg
|
||||
SSL_R_INVALID_COMMAND:280:invalid command
|
||||
SSL_R_INVALID_COMPRESSION_ALGORITHM:341:invalid compression algorithm
|
||||
SSL_R_INVALID_CONFIG:283:invalid config
|
||||
SSL_R_INVALID_CONFIGURATION_NAME:113:invalid configuration name
|
||||
SSL_R_INVALID_CONTEXT:282:invalid context
|
||||
SSL_R_INVALID_CT_VALIDATION_TYPE:212:invalid ct validation type
|
||||
SSL_R_INVALID_KEY_UPDATE_TYPE:120:invalid key update type
|
||||
SSL_R_INVALID_MAX_EARLY_DATA:174:invalid max early data
|
||||
SSL_R_INVALID_NULL_CMD_NAME:385:invalid null cmd name
|
||||
SSL_R_INVALID_SEQUENCE_NUMBER:402:invalid sequence number
|
||||
SSL_R_INVALID_SERVERINFO_DATA:388:invalid serverinfo data
|
||||
SSL_R_INVALID_SESSION_ID:999:invalid session id
|
||||
SSL_R_INVALID_SRP_USERNAME:357:invalid srp username
|
||||
SSL_R_INVALID_STATUS_RESPONSE:328:invalid status response
|
||||
SSL_R_INVALID_TICKET_KEYS_LENGTH:325:invalid ticket keys length
|
||||
SSL_R_LENGTH_MISMATCH:159:length mismatch
|
||||
SSL_R_LENGTH_TOO_LONG:404:length too long
|
||||
SSL_R_LENGTH_TOO_SHORT:160:length too short
|
||||
SSL_R_LIBRARY_BUG:274:library bug
|
||||
SSL_R_LIBRARY_HAS_NO_CIPHERS:161:library has no ciphers
|
||||
SSL_R_MISSING_DSA_SIGNING_CERT:165:missing dsa signing cert
|
||||
SSL_R_MISSING_ECDSA_SIGNING_CERT:381:missing ecdsa signing cert
|
||||
SSL_R_MISSING_FATAL:256:missing fatal
|
||||
SSL_R_MISSING_PARAMETERS:290:missing parameters
|
||||
SSL_R_MISSING_RSA_CERTIFICATE:168:missing rsa certificate
|
||||
SSL_R_MISSING_RSA_ENCRYPTING_CERT:169:missing rsa encrypting cert
|
||||
SSL_R_MISSING_RSA_SIGNING_CERT:170:missing rsa signing cert
|
||||
SSL_R_MISSING_SIGALGS_EXTENSION:112:missing sigalgs extension
|
||||
SSL_R_MISSING_SIGNING_CERT:221:missing signing cert
|
||||
SSL_R_MISSING_SRP_PARAM:358:can't find SRP server param
|
||||
SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION:209:missing supported groups extension
|
||||
SSL_R_MISSING_TMP_DH_KEY:171:missing tmp dh key
|
||||
SSL_R_MISSING_TMP_ECDH_KEY:311:missing tmp ecdh key
|
||||
SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA:293:\
|
||||
mixed handshake and non handshake data
|
||||
SSL_R_NOT_ON_RECORD_BOUNDARY:182:not on record boundary
|
||||
SSL_R_NOT_REPLACING_CERTIFICATE:289:not replacing certificate
|
||||
SSL_R_NOT_SERVER:284:not server
|
||||
SSL_R_NO_APPLICATION_PROTOCOL:235:no application protocol
|
||||
SSL_R_NO_CERTIFICATES_RETURNED:176:no certificates returned
|
||||
SSL_R_NO_CERTIFICATE_ASSIGNED:177:no certificate assigned
|
||||
SSL_R_NO_CERTIFICATE_SET:179:no certificate set
|
||||
SSL_R_NO_CHANGE_FOLLOWING_HRR:214:no change following hrr
|
||||
SSL_R_NO_CIPHERS_AVAILABLE:181:no ciphers available
|
||||
SSL_R_NO_CIPHERS_SPECIFIED:183:no ciphers specified
|
||||
SSL_R_NO_CIPHER_MATCH:185:no cipher match
|
||||
SSL_R_NO_CLIENT_CERT_METHOD:331:no client cert method
|
||||
SSL_R_NO_COMPRESSION_SPECIFIED:187:no compression specified
|
||||
SSL_R_NO_COOKIE_CALLBACK_SET:287:no cookie callback set
|
||||
SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER:330:\
|
||||
Peer haven't sent GOST certificate, required for selected ciphersuite
|
||||
SSL_R_NO_METHOD_SPECIFIED:188:no method specified
|
||||
SSL_R_NO_PEM_EXTENSIONS:389:no pem extensions
|
||||
SSL_R_NO_PRIVATE_KEY_ASSIGNED:190:no private key assigned
|
||||
SSL_R_NO_PROTOCOLS_AVAILABLE:191:no protocols available
|
||||
SSL_R_NO_RENEGOTIATION:339:no renegotiation
|
||||
SSL_R_NO_REQUIRED_DIGEST:324:no required digest
|
||||
SSL_R_NO_SHARED_CIPHER:193:no shared cipher
|
||||
SSL_R_NO_SHARED_GROUPS:410:no shared groups
|
||||
SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS:376:no shared signature algorithms
|
||||
SSL_R_NO_SRTP_PROFILES:359:no srtp profiles
|
||||
SSL_R_NO_SUITABLE_KEY_SHARE:101:no suitable key share
|
||||
SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM:118:no suitable signature algorithm
|
||||
SSL_R_NO_VALID_SCTS:216:no valid scts
|
||||
SSL_R_NO_VERIFY_COOKIE_CALLBACK:403:no verify cookie callback
|
||||
SSL_R_NULL_SSL_CTX:195:null ssl ctx
|
||||
SSL_R_NULL_SSL_METHOD_PASSED:196:null ssl method passed
|
||||
SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED:197:old session cipher not returned
|
||||
SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED:344:\
|
||||
old session compression algorithm not returned
|
||||
SSL_R_OVERFLOW_ERROR:237:overflow error
|
||||
SSL_R_PACKET_LENGTH_TOO_LONG:198:packet length too long
|
||||
SSL_R_PARSE_TLSEXT:227:parse tlsext
|
||||
SSL_R_PATH_TOO_LONG:270:path too long
|
||||
SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE:199:peer did not return a certificate
|
||||
SSL_R_PEM_NAME_BAD_PREFIX:391:pem name bad prefix
|
||||
SSL_R_PEM_NAME_TOO_SHORT:392:pem name too short
|
||||
SSL_R_PIPELINE_FAILURE:406:pipeline failure
|
||||
SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR:278:post handshake auth encoding err
|
||||
SSL_R_PRIVATE_KEY_MISMATCH:288:private key mismatch
|
||||
SSL_R_PROTOCOL_IS_SHUTDOWN:207:protocol is shutdown
|
||||
SSL_R_PSK_IDENTITY_NOT_FOUND:223:psk identity not found
|
||||
SSL_R_PSK_NO_CLIENT_CB:224:psk no client cb
|
||||
SSL_R_PSK_NO_SERVER_CB:225:psk no server cb
|
||||
SSL_R_READ_BIO_NOT_SET:211:read bio not set
|
||||
SSL_R_READ_TIMEOUT_EXPIRED:312:read timeout expired
|
||||
SSL_R_RECORD_LENGTH_MISMATCH:213:record length mismatch
|
||||
SSL_R_RECORD_TOO_SMALL:298:record too small
|
||||
SSL_R_RENEGOTIATE_EXT_TOO_LONG:335:renegotiate ext too long
|
||||
SSL_R_RENEGOTIATION_ENCODING_ERR:336:renegotiation encoding err
|
||||
SSL_R_RENEGOTIATION_MISMATCH:337:renegotiation mismatch
|
||||
SSL_R_REQUEST_PENDING:285:request pending
|
||||
SSL_R_REQUEST_SENT:286:request sent
|
||||
SSL_R_REQUIRED_CIPHER_MISSING:215:required cipher missing
|
||||
SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING:342:\
|
||||
required compression algorithm missing
|
||||
SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING:345:scsv received when renegotiating
|
||||
SSL_R_SCT_VERIFICATION_FAILED:208:sct verification failed
|
||||
SSL_R_SERVERHELLO_TLSEXT:275:serverhello tlsext
|
||||
SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED:277:session id context uninitialized
|
||||
SSL_R_SHUTDOWN_WHILE_IN_INIT:407:shutdown while in init
|
||||
SSL_R_SIGNATURE_ALGORITHMS_ERROR:360:signature algorithms error
|
||||
SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE:220:\
|
||||
signature for non signing certificate
|
||||
SSL_R_SRP_A_CALC:361:error with the srp params
|
||||
SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES:362:srtp could not allocate profiles
|
||||
SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG:363:\
|
||||
srtp protection profile list too long
|
||||
SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE:364:srtp unknown protection profile
|
||||
SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH:232:\
|
||||
ssl3 ext invalid max fragment length
|
||||
SSL_R_SSL3_EXT_INVALID_SERVERNAME:319:ssl3 ext invalid servername
|
||||
SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE:320:ssl3 ext invalid servername type
|
||||
SSL_R_SSL3_SESSION_ID_TOO_LONG:300:ssl3 session id too long
|
||||
SSL_R_SSL_COMMAND_SECTION_EMPTY:117:ssl command section empty
|
||||
SSL_R_SSL_COMMAND_SECTION_NOT_FOUND:125:ssl command section not found
|
||||
SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION:228:ssl ctx has no default ssl version
|
||||
SSL_R_SSL_HANDSHAKE_FAILURE:229:ssl handshake failure
|
||||
SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS:230:ssl library has no ciphers
|
||||
SSL_R_SSL_NEGATIVE_LENGTH:372:ssl negative length
|
||||
SSL_R_SSL_SECTION_EMPTY:126:ssl section empty
|
||||
SSL_R_SSL_SECTION_NOT_FOUND:136:ssl section not found
|
||||
SSL_R_SSL_SESSION_ID_CALLBACK_FAILED:301:ssl session id callback failed
|
||||
SSL_R_SSL_SESSION_ID_CONFLICT:302:ssl session id conflict
|
||||
SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG:273:ssl session id context too long
|
||||
SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH:303:ssl session id has bad length
|
||||
SSL_R_SSL_SESSION_ID_TOO_LONG:408:ssl session id too long
|
||||
SSL_R_SSL_SESSION_VERSION_MISMATCH:210:ssl session version mismatch
|
||||
SSL_R_STILL_IN_INIT:121:still in init
|
||||
SSL_R_TLS_ILLEGAL_EXPORTER_LABEL:367:tls illegal exporter label
|
||||
SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST:157:tls invalid ecpointformat list
|
||||
SSL_R_TOO_MANY_KEY_UPDATES:132:too many key updates
|
||||
SSL_R_TOO_MANY_WARN_ALERTS:409:too many warn alerts
|
||||
SSL_R_TOO_MUCH_EARLY_DATA:164:too much early data
|
||||
SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS:314:unable to find ecdh parameters
|
||||
SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS:239:\
|
||||
unable to find public key parameters
|
||||
SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES:242:unable to load ssl3 md5 routines
|
||||
SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES:243:unable to load ssl3 sha1 routines
|
||||
SSL_R_UNEXPECTED_CCS_MESSAGE:262:unexpected ccs message
|
||||
SSL_R_UNEXPECTED_END_OF_EARLY_DATA:178:unexpected end of early data
|
||||
SSL_R_UNEXPECTED_MESSAGE:244:unexpected message
|
||||
SSL_R_UNEXPECTED_RECORD:245:unexpected record
|
||||
SSL_R_UNINITIALIZED:276:uninitialized
|
||||
SSL_R_UNKNOWN_ALERT_TYPE:246:unknown alert type
|
||||
SSL_R_UNKNOWN_CERTIFICATE_TYPE:247:unknown certificate type
|
||||
SSL_R_UNKNOWN_CIPHER_RETURNED:248:unknown cipher returned
|
||||
SSL_R_UNKNOWN_CIPHER_TYPE:249:unknown cipher type
|
||||
SSL_R_UNKNOWN_CMD_NAME:386:unknown cmd name
|
||||
SSL_R_UNKNOWN_COMMAND:139:unknown command
|
||||
SSL_R_UNKNOWN_DIGEST:368:unknown digest
|
||||
SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE:250:unknown key exchange type
|
||||
SSL_R_UNKNOWN_PKEY_TYPE:251:unknown pkey type
|
||||
SSL_R_UNKNOWN_PROTOCOL:252:unknown protocol
|
||||
SSL_R_UNKNOWN_SSL_VERSION:254:unknown ssl version
|
||||
SSL_R_UNKNOWN_STATE:255:unknown state
|
||||
SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED:338:\
|
||||
unsafe legacy renegotiation disabled
|
||||
SSL_R_UNSOLICITED_EXTENSION:217:unsolicited extension
|
||||
SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM:257:unsupported compression algorithm
|
||||
SSL_R_UNSUPPORTED_ELLIPTIC_CURVE:315:unsupported elliptic curve
|
||||
SSL_R_UNSUPPORTED_PROTOCOL:258:unsupported protocol
|
||||
SSL_R_UNSUPPORTED_SSL_VERSION:259:unsupported ssl version
|
||||
SSL_R_UNSUPPORTED_STATUS_TYPE:329:unsupported status type
|
||||
SSL_R_USE_SRTP_NOT_NEGOTIATED:369:use srtp not negotiated
|
||||
SSL_R_VERSION_TOO_HIGH:166:version too high
|
||||
SSL_R_VERSION_TOO_LOW:396:version too low
|
||||
SSL_R_WRONG_CERTIFICATE_TYPE:383:wrong certificate type
|
||||
SSL_R_WRONG_CIPHER_RETURNED:261:wrong cipher returned
|
||||
SSL_R_WRONG_CURVE:378:wrong curve
|
||||
SSL_R_WRONG_SIGNATURE_LENGTH:264:wrong signature length
|
||||
SSL_R_WRONG_SIGNATURE_SIZE:265:wrong signature size
|
||||
SSL_R_WRONG_SIGNATURE_TYPE:370:wrong signature type
|
||||
SSL_R_WRONG_SSL_VERSION:266:wrong ssl version
|
||||
SSL_R_WRONG_VERSION_NUMBER:267:wrong version number
|
||||
SSL_R_X509_LIB:268:x509 lib
|
||||
SSL_R_X509_VERIFICATION_SETUP_PROBLEMS:269:x509 verification setup problems
|
||||
TS_R_BAD_PKCS7_TYPE:132:bad pkcs7 type
|
||||
TS_R_BAD_TYPE:133:bad type
|
||||
TS_R_CANNOT_LOAD_CERT:137:cannot load certificate
|
||||
TS_R_CANNOT_LOAD_KEY:138:cannot load private key
|
||||
TS_R_CERTIFICATE_VERIFY_ERROR:100:certificate verify error
|
||||
TS_R_COULD_NOT_SET_ENGINE:127:could not set engine
|
||||
TS_R_COULD_NOT_SET_TIME:115:could not set time
|
||||
TS_R_DETACHED_CONTENT:134:detached content
|
||||
TS_R_ESS_ADD_SIGNING_CERT_ERROR:116:ess add signing cert error
|
||||
TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR:139:ess add signing cert v2 error
|
||||
TS_R_ESS_SIGNING_CERTIFICATE_ERROR:101:ess signing certificate error
|
||||
TS_R_INVALID_NULL_POINTER:102:invalid null pointer
|
||||
TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE:117:invalid signer certificate purpose
|
||||
TS_R_MESSAGE_IMPRINT_MISMATCH:103:message imprint mismatch
|
||||
TS_R_NONCE_MISMATCH:104:nonce mismatch
|
||||
TS_R_NONCE_NOT_RETURNED:105:nonce not returned
|
||||
TS_R_NO_CONTENT:106:no content
|
||||
TS_R_NO_TIME_STAMP_TOKEN:107:no time stamp token
|
||||
TS_R_PKCS7_ADD_SIGNATURE_ERROR:118:pkcs7 add signature error
|
||||
TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR:119:pkcs7 add signed attr error
|
||||
TS_R_PKCS7_TO_TS_TST_INFO_FAILED:129:pkcs7 to ts tst info failed
|
||||
TS_R_POLICY_MISMATCH:108:policy mismatch
|
||||
TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:120:\
|
||||
private key does not match certificate
|
||||
TS_R_RESPONSE_SETUP_ERROR:121:response setup error
|
||||
TS_R_SIGNATURE_FAILURE:109:signature failure
|
||||
TS_R_THERE_MUST_BE_ONE_SIGNER:110:there must be one signer
|
||||
TS_R_TIME_SYSCALL_ERROR:122:time syscall error
|
||||
TS_R_TOKEN_NOT_PRESENT:130:token not present
|
||||
TS_R_TOKEN_PRESENT:131:token present
|
||||
TS_R_TSA_NAME_MISMATCH:111:tsa name mismatch
|
||||
TS_R_TSA_UNTRUSTED:112:tsa untrusted
|
||||
TS_R_TST_INFO_SETUP_ERROR:123:tst info setup error
|
||||
TS_R_TS_DATASIGN:124:ts datasign
|
||||
TS_R_UNACCEPTABLE_POLICY:125:unacceptable policy
|
||||
TS_R_UNSUPPORTED_MD_ALGORITHM:126:unsupported md algorithm
|
||||
TS_R_UNSUPPORTED_VERSION:113:unsupported version
|
||||
TS_R_VAR_BAD_VALUE:135:var bad value
|
||||
TS_R_VAR_LOOKUP_FAILURE:136:cannot find config variable
|
||||
TS_R_WRONG_CONTENT_TYPE:114:wrong content type
|
||||
UI_R_COMMON_OK_AND_CANCEL_CHARACTERS:104:common ok and cancel characters
|
||||
UI_R_INDEX_TOO_LARGE:102:index too large
|
||||
UI_R_INDEX_TOO_SMALL:103:index too small
|
||||
UI_R_NO_RESULT_BUFFER:105:no result buffer
|
||||
UI_R_PROCESSING_ERROR:107:processing error
|
||||
UI_R_RESULT_TOO_LARGE:100:result too large
|
||||
UI_R_RESULT_TOO_SMALL:101:result too small
|
||||
UI_R_SYSASSIGN_ERROR:109:sys$assign error
|
||||
UI_R_SYSDASSGN_ERROR:110:sys$dassgn error
|
||||
UI_R_SYSQIOW_ERROR:111:sys$qiow error
|
||||
UI_R_UNKNOWN_CONTROL_COMMAND:106:unknown control command
|
||||
UI_R_UNKNOWN_TTYGET_ERRNO_VALUE:108:unknown ttyget errno value
|
||||
UI_R_USER_DATA_DUPLICATION_UNSUPPORTED:112:user data duplication unsupported
|
||||
X509V3_R_BAD_IP_ADDRESS:118:bad ip address
|
||||
X509V3_R_BAD_OBJECT:119:bad object
|
||||
X509V3_R_BN_DEC2BN_ERROR:100:bn dec2bn error
|
||||
X509V3_R_BN_TO_ASN1_INTEGER_ERROR:101:bn to asn1 integer error
|
||||
X509V3_R_DIRNAME_ERROR:149:dirname error
|
||||
X509V3_R_DISTPOINT_ALREADY_SET:160:distpoint already set
|
||||
X509V3_R_DUPLICATE_ZONE_ID:133:duplicate zone id
|
||||
X509V3_R_ERROR_CONVERTING_ZONE:131:error converting zone
|
||||
X509V3_R_ERROR_CREATING_EXTENSION:144:error creating extension
|
||||
X509V3_R_ERROR_IN_EXTENSION:128:error in extension
|
||||
X509V3_R_EXPECTED_A_SECTION_NAME:137:expected a section name
|
||||
X509V3_R_EXTENSION_EXISTS:145:extension exists
|
||||
X509V3_R_EXTENSION_NAME_ERROR:115:extension name error
|
||||
X509V3_R_EXTENSION_NOT_FOUND:102:extension not found
|
||||
X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED:103:extension setting not supported
|
||||
X509V3_R_EXTENSION_VALUE_ERROR:116:extension value error
|
||||
X509V3_R_ILLEGAL_EMPTY_EXTENSION:151:illegal empty extension
|
||||
X509V3_R_INCORRECT_POLICY_SYNTAX_TAG:152:incorrect policy syntax tag
|
||||
X509V3_R_INVALID_ASNUMBER:162:invalid asnumber
|
||||
X509V3_R_INVALID_ASRANGE:163:invalid asrange
|
||||
X509V3_R_INVALID_BOOLEAN_STRING:104:invalid boolean string
|
||||
X509V3_R_INVALID_EXTENSION_STRING:105:invalid extension string
|
||||
X509V3_R_INVALID_INHERITANCE:165:invalid inheritance
|
||||
X509V3_R_INVALID_IPADDRESS:166:invalid ipaddress
|
||||
X509V3_R_INVALID_MULTIPLE_RDNS:161:invalid multiple rdns
|
||||
X509V3_R_INVALID_NAME:106:invalid name
|
||||
X509V3_R_INVALID_NULL_ARGUMENT:107:invalid null argument
|
||||
X509V3_R_INVALID_NULL_NAME:108:invalid null name
|
||||
X509V3_R_INVALID_NULL_VALUE:109:invalid null value
|
||||
X509V3_R_INVALID_NUMBER:140:invalid number
|
||||
X509V3_R_INVALID_NUMBERS:141:invalid numbers
|
||||
X509V3_R_INVALID_OBJECT_IDENTIFIER:110:invalid object identifier
|
||||
X509V3_R_INVALID_OPTION:138:invalid option
|
||||
X509V3_R_INVALID_POLICY_IDENTIFIER:134:invalid policy identifier
|
||||
X509V3_R_INVALID_PROXY_POLICY_SETTING:153:invalid proxy policy setting
|
||||
X509V3_R_INVALID_PURPOSE:146:invalid purpose
|
||||
X509V3_R_INVALID_SAFI:164:invalid safi
|
||||
X509V3_R_INVALID_SECTION:135:invalid section
|
||||
X509V3_R_INVALID_SYNTAX:143:invalid syntax
|
||||
X509V3_R_ISSUER_DECODE_ERROR:126:issuer decode error
|
||||
X509V3_R_MISSING_VALUE:124:missing value
|
||||
X509V3_R_NEED_ORGANIZATION_AND_NUMBERS:142:need organization and numbers
|
||||
X509V3_R_NO_CONFIG_DATABASE:136:no config database
|
||||
X509V3_R_NO_ISSUER_CERTIFICATE:121:no issuer certificate
|
||||
X509V3_R_NO_ISSUER_DETAILS:127:no issuer details
|
||||
X509V3_R_NO_POLICY_IDENTIFIER:139:no policy identifier
|
||||
X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED:154:\
|
||||
no proxy cert policy language defined
|
||||
X509V3_R_NO_PUBLIC_KEY:114:no public key
|
||||
X509V3_R_NO_SUBJECT_DETAILS:125:no subject details
|
||||
X509V3_R_OPERATION_NOT_DEFINED:148:operation not defined
|
||||
X509V3_R_OTHERNAME_ERROR:147:othername error
|
||||
X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED:155:policy language already defined
|
||||
X509V3_R_POLICY_PATH_LENGTH:156:policy path length
|
||||
X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED:157:\
|
||||
policy path length already defined
|
||||
X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY:159:\
|
||||
policy when proxy language requires no policy
|
||||
X509V3_R_SECTION_NOT_FOUND:150:section not found
|
||||
X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS:122:unable to get issuer details
|
||||
X509V3_R_UNABLE_TO_GET_ISSUER_KEYID:123:unable to get issuer keyid
|
||||
X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT:111:unknown bit string argument
|
||||
X509V3_R_UNKNOWN_EXTENSION:129:unknown extension
|
||||
X509V3_R_UNKNOWN_EXTENSION_NAME:130:unknown extension name
|
||||
X509V3_R_UNKNOWN_OPTION:120:unknown option
|
||||
X509V3_R_UNSUPPORTED_OPTION:117:unsupported option
|
||||
X509V3_R_UNSUPPORTED_TYPE:167:unsupported type
|
||||
X509V3_R_USER_TOO_LONG:132:user too long
|
||||
X509_R_AKID_MISMATCH:110:akid mismatch
|
||||
X509_R_BAD_SELECTOR:133:bad selector
|
||||
X509_R_BAD_X509_FILETYPE:100:bad x509 filetype
|
||||
X509_R_BASE64_DECODE_ERROR:118:base64 decode error
|
||||
X509_R_CANT_CHECK_DH_KEY:114:cant check dh key
|
||||
X509_R_CERT_ALREADY_IN_HASH_TABLE:101:cert already in hash table
|
||||
X509_R_CRL_ALREADY_DELTA:127:crl already delta
|
||||
X509_R_CRL_VERIFY_FAILURE:131:crl verify failure
|
||||
X509_R_IDP_MISMATCH:128:idp mismatch
|
||||
X509_R_INVALID_ATTRIBUTES:138:invalid attributes
|
||||
X509_R_INVALID_DIRECTORY:113:invalid directory
|
||||
X509_R_INVALID_FIELD_NAME:119:invalid field name
|
||||
X509_R_INVALID_TRUST:123:invalid trust
|
||||
X509_R_ISSUER_MISMATCH:129:issuer mismatch
|
||||
X509_R_KEY_TYPE_MISMATCH:115:key type mismatch
|
||||
X509_R_KEY_VALUES_MISMATCH:116:key values mismatch
|
||||
X509_R_LOADING_CERT_DIR:103:loading cert dir
|
||||
X509_R_LOADING_DEFAULTS:104:loading defaults
|
||||
X509_R_METHOD_NOT_SUPPORTED:124:method not supported
|
||||
X509_R_NAME_TOO_LONG:134:name too long
|
||||
X509_R_NEWER_CRL_NOT_NEWER:132:newer crl not newer
|
||||
X509_R_NO_CERTIFICATE_FOUND:135:no certificate found
|
||||
X509_R_NO_CERTIFICATE_OR_CRL_FOUND:136:no certificate or crl found
|
||||
X509_R_NO_CERT_SET_FOR_US_TO_VERIFY:105:no cert set for us to verify
|
||||
X509_R_NO_CRL_FOUND:137:no crl found
|
||||
X509_R_NO_CRL_NUMBER:130:no crl number
|
||||
X509_R_PUBLIC_KEY_DECODE_ERROR:125:public key decode error
|
||||
X509_R_PUBLIC_KEY_ENCODE_ERROR:126:public key encode error
|
||||
X509_R_SHOULD_RETRY:106:should retry
|
||||
X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN:107:unable to find parameters in chain
|
||||
X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY:108:unable to get certs public key
|
||||
X509_R_UNKNOWN_KEY_TYPE:117:unknown key type
|
||||
X509_R_UNKNOWN_NID:109:unknown nid
|
||||
X509_R_UNKNOWN_PURPOSE_ID:121:unknown purpose id
|
||||
X509_R_UNKNOWN_TRUST_ID:120:unknown trust id
|
||||
X509_R_UNSUPPORTED_ALGORITHM:111:unsupported algorithm
|
||||
X509_R_WRONG_LOOKUP_TYPE:112:wrong lookup type
|
||||
X509_R_WRONG_TYPE:122:wrong type
|
||||
+34
-10
@@ -636,6 +636,31 @@ EVP_MD *evp_md_new(void)
|
||||
return md;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIPS module note: since internal fetches will be entirely
|
||||
* provider based, we know that none of its code depends on legacy
|
||||
* NIDs or any functionality that use them.
|
||||
*/
|
||||
#ifndef FIPS_MODE
|
||||
/* TODO(3.x) get rid of the need for legacy NIDs */
|
||||
static void set_legacy_nid(const char *name, void *vlegacy_nid)
|
||||
{
|
||||
int nid;
|
||||
int *legacy_nid = vlegacy_nid;
|
||||
|
||||
if (*legacy_nid == -1) /* We found a clash already */
|
||||
return;
|
||||
if ((nid = OBJ_sn2nid(name)) == NID_undef
|
||||
&& (nid = OBJ_ln2nid(name)) == NID_undef)
|
||||
return;
|
||||
if (*legacy_nid != NID_undef && *legacy_nid != nid) {
|
||||
*legacy_nid = -1;
|
||||
return;
|
||||
}
|
||||
*legacy_nid = nid;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void *evp_md_from_dispatch(int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov, void *unused)
|
||||
@@ -648,21 +673,20 @@ static void *evp_md_from_dispatch(int name_id,
|
||||
EVPerr(0, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
md->name_id = name_id;
|
||||
|
||||
#ifndef FIPS_MODE
|
||||
{
|
||||
/*
|
||||
* FIPS module note: since internal fetches will be entirely
|
||||
* provider based, we know that none of its code depends on legacy
|
||||
* NIDs or any functionality that use them.
|
||||
*
|
||||
* TODO(3.x) get rid of the need for legacy NIDs
|
||||
*/
|
||||
md->type = OBJ_sn2nid(evp_first_name(prov, name_id));
|
||||
/* TODO(3.x) get rid of the need for legacy NIDs */
|
||||
md->type = NID_undef;
|
||||
evp_doall_names(prov, name_id, set_legacy_nid, &md->type);
|
||||
if (md->type == -1) {
|
||||
ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
|
||||
EVP_MD_free(md);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
md->name_id = name_id;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
case OSSL_FUNC_DIGEST_NEWCTX:
|
||||
|
||||
+40
-10
@@ -239,6 +239,12 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
||||
case NID_des_ede_ofb64:
|
||||
case NID_des_ede_cfb64:
|
||||
case NID_desx_cbc:
|
||||
case NID_des_cbc:
|
||||
case NID_des_ecb:
|
||||
case NID_des_cfb1:
|
||||
case NID_des_cfb8:
|
||||
case NID_des_cfb64:
|
||||
case NID_des_ofb64:
|
||||
case NID_id_smime_alg_CMS3DESwrap:
|
||||
case NID_bf_cbc:
|
||||
case NID_bf_ecb:
|
||||
@@ -1287,6 +1293,31 @@ EVP_CIPHER *evp_cipher_new(void)
|
||||
return cipher;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIPS module note: since internal fetches will be entirely
|
||||
* provider based, we know that none of its code depends on legacy
|
||||
* NIDs or any functionality that use them.
|
||||
*/
|
||||
#ifndef FIPS_MODE
|
||||
/* TODO(3.x) get rid of the need for legacy NIDs */
|
||||
static void set_legacy_nid(const char *name, void *vlegacy_nid)
|
||||
{
|
||||
int nid;
|
||||
int *legacy_nid = vlegacy_nid;
|
||||
|
||||
if (*legacy_nid == -1) /* We found a clash already */
|
||||
return;
|
||||
if ((nid = OBJ_sn2nid(name)) == NID_undef
|
||||
&& (nid = OBJ_ln2nid(name)) == NID_undef)
|
||||
return;
|
||||
if (*legacy_nid != NID_undef && *legacy_nid != nid) {
|
||||
*legacy_nid = -1;
|
||||
return;
|
||||
}
|
||||
*legacy_nid = nid;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void *evp_cipher_from_dispatch(const int name_id,
|
||||
const OSSL_DISPATCH *fns,
|
||||
OSSL_PROVIDER *prov,
|
||||
@@ -1299,21 +1330,20 @@ static void *evp_cipher_from_dispatch(const int name_id,
|
||||
EVPerr(0, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
cipher->name_id = name_id;
|
||||
|
||||
#ifndef FIPS_MODE
|
||||
{
|
||||
/*
|
||||
* FIPS module note: since internal fetches will be entirely
|
||||
* provider based, we know that none of its code depends on legacy
|
||||
* NIDs or any functionality that use them.
|
||||
*
|
||||
* TODO(3.x) get rid of the need for legacy NIDs
|
||||
*/
|
||||
cipher->nid = OBJ_sn2nid(evp_first_name(prov, name_id));
|
||||
/* TODO(3.x) get rid of the need for legacy NIDs */
|
||||
cipher->nid = NID_undef;
|
||||
evp_doall_names(prov, name_id, set_legacy_nid, &cipher->nid);
|
||||
if (cipher->nid == -1) {
|
||||
ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
|
||||
EVP_CIPHER_free(cipher);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
cipher->name_id = name_id;
|
||||
|
||||
for (; fns->function_id != 0; fns++) {
|
||||
switch (fns->function_id) {
|
||||
case OSSL_FUNC_CIPHER_NEWCTX:
|
||||
|
||||
@@ -393,3 +393,13 @@ int evp_is_a(OSSL_PROVIDER *prov, int number, const char *name)
|
||||
|
||||
return ossl_namemap_name2num(namemap, name) == number;
|
||||
}
|
||||
|
||||
void evp_doall_names(OSSL_PROVIDER *prov, int number,
|
||||
void (*fn)(const char *name, void *data),
|
||||
void *data)
|
||||
{
|
||||
OPENSSL_CTX *libctx = ossl_provider_library_context(prov);
|
||||
OSSL_NAMEMAP *namemap = ossl_namemap_stored(libctx);
|
||||
|
||||
ossl_namemap_doall_names(namemap, number, fn, data);
|
||||
}
|
||||
@@ -251,3 +251,6 @@ void evp_pkey_ctx_free_old_ops(EVP_PKEY_CTX *ctx);
|
||||
/* OSSL_PROVIDER * is only used to get the library context */
|
||||
const char *evp_first_name(OSSL_PROVIDER *prov, int name_id);
|
||||
int evp_is_a(OSSL_PROVIDER *prov, int number, const char *name);
|
||||
void evp_doall_names(OSSL_PROVIDER *prov, int number,
|
||||
void (*fn)(const char *name, void *data),
|
||||
void *data);
|
||||
@@ -296,6 +296,10 @@ void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len,
|
||||
const DES_key_schedule ks[3], unsigned char iv[8]);
|
||||
void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len,
|
||||
const DES_key_schedule ks[3], unsigned char iv[8]);
|
||||
void des_t4_cbc_encrypt(const void *inp, void *out, size_t len,
|
||||
const DES_key_schedule *ks, unsigned char iv[8]);
|
||||
void des_t4_cbc_decrypt(const void *inp, void *out, size_t len,
|
||||
const DES_key_schedule *ks, unsigned char iv[8]);
|
||||
# endif /* OPENSSL_NO_DES */
|
||||
|
||||
# elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
*/
|
||||
|
||||
/* Serialized OID's */
|
||||
static const unsigned char so[7813] = {
|
||||
static const unsigned char so[7837] = {
|
||||
0x2A,0x86,0x48,0x86,0xF7,0x0D, /* [ 0] OBJ_rsadsi */
|
||||
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01, /* [ 6] OBJ_pkcs */
|
||||
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x02, /* [ 13] OBJ_md2 */
|
||||
@@ -1082,9 +1082,12 @@ static const unsigned char so[7813] = {
|
||||
0x2B,0x06,0x01,0x04,0x01,0x8D,0x3A,0x0C,0x02,0x01, /* [ 7784] OBJ_blake2bmac */
|
||||
0x2B,0x06,0x01,0x04,0x01,0x8D,0x3A,0x0C,0x02,0x02, /* [ 7794] OBJ_blake2smac */
|
||||
0x2A,0x81,0x1C,0xCF,0x55,0x01,0x83,0x75, /* [ 7804] OBJ_SM2_with_SM3 */
|
||||
0x2B,0x06,0x01,0x05,0x05,0x07,0x08,0x09, /* [ 7812] OBJ_id_on_SmtpUTF8Mailbox */
|
||||
0x2B,0x06,0x01,0x05,0x05,0x07,0x08,0x05, /* [ 7820] OBJ_XmppAddr */
|
||||
0x2B,0x06,0x01,0x05,0x05,0x07,0x08,0x07, /* [ 7828] OBJ_SRVName */
|
||||
};
|
||||
|
||||
#define NUM_NID 1209
|
||||
#define NUM_NID 1212
|
||||
static const ASN1_OBJECT nid_objs[NUM_NID] = {
|
||||
{"UNDEF", "undefined", NID_undef},
|
||||
{"rsadsi", "RSA Data Security, Inc.", NID_rsadsi, 6, &so[0]},
|
||||
@@ -2294,10 +2297,13 @@ static const ASN1_OBJECT nid_objs[NUM_NID] = {
|
||||
{"SSKDF", "sskdf", NID_sskdf},
|
||||
{"X963KDF", "x963kdf", NID_x963kdf},
|
||||
{"X942KDF", "x942kdf", NID_x942kdf},
|
||||
{"id-on-SmtpUTF8Mailbox", "Smtp UTF8 Mailbox", NID_id_on_SmtpUTF8Mailbox, 8, &so[7812]},
|
||||
{"id-on-xmppAddr", "XmppAddr", NID_XmppAddr, 8, &so[7820]},
|
||||
{"id-on-dnsSRV", "SRVName", NID_SRVName, 8, &so[7828]},
|
||||
{"ChaCha20-Poly1305-D", "chacha20-poly1305-draft", NID_chacha20_poly1305_draft},
|
||||
};
|
||||
|
||||
#define NUM_SN 1200
|
||||
#define NUM_SN 1203
|
||||
static const unsigned int sn_objs[NUM_SN] = {
|
||||
364, /* "AD_DVCS" */
|
||||
419, /* "AES-128-CBC" */
|
||||
@@ -2420,7 +2426,7 @@ static const unsigned int sn_objs[NUM_SN] = {
|
||||
417, /* "CSPName" */
|
||||
1019, /* "ChaCha20" */
|
||||
1018, /* "ChaCha20-Poly1305" */
|
||||
1208, /* "ChaCha20-Poly1305-D" */
|
||||
1211, /* "ChaCha20-Poly1305-D" */
|
||||
367, /* "CrlID" */
|
||||
391, /* "DC" */
|
||||
31, /* "DES-CBC" */
|
||||
@@ -2953,8 +2959,11 @@ static const unsigned int sn_objs[NUM_SN] = {
|
||||
279, /* "id-mod-qualified-cert-93" */
|
||||
281, /* "id-mod-timestamp-protocol" */
|
||||
264, /* "id-on" */
|
||||
1208, /* "id-on-SmtpUTF8Mailbox" */
|
||||
1210, /* "id-on-dnsSRV" */
|
||||
858, /* "id-on-permanentIdentifier" */
|
||||
347, /* "id-on-personalData" */
|
||||
1209, /* "id-on-xmppAddr" */
|
||||
265, /* "id-pda" */
|
||||
352, /* "id-pda-countryOfCitizenship" */
|
||||
353, /* "id-pda-countryOfResidence" */
|
||||
@@ -3501,7 +3510,7 @@ static const unsigned int sn_objs[NUM_SN] = {
|
||||
1093, /* "x509ExtAdmission" */
|
||||
};
|
||||
|
||||
#define NUM_LN 1200
|
||||
#define NUM_LN 1203
|
||||
static const unsigned int ln_objs[NUM_LN] = {
|
||||
363, /* "AD Time Stamping" */
|
||||
405, /* "ANSI X9.62" */
|
||||
@@ -3660,6 +3669,7 @@ static const unsigned int ln_objs[NUM_LN] = {
|
||||
1204, /* "SM2-with-SM3" */
|
||||
1006, /* "SNILS" */
|
||||
387, /* "SNMPv2" */
|
||||
1210, /* "SRVName" */
|
||||
1025, /* "SSH Client" */
|
||||
1026, /* "SSH Server" */
|
||||
512, /* "Secure Electronic Transactions" */
|
||||
@@ -3672,6 +3682,7 @@ static const unsigned int ln_objs[NUM_LN] = {
|
||||
1033, /* "Signing KDC Response" */
|
||||
1008, /* "Signing Tool of Issuer" */
|
||||
1007, /* "Signing Tool of Subject" */
|
||||
1208, /* "Smtp UTF8 Mailbox" */
|
||||
143, /* "Strong Extranet ID" */
|
||||
398, /* "Subject Information Access" */
|
||||
1020, /* "TLS Feature" */
|
||||
@@ -3709,6 +3720,7 @@ static const unsigned int ln_objs[NUM_LN] = {
|
||||
920, /* "X9.42 DH" */
|
||||
184, /* "X9.57" */
|
||||
185, /* "X9.57 CM ?" */
|
||||
1209, /* "XmppAddr" */
|
||||
478, /* "aRecord" */
|
||||
289, /* "aaControls" */
|
||||
287, /* "ac-auditEntity" */
|
||||
@@ -3886,7 +3898,7 @@ static const unsigned int ln_objs[NUM_LN] = {
|
||||
883, /* "certificateRevocationList" */
|
||||
1019, /* "chacha20" */
|
||||
1018, /* "chacha20-poly1305" */
|
||||
1208, /* "chacha20-poly1305-draft" */
|
||||
1211, /* "chacha20-poly1305-draft" */
|
||||
54, /* "challengePassword" */
|
||||
407, /* "characteristic-two-field" */
|
||||
395, /* "clearance" */
|
||||
@@ -4705,7 +4717,7 @@ static const unsigned int ln_objs[NUM_LN] = {
|
||||
125, /* "zlib compression" */
|
||||
};
|
||||
|
||||
#define NUM_OBJ 1077
|
||||
#define NUM_OBJ 1080
|
||||
static const unsigned int obj_objs[NUM_OBJ] = {
|
||||
0, /* OBJ_undef 0 */
|
||||
181, /* OBJ_iso 1 */
|
||||
@@ -5355,6 +5367,9 @@ static const unsigned int obj_objs[NUM_OBJ] = {
|
||||
346, /* OBJ_id_cmc_confirmCertAcceptance 1 3 6 1 5 5 7 7 24 */
|
||||
347, /* OBJ_id_on_personalData 1 3 6 1 5 5 7 8 1 */
|
||||
858, /* OBJ_id_on_permanentIdentifier 1 3 6 1 5 5 7 8 3 */
|
||||
1209, /* OBJ_XmppAddr 1 3 6 1 5 5 7 8 5 */
|
||||
1210, /* OBJ_SRVName 1 3 6 1 5 5 7 8 7 */
|
||||
1208, /* OBJ_id_on_SmtpUTF8Mailbox 1 3 6 1 5 5 7 8 9 */
|
||||
348, /* OBJ_id_pda_dateOfBirth 1 3 6 1 5 5 7 9 1 */
|
||||
349, /* OBJ_id_pda_placeOfBirth 1 3 6 1 5 5 7 9 2 */
|
||||
351, /* OBJ_id_pda_gender 1 3 6 1 5 5 7 9 3 */
|
||||
|
||||
@@ -1205,4 +1205,7 @@ SM2_with_SM3 1204
|
||||
sskdf 1205
|
||||
x963kdf 1206
|
||||
x942kdf 1207
|
||||
chacha20_poly1305_draft 1208
|
||||
id_on_SmtpUTF8Mailbox 1208
|
||||
XmppAddr 1209
|
||||
SRVName 1210
|
||||
chacha20_poly1305_draft 1211
|
||||
@@ -609,6 +609,9 @@ id-cmc 24 : id-cmc-confirmCertAcceptance
|
||||
# other names
|
||||
id-on 1 : id-on-personalData
|
||||
id-on 3 : id-on-permanentIdentifier : Permanent Identifier
|
||||
id-on 5 : id-on-xmppAddr : XmppAddr
|
||||
id-on 7 : id-on-dnsSRV : SRVName
|
||||
id-on 9 : id-on-SmtpUTF8Mailbox : Smtp UTF8 Mailbox
|
||||
|
||||
# personal data attributes
|
||||
id-pda 1 : id-pda-dateOfBirth
|
||||
|
||||
@@ -0,0 +1,1705 @@
|
||||
# CCITT was renamed to ITU-T quite some time ago
|
||||
0 : ITU-T : itu-t
|
||||
!Alias ccitt itu-t
|
||||
|
||||
1 : ISO : iso
|
||||
|
||||
2 : JOINT-ISO-ITU-T : joint-iso-itu-t
|
||||
!Alias joint-iso-ccitt joint-iso-itu-t
|
||||
|
||||
iso 2 : member-body : ISO Member Body
|
||||
|
||||
iso 3 : identified-organization
|
||||
|
||||
# GMAC OID
|
||||
iso 0 9797 3 4 : GMAC : gmac
|
||||
|
||||
# HMAC OIDs
|
||||
identified-organization 6 1 5 5 8 1 1 : HMAC-MD5 : hmac-md5
|
||||
identified-organization 6 1 5 5 8 1 2 : HMAC-SHA1 : hmac-sha1
|
||||
|
||||
# "1.3.36.8.3.3"
|
||||
identified-organization 36 8 3 3 : x509ExtAdmission : Professional Information or basis for Admission
|
||||
|
||||
identified-organization 132 : certicom-arc
|
||||
|
||||
identified-organization 111 : ieee
|
||||
ieee 2 1619 : ieee-siswg : IEEE Security in Storage Working Group
|
||||
|
||||
joint-iso-itu-t 23 : international-organizations : International Organizations
|
||||
|
||||
international-organizations 43 : wap
|
||||
wap 1 : wap-wsg
|
||||
|
||||
joint-iso-itu-t 5 1 5 : selected-attribute-types : Selected Attribute Types
|
||||
|
||||
selected-attribute-types 55 : clearance
|
||||
|
||||
member-body 840 : ISO-US : ISO US Member Body
|
||||
ISO-US 10040 : X9-57 : X9.57
|
||||
X9-57 4 : X9cm : X9.57 CM ?
|
||||
|
||||
member-body 156 : ISO-CN : ISO CN Member Body
|
||||
ISO-CN 10197 : oscca
|
||||
oscca 1 : sm-scheme
|
||||
|
||||
!Cname dsa
|
||||
X9cm 1 : DSA : dsaEncryption
|
||||
X9cm 3 : DSA-SHA1 : dsaWithSHA1
|
||||
|
||||
|
||||
ISO-US 10045 : ansi-X9-62 : ANSI X9.62
|
||||
!module X9-62
|
||||
!Alias id-fieldType ansi-X9-62 1
|
||||
X9-62_id-fieldType 1 : prime-field
|
||||
X9-62_id-fieldType 2 : characteristic-two-field
|
||||
X9-62_characteristic-two-field 3 : id-characteristic-two-basis
|
||||
X9-62_id-characteristic-two-basis 1 : onBasis
|
||||
X9-62_id-characteristic-two-basis 2 : tpBasis
|
||||
X9-62_id-characteristic-two-basis 3 : ppBasis
|
||||
!Alias id-publicKeyType ansi-X9-62 2
|
||||
X9-62_id-publicKeyType 1 : id-ecPublicKey
|
||||
!Alias ellipticCurve ansi-X9-62 3
|
||||
!Alias c-TwoCurve X9-62_ellipticCurve 0
|
||||
X9-62_c-TwoCurve 1 : c2pnb163v1
|
||||
X9-62_c-TwoCurve 2 : c2pnb163v2
|
||||
X9-62_c-TwoCurve 3 : c2pnb163v3
|
||||
X9-62_c-TwoCurve 4 : c2pnb176v1
|
||||
X9-62_c-TwoCurve 5 : c2tnb191v1
|
||||
X9-62_c-TwoCurve 6 : c2tnb191v2
|
||||
X9-62_c-TwoCurve 7 : c2tnb191v3
|
||||
X9-62_c-TwoCurve 8 : c2onb191v4
|
||||
X9-62_c-TwoCurve 9 : c2onb191v5
|
||||
X9-62_c-TwoCurve 10 : c2pnb208w1
|
||||
X9-62_c-TwoCurve 11 : c2tnb239v1
|
||||
X9-62_c-TwoCurve 12 : c2tnb239v2
|
||||
X9-62_c-TwoCurve 13 : c2tnb239v3
|
||||
X9-62_c-TwoCurve 14 : c2onb239v4
|
||||
X9-62_c-TwoCurve 15 : c2onb239v5
|
||||
X9-62_c-TwoCurve 16 : c2pnb272w1
|
||||
X9-62_c-TwoCurve 17 : c2pnb304w1
|
||||
X9-62_c-TwoCurve 18 : c2tnb359v1
|
||||
X9-62_c-TwoCurve 19 : c2pnb368w1
|
||||
X9-62_c-TwoCurve 20 : c2tnb431r1
|
||||
!Alias primeCurve X9-62_ellipticCurve 1
|
||||
X9-62_primeCurve 1 : prime192v1
|
||||
X9-62_primeCurve 2 : prime192v2
|
||||
X9-62_primeCurve 3 : prime192v3
|
||||
X9-62_primeCurve 4 : prime239v1
|
||||
X9-62_primeCurve 5 : prime239v2
|
||||
X9-62_primeCurve 6 : prime239v3
|
||||
X9-62_primeCurve 7 : prime256v1
|
||||
!Alias id-ecSigType ansi-X9-62 4
|
||||
!global
|
||||
X9-62_id-ecSigType 1 : ecdsa-with-SHA1
|
||||
X9-62_id-ecSigType 2 : ecdsa-with-Recommended
|
||||
X9-62_id-ecSigType 3 : ecdsa-with-Specified
|
||||
ecdsa-with-Specified 1 : ecdsa-with-SHA224
|
||||
ecdsa-with-Specified 2 : ecdsa-with-SHA256
|
||||
ecdsa-with-Specified 3 : ecdsa-with-SHA384
|
||||
ecdsa-with-Specified 4 : ecdsa-with-SHA512
|
||||
|
||||
# SECG curve OIDs from "SEC 2: Recommended Elliptic Curve Domain Parameters"
|
||||
# (http://www.secg.org/)
|
||||
!Alias secg_ellipticCurve certicom-arc 0
|
||||
# SECG prime curves OIDs
|
||||
secg-ellipticCurve 6 : secp112r1
|
||||
secg-ellipticCurve 7 : secp112r2
|
||||
secg-ellipticCurve 28 : secp128r1
|
||||
secg-ellipticCurve 29 : secp128r2
|
||||
secg-ellipticCurve 9 : secp160k1
|
||||
secg-ellipticCurve 8 : secp160r1
|
||||
secg-ellipticCurve 30 : secp160r2
|
||||
secg-ellipticCurve 31 : secp192k1
|
||||
# NOTE: the curve secp192r1 is the same as prime192v1 defined above
|
||||
# and is therefore omitted
|
||||
secg-ellipticCurve 32 : secp224k1
|
||||
secg-ellipticCurve 33 : secp224r1
|
||||
secg-ellipticCurve 10 : secp256k1
|
||||
# NOTE: the curve secp256r1 is the same as prime256v1 defined above
|
||||
# and is therefore omitted
|
||||
secg-ellipticCurve 34 : secp384r1
|
||||
secg-ellipticCurve 35 : secp521r1
|
||||
# SECG characteristic two curves OIDs
|
||||
secg-ellipticCurve 4 : sect113r1
|
||||
secg-ellipticCurve 5 : sect113r2
|
||||
secg-ellipticCurve 22 : sect131r1
|
||||
secg-ellipticCurve 23 : sect131r2
|
||||
secg-ellipticCurve 1 : sect163k1
|
||||
secg-ellipticCurve 2 : sect163r1
|
||||
secg-ellipticCurve 15 : sect163r2
|
||||
secg-ellipticCurve 24 : sect193r1
|
||||
secg-ellipticCurve 25 : sect193r2
|
||||
secg-ellipticCurve 26 : sect233k1
|
||||
secg-ellipticCurve 27 : sect233r1
|
||||
secg-ellipticCurve 3 : sect239k1
|
||||
secg-ellipticCurve 16 : sect283k1
|
||||
secg-ellipticCurve 17 : sect283r1
|
||||
secg-ellipticCurve 36 : sect409k1
|
||||
secg-ellipticCurve 37 : sect409r1
|
||||
secg-ellipticCurve 38 : sect571k1
|
||||
secg-ellipticCurve 39 : sect571r1
|
||||
|
||||
# WAP/TLS curve OIDs (http://www.wapforum.org/)
|
||||
!Alias wap-wsg-idm-ecid wap-wsg 4
|
||||
wap-wsg-idm-ecid 1 : wap-wsg-idm-ecid-wtls1
|
||||
wap-wsg-idm-ecid 3 : wap-wsg-idm-ecid-wtls3
|
||||
wap-wsg-idm-ecid 4 : wap-wsg-idm-ecid-wtls4
|
||||
wap-wsg-idm-ecid 5 : wap-wsg-idm-ecid-wtls5
|
||||
wap-wsg-idm-ecid 6 : wap-wsg-idm-ecid-wtls6
|
||||
wap-wsg-idm-ecid 7 : wap-wsg-idm-ecid-wtls7
|
||||
wap-wsg-idm-ecid 8 : wap-wsg-idm-ecid-wtls8
|
||||
wap-wsg-idm-ecid 9 : wap-wsg-idm-ecid-wtls9
|
||||
wap-wsg-idm-ecid 10 : wap-wsg-idm-ecid-wtls10
|
||||
wap-wsg-idm-ecid 11 : wap-wsg-idm-ecid-wtls11
|
||||
wap-wsg-idm-ecid 12 : wap-wsg-idm-ecid-wtls12
|
||||
|
||||
|
||||
ISO-US 113533 7 66 10 : CAST5-CBC : cast5-cbc
|
||||
: CAST5-ECB : cast5-ecb
|
||||
!Cname cast5-cfb64
|
||||
: CAST5-CFB : cast5-cfb
|
||||
!Cname cast5-ofb64
|
||||
: CAST5-OFB : cast5-ofb
|
||||
!Cname pbeWithMD5AndCast5-CBC
|
||||
ISO-US 113533 7 66 12 : : pbeWithMD5AndCast5CBC
|
||||
|
||||
# Macs for CMP and CRMF
|
||||
ISO-US 113533 7 66 13 : id-PasswordBasedMAC : password based MAC
|
||||
ISO-US 113533 7 66 30 : id-DHBasedMac : Diffie-Hellman based MAC
|
||||
|
||||
ISO-US 113549 : rsadsi : RSA Data Security, Inc.
|
||||
|
||||
rsadsi 1 : pkcs : RSA Data Security, Inc. PKCS
|
||||
|
||||
pkcs 1 : pkcs1
|
||||
pkcs1 1 : : rsaEncryption
|
||||
pkcs1 2 : RSA-MD2 : md2WithRSAEncryption
|
||||
pkcs1 3 : RSA-MD4 : md4WithRSAEncryption
|
||||
pkcs1 4 : RSA-MD5 : md5WithRSAEncryption
|
||||
pkcs1 5 : RSA-SHA1 : sha1WithRSAEncryption
|
||||
# According to PKCS #1 version 2.1
|
||||
pkcs1 7 : RSAES-OAEP : rsaesOaep
|
||||
pkcs1 8 : MGF1 : mgf1
|
||||
pkcs1 9 : PSPECIFIED : pSpecified
|
||||
pkcs1 10 : RSASSA-PSS : rsassaPss
|
||||
|
||||
pkcs1 11 : RSA-SHA256 : sha256WithRSAEncryption
|
||||
pkcs1 12 : RSA-SHA384 : sha384WithRSAEncryption
|
||||
pkcs1 13 : RSA-SHA512 : sha512WithRSAEncryption
|
||||
pkcs1 14 : RSA-SHA224 : sha224WithRSAEncryption
|
||||
pkcs1 15 : RSA-SHA512/224 : sha512-224WithRSAEncryption
|
||||
pkcs1 16 : RSA-SHA512/256 : sha512-256WithRSAEncryption
|
||||
|
||||
pkcs 3 : pkcs3
|
||||
pkcs3 1 : : dhKeyAgreement
|
||||
|
||||
pkcs 5 : pkcs5
|
||||
pkcs5 1 : PBE-MD2-DES : pbeWithMD2AndDES-CBC
|
||||
pkcs5 3 : PBE-MD5-DES : pbeWithMD5AndDES-CBC
|
||||
pkcs5 4 : PBE-MD2-RC2-64 : pbeWithMD2AndRC2-CBC
|
||||
pkcs5 6 : PBE-MD5-RC2-64 : pbeWithMD5AndRC2-CBC
|
||||
pkcs5 10 : PBE-SHA1-DES : pbeWithSHA1AndDES-CBC
|
||||
pkcs5 11 : PBE-SHA1-RC2-64 : pbeWithSHA1AndRC2-CBC
|
||||
!Cname id_pbkdf2
|
||||
pkcs5 12 : : PBKDF2
|
||||
!Cname pbes2
|
||||
pkcs5 13 : : PBES2
|
||||
!Cname pbmac1
|
||||
pkcs5 14 : : PBMAC1
|
||||
|
||||
pkcs 7 : pkcs7
|
||||
pkcs7 1 : : pkcs7-data
|
||||
!Cname pkcs7-signed
|
||||
pkcs7 2 : : pkcs7-signedData
|
||||
!Cname pkcs7-enveloped
|
||||
pkcs7 3 : : pkcs7-envelopedData
|
||||
!Cname pkcs7-signedAndEnveloped
|
||||
pkcs7 4 : : pkcs7-signedAndEnvelopedData
|
||||
!Cname pkcs7-digest
|
||||
pkcs7 5 : : pkcs7-digestData
|
||||
!Cname pkcs7-encrypted
|
||||
pkcs7 6 : : pkcs7-encryptedData
|
||||
|
||||
pkcs 9 : pkcs9
|
||||
!module pkcs9
|
||||
pkcs9 1 : : emailAddress
|
||||
pkcs9 2 : : unstructuredName
|
||||
pkcs9 3 : : contentType
|
||||
pkcs9 4 : : messageDigest
|
||||
pkcs9 5 : : signingTime
|
||||
pkcs9 6 : : countersignature
|
||||
pkcs9 7 : : challengePassword
|
||||
pkcs9 8 : : unstructuredAddress
|
||||
!Cname extCertAttributes
|
||||
pkcs9 9 : : extendedCertificateAttributes
|
||||
!global
|
||||
|
||||
!Cname ext-req
|
||||
pkcs9 14 : extReq : Extension Request
|
||||
|
||||
!Cname SMIMECapabilities
|
||||
pkcs9 15 : SMIME-CAPS : S/MIME Capabilities
|
||||
|
||||
# S/MIME
|
||||
!Cname SMIME
|
||||
pkcs9 16 : SMIME : S/MIME
|
||||
SMIME 0 : id-smime-mod
|
||||
SMIME 1 : id-smime-ct
|
||||
SMIME 2 : id-smime-aa
|
||||
SMIME 3 : id-smime-alg
|
||||
SMIME 4 : id-smime-cd
|
||||
SMIME 5 : id-smime-spq
|
||||
SMIME 6 : id-smime-cti
|
||||
|
||||
# S/MIME Modules
|
||||
id-smime-mod 1 : id-smime-mod-cms
|
||||
id-smime-mod 2 : id-smime-mod-ess
|
||||
id-smime-mod 3 : id-smime-mod-oid
|
||||
id-smime-mod 4 : id-smime-mod-msg-v3
|
||||
id-smime-mod 5 : id-smime-mod-ets-eSignature-88
|
||||
id-smime-mod 6 : id-smime-mod-ets-eSignature-97
|
||||
id-smime-mod 7 : id-smime-mod-ets-eSigPolicy-88
|
||||
id-smime-mod 8 : id-smime-mod-ets-eSigPolicy-97
|
||||
|
||||
# S/MIME Content Types
|
||||
id-smime-ct 1 : id-smime-ct-receipt
|
||||
id-smime-ct 2 : id-smime-ct-authData
|
||||
id-smime-ct 3 : id-smime-ct-publishCert
|
||||
id-smime-ct 4 : id-smime-ct-TSTInfo
|
||||
id-smime-ct 5 : id-smime-ct-TDTInfo
|
||||
id-smime-ct 6 : id-smime-ct-contentInfo
|
||||
id-smime-ct 7 : id-smime-ct-DVCSRequestData
|
||||
id-smime-ct 8 : id-smime-ct-DVCSResponseData
|
||||
id-smime-ct 9 : id-smime-ct-compressedData
|
||||
id-smime-ct 19 : id-smime-ct-contentCollection
|
||||
id-smime-ct 23 : id-smime-ct-authEnvelopedData
|
||||
id-smime-ct 27 : id-ct-asciiTextWithCRLF
|
||||
id-smime-ct 28 : id-ct-xml
|
||||
|
||||
# S/MIME Attributes
|
||||
id-smime-aa 1 : id-smime-aa-receiptRequest
|
||||
id-smime-aa 2 : id-smime-aa-securityLabel
|
||||
id-smime-aa 3 : id-smime-aa-mlExpandHistory
|
||||
id-smime-aa 4 : id-smime-aa-contentHint
|
||||
id-smime-aa 5 : id-smime-aa-msgSigDigest
|
||||
# obsolete
|
||||
id-smime-aa 6 : id-smime-aa-encapContentType
|
||||
id-smime-aa 7 : id-smime-aa-contentIdentifier
|
||||
# obsolete
|
||||
id-smime-aa 8 : id-smime-aa-macValue
|
||||
id-smime-aa 9 : id-smime-aa-equivalentLabels
|
||||
id-smime-aa 10 : id-smime-aa-contentReference
|
||||
id-smime-aa 11 : id-smime-aa-encrypKeyPref
|
||||
id-smime-aa 12 : id-smime-aa-signingCertificate
|
||||
id-smime-aa 13 : id-smime-aa-smimeEncryptCerts
|
||||
id-smime-aa 14 : id-smime-aa-timeStampToken
|
||||
id-smime-aa 15 : id-smime-aa-ets-sigPolicyId
|
||||
id-smime-aa 16 : id-smime-aa-ets-commitmentType
|
||||
id-smime-aa 17 : id-smime-aa-ets-signerLocation
|
||||
id-smime-aa 18 : id-smime-aa-ets-signerAttr
|
||||
id-smime-aa 19 : id-smime-aa-ets-otherSigCert
|
||||
id-smime-aa 20 : id-smime-aa-ets-contentTimestamp
|
||||
id-smime-aa 21 : id-smime-aa-ets-CertificateRefs
|
||||
id-smime-aa 22 : id-smime-aa-ets-RevocationRefs
|
||||
id-smime-aa 23 : id-smime-aa-ets-certValues
|
||||
id-smime-aa 24 : id-smime-aa-ets-revocationValues
|
||||
id-smime-aa 25 : id-smime-aa-ets-escTimeStamp
|
||||
id-smime-aa 26 : id-smime-aa-ets-certCRLTimestamp
|
||||
id-smime-aa 27 : id-smime-aa-ets-archiveTimeStamp
|
||||
id-smime-aa 28 : id-smime-aa-signatureType
|
||||
id-smime-aa 29 : id-smime-aa-dvcs-dvc
|
||||
id-smime-aa 47 : id-smime-aa-signingCertificateV2
|
||||
|
||||
# S/MIME Algorithm Identifiers
|
||||
# obsolete
|
||||
id-smime-alg 1 : id-smime-alg-ESDHwith3DES
|
||||
# obsolete
|
||||
id-smime-alg 2 : id-smime-alg-ESDHwithRC2
|
||||
# obsolete
|
||||
id-smime-alg 3 : id-smime-alg-3DESwrap
|
||||
# obsolete
|
||||
id-smime-alg 4 : id-smime-alg-RC2wrap
|
||||
id-smime-alg 5 : id-smime-alg-ESDH
|
||||
id-smime-alg 6 : id-smime-alg-CMS3DESwrap
|
||||
id-smime-alg 7 : id-smime-alg-CMSRC2wrap
|
||||
id-smime-alg 9 : id-alg-PWRI-KEK
|
||||
|
||||
# S/MIME Certificate Distribution
|
||||
id-smime-cd 1 : id-smime-cd-ldap
|
||||
|
||||
# S/MIME Signature Policy Qualifier
|
||||
id-smime-spq 1 : id-smime-spq-ets-sqt-uri
|
||||
id-smime-spq 2 : id-smime-spq-ets-sqt-unotice
|
||||
|
||||
# S/MIME Commitment Type Identifier
|
||||
id-smime-cti 1 : id-smime-cti-ets-proofOfOrigin
|
||||
id-smime-cti 2 : id-smime-cti-ets-proofOfReceipt
|
||||
id-smime-cti 3 : id-smime-cti-ets-proofOfDelivery
|
||||
id-smime-cti 4 : id-smime-cti-ets-proofOfSender
|
||||
id-smime-cti 5 : id-smime-cti-ets-proofOfApproval
|
||||
id-smime-cti 6 : id-smime-cti-ets-proofOfCreation
|
||||
|
||||
pkcs9 20 : : friendlyName
|
||||
pkcs9 21 : : localKeyID
|
||||
!Cname ms-csp-name
|
||||
1 3 6 1 4 1 311 17 1 : CSPName : Microsoft CSP Name
|
||||
1 3 6 1 4 1 311 17 2 : LocalKeySet : Microsoft Local Key set
|
||||
!Alias certTypes pkcs9 22
|
||||
certTypes 1 : : x509Certificate
|
||||
certTypes 2 : : sdsiCertificate
|
||||
!Alias crlTypes pkcs9 23
|
||||
crlTypes 1 : : x509Crl
|
||||
|
||||
!Alias pkcs12 pkcs 12
|
||||
!Alias pkcs12-pbeids pkcs12 1
|
||||
|
||||
!Cname pbe-WithSHA1And128BitRC4
|
||||
pkcs12-pbeids 1 : PBE-SHA1-RC4-128 : pbeWithSHA1And128BitRC4
|
||||
!Cname pbe-WithSHA1And40BitRC4
|
||||
pkcs12-pbeids 2 : PBE-SHA1-RC4-40 : pbeWithSHA1And40BitRC4
|
||||
!Cname pbe-WithSHA1And3_Key_TripleDES-CBC
|
||||
pkcs12-pbeids 3 : PBE-SHA1-3DES : pbeWithSHA1And3-KeyTripleDES-CBC
|
||||
!Cname pbe-WithSHA1And2_Key_TripleDES-CBC
|
||||
pkcs12-pbeids 4 : PBE-SHA1-2DES : pbeWithSHA1And2-KeyTripleDES-CBC
|
||||
!Cname pbe-WithSHA1And128BitRC2-CBC
|
||||
pkcs12-pbeids 5 : PBE-SHA1-RC2-128 : pbeWithSHA1And128BitRC2-CBC
|
||||
!Cname pbe-WithSHA1And40BitRC2-CBC
|
||||
pkcs12-pbeids 6 : PBE-SHA1-RC2-40 : pbeWithSHA1And40BitRC2-CBC
|
||||
|
||||
!Alias pkcs12-Version1 pkcs12 10
|
||||
!Alias pkcs12-BagIds pkcs12-Version1 1
|
||||
pkcs12-BagIds 1 : : keyBag
|
||||
pkcs12-BagIds 2 : : pkcs8ShroudedKeyBag
|
||||
pkcs12-BagIds 3 : : certBag
|
||||
pkcs12-BagIds 4 : : crlBag
|
||||
pkcs12-BagIds 5 : : secretBag
|
||||
pkcs12-BagIds 6 : : safeContentsBag
|
||||
|
||||
rsadsi 2 2 : MD2 : md2
|
||||
rsadsi 2 4 : MD4 : md4
|
||||
rsadsi 2 5 : MD5 : md5
|
||||
: MD5-SHA1 : md5-sha1
|
||||
rsadsi 2 6 : : hmacWithMD5
|
||||
rsadsi 2 7 : : hmacWithSHA1
|
||||
|
||||
sm-scheme 301 : SM2 : sm2
|
||||
|
||||
sm-scheme 401 : SM3 : sm3
|
||||
sm-scheme 504 : RSA-SM3 : sm3WithRSAEncryption
|
||||
|
||||
sm-scheme 501 : SM2-SM3 : SM2-with-SM3
|
||||
|
||||
# From RFC4231
|
||||
rsadsi 2 8 : : hmacWithSHA224
|
||||
rsadsi 2 9 : : hmacWithSHA256
|
||||
rsadsi 2 10 : : hmacWithSHA384
|
||||
rsadsi 2 11 : : hmacWithSHA512
|
||||
|
||||
# From RFC8018
|
||||
rsadsi 2 12 : : hmacWithSHA512-224
|
||||
rsadsi 2 13 : : hmacWithSHA512-256
|
||||
|
||||
rsadsi 3 2 : RC2-CBC : rc2-cbc
|
||||
: RC2-ECB : rc2-ecb
|
||||
!Cname rc2-cfb64
|
||||
: RC2-CFB : rc2-cfb
|
||||
!Cname rc2-ofb64
|
||||
: RC2-OFB : rc2-ofb
|
||||
: RC2-40-CBC : rc2-40-cbc
|
||||
: RC2-64-CBC : rc2-64-cbc
|
||||
rsadsi 3 4 : RC4 : rc4
|
||||
: RC4-40 : rc4-40
|
||||
rsadsi 3 7 : DES-EDE3-CBC : des-ede3-cbc
|
||||
rsadsi 3 8 : RC5-CBC : rc5-cbc
|
||||
: RC5-ECB : rc5-ecb
|
||||
!Cname rc5-cfb64
|
||||
: RC5-CFB : rc5-cfb
|
||||
!Cname rc5-ofb64
|
||||
: RC5-OFB : rc5-ofb
|
||||
|
||||
!Cname ms-ext-req
|
||||
1 3 6 1 4 1 311 2 1 14 : msExtReq : Microsoft Extension Request
|
||||
!Cname ms-code-ind
|
||||
1 3 6 1 4 1 311 2 1 21 : msCodeInd : Microsoft Individual Code Signing
|
||||
!Cname ms-code-com
|
||||
1 3 6 1 4 1 311 2 1 22 : msCodeCom : Microsoft Commercial Code Signing
|
||||
!Cname ms-ctl-sign
|
||||
1 3 6 1 4 1 311 10 3 1 : msCTLSign : Microsoft Trust List Signing
|
||||
!Cname ms-sgc
|
||||
1 3 6 1 4 1 311 10 3 3 : msSGC : Microsoft Server Gated Crypto
|
||||
!Cname ms-efs
|
||||
1 3 6 1 4 1 311 10 3 4 : msEFS : Microsoft Encrypted File System
|
||||
!Cname ms-smartcard-login
|
||||
1 3 6 1 4 1 311 20 2 2 : msSmartcardLogin : Microsoft Smartcardlogin
|
||||
!Cname ms-upn
|
||||
1 3 6 1 4 1 311 20 2 3 : msUPN : Microsoft Universal Principal Name
|
||||
|
||||
1 3 6 1 4 1 188 7 1 1 2 : IDEA-CBC : idea-cbc
|
||||
: IDEA-ECB : idea-ecb
|
||||
!Cname idea-cfb64
|
||||
: IDEA-CFB : idea-cfb
|
||||
!Cname idea-ofb64
|
||||
: IDEA-OFB : idea-ofb
|
||||
|
||||
1 3 6 1 4 1 3029 1 2 : BF-CBC : bf-cbc
|
||||
: BF-ECB : bf-ecb
|
||||
!Cname bf-cfb64
|
||||
: BF-CFB : bf-cfb
|
||||
!Cname bf-ofb64
|
||||
: BF-OFB : bf-ofb
|
||||
|
||||
!Cname id-pkix
|
||||
1 3 6 1 5 5 7 : PKIX
|
||||
|
||||
# PKIX Arcs
|
||||
id-pkix 0 : id-pkix-mod
|
||||
id-pkix 1 : id-pe
|
||||
id-pkix 2 : id-qt
|
||||
id-pkix 3 : id-kp
|
||||
id-pkix 4 : id-it
|
||||
id-pkix 5 : id-pkip
|
||||
id-pkix 6 : id-alg
|
||||
id-pkix 7 : id-cmc
|
||||
id-pkix 8 : id-on
|
||||
id-pkix 9 : id-pda
|
||||
id-pkix 10 : id-aca
|
||||
id-pkix 11 : id-qcs
|
||||
id-pkix 12 : id-cct
|
||||
id-pkix 21 : id-ppl
|
||||
id-pkix 48 : id-ad
|
||||
|
||||
# PKIX Modules
|
||||
id-pkix-mod 1 : id-pkix1-explicit-88
|
||||
id-pkix-mod 2 : id-pkix1-implicit-88
|
||||
id-pkix-mod 3 : id-pkix1-explicit-93
|
||||
id-pkix-mod 4 : id-pkix1-implicit-93
|
||||
id-pkix-mod 5 : id-mod-crmf
|
||||
id-pkix-mod 6 : id-mod-cmc
|
||||
id-pkix-mod 7 : id-mod-kea-profile-88
|
||||
id-pkix-mod 8 : id-mod-kea-profile-93
|
||||
id-pkix-mod 9 : id-mod-cmp
|
||||
id-pkix-mod 10 : id-mod-qualified-cert-88
|
||||
id-pkix-mod 11 : id-mod-qualified-cert-93
|
||||
id-pkix-mod 12 : id-mod-attribute-cert
|
||||
id-pkix-mod 13 : id-mod-timestamp-protocol
|
||||
id-pkix-mod 14 : id-mod-ocsp
|
||||
id-pkix-mod 15 : id-mod-dvcs
|
||||
id-pkix-mod 16 : id-mod-cmp2000
|
||||
|
||||
# PKIX Private Extensions
|
||||
!Cname info-access
|
||||
id-pe 1 : authorityInfoAccess : Authority Information Access
|
||||
id-pe 2 : biometricInfo : Biometric Info
|
||||
id-pe 3 : qcStatements
|
||||
id-pe 4 : ac-auditEntity
|
||||
id-pe 5 : ac-targeting
|
||||
id-pe 6 : aaControls
|
||||
id-pe 7 : sbgp-ipAddrBlock
|
||||
id-pe 8 : sbgp-autonomousSysNum
|
||||
id-pe 9 : sbgp-routerIdentifier
|
||||
id-pe 10 : ac-proxying
|
||||
!Cname sinfo-access
|
||||
id-pe 11 : subjectInfoAccess : Subject Information Access
|
||||
id-pe 14 : proxyCertInfo : Proxy Certificate Information
|
||||
id-pe 24 : tlsfeature : TLS Feature
|
||||
|
||||
# PKIX policyQualifiers for Internet policy qualifiers
|
||||
id-qt 1 : id-qt-cps : Policy Qualifier CPS
|
||||
id-qt 2 : id-qt-unotice : Policy Qualifier User Notice
|
||||
id-qt 3 : textNotice
|
||||
|
||||
# PKIX key purpose identifiers
|
||||
!Cname server-auth
|
||||
id-kp 1 : serverAuth : TLS Web Server Authentication
|
||||
!Cname client-auth
|
||||
id-kp 2 : clientAuth : TLS Web Client Authentication
|
||||
!Cname code-sign
|
||||
id-kp 3 : codeSigning : Code Signing
|
||||
!Cname email-protect
|
||||
id-kp 4 : emailProtection : E-mail Protection
|
||||
id-kp 5 : ipsecEndSystem : IPSec End System
|
||||
id-kp 6 : ipsecTunnel : IPSec Tunnel
|
||||
id-kp 7 : ipsecUser : IPSec User
|
||||
!Cname time-stamp
|
||||
id-kp 8 : timeStamping : Time Stamping
|
||||
# From OCSP spec RFC2560
|
||||
!Cname OCSP-sign
|
||||
id-kp 9 : OCSPSigning : OCSP Signing
|
||||
id-kp 10 : DVCS : dvcs
|
||||
!Cname ipsec-IKE
|
||||
id-kp 17 : ipsecIKE : ipsec Internet Key Exchange
|
||||
id-kp 18 : capwapAC : Ctrl/provision WAP Access
|
||||
id-kp 19 : capwapWTP : Ctrl/Provision WAP Termination
|
||||
!Cname sshClient
|
||||
id-kp 21 : secureShellClient : SSH Client
|
||||
!Cname sshServer
|
||||
id-kp 22 : secureShellServer : SSH Server
|
||||
id-kp 23 : sendRouter : Send Router
|
||||
id-kp 24 : sendProxiedRouter : Send Proxied Router
|
||||
id-kp 25 : sendOwner : Send Owner
|
||||
id-kp 26 : sendProxiedOwner : Send Proxied Owner
|
||||
id-kp 27 : cmcCA : CMC Certificate Authority
|
||||
id-kp 28 : cmcRA : CMC Registration Authority
|
||||
|
||||
# CMP information types
|
||||
id-it 1 : id-it-caProtEncCert
|
||||
id-it 2 : id-it-signKeyPairTypes
|
||||
id-it 3 : id-it-encKeyPairTypes
|
||||
id-it 4 : id-it-preferredSymmAlg
|
||||
id-it 5 : id-it-caKeyUpdateInfo
|
||||
id-it 6 : id-it-currentCRL
|
||||
id-it 7 : id-it-unsupportedOIDs
|
||||
# obsolete
|
||||
id-it 8 : id-it-subscriptionRequest
|
||||
# obsolete
|
||||
id-it 9 : id-it-subscriptionResponse
|
||||
id-it 10 : id-it-keyPairParamReq
|
||||
id-it 11 : id-it-keyPairParamRep
|
||||
id-it 12 : id-it-revPassphrase
|
||||
id-it 13 : id-it-implicitConfirm
|
||||
id-it 14 : id-it-confirmWaitTime
|
||||
id-it 15 : id-it-origPKIMessage
|
||||
id-it 16 : id-it-suppLangTags
|
||||
|
||||
# CRMF registration
|
||||
id-pkip 1 : id-regCtrl
|
||||
id-pkip 2 : id-regInfo
|
||||
|
||||
# CRMF registration controls
|
||||
id-regCtrl 1 : id-regCtrl-regToken
|
||||
id-regCtrl 2 : id-regCtrl-authenticator
|
||||
id-regCtrl 3 : id-regCtrl-pkiPublicationInfo
|
||||
id-regCtrl 4 : id-regCtrl-pkiArchiveOptions
|
||||
id-regCtrl 5 : id-regCtrl-oldCertID
|
||||
id-regCtrl 6 : id-regCtrl-protocolEncrKey
|
||||
|
||||
# CRMF registration information
|
||||
id-regInfo 1 : id-regInfo-utf8Pairs
|
||||
id-regInfo 2 : id-regInfo-certReq
|
||||
|
||||
# algorithms
|
||||
id-alg 1 : id-alg-des40
|
||||
id-alg 2 : id-alg-noSignature
|
||||
id-alg 3 : id-alg-dh-sig-hmac-sha1
|
||||
id-alg 4 : id-alg-dh-pop
|
||||
|
||||
# CMC controls
|
||||
id-cmc 1 : id-cmc-statusInfo
|
||||
id-cmc 2 : id-cmc-identification
|
||||
id-cmc 3 : id-cmc-identityProof
|
||||
id-cmc 4 : id-cmc-dataReturn
|
||||
id-cmc 5 : id-cmc-transactionId
|
||||
id-cmc 6 : id-cmc-senderNonce
|
||||
id-cmc 7 : id-cmc-recipientNonce
|
||||
id-cmc 8 : id-cmc-addExtensions
|
||||
id-cmc 9 : id-cmc-encryptedPOP
|
||||
id-cmc 10 : id-cmc-decryptedPOP
|
||||
id-cmc 11 : id-cmc-lraPOPWitness
|
||||
id-cmc 15 : id-cmc-getCert
|
||||
id-cmc 16 : id-cmc-getCRL
|
||||
id-cmc 17 : id-cmc-revokeRequest
|
||||
id-cmc 18 : id-cmc-regInfo
|
||||
id-cmc 19 : id-cmc-responseInfo
|
||||
id-cmc 21 : id-cmc-queryPending
|
||||
id-cmc 22 : id-cmc-popLinkRandom
|
||||
id-cmc 23 : id-cmc-popLinkWitness
|
||||
id-cmc 24 : id-cmc-confirmCertAcceptance
|
||||
|
||||
# other names
|
||||
id-on 1 : id-on-personalData
|
||||
id-on 3 : id-on-permanentIdentifier : Permanent Identifier
|
||||
id-on 5 : id-on-xmppAddr : XmppAddr
|
||||
id-on 7 : id-on-dnsSRV : SRVName
|
||||
id-on 9 : id-on-SmtpUTF8Mailbox : Smtp UTF8 Mailbox
|
||||
|
||||
# personal data attributes
|
||||
id-pda 1 : id-pda-dateOfBirth
|
||||
id-pda 2 : id-pda-placeOfBirth
|
||||
id-pda 3 : id-pda-gender
|
||||
id-pda 4 : id-pda-countryOfCitizenship
|
||||
id-pda 5 : id-pda-countryOfResidence
|
||||
|
||||
# attribute certificate attributes
|
||||
id-aca 1 : id-aca-authenticationInfo
|
||||
id-aca 2 : id-aca-accessIdentity
|
||||
id-aca 3 : id-aca-chargingIdentity
|
||||
id-aca 4 : id-aca-group
|
||||
# attention : the following seems to be obsolete, replace by 'role'
|
||||
id-aca 5 : id-aca-role
|
||||
id-aca 6 : id-aca-encAttrs
|
||||
|
||||
# qualified certificate statements
|
||||
id-qcs 1 : id-qcs-pkixQCSyntax-v1
|
||||
|
||||
# CMC content types
|
||||
id-cct 1 : id-cct-crs
|
||||
id-cct 2 : id-cct-PKIData
|
||||
id-cct 3 : id-cct-PKIResponse
|
||||
|
||||
# Predefined Proxy Certificate policy languages
|
||||
id-ppl 0 : id-ppl-anyLanguage : Any language
|
||||
id-ppl 1 : id-ppl-inheritAll : Inherit all
|
||||
id-ppl 2 : id-ppl-independent : Independent
|
||||
|
||||
# access descriptors for authority info access extension
|
||||
!Cname ad-OCSP
|
||||
id-ad 1 : OCSP : OCSP
|
||||
!Cname ad-ca-issuers
|
||||
id-ad 2 : caIssuers : CA Issuers
|
||||
!Cname ad-timeStamping
|
||||
id-ad 3 : ad_timestamping : AD Time Stamping
|
||||
!Cname ad-dvcs
|
||||
id-ad 4 : AD_DVCS : ad dvcs
|
||||
id-ad 5 : caRepository : CA Repository
|
||||
|
||||
|
||||
!Alias id-pkix-OCSP ad-OCSP
|
||||
!module id-pkix-OCSP
|
||||
!Cname basic
|
||||
id-pkix-OCSP 1 : basicOCSPResponse : Basic OCSP Response
|
||||
id-pkix-OCSP 2 : Nonce : OCSP Nonce
|
||||
id-pkix-OCSP 3 : CrlID : OCSP CRL ID
|
||||
id-pkix-OCSP 4 : acceptableResponses : Acceptable OCSP Responses
|
||||
id-pkix-OCSP 5 : noCheck : OCSP No Check
|
||||
id-pkix-OCSP 6 : archiveCutoff : OCSP Archive Cutoff
|
||||
id-pkix-OCSP 7 : serviceLocator : OCSP Service Locator
|
||||
id-pkix-OCSP 8 : extendedStatus : Extended OCSP Status
|
||||
id-pkix-OCSP 9 : valid
|
||||
id-pkix-OCSP 10 : path
|
||||
id-pkix-OCSP 11 : trustRoot : Trust Root
|
||||
!global
|
||||
|
||||
1 3 14 3 2 : algorithm : algorithm
|
||||
algorithm 3 : RSA-NP-MD5 : md5WithRSA
|
||||
algorithm 6 : DES-ECB : des-ecb
|
||||
algorithm 7 : DES-CBC : des-cbc
|
||||
!Cname des-ofb64
|
||||
algorithm 8 : DES-OFB : des-ofb
|
||||
!Cname des-cfb64
|
||||
algorithm 9 : DES-CFB : des-cfb
|
||||
algorithm 11 : rsaSignature
|
||||
!Cname dsa-2
|
||||
algorithm 12 : DSA-old : dsaEncryption-old
|
||||
algorithm 13 : DSA-SHA : dsaWithSHA
|
||||
algorithm 15 : RSA-SHA : shaWithRSAEncryption
|
||||
!Cname des-ede-ecb
|
||||
algorithm 17 : DES-EDE : des-ede
|
||||
!Cname des-ede3-ecb
|
||||
: DES-EDE3 : des-ede3
|
||||
: DES-EDE-CBC : des-ede-cbc
|
||||
!Cname des-ede-cfb64
|
||||
: DES-EDE-CFB : des-ede-cfb
|
||||
!Cname des-ede3-cfb64
|
||||
: DES-EDE3-CFB : des-ede3-cfb
|
||||
!Cname des-ede-ofb64
|
||||
: DES-EDE-OFB : des-ede-ofb
|
||||
!Cname des-ede3-ofb64
|
||||
: DES-EDE3-OFB : des-ede3-ofb
|
||||
: DESX-CBC : desx-cbc
|
||||
algorithm 18 : SHA : sha
|
||||
algorithm 26 : SHA1 : sha1
|
||||
!Cname dsaWithSHA1-2
|
||||
algorithm 27 : DSA-SHA1-old : dsaWithSHA1-old
|
||||
algorithm 29 : RSA-SHA1-2 : sha1WithRSA
|
||||
|
||||
1 3 36 3 2 1 : RIPEMD160 : ripemd160
|
||||
1 3 36 3 3 1 2 : RSA-RIPEMD160 : ripemd160WithRSA
|
||||
|
||||
1 3 6 1 4 1 1722 12 2 1 : BLAKE2BMAC : blake2bmac
|
||||
1 3 6 1 4 1 1722 12 2 2 : BLAKE2SMAC : blake2smac
|
||||
blake2bmac 16 : BLAKE2b512 : blake2b512
|
||||
blake2smac 8 : BLAKE2s256 : blake2s256
|
||||
|
||||
!Cname sxnet
|
||||
1 3 101 1 4 1 : SXNetID : Strong Extranet ID
|
||||
|
||||
2 5 : X500 : directory services (X.500)
|
||||
|
||||
X500 4 : X509
|
||||
X509 3 : CN : commonName
|
||||
X509 4 : SN : surname
|
||||
X509 5 : : serialNumber
|
||||
X509 6 : C : countryName
|
||||
X509 7 : L : localityName
|
||||
X509 8 : ST : stateOrProvinceName
|
||||
X509 9 : street : streetAddress
|
||||
X509 10 : O : organizationName
|
||||
X509 11 : OU : organizationalUnitName
|
||||
X509 12 : title : title
|
||||
X509 13 : : description
|
||||
X509 14 : : searchGuide
|
||||
X509 15 : : businessCategory
|
||||
X509 16 : : postalAddress
|
||||
X509 17 : : postalCode
|
||||
X509 18 : : postOfficeBox
|
||||
X509 19 : : physicalDeliveryOfficeName
|
||||
X509 20 : : telephoneNumber
|
||||
X509 21 : : telexNumber
|
||||
X509 22 : : teletexTerminalIdentifier
|
||||
X509 23 : : facsimileTelephoneNumber
|
||||
X509 24 : : x121Address
|
||||
X509 25 : : internationaliSDNNumber
|
||||
X509 26 : : registeredAddress
|
||||
X509 27 : : destinationIndicator
|
||||
X509 28 : : preferredDeliveryMethod
|
||||
X509 29 : : presentationAddress
|
||||
X509 30 : : supportedApplicationContext
|
||||
X509 31 : member :
|
||||
X509 32 : owner :
|
||||
X509 33 : : roleOccupant
|
||||
X509 34 : seeAlso :
|
||||
X509 35 : : userPassword
|
||||
X509 36 : : userCertificate
|
||||
X509 37 : : cACertificate
|
||||
X509 38 : : authorityRevocationList
|
||||
X509 39 : : certificateRevocationList
|
||||
X509 40 : : crossCertificatePair
|
||||
X509 41 : name : name
|
||||
X509 42 : GN : givenName
|
||||
X509 43 : initials : initials
|
||||
X509 44 : : generationQualifier
|
||||
X509 45 : : x500UniqueIdentifier
|
||||
X509 46 : dnQualifier : dnQualifier
|
||||
X509 47 : : enhancedSearchGuide
|
||||
X509 48 : : protocolInformation
|
||||
X509 49 : : distinguishedName
|
||||
X509 50 : : uniqueMember
|
||||
X509 51 : : houseIdentifier
|
||||
X509 52 : : supportedAlgorithms
|
||||
X509 53 : : deltaRevocationList
|
||||
X509 54 : dmdName :
|
||||
X509 65 : : pseudonym
|
||||
X509 72 : role : role
|
||||
X509 97 : : organizationIdentifier
|
||||
X509 98 : c3 : countryCode3c
|
||||
X509 99 : n3 : countryCode3n
|
||||
X509 100 : : dnsName
|
||||
|
||||
|
||||
X500 8 : X500algorithms : directory services - algorithms
|
||||
X500algorithms 1 1 : RSA : rsa
|
||||
X500algorithms 3 100 : RSA-MDC2 : mdc2WithRSA
|
||||
X500algorithms 3 101 : MDC2 : mdc2
|
||||
|
||||
X500 29 : id-ce
|
||||
!Cname subject-directory-attributes
|
||||
id-ce 9 : subjectDirectoryAttributes : X509v3 Subject Directory Attributes
|
||||
!Cname subject-key-identifier
|
||||
id-ce 14 : subjectKeyIdentifier : X509v3 Subject Key Identifier
|
||||
!Cname key-usage
|
||||
id-ce 15 : keyUsage : X509v3 Key Usage
|
||||
!Cname private-key-usage-period
|
||||
id-ce 16 : privateKeyUsagePeriod : X509v3 Private Key Usage Period
|
||||
!Cname subject-alt-name
|
||||
id-ce 17 : subjectAltName : X509v3 Subject Alternative Name
|
||||
!Cname issuer-alt-name
|
||||
id-ce 18 : issuerAltName : X509v3 Issuer Alternative Name
|
||||
!Cname basic-constraints
|
||||
id-ce 19 : basicConstraints : X509v3 Basic Constraints
|
||||
!Cname crl-number
|
||||
id-ce 20 : crlNumber : X509v3 CRL Number
|
||||
!Cname crl-reason
|
||||
id-ce 21 : CRLReason : X509v3 CRL Reason Code
|
||||
!Cname invalidity-date
|
||||
id-ce 24 : invalidityDate : Invalidity Date
|
||||
!Cname delta-crl
|
||||
id-ce 27 : deltaCRL : X509v3 Delta CRL Indicator
|
||||
!Cname issuing-distribution-point
|
||||
id-ce 28 : issuingDistributionPoint : X509v3 Issuing Distribution Point
|
||||
!Cname certificate-issuer
|
||||
id-ce 29 : certificateIssuer : X509v3 Certificate Issuer
|
||||
!Cname name-constraints
|
||||
id-ce 30 : nameConstraints : X509v3 Name Constraints
|
||||
!Cname crl-distribution-points
|
||||
id-ce 31 : crlDistributionPoints : X509v3 CRL Distribution Points
|
||||
!Cname certificate-policies
|
||||
id-ce 32 : certificatePolicies : X509v3 Certificate Policies
|
||||
!Cname any-policy
|
||||
certificate-policies 0 : anyPolicy : X509v3 Any Policy
|
||||
!Cname policy-mappings
|
||||
id-ce 33 : policyMappings : X509v3 Policy Mappings
|
||||
!Cname authority-key-identifier
|
||||
id-ce 35 : authorityKeyIdentifier : X509v3 Authority Key Identifier
|
||||
!Cname policy-constraints
|
||||
id-ce 36 : policyConstraints : X509v3 Policy Constraints
|
||||
!Cname ext-key-usage
|
||||
id-ce 37 : extendedKeyUsage : X509v3 Extended Key Usage
|
||||
!Cname freshest-crl
|
||||
id-ce 46 : freshestCRL : X509v3 Freshest CRL
|
||||
!Cname inhibit-any-policy
|
||||
id-ce 54 : inhibitAnyPolicy : X509v3 Inhibit Any Policy
|
||||
!Cname target-information
|
||||
id-ce 55 : targetInformation : X509v3 AC Targeting
|
||||
!Cname no-rev-avail
|
||||
id-ce 56 : noRevAvail : X509v3 No Revocation Available
|
||||
|
||||
# From RFC5280
|
||||
ext-key-usage 0 : anyExtendedKeyUsage : Any Extended Key Usage
|
||||
|
||||
|
||||
!Cname netscape
|
||||
2 16 840 1 113730 : Netscape : Netscape Communications Corp.
|
||||
!Cname netscape-cert-extension
|
||||
netscape 1 : nsCertExt : Netscape Certificate Extension
|
||||
!Cname netscape-data-type
|
||||
netscape 2 : nsDataType : Netscape Data Type
|
||||
!Cname netscape-cert-type
|
||||
netscape-cert-extension 1 : nsCertType : Netscape Cert Type
|
||||
!Cname netscape-base-url
|
||||
netscape-cert-extension 2 : nsBaseUrl : Netscape Base Url
|
||||
!Cname netscape-revocation-url
|
||||
netscape-cert-extension 3 : nsRevocationUrl : Netscape Revocation Url
|
||||
!Cname netscape-ca-revocation-url
|
||||
netscape-cert-extension 4 : nsCaRevocationUrl : Netscape CA Revocation Url
|
||||
!Cname netscape-renewal-url
|
||||
netscape-cert-extension 7 : nsRenewalUrl : Netscape Renewal Url
|
||||
!Cname netscape-ca-policy-url
|
||||
netscape-cert-extension 8 : nsCaPolicyUrl : Netscape CA Policy Url
|
||||
!Cname netscape-ssl-server-name
|
||||
netscape-cert-extension 12 : nsSslServerName : Netscape SSL Server Name
|
||||
!Cname netscape-comment
|
||||
netscape-cert-extension 13 : nsComment : Netscape Comment
|
||||
!Cname netscape-cert-sequence
|
||||
netscape-data-type 5 : nsCertSequence : Netscape Certificate Sequence
|
||||
!Cname ns-sgc
|
||||
netscape 4 1 : nsSGC : Netscape Server Gated Crypto
|
||||
|
||||
# iso(1)
|
||||
iso 3 : ORG : org
|
||||
org 6 : DOD : dod
|
||||
dod 1 : IANA : iana
|
||||
!Alias internet iana
|
||||
|
||||
internet 1 : directory : Directory
|
||||
internet 2 : mgmt : Management
|
||||
internet 3 : experimental : Experimental
|
||||
internet 4 : private : Private
|
||||
internet 5 : security : Security
|
||||
internet 6 : snmpv2 : SNMPv2
|
||||
# Documents refer to "internet 7" as "mail". This however leads to ambiguities
|
||||
# with RFC2798, Section 9.1.3, where "mail" is defined as the short name for
|
||||
# rfc822Mailbox. The short name is therefore here left out for a reason.
|
||||
# Subclasses of "mail", e.g. "MIME MHS" don't constitute a problem, as
|
||||
# references are realized via long name "Mail" (with capital M).
|
||||
internet 7 : : Mail
|
||||
|
||||
Private 1 : enterprises : Enterprises
|
||||
|
||||
# RFC 2247
|
||||
Enterprises 1466 344 : dcobject : dcObject
|
||||
|
||||
# RFC 1495
|
||||
Mail 1 : mime-mhs : MIME MHS
|
||||
mime-mhs 1 : mime-mhs-headings : mime-mhs-headings
|
||||
mime-mhs 2 : mime-mhs-bodies : mime-mhs-bodies
|
||||
mime-mhs-headings 1 : id-hex-partial-message : id-hex-partial-message
|
||||
mime-mhs-headings 2 : id-hex-multipart-message : id-hex-multipart-message
|
||||
|
||||
# RFC 3274
|
||||
!Cname zlib-compression
|
||||
id-smime-alg 8 : ZLIB : zlib compression
|
||||
|
||||
# AES aka Rijndael
|
||||
|
||||
!Alias csor 2 16 840 1 101 3
|
||||
!Alias nistAlgorithms csor 4
|
||||
!Alias aes nistAlgorithms 1
|
||||
|
||||
aes 1 : AES-128-ECB : aes-128-ecb
|
||||
aes 2 : AES-128-CBC : aes-128-cbc
|
||||
!Cname aes-128-ofb128
|
||||
aes 3 : AES-128-OFB : aes-128-ofb
|
||||
!Cname aes-128-cfb128
|
||||
aes 4 : AES-128-CFB : aes-128-cfb
|
||||
aes 5 : id-aes128-wrap
|
||||
aes 6 : id-aes128-GCM : aes-128-gcm
|
||||
aes 7 : id-aes128-CCM : aes-128-ccm
|
||||
aes 8 : id-aes128-wrap-pad
|
||||
|
||||
aes 21 : AES-192-ECB : aes-192-ecb
|
||||
aes 22 : AES-192-CBC : aes-192-cbc
|
||||
!Cname aes-192-ofb128
|
||||
aes 23 : AES-192-OFB : aes-192-ofb
|
||||
!Cname aes-192-cfb128
|
||||
aes 24 : AES-192-CFB : aes-192-cfb
|
||||
aes 25 : id-aes192-wrap
|
||||
aes 26 : id-aes192-GCM : aes-192-gcm
|
||||
aes 27 : id-aes192-CCM : aes-192-ccm
|
||||
aes 28 : id-aes192-wrap-pad
|
||||
|
||||
aes 41 : AES-256-ECB : aes-256-ecb
|
||||
aes 42 : AES-256-CBC : aes-256-cbc
|
||||
!Cname aes-256-ofb128
|
||||
aes 43 : AES-256-OFB : aes-256-ofb
|
||||
!Cname aes-256-cfb128
|
||||
aes 44 : AES-256-CFB : aes-256-cfb
|
||||
aes 45 : id-aes256-wrap
|
||||
aes 46 : id-aes256-GCM : aes-256-gcm
|
||||
aes 47 : id-aes256-CCM : aes-256-ccm
|
||||
aes 48 : id-aes256-wrap-pad
|
||||
|
||||
ieee-siswg 0 1 1 : AES-128-XTS : aes-128-xts
|
||||
ieee-siswg 0 1 2 : AES-256-XTS : aes-256-xts
|
||||
|
||||
# There are no OIDs for these modes...
|
||||
|
||||
: AES-128-CFB1 : aes-128-cfb1
|
||||
: AES-192-CFB1 : aes-192-cfb1
|
||||
: AES-256-CFB1 : aes-256-cfb1
|
||||
: AES-128-CFB8 : aes-128-cfb8
|
||||
: AES-192-CFB8 : aes-192-cfb8
|
||||
: AES-256-CFB8 : aes-256-cfb8
|
||||
: AES-128-CTR : aes-128-ctr
|
||||
: AES-192-CTR : aes-192-ctr
|
||||
: AES-256-CTR : aes-256-ctr
|
||||
: AES-128-OCB : aes-128-ocb
|
||||
: AES-192-OCB : aes-192-ocb
|
||||
: AES-256-OCB : aes-256-ocb
|
||||
: DES-CFB1 : des-cfb1
|
||||
: DES-CFB8 : des-cfb8
|
||||
: DES-EDE3-CFB1 : des-ede3-cfb1
|
||||
: DES-EDE3-CFB8 : des-ede3-cfb8
|
||||
|
||||
# OIDs for SHA224, SHA256, SHA385 and SHA512, according to x9.84 and
|
||||
# http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html
|
||||
# "Middle" names are specified to be id-sha256, id-sha384, etc., but
|
||||
# we adhere to unprefixed capitals for backward compatibility...
|
||||
!Alias nist_hashalgs nistAlgorithms 2
|
||||
nist_hashalgs 1 : SHA256 : sha256
|
||||
nist_hashalgs 2 : SHA384 : sha384
|
||||
nist_hashalgs 3 : SHA512 : sha512
|
||||
nist_hashalgs 4 : SHA224 : sha224
|
||||
nist_hashalgs 5 : SHA512-224 : sha512-224
|
||||
nist_hashalgs 6 : SHA512-256 : sha512-256
|
||||
nist_hashalgs 7 : SHA3-224 : sha3-224
|
||||
nist_hashalgs 8 : SHA3-256 : sha3-256
|
||||
nist_hashalgs 9 : SHA3-384 : sha3-384
|
||||
nist_hashalgs 10 : SHA3-512 : sha3-512
|
||||
nist_hashalgs 11 : SHAKE128 : shake128
|
||||
nist_hashalgs 12 : SHAKE256 : shake256
|
||||
nist_hashalgs 13 : id-hmacWithSHA3-224 : hmac-sha3-224
|
||||
nist_hashalgs 14 : id-hmacWithSHA3-256 : hmac-sha3-256
|
||||
nist_hashalgs 15 : id-hmacWithSHA3-384 : hmac-sha3-384
|
||||
nist_hashalgs 16 : id-hmacWithSHA3-512 : hmac-sha3-512
|
||||
# Below two are incomplete OIDs, to be uncommented when we figure out
|
||||
# how to handle them...
|
||||
# nist_hashalgs 17 : id-shake128-len : shake128-len
|
||||
# nist_hashalgs 18 : id-shake256-len : shake256-len
|
||||
nist_hashalgs 19 : KMAC128 : kmac128
|
||||
nist_hashalgs 20 : KMAC256 : kmac256
|
||||
# nist_hashalgs 21 : KMAC128-XOF : kmac128-xof
|
||||
# nist_hashalgs 22 : KMAC256-XOF : kmac256-xof
|
||||
|
||||
# OIDs for dsa-with-sha224 and dsa-with-sha256
|
||||
!Alias dsa_with_sha2 nistAlgorithms 3
|
||||
dsa_with_sha2 1 : dsa_with_SHA224
|
||||
dsa_with_sha2 2 : dsa_with_SHA256
|
||||
# Above two belong below, but kept as they are for backward compatibility
|
||||
!Alias sigAlgs nistAlgorithms 3
|
||||
sigAlgs 3 : id-dsa-with-sha384 : dsa_with_SHA384
|
||||
sigAlgs 4 : id-dsa-with-sha512 : dsa_with_SHA512
|
||||
sigAlgs 5 : id-dsa-with-sha3-224 : dsa_with_SHA3-224
|
||||
sigAlgs 6 : id-dsa-with-sha3-256 : dsa_with_SHA3-256
|
||||
sigAlgs 7 : id-dsa-with-sha3-384 : dsa_with_SHA3-384
|
||||
sigAlgs 8 : id-dsa-with-sha3-512 : dsa_with_SHA3-512
|
||||
sigAlgs 9 : id-ecdsa-with-sha3-224 : ecdsa_with_SHA3-224
|
||||
sigAlgs 10 : id-ecdsa-with-sha3-256 : ecdsa_with_SHA3-256
|
||||
sigAlgs 11 : id-ecdsa-with-sha3-384 : ecdsa_with_SHA3-384
|
||||
sigAlgs 12 : id-ecdsa-with-sha3-512 : ecdsa_with_SHA3-512
|
||||
sigAlgs 13 : id-rsassa-pkcs1-v1_5-with-sha3-224 : RSA-SHA3-224
|
||||
sigAlgs 14 : id-rsassa-pkcs1-v1_5-with-sha3-256 : RSA-SHA3-256
|
||||
sigAlgs 15 : id-rsassa-pkcs1-v1_5-with-sha3-384 : RSA-SHA3-384
|
||||
sigAlgs 16 : id-rsassa-pkcs1-v1_5-with-sha3-512 : RSA-SHA3-512
|
||||
|
||||
# Hold instruction CRL entry extension
|
||||
!Cname hold-instruction-code
|
||||
id-ce 23 : holdInstructionCode : Hold Instruction Code
|
||||
!Alias holdInstruction X9-57 2
|
||||
!Cname hold-instruction-none
|
||||
holdInstruction 1 : holdInstructionNone : Hold Instruction None
|
||||
!Cname hold-instruction-call-issuer
|
||||
holdInstruction 2 : holdInstructionCallIssuer : Hold Instruction Call Issuer
|
||||
!Cname hold-instruction-reject
|
||||
holdInstruction 3 : holdInstructionReject : Hold Instruction Reject
|
||||
|
||||
# OID's from ITU-T. Most of this is defined in RFC 1274. A couple of
|
||||
# them are also mentioned in RFC 2247
|
||||
itu-t 9 : data
|
||||
data 2342 : pss
|
||||
pss 19200300 : ucl
|
||||
ucl 100 : pilot
|
||||
pilot 1 : : pilotAttributeType
|
||||
pilot 3 : : pilotAttributeSyntax
|
||||
pilot 4 : : pilotObjectClass
|
||||
pilot 10 : : pilotGroups
|
||||
pilotAttributeSyntax 4 : : iA5StringSyntax
|
||||
pilotAttributeSyntax 5 : : caseIgnoreIA5StringSyntax
|
||||
pilotObjectClass 3 : : pilotObject
|
||||
pilotObjectClass 4 : : pilotPerson
|
||||
pilotObjectClass 5 : account
|
||||
pilotObjectClass 6 : document
|
||||
pilotObjectClass 7 : room
|
||||
pilotObjectClass 9 : : documentSeries
|
||||
pilotObjectClass 13 : domain : Domain
|
||||
pilotObjectClass 14 : : rFC822localPart
|
||||
pilotObjectClass 15 : : dNSDomain
|
||||
pilotObjectClass 17 : : domainRelatedObject
|
||||
pilotObjectClass 18 : : friendlyCountry
|
||||
pilotObjectClass 19 : : simpleSecurityObject
|
||||
pilotObjectClass 20 : : pilotOrganization
|
||||
pilotObjectClass 21 : : pilotDSA
|
||||
pilotObjectClass 22 : : qualityLabelledData
|
||||
pilotAttributeType 1 : UID : userId
|
||||
pilotAttributeType 2 : : textEncodedORAddress
|
||||
pilotAttributeType 3 : mail : rfc822Mailbox
|
||||
pilotAttributeType 4 : info
|
||||
pilotAttributeType 5 : : favouriteDrink
|
||||
pilotAttributeType 6 : : roomNumber
|
||||
pilotAttributeType 7 : photo
|
||||
pilotAttributeType 8 : : userClass
|
||||
pilotAttributeType 9 : host
|
||||
pilotAttributeType 10 : manager
|
||||
pilotAttributeType 11 : : documentIdentifier
|
||||
pilotAttributeType 12 : : documentTitle
|
||||
pilotAttributeType 13 : : documentVersion
|
||||
pilotAttributeType 14 : : documentAuthor
|
||||
pilotAttributeType 15 : : documentLocation
|
||||
pilotAttributeType 20 : : homeTelephoneNumber
|
||||
pilotAttributeType 21 : secretary
|
||||
pilotAttributeType 22 : : otherMailbox
|
||||
pilotAttributeType 23 : : lastModifiedTime
|
||||
pilotAttributeType 24 : : lastModifiedBy
|
||||
pilotAttributeType 25 : DC : domainComponent
|
||||
pilotAttributeType 26 : : aRecord
|
||||
pilotAttributeType 27 : : pilotAttributeType27
|
||||
pilotAttributeType 28 : : mXRecord
|
||||
pilotAttributeType 29 : : nSRecord
|
||||
pilotAttributeType 30 : : sOARecord
|
||||
pilotAttributeType 31 : : cNAMERecord
|
||||
pilotAttributeType 37 : : associatedDomain
|
||||
pilotAttributeType 38 : : associatedName
|
||||
pilotAttributeType 39 : : homePostalAddress
|
||||
pilotAttributeType 40 : : personalTitle
|
||||
pilotAttributeType 41 : : mobileTelephoneNumber
|
||||
pilotAttributeType 42 : : pagerTelephoneNumber
|
||||
pilotAttributeType 43 : : friendlyCountryName
|
||||
pilotAttributeType 44 : uid : uniqueIdentifier
|
||||
pilotAttributeType 45 : : organizationalStatus
|
||||
pilotAttributeType 46 : : janetMailbox
|
||||
pilotAttributeType 47 : : mailPreferenceOption
|
||||
pilotAttributeType 48 : : buildingName
|
||||
pilotAttributeType 49 : : dSAQuality
|
||||
pilotAttributeType 50 : : singleLevelQuality
|
||||
pilotAttributeType 51 : : subtreeMinimumQuality
|
||||
pilotAttributeType 52 : : subtreeMaximumQuality
|
||||
pilotAttributeType 53 : : personalSignature
|
||||
pilotAttributeType 54 : : dITRedirect
|
||||
pilotAttributeType 55 : audio
|
||||
pilotAttributeType 56 : : documentPublisher
|
||||
|
||||
international-organizations 42 : id-set : Secure Electronic Transactions
|
||||
|
||||
id-set 0 : set-ctype : content types
|
||||
id-set 1 : set-msgExt : message extensions
|
||||
id-set 3 : set-attr
|
||||
id-set 5 : set-policy
|
||||
id-set 7 : set-certExt : certificate extensions
|
||||
id-set 8 : set-brand
|
||||
|
||||
set-ctype 0 : setct-PANData
|
||||
set-ctype 1 : setct-PANToken
|
||||
set-ctype 2 : setct-PANOnly
|
||||
set-ctype 3 : setct-OIData
|
||||
set-ctype 4 : setct-PI
|
||||
set-ctype 5 : setct-PIData
|
||||
set-ctype 6 : setct-PIDataUnsigned
|
||||
set-ctype 7 : setct-HODInput
|
||||
set-ctype 8 : setct-AuthResBaggage
|
||||
set-ctype 9 : setct-AuthRevReqBaggage
|
||||
set-ctype 10 : setct-AuthRevResBaggage
|
||||
set-ctype 11 : setct-CapTokenSeq
|
||||
set-ctype 12 : setct-PInitResData
|
||||
set-ctype 13 : setct-PI-TBS
|
||||
set-ctype 14 : setct-PResData
|
||||
set-ctype 16 : setct-AuthReqTBS
|
||||
set-ctype 17 : setct-AuthResTBS
|
||||
set-ctype 18 : setct-AuthResTBSX
|
||||
set-ctype 19 : setct-AuthTokenTBS
|
||||
set-ctype 20 : setct-CapTokenData
|
||||
set-ctype 21 : setct-CapTokenTBS
|
||||
set-ctype 22 : setct-AcqCardCodeMsg
|
||||
set-ctype 23 : setct-AuthRevReqTBS
|
||||
set-ctype 24 : setct-AuthRevResData
|
||||
set-ctype 25 : setct-AuthRevResTBS
|
||||
set-ctype 26 : setct-CapReqTBS
|
||||
set-ctype 27 : setct-CapReqTBSX
|
||||
set-ctype 28 : setct-CapResData
|
||||
set-ctype 29 : setct-CapRevReqTBS
|
||||
set-ctype 30 : setct-CapRevReqTBSX
|
||||
set-ctype 31 : setct-CapRevResData
|
||||
set-ctype 32 : setct-CredReqTBS
|
||||
set-ctype 33 : setct-CredReqTBSX
|
||||
set-ctype 34 : setct-CredResData
|
||||
set-ctype 35 : setct-CredRevReqTBS
|
||||
set-ctype 36 : setct-CredRevReqTBSX
|
||||
set-ctype 37 : setct-CredRevResData
|
||||
set-ctype 38 : setct-PCertReqData
|
||||
set-ctype 39 : setct-PCertResTBS
|
||||
set-ctype 40 : setct-BatchAdminReqData
|
||||
set-ctype 41 : setct-BatchAdminResData
|
||||
set-ctype 42 : setct-CardCInitResTBS
|
||||
set-ctype 43 : setct-MeAqCInitResTBS
|
||||
set-ctype 44 : setct-RegFormResTBS
|
||||
set-ctype 45 : setct-CertReqData
|
||||
set-ctype 46 : setct-CertReqTBS
|
||||
set-ctype 47 : setct-CertResData
|
||||
set-ctype 48 : setct-CertInqReqTBS
|
||||
set-ctype 49 : setct-ErrorTBS
|
||||
set-ctype 50 : setct-PIDualSignedTBE
|
||||
set-ctype 51 : setct-PIUnsignedTBE
|
||||
set-ctype 52 : setct-AuthReqTBE
|
||||
set-ctype 53 : setct-AuthResTBE
|
||||
set-ctype 54 : setct-AuthResTBEX
|
||||
set-ctype 55 : setct-AuthTokenTBE
|
||||
set-ctype 56 : setct-CapTokenTBE
|
||||
set-ctype 57 : setct-CapTokenTBEX
|
||||
set-ctype 58 : setct-AcqCardCodeMsgTBE
|
||||
set-ctype 59 : setct-AuthRevReqTBE
|
||||
set-ctype 60 : setct-AuthRevResTBE
|
||||
set-ctype 61 : setct-AuthRevResTBEB
|
||||
set-ctype 62 : setct-CapReqTBE
|
||||
set-ctype 63 : setct-CapReqTBEX
|
||||
set-ctype 64 : setct-CapResTBE
|
||||
set-ctype 65 : setct-CapRevReqTBE
|
||||
set-ctype 66 : setct-CapRevReqTBEX
|
||||
set-ctype 67 : setct-CapRevResTBE
|
||||
set-ctype 68 : setct-CredReqTBE
|
||||
set-ctype 69 : setct-CredReqTBEX
|
||||
set-ctype 70 : setct-CredResTBE
|
||||
set-ctype 71 : setct-CredRevReqTBE
|
||||
set-ctype 72 : setct-CredRevReqTBEX
|
||||
set-ctype 73 : setct-CredRevResTBE
|
||||
set-ctype 74 : setct-BatchAdminReqTBE
|
||||
set-ctype 75 : setct-BatchAdminResTBE
|
||||
set-ctype 76 : setct-RegFormReqTBE
|
||||
set-ctype 77 : setct-CertReqTBE
|
||||
set-ctype 78 : setct-CertReqTBEX
|
||||
set-ctype 79 : setct-CertResTBE
|
||||
set-ctype 80 : setct-CRLNotificationTBS
|
||||
set-ctype 81 : setct-CRLNotificationResTBS
|
||||
set-ctype 82 : setct-BCIDistributionTBS
|
||||
|
||||
set-msgExt 1 : setext-genCrypt : generic cryptogram
|
||||
set-msgExt 3 : setext-miAuth : merchant initiated auth
|
||||
set-msgExt 4 : setext-pinSecure
|
||||
set-msgExt 5 : setext-pinAny
|
||||
set-msgExt 7 : setext-track2
|
||||
set-msgExt 8 : setext-cv : additional verification
|
||||
|
||||
set-policy 0 : set-policy-root
|
||||
|
||||
set-certExt 0 : setCext-hashedRoot
|
||||
set-certExt 1 : setCext-certType
|
||||
set-certExt 2 : setCext-merchData
|
||||
set-certExt 3 : setCext-cCertRequired
|
||||
set-certExt 4 : setCext-tunneling
|
||||
set-certExt 5 : setCext-setExt
|
||||
set-certExt 6 : setCext-setQualf
|
||||
set-certExt 7 : setCext-PGWYcapabilities
|
||||
set-certExt 8 : setCext-TokenIdentifier
|
||||
set-certExt 9 : setCext-Track2Data
|
||||
set-certExt 10 : setCext-TokenType
|
||||
set-certExt 11 : setCext-IssuerCapabilities
|
||||
|
||||
set-attr 0 : setAttr-Cert
|
||||
set-attr 1 : setAttr-PGWYcap : payment gateway capabilities
|
||||
set-attr 2 : setAttr-TokenType
|
||||
set-attr 3 : setAttr-IssCap : issuer capabilities
|
||||
|
||||
setAttr-Cert 0 : set-rootKeyThumb
|
||||
setAttr-Cert 1 : set-addPolicy
|
||||
|
||||
setAttr-TokenType 1 : setAttr-Token-EMV
|
||||
setAttr-TokenType 2 : setAttr-Token-B0Prime
|
||||
|
||||
setAttr-IssCap 3 : setAttr-IssCap-CVM
|
||||
setAttr-IssCap 4 : setAttr-IssCap-T2
|
||||
setAttr-IssCap 5 : setAttr-IssCap-Sig
|
||||
|
||||
setAttr-IssCap-CVM 1 : setAttr-GenCryptgrm : generate cryptogram
|
||||
setAttr-IssCap-T2 1 : setAttr-T2Enc : encrypted track 2
|
||||
setAttr-IssCap-T2 2 : setAttr-T2cleartxt : cleartext track 2
|
||||
|
||||
setAttr-IssCap-Sig 1 : setAttr-TokICCsig : ICC or token signature
|
||||
setAttr-IssCap-Sig 2 : setAttr-SecDevSig : secure device signature
|
||||
|
||||
set-brand 1 : set-brand-IATA-ATA
|
||||
set-brand 30 : set-brand-Diners
|
||||
set-brand 34 : set-brand-AmericanExpress
|
||||
set-brand 35 : set-brand-JCB
|
||||
set-brand 4 : set-brand-Visa
|
||||
set-brand 5 : set-brand-MasterCard
|
||||
set-brand 6011 : set-brand-Novus
|
||||
|
||||
rsadsi 3 10 : DES-CDMF : des-cdmf
|
||||
rsadsi 1 1 6 : rsaOAEPEncryptionSET
|
||||
|
||||
: Oakley-EC2N-3 : ipsec3
|
||||
: Oakley-EC2N-4 : ipsec4
|
||||
|
||||
iso 0 10118 3 0 55 : whirlpool
|
||||
|
||||
# GOST OIDs
|
||||
|
||||
member-body 643 2 2 : cryptopro
|
||||
member-body 643 2 9 : cryptocom
|
||||
member-body 643 7 1 : id-tc26
|
||||
|
||||
cryptopro 3 : id-GostR3411-94-with-GostR3410-2001 : GOST R 34.11-94 with GOST R 34.10-2001
|
||||
cryptopro 4 : id-GostR3411-94-with-GostR3410-94 : GOST R 34.11-94 with GOST R 34.10-94
|
||||
!Cname id-GostR3411-94
|
||||
cryptopro 9 : md_gost94 : GOST R 34.11-94
|
||||
cryptopro 10 : id-HMACGostR3411-94 : HMAC GOST 34.11-94
|
||||
!Cname id-GostR3410-2001
|
||||
cryptopro 19 : gost2001 : GOST R 34.10-2001
|
||||
!Cname id-GostR3410-94
|
||||
cryptopro 20 : gost94 : GOST R 34.10-94
|
||||
!Cname id-Gost28147-89
|
||||
cryptopro 21 : gost89 : GOST 28147-89
|
||||
: gost89-cnt
|
||||
: gost89-cnt-12
|
||||
: gost89-cbc
|
||||
: gost89-ecb
|
||||
: gost89-ctr
|
||||
!Cname id-Gost28147-89-MAC
|
||||
cryptopro 22 : gost-mac : GOST 28147-89 MAC
|
||||
: gost-mac-12
|
||||
!Cname id-GostR3411-94-prf
|
||||
cryptopro 23 : prf-gostr3411-94 : GOST R 34.11-94 PRF
|
||||
cryptopro 98 : id-GostR3410-2001DH : GOST R 34.10-2001 DH
|
||||
cryptopro 99 : id-GostR3410-94DH : GOST R 34.10-94 DH
|
||||
|
||||
cryptopro 14 1 : id-Gost28147-89-CryptoPro-KeyMeshing
|
||||
cryptopro 14 0 : id-Gost28147-89-None-KeyMeshing
|
||||
|
||||
# GOST parameter set OIDs
|
||||
|
||||
cryptopro 30 0 : id-GostR3411-94-TestParamSet
|
||||
cryptopro 30 1 : id-GostR3411-94-CryptoProParamSet
|
||||
|
||||
cryptopro 31 0 : id-Gost28147-89-TestParamSet
|
||||
cryptopro 31 1 : id-Gost28147-89-CryptoPro-A-ParamSet
|
||||
cryptopro 31 2 : id-Gost28147-89-CryptoPro-B-ParamSet
|
||||
cryptopro 31 3 : id-Gost28147-89-CryptoPro-C-ParamSet
|
||||
cryptopro 31 4 : id-Gost28147-89-CryptoPro-D-ParamSet
|
||||
cryptopro 31 5 : id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet
|
||||
cryptopro 31 6 : id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet
|
||||
cryptopro 31 7 : id-Gost28147-89-CryptoPro-RIC-1-ParamSet
|
||||
|
||||
cryptopro 32 0 : id-GostR3410-94-TestParamSet
|
||||
cryptopro 32 2 : id-GostR3410-94-CryptoPro-A-ParamSet
|
||||
cryptopro 32 3 : id-GostR3410-94-CryptoPro-B-ParamSet
|
||||
cryptopro 32 4 : id-GostR3410-94-CryptoPro-C-ParamSet
|
||||
cryptopro 32 5 : id-GostR3410-94-CryptoPro-D-ParamSet
|
||||
|
||||
cryptopro 33 1 : id-GostR3410-94-CryptoPro-XchA-ParamSet
|
||||
cryptopro 33 2 : id-GostR3410-94-CryptoPro-XchB-ParamSet
|
||||
cryptopro 33 3 : id-GostR3410-94-CryptoPro-XchC-ParamSet
|
||||
|
||||
cryptopro 35 0 : id-GostR3410-2001-TestParamSet
|
||||
cryptopro 35 1 : id-GostR3410-2001-CryptoPro-A-ParamSet
|
||||
cryptopro 35 2 : id-GostR3410-2001-CryptoPro-B-ParamSet
|
||||
cryptopro 35 3 : id-GostR3410-2001-CryptoPro-C-ParamSet
|
||||
|
||||
cryptopro 36 0 : id-GostR3410-2001-CryptoPro-XchA-ParamSet
|
||||
cryptopro 36 1 : id-GostR3410-2001-CryptoPro-XchB-ParamSet
|
||||
|
||||
id-GostR3410-94 1 : id-GostR3410-94-a
|
||||
id-GostR3410-94 2 : id-GostR3410-94-aBis
|
||||
id-GostR3410-94 3 : id-GostR3410-94-b
|
||||
id-GostR3410-94 4 : id-GostR3410-94-bBis
|
||||
|
||||
# Cryptocom LTD GOST OIDs
|
||||
|
||||
cryptocom 1 6 1 : id-Gost28147-89-cc : GOST 28147-89 Cryptocom ParamSet
|
||||
!Cname id-GostR3410-94-cc
|
||||
cryptocom 1 5 3 : gost94cc : GOST 34.10-94 Cryptocom
|
||||
!Cname id-GostR3410-2001-cc
|
||||
cryptocom 1 5 4 : gost2001cc : GOST 34.10-2001 Cryptocom
|
||||
|
||||
cryptocom 1 3 3 : id-GostR3411-94-with-GostR3410-94-cc : GOST R 34.11-94 with GOST R 34.10-94 Cryptocom
|
||||
cryptocom 1 3 4 : id-GostR3411-94-with-GostR3410-2001-cc : GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom
|
||||
|
||||
cryptocom 1 8 1 : id-GostR3410-2001-ParamSet-cc : GOST R 3410-2001 Parameter Set Cryptocom
|
||||
|
||||
# TC26 GOST OIDs
|
||||
|
||||
id-tc26 1 : id-tc26-algorithms
|
||||
id-tc26-algorithms 1 : id-tc26-sign
|
||||
!Cname id-GostR3410-2012-256
|
||||
id-tc26-sign 1 : gost2012_256: GOST R 34.10-2012 with 256 bit modulus
|
||||
!Cname id-GostR3410-2012-512
|
||||
id-tc26-sign 2 : gost2012_512: GOST R 34.10-2012 with 512 bit modulus
|
||||
|
||||
id-tc26-algorithms 2 : id-tc26-digest
|
||||
!Cname id-GostR3411-2012-256
|
||||
id-tc26-digest 2 : md_gost12_256: GOST R 34.11-2012 with 256 bit hash
|
||||
!Cname id-GostR3411-2012-512
|
||||
id-tc26-digest 3 : md_gost12_512: GOST R 34.11-2012 with 512 bit hash
|
||||
|
||||
id-tc26-algorithms 3 : id-tc26-signwithdigest
|
||||
id-tc26-signwithdigest 2: id-tc26-signwithdigest-gost3410-2012-256: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
|
||||
id-tc26-signwithdigest 3: id-tc26-signwithdigest-gost3410-2012-512: GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)
|
||||
|
||||
id-tc26-algorithms 4 : id-tc26-mac
|
||||
id-tc26-mac 1 : id-tc26-hmac-gost-3411-2012-256 : HMAC GOST 34.11-2012 256 bit
|
||||
id-tc26-mac 2 : id-tc26-hmac-gost-3411-2012-512 : HMAC GOST 34.11-2012 512 bit
|
||||
|
||||
id-tc26-algorithms 5 : id-tc26-cipher
|
||||
id-tc26-cipher 1 : id-tc26-cipher-gostr3412-2015-magma
|
||||
id-tc26-cipher-gostr3412-2015-magma 1 : id-tc26-cipher-gostr3412-2015-magma-ctracpkm
|
||||
id-tc26-cipher-gostr3412-2015-magma 2 : id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac
|
||||
id-tc26-cipher 2 : id-tc26-cipher-gostr3412-2015-kuznyechik
|
||||
id-tc26-cipher-gostr3412-2015-kuznyechik 1 : id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm
|
||||
id-tc26-cipher-gostr3412-2015-kuznyechik 2 : id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac
|
||||
|
||||
id-tc26-algorithms 6 : id-tc26-agreement
|
||||
id-tc26-agreement 1 : id-tc26-agreement-gost-3410-2012-256
|
||||
id-tc26-agreement 2 : id-tc26-agreement-gost-3410-2012-512
|
||||
|
||||
id-tc26-algorithms 7 : id-tc26-wrap
|
||||
id-tc26-wrap 1 : id-tc26-wrap-gostr3412-2015-magma
|
||||
id-tc26-wrap-gostr3412-2015-magma 1 : id-tc26-wrap-gostr3412-2015-magma-kexp15
|
||||
id-tc26-wrap 2 : id-tc26-wrap-gostr3412-2015-kuznyechik
|
||||
id-tc26-wrap-gostr3412-2015-kuznyechik 1 : id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15
|
||||
|
||||
id-tc26 2 : id-tc26-constants
|
||||
|
||||
id-tc26-constants 1 : id-tc26-sign-constants
|
||||
id-tc26-sign-constants 1: id-tc26-gost-3410-2012-256-constants
|
||||
id-tc26-gost-3410-2012-256-constants 1 : id-tc26-gost-3410-2012-256-paramSetA: GOST R 34.10-2012 (256 bit) ParamSet A
|
||||
id-tc26-gost-3410-2012-256-constants 2 : id-tc26-gost-3410-2012-256-paramSetB: GOST R 34.10-2012 (256 bit) ParamSet B
|
||||
id-tc26-gost-3410-2012-256-constants 3 : id-tc26-gost-3410-2012-256-paramSetC: GOST R 34.10-2012 (256 bit) ParamSet C
|
||||
id-tc26-gost-3410-2012-256-constants 4 : id-tc26-gost-3410-2012-256-paramSetD: GOST R 34.10-2012 (256 bit) ParamSet D
|
||||
id-tc26-sign-constants 2: id-tc26-gost-3410-2012-512-constants
|
||||
id-tc26-gost-3410-2012-512-constants 0 : id-tc26-gost-3410-2012-512-paramSetTest: GOST R 34.10-2012 (512 bit) testing parameter set
|
||||
id-tc26-gost-3410-2012-512-constants 1 : id-tc26-gost-3410-2012-512-paramSetA: GOST R 34.10-2012 (512 bit) ParamSet A
|
||||
id-tc26-gost-3410-2012-512-constants 2 : id-tc26-gost-3410-2012-512-paramSetB: GOST R 34.10-2012 (512 bit) ParamSet B
|
||||
id-tc26-gost-3410-2012-512-constants 3 : id-tc26-gost-3410-2012-512-paramSetC: GOST R 34.10-2012 (512 bit) ParamSet C
|
||||
|
||||
id-tc26-constants 2 : id-tc26-digest-constants
|
||||
id-tc26-constants 5 : id-tc26-cipher-constants
|
||||
id-tc26-cipher-constants 1 : id-tc26-gost-28147-constants
|
||||
id-tc26-gost-28147-constants 1 : id-tc26-gost-28147-param-Z : GOST 28147-89 TC26 parameter set
|
||||
|
||||
member-body 643 3 131 1 1 : INN : INN
|
||||
member-body 643 100 1 : OGRN : OGRN
|
||||
member-body 643 100 3 : SNILS : SNILS
|
||||
member-body 643 100 111 : subjectSignTool : Signing Tool of Subject
|
||||
member-body 643 100 112 : issuerSignTool : Signing Tool of Issuer
|
||||
|
||||
#GOST R34.13-2015 Grasshopper "Kuznechik"
|
||||
: grasshopper-ecb
|
||||
: grasshopper-ctr
|
||||
: grasshopper-ofb
|
||||
: grasshopper-cbc
|
||||
: grasshopper-cfb
|
||||
: grasshopper-mac
|
||||
|
||||
#GOST R34.13-2015 Magma
|
||||
: magma-ecb
|
||||
: magma-ctr
|
||||
: magma-ofb
|
||||
: magma-cbc
|
||||
: magma-cfb
|
||||
: magma-mac
|
||||
|
||||
# Definitions for Camellia cipher - CBC MODE
|
||||
|
||||
1 2 392 200011 61 1 1 1 2 : CAMELLIA-128-CBC : camellia-128-cbc
|
||||
1 2 392 200011 61 1 1 1 3 : CAMELLIA-192-CBC : camellia-192-cbc
|
||||
1 2 392 200011 61 1 1 1 4 : CAMELLIA-256-CBC : camellia-256-cbc
|
||||
1 2 392 200011 61 1 1 3 2 : id-camellia128-wrap
|
||||
1 2 392 200011 61 1 1 3 3 : id-camellia192-wrap
|
||||
1 2 392 200011 61 1 1 3 4 : id-camellia256-wrap
|
||||
|
||||
# Definitions for Camellia cipher - ECB, CFB, OFB MODE
|
||||
|
||||
!Alias ntt-ds 0 3 4401 5
|
||||
!Alias camellia ntt-ds 3 1 9
|
||||
|
||||
camellia 1 : CAMELLIA-128-ECB : camellia-128-ecb
|
||||
!Cname camellia-128-ofb128
|
||||
camellia 3 : CAMELLIA-128-OFB : camellia-128-ofb
|
||||
!Cname camellia-128-cfb128
|
||||
camellia 4 : CAMELLIA-128-CFB : camellia-128-cfb
|
||||
camellia 6 : CAMELLIA-128-GCM : camellia-128-gcm
|
||||
camellia 7 : CAMELLIA-128-CCM : camellia-128-ccm
|
||||
camellia 9 : CAMELLIA-128-CTR : camellia-128-ctr
|
||||
camellia 10 : CAMELLIA-128-CMAC : camellia-128-cmac
|
||||
|
||||
camellia 21 : CAMELLIA-192-ECB : camellia-192-ecb
|
||||
!Cname camellia-192-ofb128
|
||||
camellia 23 : CAMELLIA-192-OFB : camellia-192-ofb
|
||||
!Cname camellia-192-cfb128
|
||||
camellia 24 : CAMELLIA-192-CFB : camellia-192-cfb
|
||||
camellia 26 : CAMELLIA-192-GCM : camellia-192-gcm
|
||||
camellia 27 : CAMELLIA-192-CCM : camellia-192-ccm
|
||||
camellia 29 : CAMELLIA-192-CTR : camellia-192-ctr
|
||||
camellia 30 : CAMELLIA-192-CMAC : camellia-192-cmac
|
||||
|
||||
camellia 41 : CAMELLIA-256-ECB : camellia-256-ecb
|
||||
!Cname camellia-256-ofb128
|
||||
camellia 43 : CAMELLIA-256-OFB : camellia-256-ofb
|
||||
!Cname camellia-256-cfb128
|
||||
camellia 44 : CAMELLIA-256-CFB : camellia-256-cfb
|
||||
camellia 46 : CAMELLIA-256-GCM : camellia-256-gcm
|
||||
camellia 47 : CAMELLIA-256-CCM : camellia-256-ccm
|
||||
camellia 49 : CAMELLIA-256-CTR : camellia-256-ctr
|
||||
camellia 50 : CAMELLIA-256-CMAC : camellia-256-cmac
|
||||
|
||||
# There are no OIDs for these modes...
|
||||
|
||||
: CAMELLIA-128-CFB1 : camellia-128-cfb1
|
||||
: CAMELLIA-192-CFB1 : camellia-192-cfb1
|
||||
: CAMELLIA-256-CFB1 : camellia-256-cfb1
|
||||
: CAMELLIA-128-CFB8 : camellia-128-cfb8
|
||||
: CAMELLIA-192-CFB8 : camellia-192-cfb8
|
||||
: CAMELLIA-256-CFB8 : camellia-256-cfb8
|
||||
|
||||
# Definitions for ARIA cipher
|
||||
|
||||
!Alias aria 1 2 410 200046 1 1
|
||||
aria 1 : ARIA-128-ECB : aria-128-ecb
|
||||
aria 2 : ARIA-128-CBC : aria-128-cbc
|
||||
!Cname aria-128-cfb128
|
||||
aria 3 : ARIA-128-CFB : aria-128-cfb
|
||||
!Cname aria-128-ofb128
|
||||
aria 4 : ARIA-128-OFB : aria-128-ofb
|
||||
aria 5 : ARIA-128-CTR : aria-128-ctr
|
||||
|
||||
aria 6 : ARIA-192-ECB : aria-192-ecb
|
||||
aria 7 : ARIA-192-CBC : aria-192-cbc
|
||||
!Cname aria-192-cfb128
|
||||
aria 8 : ARIA-192-CFB : aria-192-cfb
|
||||
!Cname aria-192-ofb128
|
||||
aria 9 : ARIA-192-OFB : aria-192-ofb
|
||||
aria 10 : ARIA-192-CTR : aria-192-ctr
|
||||
|
||||
aria 11 : ARIA-256-ECB : aria-256-ecb
|
||||
aria 12 : ARIA-256-CBC : aria-256-cbc
|
||||
!Cname aria-256-cfb128
|
||||
aria 13 : ARIA-256-CFB : aria-256-cfb
|
||||
!Cname aria-256-ofb128
|
||||
aria 14 : ARIA-256-OFB : aria-256-ofb
|
||||
aria 15 : ARIA-256-CTR : aria-256-ctr
|
||||
|
||||
# There are no OIDs for these ARIA modes...
|
||||
: ARIA-128-CFB1 : aria-128-cfb1
|
||||
: ARIA-192-CFB1 : aria-192-cfb1
|
||||
: ARIA-256-CFB1 : aria-256-cfb1
|
||||
: ARIA-128-CFB8 : aria-128-cfb8
|
||||
: ARIA-192-CFB8 : aria-192-cfb8
|
||||
: ARIA-256-CFB8 : aria-256-cfb8
|
||||
|
||||
aria 37 : ARIA-128-CCM : aria-128-ccm
|
||||
aria 38 : ARIA-192-CCM : aria-192-ccm
|
||||
aria 39 : ARIA-256-CCM : aria-256-ccm
|
||||
aria 34 : ARIA-128-GCM : aria-128-gcm
|
||||
aria 35 : ARIA-192-GCM : aria-192-gcm
|
||||
aria 36 : ARIA-256-GCM : aria-256-gcm
|
||||
|
||||
# Definitions for SEED cipher - ECB, CBC, OFB mode
|
||||
|
||||
member-body 410 200004 : KISA : kisa
|
||||
kisa 1 3 : SEED-ECB : seed-ecb
|
||||
kisa 1 4 : SEED-CBC : seed-cbc
|
||||
!Cname seed-cfb128
|
||||
kisa 1 5 : SEED-CFB : seed-cfb
|
||||
!Cname seed-ofb128
|
||||
kisa 1 6 : SEED-OFB : seed-ofb
|
||||
|
||||
|
||||
# Definitions for SM4 cipher
|
||||
|
||||
sm-scheme 104 1 : SM4-ECB : sm4-ecb
|
||||
sm-scheme 104 2 : SM4-CBC : sm4-cbc
|
||||
!Cname sm4-ofb128
|
||||
sm-scheme 104 3 : SM4-OFB : sm4-ofb
|
||||
!Cname sm4-cfb128
|
||||
sm-scheme 104 4 : SM4-CFB : sm4-cfb
|
||||
sm-scheme 104 5 : SM4-CFB1 : sm4-cfb1
|
||||
sm-scheme 104 6 : SM4-CFB8 : sm4-cfb8
|
||||
sm-scheme 104 7 : SM4-CTR : sm4-ctr
|
||||
|
||||
# There is no OID that just denotes "HMAC" oddly enough...
|
||||
|
||||
: HMAC : hmac
|
||||
# Nor CMAC either
|
||||
: CMAC : cmac
|
||||
|
||||
# Synthetic composite ciphersuites
|
||||
: RC4-HMAC-MD5 : rc4-hmac-md5
|
||||
: AES-128-CBC-HMAC-SHA1 : aes-128-cbc-hmac-sha1
|
||||
: AES-192-CBC-HMAC-SHA1 : aes-192-cbc-hmac-sha1
|
||||
: AES-256-CBC-HMAC-SHA1 : aes-256-cbc-hmac-sha1
|
||||
: AES-128-CBC-HMAC-SHA256 : aes-128-cbc-hmac-sha256
|
||||
: AES-192-CBC-HMAC-SHA256 : aes-192-cbc-hmac-sha256
|
||||
: AES-256-CBC-HMAC-SHA256 : aes-256-cbc-hmac-sha256
|
||||
: ChaCha20-Poly1305 : chacha20-poly1305
|
||||
: ChaCha20 : chacha20
|
||||
|
||||
ISO-US 10046 2 1 : dhpublicnumber : X9.42 DH
|
||||
|
||||
# RFC 5639 curve OIDs (see http://www.ietf.org/rfc/rfc5639.txt)
|
||||
# versionOne OBJECT IDENTIFIER ::= {
|
||||
# iso(1) identified-organization(3) teletrust(36) algorithm(3)
|
||||
# signature-algorithm(3) ecSign(2) ecStdCurvesAndGeneration(8)
|
||||
# ellipticCurve(1) 1 }
|
||||
1 3 36 3 3 2 8 1 1 1 : brainpoolP160r1
|
||||
1 3 36 3 3 2 8 1 1 2 : brainpoolP160t1
|
||||
1 3 36 3 3 2 8 1 1 3 : brainpoolP192r1
|
||||
1 3 36 3 3 2 8 1 1 4 : brainpoolP192t1
|
||||
1 3 36 3 3 2 8 1 1 5 : brainpoolP224r1
|
||||
1 3 36 3 3 2 8 1 1 6 : brainpoolP224t1
|
||||
1 3 36 3 3 2 8 1 1 7 : brainpoolP256r1
|
||||
1 3 36 3 3 2 8 1 1 8 : brainpoolP256t1
|
||||
1 3 36 3 3 2 8 1 1 9 : brainpoolP320r1
|
||||
1 3 36 3 3 2 8 1 1 10 : brainpoolP320t1
|
||||
1 3 36 3 3 2 8 1 1 11 : brainpoolP384r1
|
||||
1 3 36 3 3 2 8 1 1 12 : brainpoolP384t1
|
||||
1 3 36 3 3 2 8 1 1 13 : brainpoolP512r1
|
||||
1 3 36 3 3 2 8 1 1 14 : brainpoolP512t1
|
||||
|
||||
# ECDH schemes from RFC5753
|
||||
!Alias x9-63-scheme 1 3 133 16 840 63 0
|
||||
!Alias secg-scheme certicom-arc 1
|
||||
|
||||
x9-63-scheme 2 : dhSinglePass-stdDH-sha1kdf-scheme
|
||||
secg-scheme 11 0 : dhSinglePass-stdDH-sha224kdf-scheme
|
||||
secg-scheme 11 1 : dhSinglePass-stdDH-sha256kdf-scheme
|
||||
secg-scheme 11 2 : dhSinglePass-stdDH-sha384kdf-scheme
|
||||
secg-scheme 11 3 : dhSinglePass-stdDH-sha512kdf-scheme
|
||||
|
||||
x9-63-scheme 3 : dhSinglePass-cofactorDH-sha1kdf-scheme
|
||||
secg-scheme 14 0 : dhSinglePass-cofactorDH-sha224kdf-scheme
|
||||
secg-scheme 14 1 : dhSinglePass-cofactorDH-sha256kdf-scheme
|
||||
secg-scheme 14 2 : dhSinglePass-cofactorDH-sha384kdf-scheme
|
||||
secg-scheme 14 3 : dhSinglePass-cofactorDH-sha512kdf-scheme
|
||||
# NIDs for use with lookup tables.
|
||||
: dh-std-kdf
|
||||
: dh-cofactor-kdf
|
||||
|
||||
# RFC 6962 Extension OIDs (see http://www.ietf.org/rfc/rfc6962.txt)
|
||||
1 3 6 1 4 1 11129 2 4 2 : ct_precert_scts : CT Precertificate SCTs
|
||||
1 3 6 1 4 1 11129 2 4 3 : ct_precert_poison : CT Precertificate Poison
|
||||
1 3 6 1 4 1 11129 2 4 4 : ct_precert_signer : CT Precertificate Signer
|
||||
1 3 6 1 4 1 11129 2 4 5 : ct_cert_scts : CT Certificate SCTs
|
||||
|
||||
# CABForum EV SSL Certificate Guidelines
|
||||
# (see https://cabforum.org/extended-validation/)
|
||||
# OIDs for Subject Jurisdiction of Incorporation or Registration
|
||||
1 3 6 1 4 1 311 60 2 1 1 : jurisdictionL : jurisdictionLocalityName
|
||||
1 3 6 1 4 1 311 60 2 1 2 : jurisdictionST : jurisdictionStateOrProvinceName
|
||||
1 3 6 1 4 1 311 60 2 1 3 : jurisdictionC : jurisdictionCountryName
|
||||
|
||||
# SCRYPT algorithm
|
||||
!Cname id-scrypt
|
||||
1 3 6 1 4 1 11591 4 11 : id-scrypt : scrypt
|
||||
|
||||
# NID for TLS1 PRF
|
||||
: TLS1-PRF : tls1-prf
|
||||
|
||||
# NID for HKDF
|
||||
: HKDF : hkdf
|
||||
|
||||
# NID for SSHKDF
|
||||
: SSHKDF : sshkdf
|
||||
|
||||
# NID for SSKDF
|
||||
: SSKDF : sskdf
|
||||
# NID for X942KDF
|
||||
: X942KDF : x942kdf
|
||||
|
||||
# NID for X963-2001 KDF
|
||||
: X963KDF : x963kdf
|
||||
|
||||
# RFC 4556
|
||||
1 3 6 1 5 2 3 : id-pkinit
|
||||
id-pkinit 4 : pkInitClientAuth : PKINIT Client Auth
|
||||
id-pkinit 5 : pkInitKDC : Signing KDC Response
|
||||
|
||||
# From RFC8410
|
||||
1 3 101 110 : X25519
|
||||
1 3 101 111 : X448
|
||||
1 3 101 112 : ED25519
|
||||
1 3 101 113 : ED448
|
||||
|
||||
|
||||
# NIDs for cipher key exchange
|
||||
: KxRSA : kx-rsa
|
||||
: KxECDHE : kx-ecdhe
|
||||
: KxDHE : kx-dhe
|
||||
: KxECDHE-PSK : kx-ecdhe-psk
|
||||
: KxDHE-PSK : kx-dhe-psk
|
||||
: KxRSA_PSK : kx-rsa-psk
|
||||
: KxPSK : kx-psk
|
||||
: KxSRP : kx-srp
|
||||
: KxGOST : kx-gost
|
||||
: KxANY : kx-any
|
||||
|
||||
# NIDs for cipher authentication
|
||||
: AuthRSA : auth-rsa
|
||||
: AuthECDSA : auth-ecdsa
|
||||
: AuthPSK : auth-psk
|
||||
: AuthDSS : auth-dss
|
||||
: AuthGOST01 : auth-gost01
|
||||
: AuthGOST12 : auth-gost12
|
||||
: AuthSRP : auth-srp
|
||||
: AuthNULL : auth-null
|
||||
: AuthANY : auth-any
|
||||
# NID for Poly1305
|
||||
: Poly1305 : poly1305
|
||||
# NID for SipHash
|
||||
: SipHash : siphash
|
||||
# NIDs for RFC7919 DH parameters
|
||||
: ffdhe2048
|
||||
: ffdhe3072
|
||||
: ffdhe4096
|
||||
: ffdhe6144
|
||||
: ffdhe8192
|
||||
|
||||
# OIDs for DSTU-4145/DSTU-7564 (http://zakon2.rada.gov.ua/laws/show/z0423-17)
|
||||
|
||||
# DSTU OIDs
|
||||
member-body 804 : ISO-UA
|
||||
ISO-UA 2 1 1 1 : ua-pki
|
||||
ua-pki 1 1 1 : dstu28147 : DSTU Gost 28147-2009
|
||||
dstu28147 2 : dstu28147-ofb : DSTU Gost 28147-2009 OFB mode
|
||||
dstu28147 3 : dstu28147-cfb : DSTU Gost 28147-2009 CFB mode
|
||||
dstu28147 5 : dstu28147-wrap : DSTU Gost 28147-2009 key wrap
|
||||
|
||||
ua-pki 1 1 2 : hmacWithDstu34311 : HMAC DSTU Gost 34311-95
|
||||
ua-pki 1 2 1 : dstu34311 : DSTU Gost 34311-95
|
||||
|
||||
ua-pki 1 3 1 1 : dstu4145le : DSTU 4145-2002 little endian
|
||||
dstu4145le 1 1 : dstu4145be : DSTU 4145-2002 big endian
|
||||
|
||||
# 1.2.804. 2.1.1.1 1.3.1.1 .2.6
|
||||
# UA ua-pki 4145 le
|
||||
# DSTU named curves
|
||||
dstu4145le 2 0 : uacurve0 : DSTU curve 0
|
||||
dstu4145le 2 1 : uacurve1 : DSTU curve 1
|
||||
dstu4145le 2 2 : uacurve2 : DSTU curve 2
|
||||
dstu4145le 2 3 : uacurve3 : DSTU curve 3
|
||||
dstu4145le 2 4 : uacurve4 : DSTU curve 4
|
||||
dstu4145le 2 5 : uacurve5 : DSTU curve 5
|
||||
dstu4145le 2 6 : uacurve6 : DSTU curve 6
|
||||
dstu4145le 2 7 : uacurve7 : DSTU curve 7
|
||||
dstu4145le 2 8 : uacurve8 : DSTU curve 8
|
||||
dstu4145le 2 9 : uacurve9 : DSTU curve 9
|
||||
# NID for AES-SIV
|
||||
: AES-128-SIV : aes-128-siv
|
||||
: AES-192-SIV : aes-192-siv
|
||||
: AES-256-SIV : aes-256-siv
|
||||
+39
-3
@@ -71,8 +71,28 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
|
||||
|
||||
switch (gen->type) {
|
||||
case GEN_OTHERNAME:
|
||||
if (!X509V3_add_value("othername", "<unsupported>", &ret))
|
||||
return NULL;
|
||||
switch (OBJ_obj2nid(gen->d.otherName->type_id)) {
|
||||
case NID_id_on_SmtpUTF8Mailbox:
|
||||
if (!X509V3_add_value_uchar("othername: SmtpUTF8Mailbox:", gen->d.otherName->value->value.utf8string->data, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
case NID_XmppAddr:
|
||||
if (!X509V3_add_value_uchar("othername: XmppAddr:", gen->d.otherName->value->value.utf8string->data, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
case NID_SRVName:
|
||||
if (!X509V3_add_value_uchar("othername: SRVName:", gen->d.otherName->value->value.ia5string->data, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
case NID_ms_upn:
|
||||
if (!X509V3_add_value_uchar("othername: UPN:", gen->d.otherName->value->value.utf8string->data, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
default:
|
||||
if (!X509V3_add_value("othername", "<unsupported>", &ret))
|
||||
return NULL;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case GEN_X400:
|
||||
@@ -144,7 +164,23 @@ int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen)
|
||||
int i;
|
||||
switch (gen->type) {
|
||||
case GEN_OTHERNAME:
|
||||
BIO_printf(out, "othername:<unsupported>");
|
||||
switch (OBJ_obj2nid(gen->d.otherName->type_id)) {
|
||||
case NID_id_on_SmtpUTF8Mailbox:
|
||||
BIO_printf(out, "othername:SmtpUTF8Mailbox:%s", gen->d.otherName->value->value.utf8string->data);
|
||||
break;
|
||||
case NID_XmppAddr:
|
||||
BIO_printf(out, "othername:XmppAddr:%s", gen->d.otherName->value->value.utf8string->data);
|
||||
break;
|
||||
case NID_SRVName:
|
||||
BIO_printf(out, "othername:SRVName:%s", gen->d.otherName->value->value.ia5string->data);
|
||||
break;
|
||||
case NID_ms_upn:
|
||||
BIO_printf(out, "othername:UPN:%s", gen->d.otherName->value->value.utf8string->data);
|
||||
break;
|
||||
default:
|
||||
BIO_printf(out, "othername:<unsupported>");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case GEN_X400:
|
||||
|
||||
@@ -123,6 +123,9 @@ The actual signature to verify.
|
||||
|
||||
Create a hashed MAC using "key".
|
||||
|
||||
The L<openssl-mac(1)> command should be preferred to using this command line
|
||||
option.
|
||||
|
||||
=item B<-mac alg>
|
||||
|
||||
Create MAC (keyed Message Authentication Code). The most popular MAC
|
||||
@@ -131,6 +134,9 @@ which are not based on hash, for instance B<gost-mac> algorithm,
|
||||
supported by B<ccgost> engine. MAC keys and other options should be set
|
||||
via B<-macopt> parameter.
|
||||
|
||||
The L<openssl-mac(1)> command should be preferred to using this command line
|
||||
option.
|
||||
|
||||
=item B<-macopt nm:v>
|
||||
|
||||
Passes options to MAC algorithm, specified by B<-mac> key.
|
||||
@@ -152,6 +158,9 @@ for example exactly 32 chars for gost-mac.
|
||||
|
||||
=back
|
||||
|
||||
The L<openssl-mac(1)> command should be preferred to using this command line
|
||||
option.
|
||||
|
||||
=item B<-rand file...>
|
||||
|
||||
A file or files containing random data used to seed the random number
|
||||
@@ -229,6 +238,13 @@ Hex signatures cannot be verified using B<openssl>. Instead, use "xxd -r"
|
||||
or similar program to transform the hex signature into a binary signature
|
||||
prior to verification.
|
||||
|
||||
The L<openssl-mac(1)> command is preferred over the B<-hmac>, B<-mac> and
|
||||
B<-macopt> command line options.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<openssl-mac(1)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
The default digest was changed from MD5 to SHA256 in OpenSSL 1.1.0.
|
||||
|
||||
@@ -8,14 +8,14 @@ openssl-info - print OpenSSL built-in information
|
||||
|
||||
B<openssl info>
|
||||
[B<-help>]
|
||||
[B<-configdir> | B<-c>]
|
||||
[B<-enginesdir> | B<-e>]
|
||||
[B<-modulesdir> | B<-m>]
|
||||
[B<-configdir>]
|
||||
[B<-enginesdir>]
|
||||
[B<-modulesdir> ]
|
||||
[B<-dsoext>]
|
||||
[B<-dirfilesep>]
|
||||
[B<-listsep]>
|
||||
[B<-seeds]>
|
||||
[B<-cpusettings]>
|
||||
[B<-listsep>]
|
||||
[B<-seeds>]
|
||||
[B<-cpusettings>]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
@@ -34,15 +34,15 @@ command.
|
||||
|
||||
Print out a usage message.
|
||||
|
||||
=item B<-configdir>, B<-c>
|
||||
=item B<-configdir>
|
||||
|
||||
Outputs the default directory for OpenSSL configuration files.
|
||||
|
||||
=item B<-enginesdir>, B<-e>
|
||||
=item B<-enginesdir>
|
||||
|
||||
Outputs the default directory for OpenSSL engine modules.
|
||||
|
||||
=item B<-modulesdir>, B<-m>
|
||||
=item B<-modulesdir>
|
||||
|
||||
Outputs the default directory for OpenSSL dynamically loadable modules
|
||||
other than engine modules.
|
||||
|
||||
+10
-12
@@ -22,6 +22,10 @@ B<openssl> B<s_time>
|
||||
[B<-nameopt option>]
|
||||
[B<-time seconds>]
|
||||
[B<-ssl3>]
|
||||
[B<-tls1>]
|
||||
[B<-tls1_1>]
|
||||
[B<-tls1_2>]
|
||||
[B<-tls1_3>]
|
||||
[B<-bugs>]
|
||||
[B<-cipher cipherlist>]
|
||||
[B<-ciphersuites val>]
|
||||
@@ -109,19 +113,13 @@ Performs the timing test using the same session ID; this can be used as a test
|
||||
that session caching is working. If neither B<-new> nor B<-reuse> are
|
||||
specified, they are both on by default and executed in sequence.
|
||||
|
||||
=item B<-ssl3>
|
||||
=item B<-ssl3>, B<-tls1>, B<-tls1_1>, B<-tls1_2>, B<-tls1_3>
|
||||
|
||||
This option disables the use of SSL version 3. By default
|
||||
the initial handshake uses a method which should be compatible with all
|
||||
servers and permit them to use SSL v3 or TLS as appropriate.
|
||||
|
||||
The timing program is not as rich in options to turn protocols on and off as
|
||||
the L<s_client(1)> program and may not connect to all servers.
|
||||
Unfortunately there are a lot of ancient and broken servers in use which
|
||||
cannot handle this technique and will fail to connect. Some servers only
|
||||
work if TLS is turned off with the B<-ssl3> option.
|
||||
|
||||
Note that this option may not be available, depending on how
|
||||
These options enable specific SSL or TLS protocol versions for the handshake
|
||||
initiated by B<s_time>.
|
||||
By default B<s_time> negotiates the highest mutually supported protocol
|
||||
version.
|
||||
Note that not all protocols and flags may be available, depending on how
|
||||
OpenSSL was built.
|
||||
|
||||
=item B<-bugs>
|
||||
|
||||
@@ -68,9 +68,9 @@ EVP_MD_do_all_ex
|
||||
|
||||
const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
|
||||
const char *EVP_MD_CTX_name(const EVP_MD_CTX *ctx);
|
||||
int EVP_MD_CTX_size(const EVP_MD *ctx);
|
||||
int EVP_MD_CTX_block_size(const EVP_MD *ctx);
|
||||
int EVP_MD_CTX_type(const EVP_MD *ctx);
|
||||
int EVP_MD_CTX_size(const EVP_MD_CTX *ctx);
|
||||
int EVP_MD_CTX_block_size(const EVP_MD_CTX *ctx);
|
||||
int EVP_MD_CTX_type(const EVP_MD_CTX *ctx);
|
||||
void *EVP_MD_CTX_md_data(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);
|
||||
|
||||
@@ -1069,3 +1069,6 @@ OBJ_kmac256="\x60\x86\x48\x01\x65\x03\x04\x02\x14"
|
||||
OBJ_blake2bmac="\x2B\x06\x01\x04\x01\x8D\x3A\x0C\x02\x01"
|
||||
OBJ_blake2smac="\x2B\x06\x01\x04\x01\x8D\x3A\x0C\x02\x02"
|
||||
OBJ_SM2_with_SM3="\x2A\x81\x1C\xCF\x55\x01\x83\x75"
|
||||
OBJ_id_on_SmtpUTF8Mailbox="\x2B\x06\x01\x05\x05\x07\x08\x09"
|
||||
OBJ_XmppAddr="\x2B\x06\x01\x05\x05\x07\x08\x05"
|
||||
OBJ_SRVName="\x2B\x06\x01\x05\x05\x07\x08\x07"
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#error "This file is obsolete; please update your software."
|
||||
@@ -0,0 +1,1722 @@
|
||||
/*
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#ifndef HEADER_ENVELOPE_H
|
||||
# define HEADER_ENVELOPE_H
|
||||
|
||||
# include <stdarg.h>
|
||||
|
||||
# include <openssl/opensslconf.h>
|
||||
# include <openssl/ossl_typ.h>
|
||||
# include <openssl/symhacks.h>
|
||||
# include <openssl/bio.h>
|
||||
# include <openssl/evperr.h>
|
||||
# include <openssl/params.h>
|
||||
|
||||
# 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 <openssl/objects.h>
|
||||
|
||||
# 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
|
||||
|
||||
int EVP_set_default_properties(OPENSSL_CTX *libctx, const char *propq);
|
||||
|
||||
# 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);
|
||||
int EVP_MD_up_ref(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 in evp_int.h */
|
||||
|
||||
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_up_ref(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_SIV_MODE 0x10004
|
||||
# define EVP_CIPH_MODE 0xF0007
|
||||
/* Set if variable length cipher */
|
||||
# define EVP_CIPH_VARIABLE_LENGTH 0x8
|
||||
/* Set if the iv handling should be done by the cipher itself */
|
||||
# define EVP_CIPH_CUSTOM_IV 0x10
|
||||
/* Set if the cipher's init() function should be called if key is NULL */
|
||||
# define EVP_CIPH_ALWAYS_CALL_INIT 0x20
|
||||
/* Call ctrl() to init cipher parameters */
|
||||
# define EVP_CIPH_CTRL_INIT 0x40
|
||||
/* Don't use standard key length function */
|
||||
# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80
|
||||
/* Don't use standard block padding */
|
||||
# define EVP_CIPH_NO_PADDING 0x100
|
||||
/* cipher handles random key generation */
|
||||
# define EVP_CIPH_RAND_KEY 0x200
|
||||
/* cipher has its own additional copying logic */
|
||||
# define EVP_CIPH_CUSTOM_COPY 0x400
|
||||
/* Allow use default ASN1 get/set iv */
|
||||
# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000
|
||||
/* Buffer length in bits not bytes: CFB1 mode only */
|
||||
# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000
|
||||
/* Note if suitable for use in FIPS mode */
|
||||
# define EVP_CIPH_FLAG_FIPS 0x4000
|
||||
/* Allow non FIPS cipher in FIPS mode */
|
||||
# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000
|
||||
/*
|
||||
* Cipher handles any and all padding logic as well as finalisation.
|
||||
*/
|
||||
# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000
|
||||
# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000
|
||||
# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000
|
||||
/* Cipher can handle pipeline operations */
|
||||
# define EVP_CIPH_FLAG_PIPELINE 0X800000
|
||||
|
||||
/*
|
||||
* Cipher context flag to indicate we can handle wrap mode: if allowed in
|
||||
* older applications it could overflow buffers.
|
||||
*/
|
||||
|
||||
# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1
|
||||
|
||||
/* ctrl() values */
|
||||
|
||||
# define EVP_CTRL_INIT 0x0
|
||||
# define EVP_CTRL_SET_KEY_LENGTH 0x1
|
||||
# define EVP_CTRL_GET_RC2_KEY_BITS 0x2
|
||||
# define EVP_CTRL_SET_RC2_KEY_BITS 0x3
|
||||
# define EVP_CTRL_GET_RC5_ROUNDS 0x4
|
||||
# define EVP_CTRL_SET_RC5_ROUNDS 0x5
|
||||
# define EVP_CTRL_RAND_KEY 0x6
|
||||
# define EVP_CTRL_PBE_PRF_NID 0x7
|
||||
# define EVP_CTRL_COPY 0x8
|
||||
# define EVP_CTRL_AEAD_SET_IVLEN 0x9
|
||||
# define EVP_CTRL_AEAD_GET_TAG 0x10
|
||||
# define EVP_CTRL_AEAD_SET_TAG 0x11
|
||||
# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12
|
||||
# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN
|
||||
# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG
|
||||
# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG
|
||||
# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED
|
||||
# define EVP_CTRL_GCM_IV_GEN 0x13
|
||||
# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN
|
||||
# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG
|
||||
# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG
|
||||
# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED
|
||||
# define EVP_CTRL_CCM_SET_L 0x14
|
||||
# define EVP_CTRL_CCM_SET_MSGLEN 0x15
|
||||
/*
|
||||
* AEAD cipher deduces payload length and returns number of bytes required to
|
||||
* store MAC and eventual padding. Subsequent call to EVP_Cipher even
|
||||
* appends/verifies MAC.
|
||||
*/
|
||||
# define EVP_CTRL_AEAD_TLS1_AAD 0x16
|
||||
/* Used by composite AEAD ciphers, no-op in GCM, CCM... */
|
||||
# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17
|
||||
/* Set the GCM invocation field, decrypt only */
|
||||
# define EVP_CTRL_GCM_SET_IV_INV 0x18
|
||||
|
||||
# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19
|
||||
# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a
|
||||
# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b
|
||||
# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c
|
||||
|
||||
# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d
|
||||
|
||||
/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */
|
||||
# define EVP_CTRL_SET_SBOX 0x1e
|
||||
/*
|
||||
* EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a
|
||||
* pre-allocated buffer with specified size
|
||||
*/
|
||||
# define EVP_CTRL_SBOX_USED 0x1f
|
||||
/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after,
|
||||
* 0 switches meshing off
|
||||
*/
|
||||
# define EVP_CTRL_KEY_MESH 0x20
|
||||
/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */
|
||||
# define EVP_CTRL_BLOCK_PADDING_MODE 0x21
|
||||
|
||||
/* Set the output buffers to use for a pipelined operation */
|
||||
# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22
|
||||
/* Set the input buffers to use for a pipelined operation */
|
||||
# define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23
|
||||
/* Set the input buffer lengths to use for a pipelined operation */
|
||||
# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24
|
||||
/* Get the IV used by the cipher */
|
||||
# define EVP_CTRL_GET_IV 0x25
|
||||
/* Tell the cipher it's doing a speed test (SIV disallows multiple ops) */
|
||||
# define EVP_CTRL_SET_SPEED 0x26
|
||||
|
||||
/* 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,\
|
||||
(rsa))
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_DSA
|
||||
# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
|
||||
(dsa))
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_DH
|
||||
# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,(dh))
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_EC
|
||||
# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\
|
||||
(eckey))
|
||||
# endif
|
||||
# ifndef OPENSSL_NO_SIPHASH
|
||||
# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),\
|
||||
EVP_PKEY_SIPHASH,(shkey))
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_POLY1305
|
||||
# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\
|
||||
EVP_PKEY_POLY1305,(polykey))
|
||||
# endif
|
||||
|
||||
/* Add some extra combinations */
|
||||
# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
|
||||
# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
|
||||
# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
|
||||
# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))
|
||||
|
||||
int EVP_MD_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);
|
||||
int EVP_CIPHER_mode(const EVP_CIPHER *cipher);
|
||||
EVP_CIPHER *EVP_CIPHER_fetch(OPENSSL_CTX *ctx, const char *algorithm,
|
||||
const char *properties);
|
||||
|
||||
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);
|
||||
int 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_1_1_0
|
||||
# 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,(void *)(md))
|
||||
# endif
|
||||
# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(mdp))
|
||||
# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(mdcp))
|
||||
# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(mdcp))
|
||||
# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL)
|
||||
# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(c_pp))
|
||||
|
||||
/*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c,
|
||||
unsigned char *out,
|
||||
const unsigned char *in, unsigned int inl);
|
||||
|
||||
# define EVP_add_cipher_alias(n,alias) \
|
||||
OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
|
||||
# define EVP_add_digest_alias(n,alias) \
|
||||
OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
|
||||
# define EVP_delete_cipher_alias(alias) \
|
||||
OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS);
|
||||
# define EVP_delete_digest_alias(alias) \
|
||||
OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS);
|
||||
|
||||
int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]);
|
||||
int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]);
|
||||
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);
|
||||
|
||||
__owur EVP_MD *EVP_MD_fetch(OPENSSL_CTX *ctx, const char *algorithm,
|
||||
const char *properties);
|
||||
|
||||
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, const EVP_ENCODE_CTX *sctx);
|
||||
int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx);
|
||||
void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
|
||||
int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
|
||||
const unsigned char *in, int inl);
|
||||
void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
|
||||
int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
|
||||
|
||||
void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
|
||||
int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
|
||||
const unsigned char *in, int inl);
|
||||
int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
|
||||
char *out, int *outl);
|
||||
int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
|
||||
|
||||
# if !OPENSSL_API_1_1_0
|
||||
# define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c)
|
||||
# define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c)
|
||||
# endif
|
||||
EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
|
||||
int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
|
||||
void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c);
|
||||
int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
|
||||
int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
|
||||
int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
|
||||
int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
|
||||
|
||||
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_SIV
|
||||
const EVP_CIPHER *EVP_aes_128_siv(void);
|
||||
const EVP_CIPHER *EVP_aes_192_siv(void);
|
||||
const EVP_CIPHER *EVP_aes_256_siv(void);
|
||||
# endif
|
||||
# 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_1_1_0
|
||||
# define OPENSSL_add_all_algorithms_conf() \
|
||||
OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
|
||||
| OPENSSL_INIT_ADD_ALL_DIGESTS \
|
||||
| OPENSSL_INIT_LOAD_CONFIG, NULL)
|
||||
# define OPENSSL_add_all_algorithms_noconf() \
|
||||
OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
|
||||
| OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
|
||||
|
||||
# ifdef OPENSSL_LOAD_CONF
|
||||
# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf()
|
||||
# else
|
||||
# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf()
|
||||
# endif
|
||||
|
||||
# define OpenSSL_add_all_ciphers() \
|
||||
OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL)
|
||||
# define OpenSSL_add_all_digests() \
|
||||
OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
|
||||
|
||||
# define EVP_cleanup() while(0) continue
|
||||
# endif
|
||||
|
||||
int EVP_add_cipher(const EVP_CIPHER *cipher);
|
||||
int EVP_add_digest(const EVP_MD *digest);
|
||||
|
||||
const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
|
||||
const EVP_MD *EVP_get_digestbyname(const char *name);
|
||||
|
||||
void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph,
|
||||
const char *from, const char *to, void *x),
|
||||
void *arg);
|
||||
void EVP_CIPHER_do_all_sorted(void (*fn)
|
||||
(const EVP_CIPHER *ciph, const char *from,
|
||||
const char *to, void *x), void *arg);
|
||||
|
||||
void EVP_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);
|
||||
|
||||
/* MAC stuff */
|
||||
|
||||
# define EVP_MAC_BLAKE2B NID_blake2bmac
|
||||
# define EVP_MAC_BLAKE2S NID_blake2smac
|
||||
# define EVP_MAC_CMAC NID_cmac
|
||||
# define EVP_MAC_GMAC NID_gmac
|
||||
# define EVP_MAC_HMAC NID_hmac
|
||||
# define EVP_MAC_KMAC128 NID_kmac128
|
||||
# define EVP_MAC_KMAC256 NID_kmac256
|
||||
# define EVP_MAC_SIPHASH NID_siphash
|
||||
# define EVP_MAC_POLY1305 NID_poly1305
|
||||
|
||||
EVP_MAC_CTX *EVP_MAC_CTX_new(const EVP_MAC *mac);
|
||||
EVP_MAC_CTX *EVP_MAC_CTX_new_id(int nid);
|
||||
void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx);
|
||||
EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src);
|
||||
const EVP_MAC *EVP_MAC_CTX_mac(EVP_MAC_CTX *ctx);
|
||||
size_t EVP_MAC_size(EVP_MAC_CTX *ctx);
|
||||
int EVP_MAC_init(EVP_MAC_CTX *ctx);
|
||||
int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen);
|
||||
int EVP_MAC_final(EVP_MAC_CTX *ctx, unsigned char *out, size_t *poutlen);
|
||||
int EVP_MAC_ctrl(EVP_MAC_CTX *ctx, int cmd, ...);
|
||||
int EVP_MAC_vctrl(EVP_MAC_CTX *ctx, int cmd, va_list args);
|
||||
int EVP_MAC_ctrl_str(EVP_MAC_CTX *ctx, const char *type, const char *value);
|
||||
int EVP_MAC_str2ctrl(EVP_MAC_CTX *ctx, int cmd, const char *value);
|
||||
int EVP_MAC_hex2ctrl(EVP_MAC_CTX *ctx, int cmd, const char *value);
|
||||
int EVP_MAC_nid(const EVP_MAC *mac);
|
||||
|
||||
# define EVP_get_macbynid(a) EVP_get_macbyname(OBJ_nid2sn(a))
|
||||
# define EVP_get_macbyobj(a) EVP_get_macbynid(OBJ_obj2nid(a))
|
||||
# define EVP_MAC_name(o) OBJ_nid2sn(EVP_MAC_nid(o))
|
||||
const EVP_MAC *EVP_get_macbyname(const char *name);
|
||||
void EVP_MAC_do_all(void (*fn)
|
||||
(const EVP_MAC *ciph, const char *from, const char *to,
|
||||
void *x), void *arg);
|
||||
void EVP_MAC_do_all_sorted(void (*fn)
|
||||
(const EVP_MAC *ciph, const char *from,
|
||||
const char *to, void *x), void *arg);
|
||||
|
||||
# define EVP_MAC_CTRL_SET_KEY 0x01 /* unsigned char *, size_t */
|
||||
# define EVP_MAC_CTRL_SET_FLAGS 0x02 /* unsigned long */
|
||||
# define EVP_MAC_CTRL_SET_ENGINE 0x03 /* ENGINE * */
|
||||
# define EVP_MAC_CTRL_SET_MD 0x04 /* EVP_MD * */
|
||||
# define EVP_MAC_CTRL_SET_CIPHER 0x05 /* EVP_CIPHER * */
|
||||
# define EVP_MAC_CTRL_SET_SIZE 0x06 /* size_t */
|
||||
# define EVP_MAC_CTRL_SET_IV 0x07 /* unsigned char *, size_t */
|
||||
# define EVP_MAC_CTRL_SET_CUSTOM 0x08 /* unsigned char *, size_t */
|
||||
# define EVP_MAC_CTRL_SET_XOF 0x09 /* int */
|
||||
# define EVP_MAC_CTRL_SET_SALT 0x0a /* unsigned char *, size_t */
|
||||
|
||||
/* PKEY stuff */
|
||||
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(const 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(const 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(const 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(const 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(const 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(const EVP_PKEY *a, unsigned char **pp);
|
||||
|
||||
int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp);
|
||||
EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp,
|
||||
long length);
|
||||
int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey);
|
||||
EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in);
|
||||
|
||||
int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
|
||||
int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
|
||||
int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode);
|
||||
int EVP_PKEY_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_supports_digest_nid(EVP_PKEY *pkey, int nid);
|
||||
|
||||
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
|
||||
# define ASN1_PKEY_CTRL_SUPPORTS_MD_NID 0xb
|
||||
|
||||
int EVP_PKEY_asn1_get_count(void);
|
||||
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
|
||||
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
|
||||
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
|
||||
const char *str, int len);
|
||||
int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
|
||||
int EVP_PKEY_asn1_add_alias(int to, int from);
|
||||
int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id,
|
||||
int *ppkey_flags, const char **pinfo,
|
||||
const char **ppem_str,
|
||||
const EVP_PKEY_ASN1_METHOD *ameth);
|
||||
|
||||
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey);
|
||||
EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags,
|
||||
const char *pem_str,
|
||||
const char *info);
|
||||
void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,
|
||||
const EVP_PKEY_ASN1_METHOD *src);
|
||||
void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
|
||||
void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
|
||||
int (*pub_decode) (EVP_PKEY *pk,
|
||||
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(const 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(const EVP_PKEY_CTX *ctx);
|
||||
EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
|
||||
|
||||
EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx);
|
||||
|
||||
void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
|
||||
void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
|
||||
|
||||
int EVP_PKEY_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,
|
||||
const 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_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,
|
||||
const 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_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);
|
||||
|
||||
/*
|
||||
* Convenient helper functions to transfer string based controls.
|
||||
* The callback gets called with the parsed value.
|
||||
*/
|
||||
int EVP_str2ctrl(int (*cb)(void *ctx, int cmd, void *buf, size_t buflen),
|
||||
void *ctx, int cmd, const char *value);
|
||||
int EVP_hex2ctrl(int (*cb)(void *ctx, int cmd, void *buf, size_t buflen),
|
||||
void *ctx, int cmd, const char *hex);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
@@ -143,9 +143,6 @@
|
||||
*
|
||||
* If none of the above applies, we check if the compiler is MSVC,
|
||||
* and use __FUNCTION__ if that's the case.
|
||||
*
|
||||
* If all these possibilities are exhausted, we give up and use a
|
||||
* static string.
|
||||
*/
|
||||
# ifndef OPENSSL_FUNC
|
||||
# if defined(__STDC_VERSION__)
|
||||
@@ -156,7 +153,12 @@
|
||||
# endif
|
||||
# elif defined(_MSC_VER)
|
||||
# define OPENSSL_FUNC __FUNCTION__
|
||||
# else
|
||||
# endif
|
||||
/*
|
||||
* If all these possibilities are exhausted, we give up and use a
|
||||
* static string.
|
||||
*/
|
||||
# ifndef OPENSSL_FUNC
|
||||
# define OPENSSL_FUNC "(unknown function)"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@@ -1856,6 +1856,21 @@
|
||||
#define NID_id_on_permanentIdentifier 858
|
||||
#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L
|
||||
|
||||
#define SN_XmppAddr "id-on-xmppAddr"
|
||||
#define LN_XmppAddr "XmppAddr"
|
||||
#define NID_XmppAddr 1209
|
||||
#define OBJ_XmppAddr OBJ_id_on,5L
|
||||
|
||||
#define SN_SRVName "id-on-dnsSRV"
|
||||
#define LN_SRVName "SRVName"
|
||||
#define NID_SRVName 1210
|
||||
#define OBJ_SRVName OBJ_id_on,7L
|
||||
|
||||
#define SN_id_on_SmtpUTF8Mailbox "id-on-SmtpUTF8Mailbox"
|
||||
#define LN_id_on_SmtpUTF8Mailbox "Smtp UTF8 Mailbox"
|
||||
#define NID_id_on_SmtpUTF8Mailbox 1208
|
||||
#define OBJ_id_on_SmtpUTF8Mailbox OBJ_id_on,9L
|
||||
|
||||
#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth"
|
||||
#define NID_id_pda_dateOfBirth 348
|
||||
#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L
|
||||
@@ -4839,7 +4854,7 @@
|
||||
|
||||
#define SN_chacha20_poly1305_draft "ChaCha20-Poly1305-D"
|
||||
#define LN_chacha20_poly1305_draft "chacha20-poly1305-draft"
|
||||
#define NID_chacha20_poly1305_draft 1208
|
||||
#define NID_chacha20_poly1305_draft 1211
|
||||
|
||||
#define SN_chacha20 "ChaCha20"
|
||||
#define LN_chacha20 "chacha20"
|
||||
|
||||
@@ -0,0 +1,5271 @@
|
||||
/*
|
||||
* WARNING: do not edit!
|
||||
* Generated by crypto/objects/objects.pl
|
||||
*
|
||||
* Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#define SN_undef "UNDEF"
|
||||
#define LN_undef "undefined"
|
||||
#define NID_undef 0
|
||||
#define OBJ_undef 0L
|
||||
|
||||
#define SN_itu_t "ITU-T"
|
||||
#define LN_itu_t "itu-t"
|
||||
#define NID_itu_t 645
|
||||
#define OBJ_itu_t 0L
|
||||
|
||||
#define NID_ccitt 404
|
||||
#define OBJ_ccitt OBJ_itu_t
|
||||
|
||||
#define SN_iso "ISO"
|
||||
#define LN_iso "iso"
|
||||
#define NID_iso 181
|
||||
#define OBJ_iso 1L
|
||||
|
||||
#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T"
|
||||
#define LN_joint_iso_itu_t "joint-iso-itu-t"
|
||||
#define NID_joint_iso_itu_t 646
|
||||
#define OBJ_joint_iso_itu_t 2L
|
||||
|
||||
#define NID_joint_iso_ccitt 393
|
||||
#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t
|
||||
|
||||
#define SN_member_body "member-body"
|
||||
#define LN_member_body "ISO Member Body"
|
||||
#define NID_member_body 182
|
||||
#define OBJ_member_body OBJ_iso,2L
|
||||
|
||||
#define SN_identified_organization "identified-organization"
|
||||
#define NID_identified_organization 676
|
||||
#define OBJ_identified_organization OBJ_iso,3L
|
||||
|
||||
#define SN_gmac "GMAC"
|
||||
#define LN_gmac "gmac"
|
||||
#define NID_gmac 1195
|
||||
#define OBJ_gmac OBJ_iso,0L,9797L,3L,4L
|
||||
|
||||
#define SN_hmac_md5 "HMAC-MD5"
|
||||
#define LN_hmac_md5 "hmac-md5"
|
||||
#define NID_hmac_md5 780
|
||||
#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L
|
||||
|
||||
#define SN_hmac_sha1 "HMAC-SHA1"
|
||||
#define LN_hmac_sha1 "hmac-sha1"
|
||||
#define NID_hmac_sha1 781
|
||||
#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L
|
||||
|
||||
#define SN_x509ExtAdmission "x509ExtAdmission"
|
||||
#define LN_x509ExtAdmission "Professional Information or basis for Admission"
|
||||
#define NID_x509ExtAdmission 1093
|
||||
#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L
|
||||
|
||||
#define SN_certicom_arc "certicom-arc"
|
||||
#define NID_certicom_arc 677
|
||||
#define OBJ_certicom_arc OBJ_identified_organization,132L
|
||||
|
||||
#define SN_ieee "ieee"
|
||||
#define NID_ieee 1170
|
||||
#define OBJ_ieee OBJ_identified_organization,111L
|
||||
|
||||
#define SN_ieee_siswg "ieee-siswg"
|
||||
#define LN_ieee_siswg "IEEE Security in Storage Working Group"
|
||||
#define NID_ieee_siswg 1171
|
||||
#define OBJ_ieee_siswg OBJ_ieee,2L,1619L
|
||||
|
||||
#define SN_international_organizations "international-organizations"
|
||||
#define LN_international_organizations "International Organizations"
|
||||
#define NID_international_organizations 647
|
||||
#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L
|
||||
|
||||
#define SN_wap "wap"
|
||||
#define NID_wap 678
|
||||
#define OBJ_wap OBJ_international_organizations,43L
|
||||
|
||||
#define SN_wap_wsg "wap-wsg"
|
||||
#define NID_wap_wsg 679
|
||||
#define OBJ_wap_wsg OBJ_wap,1L
|
||||
|
||||
#define SN_selected_attribute_types "selected-attribute-types"
|
||||
#define LN_selected_attribute_types "Selected Attribute Types"
|
||||
#define NID_selected_attribute_types 394
|
||||
#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L
|
||||
|
||||
#define SN_clearance "clearance"
|
||||
#define NID_clearance 395
|
||||
#define OBJ_clearance OBJ_selected_attribute_types,55L
|
||||
|
||||
#define SN_ISO_US "ISO-US"
|
||||
#define LN_ISO_US "ISO US Member Body"
|
||||
#define NID_ISO_US 183
|
||||
#define OBJ_ISO_US OBJ_member_body,840L
|
||||
|
||||
#define SN_X9_57 "X9-57"
|
||||
#define LN_X9_57 "X9.57"
|
||||
#define NID_X9_57 184
|
||||
#define OBJ_X9_57 OBJ_ISO_US,10040L
|
||||
|
||||
#define SN_X9cm "X9cm"
|
||||
#define LN_X9cm "X9.57 CM ?"
|
||||
#define NID_X9cm 185
|
||||
#define OBJ_X9cm OBJ_X9_57,4L
|
||||
|
||||
#define SN_ISO_CN "ISO-CN"
|
||||
#define LN_ISO_CN "ISO CN Member Body"
|
||||
#define NID_ISO_CN 1140
|
||||
#define OBJ_ISO_CN OBJ_member_body,156L
|
||||
|
||||
#define SN_oscca "oscca"
|
||||
#define NID_oscca 1141
|
||||
#define OBJ_oscca OBJ_ISO_CN,10197L
|
||||
|
||||
#define SN_sm_scheme "sm-scheme"
|
||||
#define NID_sm_scheme 1142
|
||||
#define OBJ_sm_scheme OBJ_oscca,1L
|
||||
|
||||
#define SN_dsa "DSA"
|
||||
#define LN_dsa "dsaEncryption"
|
||||
#define NID_dsa 116
|
||||
#define OBJ_dsa OBJ_X9cm,1L
|
||||
|
||||
#define SN_dsaWithSHA1 "DSA-SHA1"
|
||||
#define LN_dsaWithSHA1 "dsaWithSHA1"
|
||||
#define NID_dsaWithSHA1 113
|
||||
#define OBJ_dsaWithSHA1 OBJ_X9cm,3L
|
||||
|
||||
#define SN_ansi_X9_62 "ansi-X9-62"
|
||||
#define LN_ansi_X9_62 "ANSI X9.62"
|
||||
#define NID_ansi_X9_62 405
|
||||
#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L
|
||||
|
||||
#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L
|
||||
|
||||
#define SN_X9_62_prime_field "prime-field"
|
||||
#define NID_X9_62_prime_field 406
|
||||
#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L
|
||||
|
||||
#define SN_X9_62_characteristic_two_field "characteristic-two-field"
|
||||
#define NID_X9_62_characteristic_two_field 407
|
||||
#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L
|
||||
|
||||
#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis"
|
||||
#define NID_X9_62_id_characteristic_two_basis 680
|
||||
#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L
|
||||
|
||||
#define SN_X9_62_onBasis "onBasis"
|
||||
#define NID_X9_62_onBasis 681
|
||||
#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L
|
||||
|
||||
#define SN_X9_62_tpBasis "tpBasis"
|
||||
#define NID_X9_62_tpBasis 682
|
||||
#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L
|
||||
|
||||
#define SN_X9_62_ppBasis "ppBasis"
|
||||
#define NID_X9_62_ppBasis 683
|
||||
#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L
|
||||
|
||||
#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L
|
||||
|
||||
#define SN_X9_62_id_ecPublicKey "id-ecPublicKey"
|
||||
#define NID_X9_62_id_ecPublicKey 408
|
||||
#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L
|
||||
|
||||
#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L
|
||||
|
||||
#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L
|
||||
|
||||
#define SN_X9_62_c2pnb163v1 "c2pnb163v1"
|
||||
#define NID_X9_62_c2pnb163v1 684
|
||||
#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L
|
||||
|
||||
#define SN_X9_62_c2pnb163v2 "c2pnb163v2"
|
||||
#define NID_X9_62_c2pnb163v2 685
|
||||
#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L
|
||||
|
||||
#define SN_X9_62_c2pnb163v3 "c2pnb163v3"
|
||||
#define NID_X9_62_c2pnb163v3 686
|
||||
#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L
|
||||
|
||||
#define SN_X9_62_c2pnb176v1 "c2pnb176v1"
|
||||
#define NID_X9_62_c2pnb176v1 687
|
||||
#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L
|
||||
|
||||
#define SN_X9_62_c2tnb191v1 "c2tnb191v1"
|
||||
#define NID_X9_62_c2tnb191v1 688
|
||||
#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L
|
||||
|
||||
#define SN_X9_62_c2tnb191v2 "c2tnb191v2"
|
||||
#define NID_X9_62_c2tnb191v2 689
|
||||
#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L
|
||||
|
||||
#define SN_X9_62_c2tnb191v3 "c2tnb191v3"
|
||||
#define NID_X9_62_c2tnb191v3 690
|
||||
#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L
|
||||
|
||||
#define SN_X9_62_c2onb191v4 "c2onb191v4"
|
||||
#define NID_X9_62_c2onb191v4 691
|
||||
#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L
|
||||
|
||||
#define SN_X9_62_c2onb191v5 "c2onb191v5"
|
||||
#define NID_X9_62_c2onb191v5 692
|
||||
#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L
|
||||
|
||||
#define SN_X9_62_c2pnb208w1 "c2pnb208w1"
|
||||
#define NID_X9_62_c2pnb208w1 693
|
||||
#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L
|
||||
|
||||
#define SN_X9_62_c2tnb239v1 "c2tnb239v1"
|
||||
#define NID_X9_62_c2tnb239v1 694
|
||||
#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L
|
||||
|
||||
#define SN_X9_62_c2tnb239v2 "c2tnb239v2"
|
||||
#define NID_X9_62_c2tnb239v2 695
|
||||
#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L
|
||||
|
||||
#define SN_X9_62_c2tnb239v3 "c2tnb239v3"
|
||||
#define NID_X9_62_c2tnb239v3 696
|
||||
#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L
|
||||
|
||||
#define SN_X9_62_c2onb239v4 "c2onb239v4"
|
||||
#define NID_X9_62_c2onb239v4 697
|
||||
#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L
|
||||
|
||||
#define SN_X9_62_c2onb239v5 "c2onb239v5"
|
||||
#define NID_X9_62_c2onb239v5 698
|
||||
#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L
|
||||
|
||||
#define SN_X9_62_c2pnb272w1 "c2pnb272w1"
|
||||
#define NID_X9_62_c2pnb272w1 699
|
||||
#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L
|
||||
|
||||
#define SN_X9_62_c2pnb304w1 "c2pnb304w1"
|
||||
#define NID_X9_62_c2pnb304w1 700
|
||||
#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L
|
||||
|
||||
#define SN_X9_62_c2tnb359v1 "c2tnb359v1"
|
||||
#define NID_X9_62_c2tnb359v1 701
|
||||
#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L
|
||||
|
||||
#define SN_X9_62_c2pnb368w1 "c2pnb368w1"
|
||||
#define NID_X9_62_c2pnb368w1 702
|
||||
#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L
|
||||
|
||||
#define SN_X9_62_c2tnb431r1 "c2tnb431r1"
|
||||
#define NID_X9_62_c2tnb431r1 703
|
||||
#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L
|
||||
|
||||
#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L
|
||||
|
||||
#define SN_X9_62_prime192v1 "prime192v1"
|
||||
#define NID_X9_62_prime192v1 409
|
||||
#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L
|
||||
|
||||
#define SN_X9_62_prime192v2 "prime192v2"
|
||||
#define NID_X9_62_prime192v2 410
|
||||
#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L
|
||||
|
||||
#define SN_X9_62_prime192v3 "prime192v3"
|
||||
#define NID_X9_62_prime192v3 411
|
||||
#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L
|
||||
|
||||
#define SN_X9_62_prime239v1 "prime239v1"
|
||||
#define NID_X9_62_prime239v1 412
|
||||
#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L
|
||||
|
||||
#define SN_X9_62_prime239v2 "prime239v2"
|
||||
#define NID_X9_62_prime239v2 413
|
||||
#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L
|
||||
|
||||
#define SN_X9_62_prime239v3 "prime239v3"
|
||||
#define NID_X9_62_prime239v3 414
|
||||
#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L
|
||||
|
||||
#define SN_X9_62_prime256v1 "prime256v1"
|
||||
#define NID_X9_62_prime256v1 415
|
||||
#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L
|
||||
|
||||
#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L
|
||||
|
||||
#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1"
|
||||
#define NID_ecdsa_with_SHA1 416
|
||||
#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L
|
||||
|
||||
#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended"
|
||||
#define NID_ecdsa_with_Recommended 791
|
||||
#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L
|
||||
|
||||
#define SN_ecdsa_with_Specified "ecdsa-with-Specified"
|
||||
#define NID_ecdsa_with_Specified 792
|
||||
#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L
|
||||
|
||||
#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224"
|
||||
#define NID_ecdsa_with_SHA224 793
|
||||
#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L
|
||||
|
||||
#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256"
|
||||
#define NID_ecdsa_with_SHA256 794
|
||||
#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L
|
||||
|
||||
#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384"
|
||||
#define NID_ecdsa_with_SHA384 795
|
||||
#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L
|
||||
|
||||
#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512"
|
||||
#define NID_ecdsa_with_SHA512 796
|
||||
#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L
|
||||
|
||||
#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L
|
||||
|
||||
#define SN_secp112r1 "secp112r1"
|
||||
#define NID_secp112r1 704
|
||||
#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L
|
||||
|
||||
#define SN_secp112r2 "secp112r2"
|
||||
#define NID_secp112r2 705
|
||||
#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L
|
||||
|
||||
#define SN_secp128r1 "secp128r1"
|
||||
#define NID_secp128r1 706
|
||||
#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L
|
||||
|
||||
#define SN_secp128r2 "secp128r2"
|
||||
#define NID_secp128r2 707
|
||||
#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L
|
||||
|
||||
#define SN_secp160k1 "secp160k1"
|
||||
#define NID_secp160k1 708
|
||||
#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L
|
||||
|
||||
#define SN_secp160r1 "secp160r1"
|
||||
#define NID_secp160r1 709
|
||||
#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L
|
||||
|
||||
#define SN_secp160r2 "secp160r2"
|
||||
#define NID_secp160r2 710
|
||||
#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L
|
||||
|
||||
#define SN_secp192k1 "secp192k1"
|
||||
#define NID_secp192k1 711
|
||||
#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L
|
||||
|
||||
#define SN_secp224k1 "secp224k1"
|
||||
#define NID_secp224k1 712
|
||||
#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L
|
||||
|
||||
#define SN_secp224r1 "secp224r1"
|
||||
#define NID_secp224r1 713
|
||||
#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L
|
||||
|
||||
#define SN_secp256k1 "secp256k1"
|
||||
#define NID_secp256k1 714
|
||||
#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L
|
||||
|
||||
#define SN_secp384r1 "secp384r1"
|
||||
#define NID_secp384r1 715
|
||||
#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L
|
||||
|
||||
#define SN_secp521r1 "secp521r1"
|
||||
#define NID_secp521r1 716
|
||||
#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L
|
||||
|
||||
#define SN_sect113r1 "sect113r1"
|
||||
#define NID_sect113r1 717
|
||||
#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L
|
||||
|
||||
#define SN_sect113r2 "sect113r2"
|
||||
#define NID_sect113r2 718
|
||||
#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L
|
||||
|
||||
#define SN_sect131r1 "sect131r1"
|
||||
#define NID_sect131r1 719
|
||||
#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L
|
||||
|
||||
#define SN_sect131r2 "sect131r2"
|
||||
#define NID_sect131r2 720
|
||||
#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L
|
||||
|
||||
#define SN_sect163k1 "sect163k1"
|
||||
#define NID_sect163k1 721
|
||||
#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L
|
||||
|
||||
#define SN_sect163r1 "sect163r1"
|
||||
#define NID_sect163r1 722
|
||||
#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L
|
||||
|
||||
#define SN_sect163r2 "sect163r2"
|
||||
#define NID_sect163r2 723
|
||||
#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L
|
||||
|
||||
#define SN_sect193r1 "sect193r1"
|
||||
#define NID_sect193r1 724
|
||||
#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L
|
||||
|
||||
#define SN_sect193r2 "sect193r2"
|
||||
#define NID_sect193r2 725
|
||||
#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L
|
||||
|
||||
#define SN_sect233k1 "sect233k1"
|
||||
#define NID_sect233k1 726
|
||||
#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L
|
||||
|
||||
#define SN_sect233r1 "sect233r1"
|
||||
#define NID_sect233r1 727
|
||||
#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L
|
||||
|
||||
#define SN_sect239k1 "sect239k1"
|
||||
#define NID_sect239k1 728
|
||||
#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L
|
||||
|
||||
#define SN_sect283k1 "sect283k1"
|
||||
#define NID_sect283k1 729
|
||||
#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L
|
||||
|
||||
#define SN_sect283r1 "sect283r1"
|
||||
#define NID_sect283r1 730
|
||||
#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L
|
||||
|
||||
#define SN_sect409k1 "sect409k1"
|
||||
#define NID_sect409k1 731
|
||||
#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L
|
||||
|
||||
#define SN_sect409r1 "sect409r1"
|
||||
#define NID_sect409r1 732
|
||||
#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L
|
||||
|
||||
#define SN_sect571k1 "sect571k1"
|
||||
#define NID_sect571k1 733
|
||||
#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L
|
||||
|
||||
#define SN_sect571r1 "sect571r1"
|
||||
#define NID_sect571r1 734
|
||||
#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L
|
||||
|
||||
#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1"
|
||||
#define NID_wap_wsg_idm_ecid_wtls1 735
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3"
|
||||
#define NID_wap_wsg_idm_ecid_wtls3 736
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4"
|
||||
#define NID_wap_wsg_idm_ecid_wtls4 737
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5"
|
||||
#define NID_wap_wsg_idm_ecid_wtls5 738
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6"
|
||||
#define NID_wap_wsg_idm_ecid_wtls6 739
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7"
|
||||
#define NID_wap_wsg_idm_ecid_wtls7 740
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8"
|
||||
#define NID_wap_wsg_idm_ecid_wtls8 741
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9"
|
||||
#define NID_wap_wsg_idm_ecid_wtls9 742
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10"
|
||||
#define NID_wap_wsg_idm_ecid_wtls10 743
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11"
|
||||
#define NID_wap_wsg_idm_ecid_wtls11 744
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L
|
||||
|
||||
#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12"
|
||||
#define NID_wap_wsg_idm_ecid_wtls12 745
|
||||
#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L
|
||||
|
||||
#define SN_cast5_cbc "CAST5-CBC"
|
||||
#define LN_cast5_cbc "cast5-cbc"
|
||||
#define NID_cast5_cbc 108
|
||||
#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L
|
||||
|
||||
#define SN_cast5_ecb "CAST5-ECB"
|
||||
#define LN_cast5_ecb "cast5-ecb"
|
||||
#define NID_cast5_ecb 109
|
||||
|
||||
#define SN_cast5_cfb64 "CAST5-CFB"
|
||||
#define LN_cast5_cfb64 "cast5-cfb"
|
||||
#define NID_cast5_cfb64 110
|
||||
|
||||
#define SN_cast5_ofb64 "CAST5-OFB"
|
||||
#define LN_cast5_ofb64 "cast5-ofb"
|
||||
#define NID_cast5_ofb64 111
|
||||
|
||||
#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC"
|
||||
#define NID_pbeWithMD5AndCast5_CBC 112
|
||||
#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L
|
||||
|
||||
#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC"
|
||||
#define LN_id_PasswordBasedMAC "password based MAC"
|
||||
#define NID_id_PasswordBasedMAC 782
|
||||
#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L
|
||||
|
||||
#define SN_id_DHBasedMac "id-DHBasedMac"
|
||||
#define LN_id_DHBasedMac "Diffie-Hellman based MAC"
|
||||
#define NID_id_DHBasedMac 783
|
||||
#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L
|
||||
|
||||
#define SN_rsadsi "rsadsi"
|
||||
#define LN_rsadsi "RSA Data Security, Inc."
|
||||
#define NID_rsadsi 1
|
||||
#define OBJ_rsadsi OBJ_ISO_US,113549L
|
||||
|
||||
#define SN_pkcs "pkcs"
|
||||
#define LN_pkcs "RSA Data Security, Inc. PKCS"
|
||||
#define NID_pkcs 2
|
||||
#define OBJ_pkcs OBJ_rsadsi,1L
|
||||
|
||||
#define SN_pkcs1 "pkcs1"
|
||||
#define NID_pkcs1 186
|
||||
#define OBJ_pkcs1 OBJ_pkcs,1L
|
||||
|
||||
#define LN_rsaEncryption "rsaEncryption"
|
||||
#define NID_rsaEncryption 6
|
||||
#define OBJ_rsaEncryption OBJ_pkcs1,1L
|
||||
|
||||
#define SN_md2WithRSAEncryption "RSA-MD2"
|
||||
#define LN_md2WithRSAEncryption "md2WithRSAEncryption"
|
||||
#define NID_md2WithRSAEncryption 7
|
||||
#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L
|
||||
|
||||
#define SN_md4WithRSAEncryption "RSA-MD4"
|
||||
#define LN_md4WithRSAEncryption "md4WithRSAEncryption"
|
||||
#define NID_md4WithRSAEncryption 396
|
||||
#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L
|
||||
|
||||
#define SN_md5WithRSAEncryption "RSA-MD5"
|
||||
#define LN_md5WithRSAEncryption "md5WithRSAEncryption"
|
||||
#define NID_md5WithRSAEncryption 8
|
||||
#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L
|
||||
|
||||
#define SN_sha1WithRSAEncryption "RSA-SHA1"
|
||||
#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption"
|
||||
#define NID_sha1WithRSAEncryption 65
|
||||
#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L
|
||||
|
||||
#define SN_rsaesOaep "RSAES-OAEP"
|
||||
#define LN_rsaesOaep "rsaesOaep"
|
||||
#define NID_rsaesOaep 919
|
||||
#define OBJ_rsaesOaep OBJ_pkcs1,7L
|
||||
|
||||
#define SN_mgf1 "MGF1"
|
||||
#define LN_mgf1 "mgf1"
|
||||
#define NID_mgf1 911
|
||||
#define OBJ_mgf1 OBJ_pkcs1,8L
|
||||
|
||||
#define SN_pSpecified "PSPECIFIED"
|
||||
#define LN_pSpecified "pSpecified"
|
||||
#define NID_pSpecified 935
|
||||
#define OBJ_pSpecified OBJ_pkcs1,9L
|
||||
|
||||
#define SN_rsassaPss "RSASSA-PSS"
|
||||
#define LN_rsassaPss "rsassaPss"
|
||||
#define NID_rsassaPss 912
|
||||
#define OBJ_rsassaPss OBJ_pkcs1,10L
|
||||
|
||||
#define SN_sha256WithRSAEncryption "RSA-SHA256"
|
||||
#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption"
|
||||
#define NID_sha256WithRSAEncryption 668
|
||||
#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L
|
||||
|
||||
#define SN_sha384WithRSAEncryption "RSA-SHA384"
|
||||
#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption"
|
||||
#define NID_sha384WithRSAEncryption 669
|
||||
#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L
|
||||
|
||||
#define SN_sha512WithRSAEncryption "RSA-SHA512"
|
||||
#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption"
|
||||
#define NID_sha512WithRSAEncryption 670
|
||||
#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L
|
||||
|
||||
#define SN_sha224WithRSAEncryption "RSA-SHA224"
|
||||
#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption"
|
||||
#define NID_sha224WithRSAEncryption 671
|
||||
#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L
|
||||
|
||||
#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224"
|
||||
#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption"
|
||||
#define NID_sha512_224WithRSAEncryption 1145
|
||||
#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L
|
||||
|
||||
#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256"
|
||||
#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption"
|
||||
#define NID_sha512_256WithRSAEncryption 1146
|
||||
#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L
|
||||
|
||||
#define SN_pkcs3 "pkcs3"
|
||||
#define NID_pkcs3 27
|
||||
#define OBJ_pkcs3 OBJ_pkcs,3L
|
||||
|
||||
#define LN_dhKeyAgreement "dhKeyAgreement"
|
||||
#define NID_dhKeyAgreement 28
|
||||
#define OBJ_dhKeyAgreement OBJ_pkcs3,1L
|
||||
|
||||
#define SN_pkcs5 "pkcs5"
|
||||
#define NID_pkcs5 187
|
||||
#define OBJ_pkcs5 OBJ_pkcs,5L
|
||||
|
||||
#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES"
|
||||
#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC"
|
||||
#define NID_pbeWithMD2AndDES_CBC 9
|
||||
#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L
|
||||
|
||||
#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES"
|
||||
#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC"
|
||||
#define NID_pbeWithMD5AndDES_CBC 10
|
||||
#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L
|
||||
|
||||
#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64"
|
||||
#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC"
|
||||
#define NID_pbeWithMD2AndRC2_CBC 168
|
||||
#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L
|
||||
|
||||
#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64"
|
||||
#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC"
|
||||
#define NID_pbeWithMD5AndRC2_CBC 169
|
||||
#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L
|
||||
|
||||
#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES"
|
||||
#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC"
|
||||
#define NID_pbeWithSHA1AndDES_CBC 170
|
||||
#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L
|
||||
|
||||
#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64"
|
||||
#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC"
|
||||
#define NID_pbeWithSHA1AndRC2_CBC 68
|
||||
#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L
|
||||
|
||||
#define LN_id_pbkdf2 "PBKDF2"
|
||||
#define NID_id_pbkdf2 69
|
||||
#define OBJ_id_pbkdf2 OBJ_pkcs5,12L
|
||||
|
||||
#define LN_pbes2 "PBES2"
|
||||
#define NID_pbes2 161
|
||||
#define OBJ_pbes2 OBJ_pkcs5,13L
|
||||
|
||||
#define LN_pbmac1 "PBMAC1"
|
||||
#define NID_pbmac1 162
|
||||
#define OBJ_pbmac1 OBJ_pkcs5,14L
|
||||
|
||||
#define SN_pkcs7 "pkcs7"
|
||||
#define NID_pkcs7 20
|
||||
#define OBJ_pkcs7 OBJ_pkcs,7L
|
||||
|
||||
#define LN_pkcs7_data "pkcs7-data"
|
||||
#define NID_pkcs7_data 21
|
||||
#define OBJ_pkcs7_data OBJ_pkcs7,1L
|
||||
|
||||
#define LN_pkcs7_signed "pkcs7-signedData"
|
||||
#define NID_pkcs7_signed 22
|
||||
#define OBJ_pkcs7_signed OBJ_pkcs7,2L
|
||||
|
||||
#define LN_pkcs7_enveloped "pkcs7-envelopedData"
|
||||
#define NID_pkcs7_enveloped 23
|
||||
#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L
|
||||
|
||||
#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData"
|
||||
#define NID_pkcs7_signedAndEnveloped 24
|
||||
#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L
|
||||
|
||||
#define LN_pkcs7_digest "pkcs7-digestData"
|
||||
#define NID_pkcs7_digest 25
|
||||
#define OBJ_pkcs7_digest OBJ_pkcs7,5L
|
||||
|
||||
#define LN_pkcs7_encrypted "pkcs7-encryptedData"
|
||||
#define NID_pkcs7_encrypted 26
|
||||
#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L
|
||||
|
||||
#define SN_pkcs9 "pkcs9"
|
||||
#define NID_pkcs9 47
|
||||
#define OBJ_pkcs9 OBJ_pkcs,9L
|
||||
|
||||
#define LN_pkcs9_emailAddress "emailAddress"
|
||||
#define NID_pkcs9_emailAddress 48
|
||||
#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L
|
||||
|
||||
#define LN_pkcs9_unstructuredName "unstructuredName"
|
||||
#define NID_pkcs9_unstructuredName 49
|
||||
#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L
|
||||
|
||||
#define LN_pkcs9_contentType "contentType"
|
||||
#define NID_pkcs9_contentType 50
|
||||
#define OBJ_pkcs9_contentType OBJ_pkcs9,3L
|
||||
|
||||
#define LN_pkcs9_messageDigest "messageDigest"
|
||||
#define NID_pkcs9_messageDigest 51
|
||||
#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L
|
||||
|
||||
#define LN_pkcs9_signingTime "signingTime"
|
||||
#define NID_pkcs9_signingTime 52
|
||||
#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L
|
||||
|
||||
#define LN_pkcs9_countersignature "countersignature"
|
||||
#define NID_pkcs9_countersignature 53
|
||||
#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L
|
||||
|
||||
#define LN_pkcs9_challengePassword "challengePassword"
|
||||
#define NID_pkcs9_challengePassword 54
|
||||
#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L
|
||||
|
||||
#define LN_pkcs9_unstructuredAddress "unstructuredAddress"
|
||||
#define NID_pkcs9_unstructuredAddress 55
|
||||
#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L
|
||||
|
||||
#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes"
|
||||
#define NID_pkcs9_extCertAttributes 56
|
||||
#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L
|
||||
|
||||
#define SN_ext_req "extReq"
|
||||
#define LN_ext_req "Extension Request"
|
||||
#define NID_ext_req 172
|
||||
#define OBJ_ext_req OBJ_pkcs9,14L
|
||||
|
||||
#define SN_SMIMECapabilities "SMIME-CAPS"
|
||||
#define LN_SMIMECapabilities "S/MIME Capabilities"
|
||||
#define NID_SMIMECapabilities 167
|
||||
#define OBJ_SMIMECapabilities OBJ_pkcs9,15L
|
||||
|
||||
#define SN_SMIME "SMIME"
|
||||
#define LN_SMIME "S/MIME"
|
||||
#define NID_SMIME 188
|
||||
#define OBJ_SMIME OBJ_pkcs9,16L
|
||||
|
||||
#define SN_id_smime_mod "id-smime-mod"
|
||||
#define NID_id_smime_mod 189
|
||||
#define OBJ_id_smime_mod OBJ_SMIME,0L
|
||||
|
||||
#define SN_id_smime_ct "id-smime-ct"
|
||||
#define NID_id_smime_ct 190
|
||||
#define OBJ_id_smime_ct OBJ_SMIME,1L
|
||||
|
||||
#define SN_id_smime_aa "id-smime-aa"
|
||||
#define NID_id_smime_aa 191
|
||||
#define OBJ_id_smime_aa OBJ_SMIME,2L
|
||||
|
||||
#define SN_id_smime_alg "id-smime-alg"
|
||||
#define NID_id_smime_alg 192
|
||||
#define OBJ_id_smime_alg OBJ_SMIME,3L
|
||||
|
||||
#define SN_id_smime_cd "id-smime-cd"
|
||||
#define NID_id_smime_cd 193
|
||||
#define OBJ_id_smime_cd OBJ_SMIME,4L
|
||||
|
||||
#define SN_id_smime_spq "id-smime-spq"
|
||||
#define NID_id_smime_spq 194
|
||||
#define OBJ_id_smime_spq OBJ_SMIME,5L
|
||||
|
||||
#define SN_id_smime_cti "id-smime-cti"
|
||||
#define NID_id_smime_cti 195
|
||||
#define OBJ_id_smime_cti OBJ_SMIME,6L
|
||||
|
||||
#define SN_id_smime_mod_cms "id-smime-mod-cms"
|
||||
#define NID_id_smime_mod_cms 196
|
||||
#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L
|
||||
|
||||
#define SN_id_smime_mod_ess "id-smime-mod-ess"
|
||||
#define NID_id_smime_mod_ess 197
|
||||
#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L
|
||||
|
||||
#define SN_id_smime_mod_oid "id-smime-mod-oid"
|
||||
#define NID_id_smime_mod_oid 198
|
||||
#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L
|
||||
|
||||
#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3"
|
||||
#define NID_id_smime_mod_msg_v3 199
|
||||
#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L
|
||||
|
||||
#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88"
|
||||
#define NID_id_smime_mod_ets_eSignature_88 200
|
||||
#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L
|
||||
|
||||
#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97"
|
||||
#define NID_id_smime_mod_ets_eSignature_97 201
|
||||
#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L
|
||||
|
||||
#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88"
|
||||
#define NID_id_smime_mod_ets_eSigPolicy_88 202
|
||||
#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L
|
||||
|
||||
#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97"
|
||||
#define NID_id_smime_mod_ets_eSigPolicy_97 203
|
||||
#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L
|
||||
|
||||
#define SN_id_smime_ct_receipt "id-smime-ct-receipt"
|
||||
#define NID_id_smime_ct_receipt 204
|
||||
#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L
|
||||
|
||||
#define SN_id_smime_ct_authData "id-smime-ct-authData"
|
||||
#define NID_id_smime_ct_authData 205
|
||||
#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L
|
||||
|
||||
#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert"
|
||||
#define NID_id_smime_ct_publishCert 206
|
||||
#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L
|
||||
|
||||
#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo"
|
||||
#define NID_id_smime_ct_TSTInfo 207
|
||||
#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L
|
||||
|
||||
#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo"
|
||||
#define NID_id_smime_ct_TDTInfo 208
|
||||
#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L
|
||||
|
||||
#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo"
|
||||
#define NID_id_smime_ct_contentInfo 209
|
||||
#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L
|
||||
|
||||
#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData"
|
||||
#define NID_id_smime_ct_DVCSRequestData 210
|
||||
#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L
|
||||
|
||||
#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData"
|
||||
#define NID_id_smime_ct_DVCSResponseData 211
|
||||
#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L
|
||||
|
||||
#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData"
|
||||
#define NID_id_smime_ct_compressedData 786
|
||||
#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L
|
||||
|
||||
#define SN_id_smime_ct_contentCollection "id-smime-ct-contentCollection"
|
||||
#define NID_id_smime_ct_contentCollection 1058
|
||||
#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L
|
||||
|
||||
#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData"
|
||||
#define NID_id_smime_ct_authEnvelopedData 1059
|
||||
#define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L
|
||||
|
||||
#define SN_id_ct_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 SN_SM2_with_SM3 "SM2-SM3"
|
||||
#define LN_SM2_with_SM3 "SM2-with-SM3"
|
||||
#define NID_SM2_with_SM3 1204
|
||||
#define OBJ_SM2_with_SM3 OBJ_sm_scheme,501L
|
||||
|
||||
#define LN_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 Smartcardlogin"
|
||||
#define NID_ms_smartcard_login 648
|
||||
#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L
|
||||
|
||||
#define SN_ms_upn "msUPN"
|
||||
#define LN_ms_upn "Microsoft Universal Principal Name"
|
||||
#define NID_ms_upn 649
|
||||
#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L
|
||||
|
||||
#define SN_idea_cbc "IDEA-CBC"
|
||||
#define LN_idea_cbc "idea-cbc"
|
||||
#define NID_idea_cbc 34
|
||||
#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L
|
||||
|
||||
#define SN_idea_ecb "IDEA-ECB"
|
||||
#define LN_idea_ecb "idea-ecb"
|
||||
#define NID_idea_ecb 36
|
||||
|
||||
#define SN_idea_cfb64 "IDEA-CFB"
|
||||
#define LN_idea_cfb64 "idea-cfb"
|
||||
#define NID_idea_cfb64 35
|
||||
|
||||
#define SN_idea_ofb64 "IDEA-OFB"
|
||||
#define LN_idea_ofb64 "idea-ofb"
|
||||
#define NID_idea_ofb64 46
|
||||
|
||||
#define SN_bf_cbc "BF-CBC"
|
||||
#define LN_bf_cbc "bf-cbc"
|
||||
#define NID_bf_cbc 91
|
||||
#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L
|
||||
|
||||
#define SN_bf_ecb "BF-ECB"
|
||||
#define LN_bf_ecb "bf-ecb"
|
||||
#define NID_bf_ecb 92
|
||||
|
||||
#define SN_bf_cfb64 "BF-CFB"
|
||||
#define LN_bf_cfb64 "bf-cfb"
|
||||
#define NID_bf_cfb64 93
|
||||
|
||||
#define SN_bf_ofb64 "BF-OFB"
|
||||
#define LN_bf_ofb64 "bf-ofb"
|
||||
#define NID_bf_ofb64 94
|
||||
|
||||
#define SN_id_pkix "PKIX"
|
||||
#define NID_id_pkix 127
|
||||
#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L
|
||||
|
||||
#define SN_id_pkix_mod "id-pkix-mod"
|
||||
#define NID_id_pkix_mod 258
|
||||
#define OBJ_id_pkix_mod OBJ_id_pkix,0L
|
||||
|
||||
#define SN_id_pe "id-pe"
|
||||
#define NID_id_pe 175
|
||||
#define OBJ_id_pe OBJ_id_pkix,1L
|
||||
|
||||
#define SN_id_qt "id-qt"
|
||||
#define NID_id_qt 259
|
||||
#define OBJ_id_qt OBJ_id_pkix,2L
|
||||
|
||||
#define SN_id_kp "id-kp"
|
||||
#define NID_id_kp 128
|
||||
#define OBJ_id_kp OBJ_id_pkix,3L
|
||||
|
||||
#define SN_id_it "id-it"
|
||||
#define NID_id_it 260
|
||||
#define OBJ_id_it OBJ_id_pkix,4L
|
||||
|
||||
#define SN_id_pkip "id-pkip"
|
||||
#define NID_id_pkip 261
|
||||
#define OBJ_id_pkip OBJ_id_pkix,5L
|
||||
|
||||
#define SN_id_alg "id-alg"
|
||||
#define NID_id_alg 262
|
||||
#define OBJ_id_alg OBJ_id_pkix,6L
|
||||
|
||||
#define SN_id_cmc "id-cmc"
|
||||
#define NID_id_cmc 263
|
||||
#define OBJ_id_cmc OBJ_id_pkix,7L
|
||||
|
||||
#define SN_id_on "id-on"
|
||||
#define NID_id_on 264
|
||||
#define OBJ_id_on OBJ_id_pkix,8L
|
||||
|
||||
#define SN_id_pda "id-pda"
|
||||
#define NID_id_pda 265
|
||||
#define OBJ_id_pda OBJ_id_pkix,9L
|
||||
|
||||
#define SN_id_aca "id-aca"
|
||||
#define NID_id_aca 266
|
||||
#define OBJ_id_aca OBJ_id_pkix,10L
|
||||
|
||||
#define SN_id_qcs "id-qcs"
|
||||
#define NID_id_qcs 267
|
||||
#define OBJ_id_qcs OBJ_id_pkix,11L
|
||||
|
||||
#define SN_id_cct "id-cct"
|
||||
#define NID_id_cct 268
|
||||
#define OBJ_id_cct OBJ_id_pkix,12L
|
||||
|
||||
#define SN_id_ppl "id-ppl"
|
||||
#define NID_id_ppl 662
|
||||
#define OBJ_id_ppl OBJ_id_pkix,21L
|
||||
|
||||
#define SN_id_ad "id-ad"
|
||||
#define NID_id_ad 176
|
||||
#define OBJ_id_ad OBJ_id_pkix,48L
|
||||
|
||||
#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88"
|
||||
#define NID_id_pkix1_explicit_88 269
|
||||
#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L
|
||||
|
||||
#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88"
|
||||
#define NID_id_pkix1_implicit_88 270
|
||||
#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L
|
||||
|
||||
#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93"
|
||||
#define NID_id_pkix1_explicit_93 271
|
||||
#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L
|
||||
|
||||
#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93"
|
||||
#define NID_id_pkix1_implicit_93 272
|
||||
#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L
|
||||
|
||||
#define SN_id_mod_crmf "id-mod-crmf"
|
||||
#define NID_id_mod_crmf 273
|
||||
#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L
|
||||
|
||||
#define SN_id_mod_cmc "id-mod-cmc"
|
||||
#define NID_id_mod_cmc 274
|
||||
#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L
|
||||
|
||||
#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88"
|
||||
#define NID_id_mod_kea_profile_88 275
|
||||
#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L
|
||||
|
||||
#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93"
|
||||
#define NID_id_mod_kea_profile_93 276
|
||||
#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L
|
||||
|
||||
#define SN_id_mod_cmp "id-mod-cmp"
|
||||
#define NID_id_mod_cmp 277
|
||||
#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L
|
||||
|
||||
#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88"
|
||||
#define NID_id_mod_qualified_cert_88 278
|
||||
#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L
|
||||
|
||||
#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93"
|
||||
#define NID_id_mod_qualified_cert_93 279
|
||||
#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L
|
||||
|
||||
#define SN_id_mod_attribute_cert "id-mod-attribute-cert"
|
||||
#define NID_id_mod_attribute_cert 280
|
||||
#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L
|
||||
|
||||
#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol"
|
||||
#define NID_id_mod_timestamp_protocol 281
|
||||
#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L
|
||||
|
||||
#define SN_id_mod_ocsp "id-mod-ocsp"
|
||||
#define NID_id_mod_ocsp 282
|
||||
#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L
|
||||
|
||||
#define SN_id_mod_dvcs "id-mod-dvcs"
|
||||
#define NID_id_mod_dvcs 283
|
||||
#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L
|
||||
|
||||
#define SN_id_mod_cmp2000 "id-mod-cmp2000"
|
||||
#define NID_id_mod_cmp2000 284
|
||||
#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L
|
||||
|
||||
#define SN_info_access "authorityInfoAccess"
|
||||
#define LN_info_access "Authority Information Access"
|
||||
#define NID_info_access 177
|
||||
#define OBJ_info_access OBJ_id_pe,1L
|
||||
|
||||
#define SN_biometricInfo "biometricInfo"
|
||||
#define LN_biometricInfo "Biometric Info"
|
||||
#define NID_biometricInfo 285
|
||||
#define OBJ_biometricInfo OBJ_id_pe,2L
|
||||
|
||||
#define SN_qcStatements "qcStatements"
|
||||
#define NID_qcStatements 286
|
||||
#define OBJ_qcStatements OBJ_id_pe,3L
|
||||
|
||||
#define SN_ac_auditEntity "ac-auditEntity"
|
||||
#define NID_ac_auditEntity 287
|
||||
#define OBJ_ac_auditEntity OBJ_id_pe,4L
|
||||
|
||||
#define SN_ac_targeting "ac-targeting"
|
||||
#define NID_ac_targeting 288
|
||||
#define OBJ_ac_targeting OBJ_id_pe,5L
|
||||
|
||||
#define SN_aaControls "aaControls"
|
||||
#define NID_aaControls 289
|
||||
#define OBJ_aaControls OBJ_id_pe,6L
|
||||
|
||||
#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock"
|
||||
#define NID_sbgp_ipAddrBlock 290
|
||||
#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L
|
||||
|
||||
#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum"
|
||||
#define NID_sbgp_autonomousSysNum 291
|
||||
#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L
|
||||
|
||||
#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier"
|
||||
#define NID_sbgp_routerIdentifier 292
|
||||
#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L
|
||||
|
||||
#define SN_ac_proxying "ac-proxying"
|
||||
#define NID_ac_proxying 397
|
||||
#define OBJ_ac_proxying OBJ_id_pe,10L
|
||||
|
||||
#define SN_sinfo_access "subjectInfoAccess"
|
||||
#define LN_sinfo_access "Subject Information Access"
|
||||
#define NID_sinfo_access 398
|
||||
#define OBJ_sinfo_access OBJ_id_pe,11L
|
||||
|
||||
#define SN_proxyCertInfo "proxyCertInfo"
|
||||
#define LN_proxyCertInfo "Proxy Certificate Information"
|
||||
#define NID_proxyCertInfo 663
|
||||
#define OBJ_proxyCertInfo OBJ_id_pe,14L
|
||||
|
||||
#define SN_tlsfeature "tlsfeature"
|
||||
#define LN_tlsfeature "TLS Feature"
|
||||
#define NID_tlsfeature 1020
|
||||
#define OBJ_tlsfeature OBJ_id_pe,24L
|
||||
|
||||
#define SN_id_qt_cps "id-qt-cps"
|
||||
#define LN_id_qt_cps "Policy Qualifier CPS"
|
||||
#define NID_id_qt_cps 164
|
||||
#define OBJ_id_qt_cps OBJ_id_qt,1L
|
||||
|
||||
#define SN_id_qt_unotice "id-qt-unotice"
|
||||
#define LN_id_qt_unotice "Policy Qualifier User Notice"
|
||||
#define NID_id_qt_unotice 165
|
||||
#define OBJ_id_qt_unotice OBJ_id_qt,2L
|
||||
|
||||
#define SN_textNotice "textNotice"
|
||||
#define NID_textNotice 293
|
||||
#define OBJ_textNotice OBJ_id_qt,3L
|
||||
|
||||
#define SN_server_auth "serverAuth"
|
||||
#define LN_server_auth "TLS Web Server Authentication"
|
||||
#define NID_server_auth 129
|
||||
#define OBJ_server_auth OBJ_id_kp,1L
|
||||
|
||||
#define SN_client_auth "clientAuth"
|
||||
#define LN_client_auth "TLS Web Client Authentication"
|
||||
#define NID_client_auth 130
|
||||
#define OBJ_client_auth OBJ_id_kp,2L
|
||||
|
||||
#define SN_code_sign "codeSigning"
|
||||
#define LN_code_sign "Code Signing"
|
||||
#define NID_code_sign 131
|
||||
#define OBJ_code_sign OBJ_id_kp,3L
|
||||
|
||||
#define SN_email_protect "emailProtection"
|
||||
#define LN_email_protect "E-mail Protection"
|
||||
#define NID_email_protect 132
|
||||
#define OBJ_email_protect OBJ_id_kp,4L
|
||||
|
||||
#define SN_ipsecEndSystem "ipsecEndSystem"
|
||||
#define LN_ipsecEndSystem "IPSec End System"
|
||||
#define NID_ipsecEndSystem 294
|
||||
#define OBJ_ipsecEndSystem OBJ_id_kp,5L
|
||||
|
||||
#define SN_ipsecTunnel "ipsecTunnel"
|
||||
#define LN_ipsecTunnel "IPSec Tunnel"
|
||||
#define NID_ipsecTunnel 295
|
||||
#define OBJ_ipsecTunnel OBJ_id_kp,6L
|
||||
|
||||
#define SN_ipsecUser "ipsecUser"
|
||||
#define LN_ipsecUser "IPSec User"
|
||||
#define NID_ipsecUser 296
|
||||
#define OBJ_ipsecUser OBJ_id_kp,7L
|
||||
|
||||
#define SN_time_stamp "timeStamping"
|
||||
#define LN_time_stamp "Time Stamping"
|
||||
#define NID_time_stamp 133
|
||||
#define OBJ_time_stamp OBJ_id_kp,8L
|
||||
|
||||
#define SN_OCSP_sign "OCSPSigning"
|
||||
#define LN_OCSP_sign "OCSP Signing"
|
||||
#define NID_OCSP_sign 180
|
||||
#define OBJ_OCSP_sign OBJ_id_kp,9L
|
||||
|
||||
#define SN_dvcs "DVCS"
|
||||
#define LN_dvcs "dvcs"
|
||||
#define NID_dvcs 297
|
||||
#define OBJ_dvcs OBJ_id_kp,10L
|
||||
|
||||
#define SN_ipsec_IKE "ipsecIKE"
|
||||
#define LN_ipsec_IKE "ipsec Internet Key Exchange"
|
||||
#define NID_ipsec_IKE 1022
|
||||
#define OBJ_ipsec_IKE OBJ_id_kp,17L
|
||||
|
||||
#define SN_capwapAC "capwapAC"
|
||||
#define LN_capwapAC "Ctrl/provision WAP Access"
|
||||
#define NID_capwapAC 1023
|
||||
#define OBJ_capwapAC OBJ_id_kp,18L
|
||||
|
||||
#define SN_capwapWTP "capwapWTP"
|
||||
#define LN_capwapWTP "Ctrl/Provision WAP Termination"
|
||||
#define NID_capwapWTP 1024
|
||||
#define OBJ_capwapWTP OBJ_id_kp,19L
|
||||
|
||||
#define SN_sshClient "secureShellClient"
|
||||
#define LN_sshClient "SSH Client"
|
||||
#define NID_sshClient 1025
|
||||
#define OBJ_sshClient OBJ_id_kp,21L
|
||||
|
||||
#define SN_sshServer "secureShellServer"
|
||||
#define LN_sshServer "SSH Server"
|
||||
#define NID_sshServer 1026
|
||||
#define OBJ_sshServer OBJ_id_kp,22L
|
||||
|
||||
#define SN_sendRouter "sendRouter"
|
||||
#define LN_sendRouter "Send Router"
|
||||
#define NID_sendRouter 1027
|
||||
#define OBJ_sendRouter OBJ_id_kp,23L
|
||||
|
||||
#define SN_sendProxiedRouter "sendProxiedRouter"
|
||||
#define LN_sendProxiedRouter "Send Proxied Router"
|
||||
#define NID_sendProxiedRouter 1028
|
||||
#define OBJ_sendProxiedRouter OBJ_id_kp,24L
|
||||
|
||||
#define SN_sendOwner "sendOwner"
|
||||
#define LN_sendOwner "Send Owner"
|
||||
#define NID_sendOwner 1029
|
||||
#define OBJ_sendOwner OBJ_id_kp,25L
|
||||
|
||||
#define SN_sendProxiedOwner "sendProxiedOwner"
|
||||
#define LN_sendProxiedOwner "Send Proxied Owner"
|
||||
#define NID_sendProxiedOwner 1030
|
||||
#define OBJ_sendProxiedOwner OBJ_id_kp,26L
|
||||
|
||||
#define SN_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_XmppAddr "id-on-xmppAddr"
|
||||
#define LN_XmppAddr "XmppAddr"
|
||||
#define NID_XmppAddr 1209
|
||||
#define OBJ_XmppAddr OBJ_id_on,5L
|
||||
|
||||
#define SN_SRVName "id-on-dnsSRV"
|
||||
#define LN_SRVName "SRVName"
|
||||
#define NID_SRVName 1210
|
||||
#define OBJ_SRVName OBJ_id_on,7L
|
||||
|
||||
#define SN_id_on_SmtpUTF8Mailbox "id-on-SmtpUTF8Mailbox"
|
||||
#define LN_id_on_SmtpUTF8Mailbox "Smtp UTF8 Mailbox"
|
||||
#define NID_id_on_SmtpUTF8Mailbox 1208
|
||||
#define OBJ_id_on_SmtpUTF8Mailbox OBJ_id_on,9L
|
||||
|
||||
#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth"
|
||||
#define NID_id_pda_dateOfBirth 348
|
||||
#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L
|
||||
|
||||
#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth"
|
||||
#define NID_id_pda_placeOfBirth 349
|
||||
#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L
|
||||
|
||||
#define SN_id_pda_gender "id-pda-gender"
|
||||
#define NID_id_pda_gender 351
|
||||
#define OBJ_id_pda_gender OBJ_id_pda,3L
|
||||
|
||||
#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship"
|
||||
#define NID_id_pda_countryOfCitizenship 352
|
||||
#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L
|
||||
|
||||
#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence"
|
||||
#define NID_id_pda_countryOfResidence 353
|
||||
#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L
|
||||
|
||||
#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo"
|
||||
#define NID_id_aca_authenticationInfo 354
|
||||
#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L
|
||||
|
||||
#define SN_id_aca_accessIdentity "id-aca-accessIdentity"
|
||||
#define NID_id_aca_accessIdentity 355
|
||||
#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L
|
||||
|
||||
#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity"
|
||||
#define NID_id_aca_chargingIdentity 356
|
||||
#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L
|
||||
|
||||
#define SN_id_aca_group "id-aca-group"
|
||||
#define NID_id_aca_group 357
|
||||
#define OBJ_id_aca_group OBJ_id_aca,4L
|
||||
|
||||
#define SN_id_aca_role "id-aca-role"
|
||||
#define NID_id_aca_role 358
|
||||
#define OBJ_id_aca_role OBJ_id_aca,5L
|
||||
|
||||
#define SN_id_aca_encAttrs "id-aca-encAttrs"
|
||||
#define NID_id_aca_encAttrs 399
|
||||
#define OBJ_id_aca_encAttrs OBJ_id_aca,6L
|
||||
|
||||
#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1"
|
||||
#define NID_id_qcs_pkixQCSyntax_v1 359
|
||||
#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L
|
||||
|
||||
#define SN_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_blake2bmac "BLAKE2BMAC"
|
||||
#define LN_blake2bmac "blake2bmac"
|
||||
#define NID_blake2bmac 1201
|
||||
#define OBJ_blake2bmac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L
|
||||
|
||||
#define SN_blake2smac "BLAKE2SMAC"
|
||||
#define LN_blake2smac "blake2smac"
|
||||
#define NID_blake2smac 1202
|
||||
#define OBJ_blake2smac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L
|
||||
|
||||
#define SN_blake2b512 "BLAKE2b512"
|
||||
#define LN_blake2b512 "blake2b512"
|
||||
#define NID_blake2b512 1056
|
||||
#define OBJ_blake2b512 OBJ_blake2bmac,16L
|
||||
|
||||
#define SN_blake2s256 "BLAKE2s256"
|
||||
#define LN_blake2s256 "blake2s256"
|
||||
#define NID_blake2s256 1057
|
||||
#define OBJ_blake2s256 OBJ_blake2smac,8L
|
||||
|
||||
#define SN_sxnet "SXNetID"
|
||||
#define LN_sxnet "Strong Extranet ID"
|
||||
#define NID_sxnet 143
|
||||
#define OBJ_sxnet 1L,3L,101L,1L,4L,1L
|
||||
|
||||
#define SN_X500 "X500"
|
||||
#define LN_X500 "directory services (X.500)"
|
||||
#define NID_X500 11
|
||||
#define OBJ_X500 2L,5L
|
||||
|
||||
#define SN_X509 "X509"
|
||||
#define NID_X509 12
|
||||
#define OBJ_X509 OBJ_X500,4L
|
||||
|
||||
#define SN_commonName "CN"
|
||||
#define LN_commonName "commonName"
|
||||
#define NID_commonName 13
|
||||
#define OBJ_commonName OBJ_X509,3L
|
||||
|
||||
#define SN_surname "SN"
|
||||
#define LN_surname "surname"
|
||||
#define NID_surname 100
|
||||
#define OBJ_surname OBJ_X509,4L
|
||||
|
||||
#define LN_serialNumber "serialNumber"
|
||||
#define NID_serialNumber 105
|
||||
#define OBJ_serialNumber OBJ_X509,5L
|
||||
|
||||
#define SN_countryName "C"
|
||||
#define LN_countryName "countryName"
|
||||
#define NID_countryName 14
|
||||
#define OBJ_countryName OBJ_X509,6L
|
||||
|
||||
#define SN_localityName "L"
|
||||
#define LN_localityName "localityName"
|
||||
#define NID_localityName 15
|
||||
#define OBJ_localityName OBJ_X509,7L
|
||||
|
||||
#define SN_stateOrProvinceName "ST"
|
||||
#define LN_stateOrProvinceName "stateOrProvinceName"
|
||||
#define NID_stateOrProvinceName 16
|
||||
#define OBJ_stateOrProvinceName OBJ_X509,8L
|
||||
|
||||
#define SN_streetAddress "street"
|
||||
#define LN_streetAddress "streetAddress"
|
||||
#define NID_streetAddress 660
|
||||
#define OBJ_streetAddress OBJ_X509,9L
|
||||
|
||||
#define SN_organizationName "O"
|
||||
#define LN_organizationName "organizationName"
|
||||
#define NID_organizationName 17
|
||||
#define OBJ_organizationName OBJ_X509,10L
|
||||
|
||||
#define SN_organizationalUnitName "OU"
|
||||
#define LN_organizationalUnitName "organizationalUnitName"
|
||||
#define NID_organizationalUnitName 18
|
||||
#define OBJ_organizationalUnitName OBJ_X509,11L
|
||||
|
||||
#define SN_title "title"
|
||||
#define LN_title "title"
|
||||
#define NID_title 106
|
||||
#define OBJ_title OBJ_X509,12L
|
||||
|
||||
#define LN_description "description"
|
||||
#define NID_description 107
|
||||
#define OBJ_description OBJ_X509,13L
|
||||
|
||||
#define LN_searchGuide "searchGuide"
|
||||
#define NID_searchGuide 859
|
||||
#define OBJ_searchGuide OBJ_X509,14L
|
||||
|
||||
#define LN_businessCategory "businessCategory"
|
||||
#define NID_businessCategory 860
|
||||
#define OBJ_businessCategory OBJ_X509,15L
|
||||
|
||||
#define LN_postalAddress "postalAddress"
|
||||
#define NID_postalAddress 861
|
||||
#define OBJ_postalAddress OBJ_X509,16L
|
||||
|
||||
#define LN_postalCode "postalCode"
|
||||
#define NID_postalCode 661
|
||||
#define OBJ_postalCode OBJ_X509,17L
|
||||
|
||||
#define LN_postOfficeBox "postOfficeBox"
|
||||
#define NID_postOfficeBox 862
|
||||
#define OBJ_postOfficeBox OBJ_X509,18L
|
||||
|
||||
#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName"
|
||||
#define NID_physicalDeliveryOfficeName 863
|
||||
#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L
|
||||
|
||||
#define LN_telephoneNumber "telephoneNumber"
|
||||
#define NID_telephoneNumber 864
|
||||
#define OBJ_telephoneNumber OBJ_X509,20L
|
||||
|
||||
#define LN_telexNumber "telexNumber"
|
||||
#define NID_telexNumber 865
|
||||
#define OBJ_telexNumber OBJ_X509,21L
|
||||
|
||||
#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier"
|
||||
#define NID_teletexTerminalIdentifier 866
|
||||
#define OBJ_teletexTerminalIdentifier OBJ_X509,22L
|
||||
|
||||
#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber"
|
||||
#define NID_facsimileTelephoneNumber 867
|
||||
#define OBJ_facsimileTelephoneNumber OBJ_X509,23L
|
||||
|
||||
#define LN_x121Address "x121Address"
|
||||
#define NID_x121Address 868
|
||||
#define OBJ_x121Address OBJ_X509,24L
|
||||
|
||||
#define LN_internationaliSDNNumber "internationaliSDNNumber"
|
||||
#define NID_internationaliSDNNumber 869
|
||||
#define OBJ_internationaliSDNNumber OBJ_X509,25L
|
||||
|
||||
#define LN_registeredAddress "registeredAddress"
|
||||
#define NID_registeredAddress 870
|
||||
#define OBJ_registeredAddress OBJ_X509,26L
|
||||
|
||||
#define LN_destinationIndicator "destinationIndicator"
|
||||
#define NID_destinationIndicator 871
|
||||
#define OBJ_destinationIndicator OBJ_X509,27L
|
||||
|
||||
#define LN_preferredDeliveryMethod "preferredDeliveryMethod"
|
||||
#define NID_preferredDeliveryMethod 872
|
||||
#define OBJ_preferredDeliveryMethod OBJ_X509,28L
|
||||
|
||||
#define LN_presentationAddress "presentationAddress"
|
||||
#define NID_presentationAddress 873
|
||||
#define OBJ_presentationAddress OBJ_X509,29L
|
||||
|
||||
#define LN_supportedApplicationContext "supportedApplicationContext"
|
||||
#define NID_supportedApplicationContext 874
|
||||
#define OBJ_supportedApplicationContext OBJ_X509,30L
|
||||
|
||||
#define SN_member "member"
|
||||
#define NID_member 875
|
||||
#define OBJ_member OBJ_X509,31L
|
||||
|
||||
#define SN_owner "owner"
|
||||
#define NID_owner 876
|
||||
#define OBJ_owner OBJ_X509,32L
|
||||
|
||||
#define LN_roleOccupant "roleOccupant"
|
||||
#define NID_roleOccupant 877
|
||||
#define OBJ_roleOccupant OBJ_X509,33L
|
||||
|
||||
#define SN_seeAlso "seeAlso"
|
||||
#define NID_seeAlso 878
|
||||
#define OBJ_seeAlso OBJ_X509,34L
|
||||
|
||||
#define LN_userPassword "userPassword"
|
||||
#define NID_userPassword 879
|
||||
#define OBJ_userPassword OBJ_X509,35L
|
||||
|
||||
#define LN_userCertificate "userCertificate"
|
||||
#define NID_userCertificate 880
|
||||
#define OBJ_userCertificate OBJ_X509,36L
|
||||
|
||||
#define LN_cACertificate "cACertificate"
|
||||
#define NID_cACertificate 881
|
||||
#define OBJ_cACertificate OBJ_X509,37L
|
||||
|
||||
#define LN_authorityRevocationList "authorityRevocationList"
|
||||
#define NID_authorityRevocationList 882
|
||||
#define OBJ_authorityRevocationList OBJ_X509,38L
|
||||
|
||||
#define LN_certificateRevocationList "certificateRevocationList"
|
||||
#define NID_certificateRevocationList 883
|
||||
#define OBJ_certificateRevocationList OBJ_X509,39L
|
||||
|
||||
#define LN_crossCertificatePair "crossCertificatePair"
|
||||
#define NID_crossCertificatePair 884
|
||||
#define OBJ_crossCertificatePair OBJ_X509,40L
|
||||
|
||||
#define SN_name "name"
|
||||
#define LN_name "name"
|
||||
#define NID_name 173
|
||||
#define OBJ_name OBJ_X509,41L
|
||||
|
||||
#define SN_givenName "GN"
|
||||
#define LN_givenName "givenName"
|
||||
#define NID_givenName 99
|
||||
#define OBJ_givenName OBJ_X509,42L
|
||||
|
||||
#define SN_initials "initials"
|
||||
#define LN_initials "initials"
|
||||
#define NID_initials 101
|
||||
#define OBJ_initials OBJ_X509,43L
|
||||
|
||||
#define LN_generationQualifier "generationQualifier"
|
||||
#define NID_generationQualifier 509
|
||||
#define OBJ_generationQualifier OBJ_X509,44L
|
||||
|
||||
#define LN_x500UniqueIdentifier "x500UniqueIdentifier"
|
||||
#define NID_x500UniqueIdentifier 503
|
||||
#define OBJ_x500UniqueIdentifier OBJ_X509,45L
|
||||
|
||||
#define SN_dnQualifier "dnQualifier"
|
||||
#define LN_dnQualifier "dnQualifier"
|
||||
#define NID_dnQualifier 174
|
||||
#define OBJ_dnQualifier OBJ_X509,46L
|
||||
|
||||
#define LN_enhancedSearchGuide "enhancedSearchGuide"
|
||||
#define NID_enhancedSearchGuide 885
|
||||
#define OBJ_enhancedSearchGuide OBJ_X509,47L
|
||||
|
||||
#define LN_protocolInformation "protocolInformation"
|
||||
#define NID_protocolInformation 886
|
||||
#define OBJ_protocolInformation OBJ_X509,48L
|
||||
|
||||
#define LN_distinguishedName "distinguishedName"
|
||||
#define NID_distinguishedName 887
|
||||
#define OBJ_distinguishedName OBJ_X509,49L
|
||||
|
||||
#define LN_uniqueMember "uniqueMember"
|
||||
#define NID_uniqueMember 888
|
||||
#define OBJ_uniqueMember OBJ_X509,50L
|
||||
|
||||
#define LN_houseIdentifier "houseIdentifier"
|
||||
#define NID_houseIdentifier 889
|
||||
#define OBJ_houseIdentifier OBJ_X509,51L
|
||||
|
||||
#define LN_supportedAlgorithms "supportedAlgorithms"
|
||||
#define NID_supportedAlgorithms 890
|
||||
#define OBJ_supportedAlgorithms OBJ_X509,52L
|
||||
|
||||
#define LN_deltaRevocationList "deltaRevocationList"
|
||||
#define NID_deltaRevocationList 891
|
||||
#define OBJ_deltaRevocationList OBJ_X509,53L
|
||||
|
||||
#define SN_dmdName "dmdName"
|
||||
#define NID_dmdName 892
|
||||
#define OBJ_dmdName OBJ_X509,54L
|
||||
|
||||
#define LN_pseudonym "pseudonym"
|
||||
#define NID_pseudonym 510
|
||||
#define OBJ_pseudonym OBJ_X509,65L
|
||||
|
||||
#define SN_role "role"
|
||||
#define LN_role "role"
|
||||
#define NID_role 400
|
||||
#define OBJ_role OBJ_X509,72L
|
||||
|
||||
#define LN_organizationIdentifier "organizationIdentifier"
|
||||
#define NID_organizationIdentifier 1089
|
||||
#define OBJ_organizationIdentifier OBJ_X509,97L
|
||||
|
||||
#define SN_countryCode3c "c3"
|
||||
#define LN_countryCode3c "countryCode3c"
|
||||
#define NID_countryCode3c 1090
|
||||
#define OBJ_countryCode3c OBJ_X509,98L
|
||||
|
||||
#define SN_countryCode3n "n3"
|
||||
#define LN_countryCode3n "countryCode3n"
|
||||
#define NID_countryCode3n 1091
|
||||
#define OBJ_countryCode3n OBJ_X509,99L
|
||||
|
||||
#define LN_dnsName "dnsName"
|
||||
#define NID_dnsName 1092
|
||||
#define OBJ_dnsName OBJ_X509,100L
|
||||
|
||||
#define SN_X500algorithms "X500algorithms"
|
||||
#define LN_X500algorithms "directory services - algorithms"
|
||||
#define NID_X500algorithms 378
|
||||
#define OBJ_X500algorithms OBJ_X500,8L
|
||||
|
||||
#define SN_rsa "RSA"
|
||||
#define LN_rsa "rsa"
|
||||
#define NID_rsa 19
|
||||
#define OBJ_rsa OBJ_X500algorithms,1L,1L
|
||||
|
||||
#define SN_mdc2WithRSA "RSA-MDC2"
|
||||
#define LN_mdc2WithRSA "mdc2WithRSA"
|
||||
#define NID_mdc2WithRSA 96
|
||||
#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L
|
||||
|
||||
#define SN_mdc2 "MDC2"
|
||||
#define LN_mdc2 "mdc2"
|
||||
#define NID_mdc2 95
|
||||
#define OBJ_mdc2 OBJ_X500algorithms,3L,101L
|
||||
|
||||
#define SN_id_ce "id-ce"
|
||||
#define NID_id_ce 81
|
||||
#define OBJ_id_ce OBJ_X500,29L
|
||||
|
||||
#define SN_subject_directory_attributes "subjectDirectoryAttributes"
|
||||
#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes"
|
||||
#define NID_subject_directory_attributes 769
|
||||
#define OBJ_subject_directory_attributes OBJ_id_ce,9L
|
||||
|
||||
#define SN_subject_key_identifier "subjectKeyIdentifier"
|
||||
#define LN_subject_key_identifier "X509v3 Subject Key Identifier"
|
||||
#define NID_subject_key_identifier 82
|
||||
#define OBJ_subject_key_identifier OBJ_id_ce,14L
|
||||
|
||||
#define SN_key_usage "keyUsage"
|
||||
#define LN_key_usage "X509v3 Key Usage"
|
||||
#define NID_key_usage 83
|
||||
#define OBJ_key_usage OBJ_id_ce,15L
|
||||
|
||||
#define SN_private_key_usage_period "privateKeyUsagePeriod"
|
||||
#define LN_private_key_usage_period "X509v3 Private Key Usage Period"
|
||||
#define NID_private_key_usage_period 84
|
||||
#define OBJ_private_key_usage_period OBJ_id_ce,16L
|
||||
|
||||
#define SN_subject_alt_name "subjectAltName"
|
||||
#define LN_subject_alt_name "X509v3 Subject Alternative Name"
|
||||
#define NID_subject_alt_name 85
|
||||
#define OBJ_subject_alt_name OBJ_id_ce,17L
|
||||
|
||||
#define SN_issuer_alt_name "issuerAltName"
|
||||
#define LN_issuer_alt_name "X509v3 Issuer Alternative Name"
|
||||
#define NID_issuer_alt_name 86
|
||||
#define OBJ_issuer_alt_name OBJ_id_ce,18L
|
||||
|
||||
#define SN_basic_constraints "basicConstraints"
|
||||
#define LN_basic_constraints "X509v3 Basic Constraints"
|
||||
#define NID_basic_constraints 87
|
||||
#define OBJ_basic_constraints OBJ_id_ce,19L
|
||||
|
||||
#define SN_crl_number "crlNumber"
|
||||
#define LN_crl_number "X509v3 CRL Number"
|
||||
#define NID_crl_number 88
|
||||
#define OBJ_crl_number OBJ_id_ce,20L
|
||||
|
||||
#define SN_crl_reason "CRLReason"
|
||||
#define LN_crl_reason "X509v3 CRL Reason Code"
|
||||
#define NID_crl_reason 141
|
||||
#define OBJ_crl_reason OBJ_id_ce,21L
|
||||
|
||||
#define SN_invalidity_date "invalidityDate"
|
||||
#define LN_invalidity_date "Invalidity Date"
|
||||
#define NID_invalidity_date 142
|
||||
#define OBJ_invalidity_date OBJ_id_ce,24L
|
||||
|
||||
#define SN_delta_crl "deltaCRL"
|
||||
#define LN_delta_crl "X509v3 Delta CRL Indicator"
|
||||
#define NID_delta_crl 140
|
||||
#define OBJ_delta_crl OBJ_id_ce,27L
|
||||
|
||||
#define SN_issuing_distribution_point "issuingDistributionPoint"
|
||||
#define LN_issuing_distribution_point "X509v3 Issuing Distribution Point"
|
||||
#define NID_issuing_distribution_point 770
|
||||
#define OBJ_issuing_distribution_point OBJ_id_ce,28L
|
||||
|
||||
#define SN_certificate_issuer "certificateIssuer"
|
||||
#define LN_certificate_issuer "X509v3 Certificate Issuer"
|
||||
#define NID_certificate_issuer 771
|
||||
#define OBJ_certificate_issuer OBJ_id_ce,29L
|
||||
|
||||
#define SN_name_constraints "nameConstraints"
|
||||
#define LN_name_constraints "X509v3 Name Constraints"
|
||||
#define NID_name_constraints 666
|
||||
#define OBJ_name_constraints OBJ_id_ce,30L
|
||||
|
||||
#define SN_crl_distribution_points "crlDistributionPoints"
|
||||
#define LN_crl_distribution_points "X509v3 CRL Distribution Points"
|
||||
#define NID_crl_distribution_points 103
|
||||
#define OBJ_crl_distribution_points OBJ_id_ce,31L
|
||||
|
||||
#define SN_certificate_policies "certificatePolicies"
|
||||
#define LN_certificate_policies "X509v3 Certificate Policies"
|
||||
#define NID_certificate_policies 89
|
||||
#define OBJ_certificate_policies OBJ_id_ce,32L
|
||||
|
||||
#define SN_any_policy "anyPolicy"
|
||||
#define LN_any_policy "X509v3 Any Policy"
|
||||
#define NID_any_policy 746
|
||||
#define OBJ_any_policy OBJ_certificate_policies,0L
|
||||
|
||||
#define SN_policy_mappings "policyMappings"
|
||||
#define LN_policy_mappings "X509v3 Policy Mappings"
|
||||
#define NID_policy_mappings 747
|
||||
#define OBJ_policy_mappings OBJ_id_ce,33L
|
||||
|
||||
#define SN_authority_key_identifier "authorityKeyIdentifier"
|
||||
#define LN_authority_key_identifier "X509v3 Authority Key Identifier"
|
||||
#define NID_authority_key_identifier 90
|
||||
#define OBJ_authority_key_identifier OBJ_id_ce,35L
|
||||
|
||||
#define SN_policy_constraints "policyConstraints"
|
||||
#define LN_policy_constraints "X509v3 Policy Constraints"
|
||||
#define NID_policy_constraints 401
|
||||
#define OBJ_policy_constraints OBJ_id_ce,36L
|
||||
|
||||
#define SN_ext_key_usage "extendedKeyUsage"
|
||||
#define LN_ext_key_usage "X509v3 Extended Key Usage"
|
||||
#define NID_ext_key_usage 126
|
||||
#define OBJ_ext_key_usage OBJ_id_ce,37L
|
||||
|
||||
#define SN_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 SN_kmac128 "KMAC128"
|
||||
#define LN_kmac128 "kmac128"
|
||||
#define NID_kmac128 1196
|
||||
#define OBJ_kmac128 OBJ_nist_hashalgs,19L
|
||||
|
||||
#define SN_kmac256 "KMAC256"
|
||||
#define LN_kmac256 "kmac256"
|
||||
#define NID_kmac256 1197
|
||||
#define OBJ_kmac256 OBJ_nist_hashalgs,20L
|
||||
|
||||
#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L
|
||||
|
||||
#define SN_dsa_with_SHA224 "dsa_with_SHA224"
|
||||
#define NID_dsa_with_SHA224 802
|
||||
#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L
|
||||
|
||||
#define SN_dsa_with_SHA256 "dsa_with_SHA256"
|
||||
#define NID_dsa_with_SHA256 803
|
||||
#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L
|
||||
|
||||
#define OBJ_sigAlgs OBJ_nistAlgorithms,3L
|
||||
|
||||
#define SN_dsa_with_SHA384 "id-dsa-with-sha384"
|
||||
#define LN_dsa_with_SHA384 "dsa_with_SHA384"
|
||||
#define NID_dsa_with_SHA384 1106
|
||||
#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L
|
||||
|
||||
#define SN_dsa_with_SHA512 "id-dsa-with-sha512"
|
||||
#define LN_dsa_with_SHA512 "dsa_with_SHA512"
|
||||
#define NID_dsa_with_SHA512 1107
|
||||
#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L
|
||||
|
||||
#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224"
|
||||
#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224"
|
||||
#define NID_dsa_with_SHA3_224 1108
|
||||
#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L
|
||||
|
||||
#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256"
|
||||
#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256"
|
||||
#define NID_dsa_with_SHA3_256 1109
|
||||
#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L
|
||||
|
||||
#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384"
|
||||
#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384"
|
||||
#define NID_dsa_with_SHA3_384 1110
|
||||
#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L
|
||||
|
||||
#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512"
|
||||
#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512"
|
||||
#define NID_dsa_with_SHA3_512 1111
|
||||
#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L
|
||||
|
||||
#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224"
|
||||
#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224"
|
||||
#define NID_ecdsa_with_SHA3_224 1112
|
||||
#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L
|
||||
|
||||
#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256"
|
||||
#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256"
|
||||
#define NID_ecdsa_with_SHA3_256 1113
|
||||
#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L
|
||||
|
||||
#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384"
|
||||
#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384"
|
||||
#define NID_ecdsa_with_SHA3_384 1114
|
||||
#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L
|
||||
|
||||
#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512"
|
||||
#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512"
|
||||
#define NID_ecdsa_with_SHA3_512 1115
|
||||
#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L
|
||||
|
||||
#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224"
|
||||
#define LN_RSA_SHA3_224 "RSA-SHA3-224"
|
||||
#define NID_RSA_SHA3_224 1116
|
||||
#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L
|
||||
|
||||
#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256"
|
||||
#define LN_RSA_SHA3_256 "RSA-SHA3-256"
|
||||
#define NID_RSA_SHA3_256 1117
|
||||
#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L
|
||||
|
||||
#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384"
|
||||
#define LN_RSA_SHA3_384 "RSA-SHA3-384"
|
||||
#define NID_RSA_SHA3_384 1118
|
||||
#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L
|
||||
|
||||
#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512"
|
||||
#define LN_RSA_SHA3_512 "RSA-SHA3-512"
|
||||
#define NID_RSA_SHA3_512 1119
|
||||
#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L
|
||||
|
||||
#define SN_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_sshkdf "SSHKDF"
|
||||
#define LN_sshkdf "sshkdf"
|
||||
#define NID_sshkdf 1203
|
||||
|
||||
#define SN_sskdf "SSKDF"
|
||||
#define LN_sskdf "sskdf"
|
||||
#define NID_sskdf 1205
|
||||
|
||||
#define SN_x942kdf "X942KDF"
|
||||
#define LN_x942kdf "x942kdf"
|
||||
#define NID_x942kdf 1207
|
||||
|
||||
#define SN_x963kdf "X963KDF"
|
||||
#define LN_x963kdf "x963kdf"
|
||||
#define NID_x963kdf 1206
|
||||
|
||||
#define SN_id_pkinit "id-pkinit"
|
||||
#define NID_id_pkinit 1031
|
||||
#define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L
|
||||
|
||||
#define SN_pkInitClientAuth "pkInitClientAuth"
|
||||
#define LN_pkInitClientAuth "PKINIT Client Auth"
|
||||
#define NID_pkInitClientAuth 1032
|
||||
#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L
|
||||
|
||||
#define SN_pkInitKDC "pkInitKDC"
|
||||
#define LN_pkInitKDC "Signing KDC Response"
|
||||
#define NID_pkInitKDC 1033
|
||||
#define OBJ_pkInitKDC OBJ_id_pkinit,5L
|
||||
|
||||
#define SN_X25519 "X25519"
|
||||
#define NID_X25519 1034
|
||||
#define OBJ_X25519 1L,3L,101L,110L
|
||||
|
||||
#define SN_X448 "X448"
|
||||
#define NID_X448 1035
|
||||
#define OBJ_X448 1L,3L,101L,111L
|
||||
|
||||
#define SN_ED25519 "ED25519"
|
||||
#define NID_ED25519 1087
|
||||
#define OBJ_ED25519 1L,3L,101L,112L
|
||||
|
||||
#define SN_ED448 "ED448"
|
||||
#define NID_ED448 1088
|
||||
#define OBJ_ED448 1L,3L,101L,113L
|
||||
|
||||
#define SN_kx_rsa "KxRSA"
|
||||
#define LN_kx_rsa "kx-rsa"
|
||||
#define NID_kx_rsa 1037
|
||||
|
||||
#define SN_kx_ecdhe "KxECDHE"
|
||||
#define LN_kx_ecdhe "kx-ecdhe"
|
||||
#define NID_kx_ecdhe 1038
|
||||
|
||||
#define SN_kx_dhe "KxDHE"
|
||||
#define LN_kx_dhe "kx-dhe"
|
||||
#define NID_kx_dhe 1039
|
||||
|
||||
#define SN_kx_ecdhe_psk "KxECDHE-PSK"
|
||||
#define LN_kx_ecdhe_psk "kx-ecdhe-psk"
|
||||
#define NID_kx_ecdhe_psk 1040
|
||||
|
||||
#define SN_kx_dhe_psk "KxDHE-PSK"
|
||||
#define LN_kx_dhe_psk "kx-dhe-psk"
|
||||
#define NID_kx_dhe_psk 1041
|
||||
|
||||
#define SN_kx_rsa_psk "KxRSA_PSK"
|
||||
#define LN_kx_rsa_psk "kx-rsa-psk"
|
||||
#define NID_kx_rsa_psk 1042
|
||||
|
||||
#define SN_kx_psk "KxPSK"
|
||||
#define LN_kx_psk "kx-psk"
|
||||
#define NID_kx_psk 1043
|
||||
|
||||
#define SN_kx_srp "KxSRP"
|
||||
#define LN_kx_srp "kx-srp"
|
||||
#define NID_kx_srp 1044
|
||||
|
||||
#define SN_kx_gost "KxGOST"
|
||||
#define LN_kx_gost "kx-gost"
|
||||
#define NID_kx_gost 1045
|
||||
|
||||
#define SN_kx_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
|
||||
|
||||
#define SN_aes_128_siv "AES-128-SIV"
|
||||
#define LN_aes_128_siv "aes-128-siv"
|
||||
#define NID_aes_128_siv 1198
|
||||
|
||||
#define SN_aes_192_siv "AES-192-SIV"
|
||||
#define LN_aes_192_siv "aes-192-siv"
|
||||
#define NID_aes_192_siv 1199
|
||||
|
||||
#define SN_aes_256_siv "AES-256-SIV"
|
||||
#define LN_aes_256_siv "aes-256-siv"
|
||||
#define NID_aes_256_siv 1200
|
||||
@@ -0,0 +1,2461 @@
|
||||
/*
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
|
||||
* Copyright 2005 Nokia. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#ifndef HEADER_SSL_H
|
||||
# define HEADER_SSL_H
|
||||
|
||||
# include <openssl/e_os2.h>
|
||||
# include <openssl/opensslconf.h>
|
||||
# include <openssl/comp.h>
|
||||
# include <openssl/bio.h>
|
||||
# if !OPENSSL_API_1_1_0
|
||||
# include <openssl/x509.h>
|
||||
# include <openssl/crypto.h>
|
||||
# include <openssl/buffer.h>
|
||||
# endif
|
||||
# include <openssl/lhash.h>
|
||||
# include <openssl/pem.h>
|
||||
# include <openssl/hmac.h>
|
||||
# include <openssl/async.h>
|
||||
|
||||
# include <openssl/safestack.h>
|
||||
# include <openssl/symhacks.h>
|
||||
# include <openssl/ct.h>
|
||||
# include <openssl/sslerr.h>
|
||||
|
||||
#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.
|
||||
* DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list()
|
||||
* Update both macro and function simultaneously
|
||||
*/
|
||||
# if !OPENSSL_API_3
|
||||
# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL"
|
||||
/*
|
||||
* This is the default set of TLSv1.3 ciphersuites
|
||||
* DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites()
|
||||
* Update both macro and function simultaneously
|
||||
*/
|
||||
# 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
|
||||
# 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);
|
||||
|
||||
/* Typedef for SSL async callback */
|
||||
typedef int (*SSL_async_callback_fn)(SSL *s, void *arg);
|
||||
|
||||
/*
|
||||
* Some values are reserved until OpenSSL 3.0.0 because they were previously
|
||||
* included in SSL_OP_ALL in a 1.1.x release.
|
||||
*/
|
||||
|
||||
/* Disable Extended master secret */
|
||||
# define SSL_OP_NO_EXTENDED_MASTER_SECRET 0x00000001U
|
||||
|
||||
/* Reserved value (until OpenSSL 3.0.0) 0x00000002U */
|
||||
|
||||
/* Allow initial connection to servers that don't support RI */
|
||||
# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U
|
||||
|
||||
/* Reserved value (until OpenSSL 3.0.0) 0x00000008U */
|
||||
# define SSL_OP_TLSEXT_PADDING 0x00000010U
|
||||
/* Reserved value (until OpenSSL 3.0.0) 0x00000020U */
|
||||
# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U
|
||||
/*
|
||||
* Reserved value (until OpenSSL 3.0.0) 0x00000080U
|
||||
* Reserved value (until OpenSSL 3.0.0) 0x00000100U
|
||||
* Reserved value (until OpenSSL 3.0.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
|
||||
/*
|
||||
* Don't use the kernel TLS data-path for sending.
|
||||
*/
|
||||
# define SSL_MODE_NO_KTLS_TX 0x00000200U
|
||||
/*
|
||||
* 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
|
||||
/*
|
||||
* Don't use the kernel TLS data-path for receiving.
|
||||
*/
|
||||
# define SSL_MODE_NO_KTLS_RX 0x00000800U
|
||||
|
||||
/* 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)
|
||||
|
||||
# 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 <openssl/ssl2.h>
|
||||
# include <openssl/ssl3.h>
|
||||
# include <openssl/tls1.h> /* This is mostly sslv3 with a few tweaks */
|
||||
# include <openssl/dtls1.h> /* Datagram TLS */
|
||||
# include <openssl/srtp.h> /* 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_1_1_0
|
||||
# define OpenSSL_add_ssl_algorithms() SSL_library_init()
|
||||
# define SSLeay_add_ssl_algorithms() SSL_library_init()
|
||||
# endif
|
||||
|
||||
/* More backward compatibility */
|
||||
# define SSL_get_cipher(s) \
|
||||
SSL_CIPHER_get_name(SSL_get_current_cipher(s))
|
||||
# define SSL_get_cipher_bits(s,np) \
|
||||
SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)
|
||||
# define SSL_get_cipher_version(s) \
|
||||
SSL_CIPHER_get_version(SSL_get_current_cipher(s))
|
||||
# define SSL_get_cipher_name(s) \
|
||||
SSL_CIPHER_get_name(SSL_get_current_cipher(s))
|
||||
# define SSL_get_time(a) SSL_SESSION_get_time(a)
|
||||
# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b))
|
||||
# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a)
|
||||
# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b))
|
||||
|
||||
# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)
|
||||
# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)
|
||||
|
||||
DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
|
||||
# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value
|
||||
* from SSL_AD_... */
|
||||
/* These alert types are for SSLv3 and TLSv1 */
|
||||
# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY
|
||||
/* fatal */
|
||||
# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE
|
||||
/* fatal */
|
||||
# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC
|
||||
# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED
|
||||
# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW
|
||||
/* fatal */
|
||||
# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE
|
||||
/* fatal */
|
||||
# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE
|
||||
/* Not for TLS */
|
||||
# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE
|
||||
# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE
|
||||
# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE
|
||||
# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED
|
||||
# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED
|
||||
# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN
|
||||
/* fatal */
|
||||
# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER
|
||||
/* fatal */
|
||||
# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA
|
||||
/* fatal */
|
||||
# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED
|
||||
/* fatal */
|
||||
# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR
|
||||
# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR
|
||||
/* fatal */
|
||||
# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION
|
||||
/* fatal */
|
||||
# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION
|
||||
/* fatal */
|
||||
# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY
|
||||
/* fatal */
|
||||
# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR
|
||||
# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED
|
||||
# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION
|
||||
# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION
|
||||
# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED
|
||||
# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION
|
||||
# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE
|
||||
# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME
|
||||
# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE
|
||||
# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE
|
||||
/* fatal */
|
||||
# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY
|
||||
/* fatal */
|
||||
# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK
|
||||
# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL
|
||||
# define SSL_ERROR_NONE 0
|
||||
# define SSL_ERROR_SSL 1
|
||||
# define SSL_ERROR_WANT_READ 2
|
||||
# define SSL_ERROR_WANT_WRITE 3
|
||||
# define SSL_ERROR_WANT_X509_LOOKUP 4
|
||||
# define SSL_ERROR_SYSCALL 5/* look at error stack/return
|
||||
* value/errno */
|
||||
# define SSL_ERROR_ZERO_RETURN 6
|
||||
# define SSL_ERROR_WANT_CONNECT 7
|
||||
# define SSL_ERROR_WANT_ACCEPT 8
|
||||
# define SSL_ERROR_WANT_ASYNC 9
|
||||
# define SSL_ERROR_WANT_ASYNC_JOB 10
|
||||
# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11
|
||||
# define SSL_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
|
||||
# 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_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))
|
||||
# if !OPENSSL_API_3
|
||||
# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
|
||||
# define SSL_set_tmp_ecdh(ssl,ecdh) \
|
||||
SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh))
|
||||
# endif
|
||||
# define SSL_CTX_add_extra_chain_cert(ctx,x509) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509))
|
||||
# define SSL_CTX_get_extra_chain_certs(ctx,px509) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509)
|
||||
# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509)
|
||||
# define SSL_CTX_clear_extra_chain_certs(ctx) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)
|
||||
# define SSL_CTX_set0_chain(ctx,sk) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk))
|
||||
# define SSL_CTX_set1_chain(ctx,sk) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk))
|
||||
# define SSL_CTX_add0_chain_cert(ctx,x509) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509))
|
||||
# define SSL_CTX_add1_chain_cert(ctx,x509) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509))
|
||||
# define SSL_CTX_get0_chain_certs(ctx,px509) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
|
||||
# define SSL_CTX_clear_chain_certs(ctx) \
|
||||
SSL_CTX_set0_chain(ctx,NULL)
|
||||
# define SSL_CTX_build_cert_chain(ctx, flags) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
|
||||
# define SSL_CTX_select_current_cert(ctx,x509) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509))
|
||||
# define SSL_CTX_set_current_cert(ctx, op) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
|
||||
# define SSL_CTX_set0_verify_cert_store(ctx,st) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st))
|
||||
# define SSL_CTX_set1_verify_cert_store(ctx,st) \
|
||||
SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st))
|
||||
# define SSL_CTX_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,(char *)(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_1_1_0
|
||||
/* Provide some compatibility macros for removed functionality. */
|
||||
# define SSL_CTX_need_tmp_RSA(ctx) 0
|
||||
# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1
|
||||
# define SSL_need_tmp_RSA(ssl) 0
|
||||
# define SSL_set_tmp_rsa(ssl,rsa) 1
|
||||
# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0)
|
||||
# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0)
|
||||
/*
|
||||
* We "pretend" to call the callback to avoid warnings about unused static
|
||||
* functions.
|
||||
*/
|
||||
# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0)
|
||||
# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0)
|
||||
# endif
|
||||
__owur const BIO_METHOD *BIO_f_ssl(void);
|
||||
__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client);
|
||||
__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx);
|
||||
__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);
|
||||
__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from);
|
||||
void BIO_ssl_shutdown(BIO *ssl_bio);
|
||||
|
||||
__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str);
|
||||
__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);
|
||||
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_1_1_0
|
||||
# define SSL_load_error_strings() \
|
||||
OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \
|
||||
| OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL)
|
||||
# endif
|
||||
|
||||
__owur const char *SSL_state_string(const SSL *s);
|
||||
__owur const char *SSL_rstate_string(const SSL *s);
|
||||
__owur const char *SSL_state_string_long(const SSL *s);
|
||||
__owur const char *SSL_rstate_string_long(const SSL *s);
|
||||
__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(const SSL_SESSION *src);
|
||||
const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,
|
||||
unsigned int *len);
|
||||
const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s,
|
||||
unsigned int *len);
|
||||
__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s);
|
||||
# ifndef OPENSSL_NO_STDIO
|
||||
int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses);
|
||||
# endif
|
||||
int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses);
|
||||
int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x);
|
||||
int SSL_SESSION_up_ref(SSL_SESSION *ses);
|
||||
void SSL_SESSION_free(SSL_SESSION *ses);
|
||||
__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp);
|
||||
__owur int SSL_set_session(SSL *to, SSL_SESSION *session);
|
||||
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session);
|
||||
int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session);
|
||||
__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb);
|
||||
__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb);
|
||||
__owur int SSL_has_matching_session_id(const SSL *s,
|
||||
const unsigned char *id,
|
||||
unsigned int id_len);
|
||||
SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp,
|
||||
long length);
|
||||
|
||||
# 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);
|
||||
__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback);
|
||||
__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg);
|
||||
__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback);
|
||||
__owur int SSL_set_async_callback_arg(SSL *s, void *arg);
|
||||
__owur int SSL_get_async_status(SSL *s, int *status);
|
||||
|
||||
# endif
|
||||
__owur int SSL_accept(SSL *ssl);
|
||||
__owur int SSL_stateless(SSL *s);
|
||||
__owur int SSL_connect(SSL *ssl);
|
||||
__owur int SSL_read(SSL *ssl, void *buf, int num);
|
||||
__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
|
||||
|
||||
# define SSL_READ_EARLY_DATA_ERROR 0
|
||||
# define SSL_READ_EARLY_DATA_SUCCESS 1
|
||||
# define SSL_READ_EARLY_DATA_FINISH 2
|
||||
|
||||
__owur int SSL_read_early_data(SSL *s, void *buf, size_t num,
|
||||
size_t *readbytes);
|
||||
__owur int SSL_peek(SSL *ssl, void *buf, int num);
|
||||
__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes);
|
||||
__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size,
|
||||
int flags);
|
||||
__owur int SSL_write(SSL *ssl, const void *buf, int num);
|
||||
__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written);
|
||||
__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num,
|
||||
size_t *written);
|
||||
long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg);
|
||||
long SSL_callback_ctrl(SSL *, int, void (*)(void));
|
||||
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg);
|
||||
long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));
|
||||
|
||||
# define SSL_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_1_1_0
|
||||
# define SSL_library_init() OPENSSL_init_ssl(0, NULL)
|
||||
# endif
|
||||
|
||||
__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size);
|
||||
__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk);
|
||||
|
||||
__owur SSL *SSL_dup(SSL *ssl);
|
||||
|
||||
__owur X509 *SSL_get_certificate(const SSL *ssl);
|
||||
/*
|
||||
* EVP_PKEY
|
||||
*/
|
||||
struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl);
|
||||
|
||||
__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
|
||||
__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);
|
||||
|
||||
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
|
||||
__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
|
||||
void SSL_set_quiet_shutdown(SSL *ssl, int mode);
|
||||
__owur int SSL_get_quiet_shutdown(const SSL *ssl);
|
||||
void SSL_set_shutdown(SSL *ssl, int mode);
|
||||
__owur int SSL_get_shutdown(const SSL *ssl);
|
||||
__owur int SSL_version(const SSL *ssl);
|
||||
__owur int SSL_client_version(const SSL *s);
|
||||
__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);
|
||||
__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx);
|
||||
__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx);
|
||||
__owur int SSL_CTX_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_1_1_0
|
||||
# define SSL_COMP_free_compression_methods() while(0) continue
|
||||
# endif
|
||||
__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
|
||||
|
||||
const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
|
||||
int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c);
|
||||
int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c);
|
||||
int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len,
|
||||
int isv2format, STACK_OF(SSL_CIPHER) **sk,
|
||||
STACK_OF(SSL_CIPHER) **scsvs);
|
||||
|
||||
/* TLS extensions functions */
|
||||
__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len);
|
||||
|
||||
__owur int SSL_set_session_ticket_ext_cb(SSL *s,
|
||||
tls_session_ticket_ext_cb_fn cb,
|
||||
void *arg);
|
||||
|
||||
/* Pre-shared secret session resumption functions */
|
||||
__owur int SSL_set_session_secret_cb(SSL *s,
|
||||
tls_session_secret_cb_fn session_secret_cb,
|
||||
void *arg);
|
||||
|
||||
void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
|
||||
int (*cb) (SSL *ssl,
|
||||
int
|
||||
is_forward_secure));
|
||||
|
||||
void SSL_set_not_resumable_session_callback(SSL *ssl,
|
||||
int (*cb) (SSL *ssl,
|
||||
int is_forward_secure));
|
||||
|
||||
void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
|
||||
size_t (*cb) (SSL *ssl, int type,
|
||||
size_t len, void *arg));
|
||||
void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg);
|
||||
void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx);
|
||||
int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size);
|
||||
|
||||
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_1_1_0
|
||||
# define SSL_cache_hit(s) SSL_session_reused(s)
|
||||
# endif
|
||||
|
||||
__owur int SSL_session_reused(const SSL *s);
|
||||
__owur int SSL_is_server(const SSL *s);
|
||||
|
||||
__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void);
|
||||
int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx);
|
||||
void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
|
||||
unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
|
||||
__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx,
|
||||
unsigned int flags);
|
||||
__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre);
|
||||
|
||||
void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
|
||||
void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);
|
||||
|
||||
__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
|
||||
__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
|
||||
__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
|
||||
|
||||
void SSL_add_ssl_module(void);
|
||||
int SSL_config(SSL *s, const char *name);
|
||||
int SSL_CTX_config(SSL_CTX *ctx, const char *name);
|
||||
|
||||
# ifndef OPENSSL_NO_SSL_TRACE
|
||||
void SSL_trace(int write_p, int version, int content_type,
|
||||
const void *buf, size_t len, SSL *ssl, void *arg);
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_SOCK
|
||||
int DTLSv1_listen(SSL *s, BIO_ADDR *client);
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_CT
|
||||
|
||||
/*
|
||||
* A callback for verifying that the received SCTs are sufficient.
|
||||
* Expected to return 1 if they are sufficient, otherwise 0.
|
||||
* May return a negative integer if an error occurs.
|
||||
* A connection should be aborted if the SCTs are deemed insufficient.
|
||||
*/
|
||||
typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx,
|
||||
const STACK_OF(SCT) *scts, void *arg);
|
||||
|
||||
/*
|
||||
* Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate
|
||||
* the received SCTs.
|
||||
* If the callback returns a non-positive result, the connection is terminated.
|
||||
* Call this function before beginning a handshake.
|
||||
* If a NULL |callback| is provided, SCT validation is disabled.
|
||||
* |arg| is arbitrary userdata that will be passed to the callback whenever it
|
||||
* is invoked. Ownership of |arg| remains with the caller.
|
||||
*
|
||||
* NOTE: A side-effect of setting a CT callback is that an OCSP stapled response
|
||||
* will be requested.
|
||||
*/
|
||||
int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
|
||||
void *arg);
|
||||
int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
|
||||
ssl_ct_validation_cb callback,
|
||||
void *arg);
|
||||
#define SSL_disable_ct(s) \
|
||||
((void) SSL_set_validation_callback((s), NULL, NULL))
|
||||
#define SSL_CTX_disable_ct(ctx) \
|
||||
((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL))
|
||||
|
||||
/*
|
||||
* The validation type enumerates the available behaviours of the built-in SSL
|
||||
* CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct().
|
||||
* The underlying callback is a static function in libssl.
|
||||
*/
|
||||
enum {
|
||||
SSL_CT_VALIDATION_PERMISSIVE = 0,
|
||||
SSL_CT_VALIDATION_STRICT
|
||||
};
|
||||
|
||||
/*
|
||||
* Enable CT by setting up a callback that implements one of the built-in
|
||||
* validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always
|
||||
* continues the handshake, the application can make appropriate decisions at
|
||||
* handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at
|
||||
* least one valid SCT, or else handshake termination will be requested. The
|
||||
* handshake may continue anyway if SSL_VERIFY_NONE is in effect.
|
||||
*/
|
||||
int SSL_enable_ct(SSL *s, int validation_mode);
|
||||
int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode);
|
||||
|
||||
/*
|
||||
* Report whether a non-NULL callback is enabled.
|
||||
*/
|
||||
int SSL_ct_is_enabled(const SSL *s);
|
||||
int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx);
|
||||
|
||||
/* Gets the SCTs received from a connection */
|
||||
const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s);
|
||||
|
||||
/*
|
||||
* Loads the CT log list from the default location.
|
||||
* If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
|
||||
* the log information loaded from this file will be appended to the
|
||||
* CTLOG_STORE.
|
||||
* Returns 1 on success, 0 otherwise.
|
||||
*/
|
||||
int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx);
|
||||
|
||||
/*
|
||||
* Loads the CT log list from the specified file path.
|
||||
* If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store,
|
||||
* the log information loaded from this file will be appended to the
|
||||
* CTLOG_STORE.
|
||||
* Returns 1 on success, 0 otherwise.
|
||||
*/
|
||||
int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path);
|
||||
|
||||
/*
|
||||
* Sets the CT log list used by all SSL connections created from this SSL_CTX.
|
||||
* Ownership of the CTLOG_STORE is transferred to the SSL_CTX.
|
||||
*/
|
||||
void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs);
|
||||
|
||||
/*
|
||||
* Gets the CT log list used by all SSL connections created from this SSL_CTX.
|
||||
* This will be NULL unless one of the following functions has been called:
|
||||
* - SSL_CTX_set_default_ctlog_list_file
|
||||
* - SSL_CTX_set_ctlog_list_file
|
||||
* - SSL_CTX_set_ctlog_store
|
||||
*/
|
||||
const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx);
|
||||
|
||||
# endif /* OPENSSL_NO_CT */
|
||||
|
||||
/* What the "other" parameter contains in security callback */
|
||||
/* Mask for type */
|
||||
# define SSL_SECOP_OTHER_TYPE 0xffff0000
|
||||
# define SSL_SECOP_OTHER_NONE 0
|
||||
# define SSL_SECOP_OTHER_CIPHER (1 << 16)
|
||||
# define SSL_SECOP_OTHER_CURVE (2 << 16)
|
||||
# define SSL_SECOP_OTHER_DH (3 << 16)
|
||||
# define SSL_SECOP_OTHER_PKEY (4 << 16)
|
||||
# define SSL_SECOP_OTHER_SIGALG (5 << 16)
|
||||
# define SSL_SECOP_OTHER_CERT (6 << 16)
|
||||
|
||||
/* Indicated operation refers to peer key or certificate */
|
||||
# define SSL_SECOP_PEER 0x1000
|
||||
|
||||
/* Values for "op" parameter in security callback */
|
||||
|
||||
/* Called to filter ciphers */
|
||||
/* Ciphers client supports */
|
||||
# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER)
|
||||
/* Cipher shared by client/server */
|
||||
# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER)
|
||||
/* Sanity check of cipher server selects */
|
||||
# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER)
|
||||
/* Curves supported by client */
|
||||
# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE)
|
||||
/* Curves shared by client/server */
|
||||
# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE)
|
||||
/* Sanity check of curve server selects */
|
||||
# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE)
|
||||
/* Temporary DH key */
|
||||
# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY)
|
||||
/* SSL/TLS version */
|
||||
# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE)
|
||||
/* Session tickets */
|
||||
# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE)
|
||||
/* Supported signature algorithms sent to peer */
|
||||
# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Shared signature algorithm */
|
||||
# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Sanity check signature algorithm allowed */
|
||||
# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Used to get mask of supported public key signature algorithms */
|
||||
# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Use to see if compression is allowed */
|
||||
# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE)
|
||||
/* EE key in certificate */
|
||||
# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT)
|
||||
/* CA key in certificate */
|
||||
# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT)
|
||||
/* CA digest algorithm in certificate */
|
||||
# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT)
|
||||
/* Peer EE key in certificate */
|
||||
# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER)
|
||||
/* Peer CA key in certificate */
|
||||
# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER)
|
||||
/* Peer CA digest algorithm in certificate */
|
||||
# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER)
|
||||
|
||||
void SSL_set_security_level(SSL *s, int level);
|
||||
__owur int SSL_get_security_level(const SSL *s);
|
||||
void SSL_set_security_callback(SSL *s,
|
||||
int (*cb) (const SSL *s, const SSL_CTX *ctx,
|
||||
int op, int bits, int nid,
|
||||
void *other, void *ex));
|
||||
int (*SSL_get_security_callback(const SSL *s)) (const SSL *s,
|
||||
const SSL_CTX *ctx, int op,
|
||||
int bits, int nid, void *other,
|
||||
void *ex);
|
||||
void SSL_set0_security_ex_data(SSL *s, void *ex);
|
||||
__owur void *SSL_get0_security_ex_data(const SSL *s);
|
||||
|
||||
void SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
|
||||
__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx);
|
||||
void SSL_CTX_set_security_callback(SSL_CTX *ctx,
|
||||
int (*cb) (const SSL *s, const SSL_CTX *ctx,
|
||||
int op, int bits, int nid,
|
||||
void *other, void *ex));
|
||||
int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s,
|
||||
const SSL_CTX *ctx,
|
||||
int op, int bits,
|
||||
int nid,
|
||||
void *other,
|
||||
void *ex);
|
||||
void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex);
|
||||
__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx);
|
||||
|
||||
/* OPENSSL_INIT flag 0x010000 reserved for internal use */
|
||||
# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L
|
||||
# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L
|
||||
|
||||
# define OPENSSL_INIT_SSL_DEFAULT \
|
||||
(OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS)
|
||||
|
||||
int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings);
|
||||
|
||||
# ifndef OPENSSL_NO_UNIT_TEST
|
||||
__owur const struct openssl_ssl_test_functions *SSL_test_functions(void);
|
||||
# endif
|
||||
|
||||
__owur int SSL_free_buffers(SSL *ssl);
|
||||
__owur int SSL_alloc_buffers(SSL *ssl);
|
||||
|
||||
/* Status codes passed to the decrypt session ticket callback. Some of these
|
||||
* are for internal use only and are never passed to the callback. */
|
||||
typedef int SSL_TICKET_STATUS;
|
||||
|
||||
/* Support for ticket appdata */
|
||||
/* fatal error, malloc failure */
|
||||
# define SSL_TICKET_FATAL_ERR_MALLOC 0
|
||||
/* fatal error, either from parsing or decrypting the ticket */
|
||||
# define SSL_TICKET_FATAL_ERR_OTHER 1
|
||||
/* No ticket present */
|
||||
# define SSL_TICKET_NONE 2
|
||||
/* Empty ticket present */
|
||||
# define SSL_TICKET_EMPTY 3
|
||||
/* the ticket couldn't be decrypted */
|
||||
# define SSL_TICKET_NO_DECRYPT 4
|
||||
/* a ticket was successfully decrypted */
|
||||
# define SSL_TICKET_SUCCESS 5
|
||||
/* same as above but the ticket needs to be renewed */
|
||||
# define SSL_TICKET_SUCCESS_RENEW 6
|
||||
|
||||
/* Return codes for the decrypt session ticket callback */
|
||||
typedef int SSL_TICKET_RETURN;
|
||||
|
||||
/* An error occurred */
|
||||
#define SSL_TICKET_RETURN_ABORT 0
|
||||
/* Do not use the ticket, do not send a renewed ticket to the client */
|
||||
#define SSL_TICKET_RETURN_IGNORE 1
|
||||
/* Do not use the ticket, send a renewed ticket to the client */
|
||||
#define SSL_TICKET_RETURN_IGNORE_RENEW 2
|
||||
/* Use the ticket, do not send a renewed ticket to the client */
|
||||
#define SSL_TICKET_RETURN_USE 3
|
||||
/* Use the ticket, send a renewed ticket to the client */
|
||||
#define SSL_TICKET_RETURN_USE_RENEW 4
|
||||
|
||||
typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg);
|
||||
typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss,
|
||||
const unsigned char *keyname,
|
||||
size_t keyname_length,
|
||||
SSL_TICKET_STATUS status,
|
||||
void *arg);
|
||||
int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx,
|
||||
SSL_CTX_generate_session_ticket_fn gen_cb,
|
||||
SSL_CTX_decrypt_session_ticket_fn dec_cb,
|
||||
void *arg);
|
||||
int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len);
|
||||
int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len);
|
||||
|
||||
typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us);
|
||||
|
||||
void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb);
|
||||
|
||||
|
||||
typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg);
|
||||
void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
|
||||
SSL_allow_early_data_cb_fn cb,
|
||||
void *arg);
|
||||
void SSL_set_allow_early_data_cb(SSL *s,
|
||||
SSL_allow_early_data_cb_fn cb,
|
||||
void *arg);
|
||||
|
||||
/* store the default cipher strings inside the library */
|
||||
const char *OSSL_default_cipher_list(void);
|
||||
const char *OSSL_default_ciphersuites(void);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
@@ -160,10 +160,10 @@ extern const OSSL_DISPATCH sm4128ofb128_functions[];
|
||||
extern const OSSL_DISPATCH sm4128cfb128_functions[];
|
||||
#endif /* OPENSSL_NO_SM4 */
|
||||
|
||||
#ifndef OPENSSL_NO_DES
|
||||
extern const OSSL_DISPATCH tdes_ede3_ecb_functions[];
|
||||
extern const OSSL_DISPATCH tdes_ede3_cbc_functions[];
|
||||
|
||||
#ifndef FIPS_MODE
|
||||
# ifndef FIPS_MODE
|
||||
extern const OSSL_DISPATCH tdes_ede3_ofb_functions[];
|
||||
extern const OSSL_DISPATCH tdes_ede3_cfb_functions[];
|
||||
extern const OSSL_DISPATCH tdes_ede3_cfb8_functions[];
|
||||
@@ -176,7 +176,15 @@ extern const OSSL_DISPATCH tdes_ede2_cfb_functions[];
|
||||
|
||||
extern const OSSL_DISPATCH tdes_desx_cbc_functions[];
|
||||
extern const OSSL_DISPATCH tdes_wrap_cbc_functions[];
|
||||
#endif /* FIPS_MODE */
|
||||
|
||||
extern const OSSL_DISPATCH des_ecb_functions[];
|
||||
extern const OSSL_DISPATCH des_cbc_functions[];
|
||||
extern const OSSL_DISPATCH des_ofb64_functions[];
|
||||
extern const OSSL_DISPATCH des_cfb64_functions[];
|
||||
extern const OSSL_DISPATCH des_cfb1_functions[];
|
||||
extern const OSSL_DISPATCH des_cfb8_functions[];
|
||||
# endif /* FIPS_MODE */
|
||||
#endif /* OPENSSL_NO_DES */
|
||||
|
||||
/* MACs */
|
||||
extern const OSSL_DISPATCH blake2bmac_functions[];
|
||||
|
||||
@@ -4,7 +4,8 @@ IF[{- !$disabled{des} -}]
|
||||
SOURCE[../../../libcrypto]=\
|
||||
cipher_tdes_default.c cipher_tdes_default_hw.c \
|
||||
cipher_tdes_wrap.c cipher_tdes_wrap_hw.c \
|
||||
cipher_desx.c cipher_desx_hw.c
|
||||
cipher_desx.c cipher_desx_hw.c \
|
||||
cipher_des.c cipher_des_hw.c
|
||||
ENDIF
|
||||
|
||||
IF[{- !$disabled{aria} -}]
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include "cipher_locl.h"
|
||||
#include "cipher_des.h"
|
||||
#include "internal/rand_int.h"
|
||||
#include "internal/provider_algs.h"
|
||||
#include "internal/providercommonerr.h"
|
||||
|
||||
/* TODO(3.0) Figure out what flags need to be here */
|
||||
#define DES_FLAGS (EVP_CIPH_RAND_KEY)
|
||||
|
||||
static OSSL_OP_cipher_freectx_fn des_freectx;
|
||||
static OSSL_OP_cipher_encrypt_init_fn des_einit;
|
||||
static OSSL_OP_cipher_decrypt_init_fn des_dinit;
|
||||
static OSSL_OP_cipher_get_ctx_params_fn des_get_ctx_params;
|
||||
static OSSL_OP_cipher_gettable_ctx_params_fn des_gettable_ctx_params;
|
||||
|
||||
static void *des_newctx(void *provctx, size_t kbits, size_t blkbits,
|
||||
size_t ivbits, unsigned int mode, uint64_t flags,
|
||||
const PROV_CIPHER_HW *hw)
|
||||
{
|
||||
PROV_DES_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx));
|
||||
|
||||
if (ctx != NULL)
|
||||
cipher_generic_initkey(ctx, kbits, blkbits, ivbits, mode, flags, hw,
|
||||
provctx);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void des_freectx(void *vctx)
|
||||
{
|
||||
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||
|
||||
OPENSSL_clear_free(ctx, sizeof(*ctx));
|
||||
}
|
||||
|
||||
static int des_init(void *vctx, const unsigned char *key, size_t keylen,
|
||||
const unsigned char *iv, size_t ivlen, int enc)
|
||||
{
|
||||
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||
|
||||
ctx->enc = enc;
|
||||
|
||||
if (iv != NULL) {
|
||||
if (ivlen != ctx->ivlen) {
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IVLEN);
|
||||
return 0;
|
||||
}
|
||||
memcpy(ctx->iv, iv, ivlen);
|
||||
}
|
||||
|
||||
if (key != NULL) {
|
||||
if (keylen != ctx->keylen) {
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEYLEN);
|
||||
return 0;
|
||||
}
|
||||
return ctx->hw->init(ctx, key, keylen);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int des_einit(void *vctx, const unsigned char *key, size_t keylen,
|
||||
const unsigned char *iv, size_t ivlen)
|
||||
{
|
||||
return des_init(vctx, key, keylen, iv, ivlen, 1);
|
||||
}
|
||||
|
||||
static int des_dinit(void *vctx, const unsigned char *key, size_t keylen,
|
||||
const unsigned char *iv, size_t ivlen)
|
||||
{
|
||||
return des_init(vctx, key, keylen, iv, ivlen, 0);
|
||||
}
|
||||
|
||||
static int des_generatekey(PROV_CIPHER_CTX *ctx, void *ptr)
|
||||
{
|
||||
|
||||
DES_cblock *deskey = ptr;
|
||||
size_t kl = ctx->keylen;
|
||||
|
||||
if (kl == 0 || rand_priv_bytes_ex(ctx->libctx, ptr, kl) <= 0)
|
||||
return 0;
|
||||
DES_set_odd_parity(deskey);
|
||||
return 1;
|
||||
}
|
||||
|
||||
CIPHER_DEFAULT_GETTABLE_CTX_PARAMS_START(des)
|
||||
OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_RANDOM_KEY, NULL, 0),
|
||||
CIPHER_DEFAULT_GETTABLE_CTX_PARAMS_END(des)
|
||||
|
||||
static int des_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||
{
|
||||
PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
|
||||
OSSL_PARAM *p;
|
||||
|
||||
if (!cipher_generic_get_ctx_params(vctx, params))
|
||||
return 0;
|
||||
|
||||
p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_RANDOM_KEY);
|
||||
if (p != NULL && !des_generatekey(ctx, p->data)) {
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_GENERATE_KEY);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define IMPLEMENT_des_cipher(type, lcmode, UCMODE, flags, \
|
||||
kbits, blkbits, ivbits, block) \
|
||||
static OSSL_OP_cipher_newctx_fn type##_##lcmode##_newctx; \
|
||||
static void *des_##lcmode##_newctx(void *provctx) \
|
||||
{ \
|
||||
return des_newctx(provctx, kbits, blkbits, ivbits, \
|
||||
EVP_CIPH_##UCMODE##_MODE, flags, \
|
||||
PROV_CIPHER_HW_des_##lcmode()); \
|
||||
} \
|
||||
static OSSL_OP_cipher_get_params_fn des_##lcmode##_get_params; \
|
||||
static int des_##lcmode##_get_params(OSSL_PARAM params[]) \
|
||||
{ \
|
||||
return cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, flags, \
|
||||
kbits, blkbits, ivbits); \
|
||||
} \
|
||||
const OSSL_DISPATCH des_##lcmode##_functions[] = { \
|
||||
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))des_einit }, \
|
||||
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))des_dinit }, \
|
||||
{ OSSL_FUNC_CIPHER_UPDATE, \
|
||||
(void (*)(void))cipher_generic_##block##_update }, \
|
||||
{ OSSL_FUNC_CIPHER_FINAL, (void (*)(void))cipher_generic_##block##_final },\
|
||||
{ OSSL_FUNC_CIPHER_CIPHER, (void (*)(void))cipher_generic_cipher }, \
|
||||
{ OSSL_FUNC_CIPHER_NEWCTX, \
|
||||
(void (*)(void))des_##lcmode##_newctx }, \
|
||||
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))des_freectx }, \
|
||||
{ OSSL_FUNC_CIPHER_GET_PARAMS, \
|
||||
(void (*)(void))des_##lcmode##_get_params }, \
|
||||
{ OSSL_FUNC_CIPHER_GETTABLE_PARAMS, \
|
||||
(void (*)(void))cipher_generic_gettable_params }, \
|
||||
{ OSSL_FUNC_CIPHER_GET_CTX_PARAMS, (void (*)(void))des_get_ctx_params }, \
|
||||
{ OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS, \
|
||||
(void (*)(void))des_gettable_ctx_params }, \
|
||||
{ OSSL_FUNC_CIPHER_SET_CTX_PARAMS, \
|
||||
(void (*)(void))cipher_generic_set_ctx_params }, \
|
||||
{ OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS, \
|
||||
(void (*)(void))cipher_generic_settable_ctx_params }, \
|
||||
{ 0, NULL } \
|
||||
}
|
||||
|
||||
/* des_ecb_functions */
|
||||
IMPLEMENT_des_cipher(des, ecb, ECB, DES_FLAGS, 64, 64, 0, block);
|
||||
/* des_cbc_functions */
|
||||
IMPLEMENT_des_cipher(des, cbc, CBC, DES_FLAGS, 64, 64, 64, block);
|
||||
/* des_ofb64_functions */
|
||||
IMPLEMENT_des_cipher(des, ofb64, OFB, DES_FLAGS, 64, 8, 64, stream);
|
||||
/* des_cfb64_functions */
|
||||
IMPLEMENT_des_cipher(des, cfb64, CFB, DES_FLAGS, 64, 8, 64, stream);
|
||||
/* des_cfb1_functions */
|
||||
IMPLEMENT_des_cipher(des, cfb1, CFB, DES_FLAGS, 64, 8, 64, stream);
|
||||
/* des_cfb8_functions */
|
||||
IMPLEMENT_des_cipher(des, cfb8, CFB, DES_FLAGS, 64, 8, 64, stream);
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <openssl/des.h>
|
||||
|
||||
/* TODO(3.0) Figure out what flags need to be here */
|
||||
#define TDES_FLAGS (EVP_CIPH_RAND_KEY)
|
||||
|
||||
typedef struct prov_des_ctx_st {
|
||||
PROV_CIPHER_CTX base; /* Must be first */
|
||||
union {
|
||||
OSSL_UNION_ALIGN;
|
||||
DES_key_schedule ks;
|
||||
} dks;
|
||||
union {
|
||||
void (*cbc) (const void *, void *, size_t,
|
||||
const DES_key_schedule *, unsigned char *);
|
||||
} dstream;
|
||||
|
||||
} PROV_DES_CTX;
|
||||
|
||||
const PROV_CIPHER_HW *PROV_CIPHER_HW_des_cbc(void);
|
||||
const PROV_CIPHER_HW *PROV_CIPHER_HW_des_ecb(void);
|
||||
const PROV_CIPHER_HW *PROV_CIPHER_HW_des_ofb64(void);
|
||||
const PROV_CIPHER_HW *PROV_CIPHER_HW_des_cfb64(void);
|
||||
const PROV_CIPHER_HW *PROV_CIPHER_HW_des_cfb1(void);
|
||||
const PROV_CIPHER_HW *PROV_CIPHER_HW_des_cfb8(void);
|
||||
@@ -0,0 +1,173 @@
|
||||
/*
|
||||
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include "internal/ciphers/ciphercommon.h"
|
||||
#include "cipher_des.h"
|
||||
|
||||
static int cipher_hw_des_initkey(PROV_CIPHER_CTX *ctx,
|
||||
const unsigned char *key, size_t keylen)
|
||||
{
|
||||
PROV_DES_CTX *dctx = (PROV_DES_CTX *)ctx;
|
||||
DES_cblock *deskey = (DES_cblock *)key;
|
||||
DES_key_schedule *ks = &dctx->dks.ks;
|
||||
|
||||
dctx->dstream.cbc = NULL;
|
||||
#if defined(SPARC_DES_CAPABLE)
|
||||
if (SPARC_DES_CAPABLE) {
|
||||
if (ctx->mode == EVP_CIPH_CBC_MODE) {
|
||||
des_t4_key_expand(&deskey[0], ks);
|
||||
dctx->dstream.cbc = ctx->enc ? des_t4_cbc_encrypt :
|
||||
des_t4_cbc_decrypt;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
DES_set_key_unchecked(deskey, ks);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int cipher_hw_des_ecb_cipher(PROV_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
size_t i, bl = ctx->blocksize;
|
||||
DES_key_schedule *key = &(((PROV_DES_CTX *)ctx)->dks.ks);
|
||||
|
||||
if (len < bl)
|
||||
return 1;
|
||||
for (i = 0, len -= bl; i <= len; i += bl)
|
||||
DES_ecb_encrypt((const_DES_cblock *)(in + i),
|
||||
(const_DES_cblock *)(out + i), key, ctx->enc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int cipher_hw_des_cbc_cipher(PROV_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
DES_key_schedule *key = &(((PROV_DES_CTX *)ctx)->dks.ks);
|
||||
|
||||
while (len >= MAXCHUNK) {
|
||||
DES_ncbc_encrypt(in, out, MAXCHUNK, key, (DES_cblock *)ctx->iv,
|
||||
ctx->enc);
|
||||
len -= MAXCHUNK;
|
||||
in += MAXCHUNK;
|
||||
out += MAXCHUNK;
|
||||
}
|
||||
if (len > 0)
|
||||
DES_ncbc_encrypt(in, out, (long)len, key, (DES_cblock *)ctx->iv,
|
||||
ctx->enc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int cipher_hw_des_ofb64_cipher(PROV_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
int num = ctx->num;
|
||||
DES_key_schedule *key = &(((PROV_DES_CTX *)ctx)->dks.ks);
|
||||
|
||||
while (len >= MAXCHUNK) {
|
||||
DES_ofb64_encrypt(in, out, MAXCHUNK, key, (DES_cblock *)ctx->iv, &num);
|
||||
len -= MAXCHUNK;
|
||||
in += MAXCHUNK;
|
||||
out += MAXCHUNK;
|
||||
}
|
||||
if (len > 0) {
|
||||
DES_ofb64_encrypt(in, out, (long)len, key, (DES_cblock *)ctx->iv, &num);
|
||||
}
|
||||
ctx->num = num;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int cipher_hw_des_cfb64_cipher(PROV_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t len)
|
||||
{
|
||||
size_t chunk = MAXCHUNK;
|
||||
DES_key_schedule *key = &(((PROV_DES_CTX *)ctx)->dks.ks);
|
||||
int num = ctx->num;
|
||||
|
||||
if (len < chunk)
|
||||
chunk = len;
|
||||
while (len > 0 && len >= chunk) {
|
||||
DES_cfb64_encrypt(in, out, (long)chunk, key, (DES_cblock *)ctx->iv,
|
||||
&num, ctx->enc);
|
||||
len -= chunk;
|
||||
in += chunk;
|
||||
out += chunk;
|
||||
if (len < chunk)
|
||||
chunk = len;
|
||||
}
|
||||
ctx->num = num;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Although we have a CFB-r implementation for DES, it doesn't pack the right
|
||||
* way, so wrap it here
|
||||
*/
|
||||
static int cipher_hw_des_cfb1_cipher(PROV_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t inl)
|
||||
{
|
||||
size_t n, chunk = MAXCHUNK / 8;
|
||||
DES_key_schedule *key = &(((PROV_DES_CTX *)ctx)->dks.ks);
|
||||
unsigned char c[1], d[1];
|
||||
|
||||
if (inl < chunk)
|
||||
chunk = inl;
|
||||
|
||||
while (inl && inl >= chunk) {
|
||||
for (n = 0; n < chunk * 8; ++n) {
|
||||
c[0] = (in[n / 8] & (1 << (7 - n % 8))) ? 0x80 : 0;
|
||||
DES_cfb_encrypt(c, d, 1, 1, key, (DES_cblock *)ctx->iv, ctx->enc);
|
||||
out[n / 8] =
|
||||
(out[n / 8] & ~(0x80 >> (unsigned int)(n % 8))) |
|
||||
((d[0] & 0x80) >> (unsigned int)(n % 8));
|
||||
}
|
||||
inl -= chunk;
|
||||
in += chunk;
|
||||
out += chunk;
|
||||
if (inl < chunk)
|
||||
chunk = inl;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int cipher_hw_des_cfb8_cipher(PROV_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t inl)
|
||||
{
|
||||
DES_key_schedule *key = &(((PROV_DES_CTX *)ctx)->dks.ks);
|
||||
|
||||
while (inl >= MAXCHUNK) {
|
||||
DES_cfb_encrypt(in, out, 8, (long)MAXCHUNK, key,
|
||||
(DES_cblock *)ctx->iv, ctx->enc);
|
||||
inl -= MAXCHUNK;
|
||||
in += MAXCHUNK;
|
||||
out += MAXCHUNK;
|
||||
}
|
||||
if (inl > 0)
|
||||
DES_cfb_encrypt(in, out, 8, (long)inl, key,
|
||||
(DES_cblock *)ctx->iv, ctx->enc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define PROV_CIPHER_HW_des_mode(mode) \
|
||||
static const PROV_CIPHER_HW des_##mode = { \
|
||||
cipher_hw_des_initkey, \
|
||||
cipher_hw_des_##mode##_cipher \
|
||||
}; \
|
||||
const PROV_CIPHER_HW *PROV_CIPHER_HW_des_##mode(void) \
|
||||
{ \
|
||||
return &des_##mode; \
|
||||
}
|
||||
|
||||
PROV_CIPHER_HW_des_mode(ecb)
|
||||
PROV_CIPHER_HW_des_mode(cbc)
|
||||
PROV_CIPHER_HW_des_mode(ofb64)
|
||||
PROV_CIPHER_HW_des_mode(cfb64)
|
||||
PROV_CIPHER_HW_des_mode(cfb1)
|
||||
PROV_CIPHER_HW_des_mode(cfb8)
|
||||
@@ -199,6 +199,12 @@ static const OSSL_ALGORITHM deflt_ciphers[] = {
|
||||
{ "DES-EDE-CFB", "default=yes", tdes_ede2_cfb_functions },
|
||||
{ "DESX-CBC", "default=yes", tdes_desx_cbc_functions },
|
||||
{ "id-smime-alg-CMS3DESwrap", "default=yes", tdes_wrap_cbc_functions },
|
||||
{ "DES-ECB", "default=yes", des_ecb_functions },
|
||||
{ "DES-CBC", "default=yes", des_cbc_functions },
|
||||
{ "DES-OFB", "default=yes", des_ofb64_functions },
|
||||
{ "DES-CFB", "default=yes", des_cfb64_functions },
|
||||
{ "DES-CFB1", "default=yes", des_cfb1_functions },
|
||||
{ "DES-CFB8", "default=yes", des_cfb8_functions },
|
||||
#endif /* OPENSSL_NO_DES */
|
||||
#ifndef OPENSSL_NO_BF
|
||||
{ "BF-ECB", "default=yes", blowfish128ecb_functions },
|
||||
|
||||
+4913
@@ -0,0 +1,4913 @@
|
||||
/*
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
|
||||
* Copyright 2005 Nokia. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/objects.h>
|
||||
#include "internal/nelem.h"
|
||||
#include "ssl_locl.h"
|
||||
#include <openssl/md5.h>
|
||||
#include <openssl/dh.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/trace.h>
|
||||
#include "internal/cryptlib.h"
|
||||
|
||||
#define TLS13_NUM_CIPHERS OSSL_NELEM(tls13_ciphers)
|
||||
#define SSL3_NUM_CIPHERS OSSL_NELEM(ssl3_ciphers)
|
||||
#define SSL3_NUM_SCSVS OSSL_NELEM(ssl3_scsvs)
|
||||
|
||||
/* TLSv1.3 downgrade protection sentinel values */
|
||||
const unsigned char tls11downgrade[] = {
|
||||
0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x00
|
||||
};
|
||||
const unsigned char tls12downgrade[] = {
|
||||
0x44, 0x4f, 0x57, 0x4e, 0x47, 0x52, 0x44, 0x01
|
||||
};
|
||||
|
||||
/* The list of available TLSv1.3 ciphers */
|
||||
static SSL_CIPHER tls13_ciphers[] = {
|
||||
{
|
||||
1,
|
||||
TLS1_3_RFC_AES_128_GCM_SHA256,
|
||||
TLS1_3_RFC_AES_128_GCM_SHA256,
|
||||
TLS1_3_CK_AES_128_GCM_SHA256,
|
||||
SSL_kANY,
|
||||
SSL_aANY,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_3_VERSION, TLS1_3_VERSION,
|
||||
0, 0,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256,
|
||||
128,
|
||||
128,
|
||||
}, {
|
||||
1,
|
||||
TLS1_3_RFC_AES_256_GCM_SHA384,
|
||||
TLS1_3_RFC_AES_256_GCM_SHA384,
|
||||
TLS1_3_CK_AES_256_GCM_SHA384,
|
||||
SSL_kANY,
|
||||
SSL_aANY,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_3_VERSION, TLS1_3_VERSION,
|
||||
0, 0,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
|
||||
{
|
||||
1,
|
||||
TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
|
||||
TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
|
||||
TLS1_3_CK_CHACHA20_POLY1305_SHA256,
|
||||
SSL_kANY,
|
||||
SSL_aANY,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_3_VERSION, TLS1_3_VERSION,
|
||||
0, 0,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
1,
|
||||
TLS1_3_RFC_AES_128_CCM_SHA256,
|
||||
TLS1_3_RFC_AES_128_CCM_SHA256,
|
||||
TLS1_3_CK_AES_128_CCM_SHA256,
|
||||
SSL_kANY,
|
||||
SSL_aANY,
|
||||
SSL_AES128CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_3_VERSION, TLS1_3_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256,
|
||||
128,
|
||||
128,
|
||||
}, {
|
||||
1,
|
||||
TLS1_3_RFC_AES_128_CCM_8_SHA256,
|
||||
TLS1_3_RFC_AES_128_CCM_8_SHA256,
|
||||
TLS1_3_CK_AES_128_CCM_8_SHA256,
|
||||
SSL_kANY,
|
||||
SSL_aANY,
|
||||
SSL_AES128CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_3_VERSION, TLS1_3_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256,
|
||||
128,
|
||||
128,
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* The list of available ciphers, mostly organized into the following
|
||||
* groups:
|
||||
* Always there
|
||||
* EC
|
||||
* PSK
|
||||
* SRP (within that: RSA EC PSK)
|
||||
* Cipher families: Chacha/poly, Camellia, Gost, IDEA, SEED
|
||||
* Weak ciphers
|
||||
*/
|
||||
static SSL_CIPHER ssl3_ciphers[] = {
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_NULL_MD5,
|
||||
SSL3_RFC_RSA_NULL_MD5,
|
||||
SSL3_CK_RSA_NULL_MD5,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_eNULL,
|
||||
SSL_MD5,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_NULL_SHA,
|
||||
SSL3_RFC_RSA_NULL_SHA,
|
||||
SSL3_CK_RSA_NULL_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_DES_192_CBC3_SHA,
|
||||
SSL3_RFC_RSA_DES_192_CBC3_SHA,
|
||||
SSL3_CK_RSA_DES_192_CBC3_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA,
|
||||
SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA,
|
||||
SSL3_CK_DHE_DSS_DES_192_CBC3_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA,
|
||||
SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA,
|
||||
SSL3_CK_DHE_RSA_DES_192_CBC3_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_ADH_DES_192_CBC_SHA,
|
||||
SSL3_RFC_ADH_DES_192_CBC_SHA,
|
||||
SSL3_CK_ADH_DES_192_CBC_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_128_SHA,
|
||||
TLS1_RFC_RSA_WITH_AES_128_SHA,
|
||||
TLS1_CK_RSA_WITH_AES_128_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
|
||||
TLS1_RFC_DHE_DSS_WITH_AES_128_SHA,
|
||||
TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_128_SHA,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_AES_128_SHA,
|
||||
TLS1_RFC_ADH_WITH_AES_128_SHA,
|
||||
TLS1_CK_ADH_WITH_AES_128_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_256_SHA,
|
||||
TLS1_RFC_RSA_WITH_AES_256_SHA,
|
||||
TLS1_CK_RSA_WITH_AES_256_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
|
||||
TLS1_RFC_DHE_DSS_WITH_AES_256_SHA,
|
||||
TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_256_SHA,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_AES_256_SHA,
|
||||
TLS1_RFC_ADH_WITH_AES_256_SHA,
|
||||
TLS1_CK_ADH_WITH_AES_256_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_NULL_SHA256,
|
||||
TLS1_RFC_RSA_WITH_NULL_SHA256,
|
||||
TLS1_CK_RSA_WITH_NULL_SHA256,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_eNULL,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_RFC_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_RSA_WITH_AES_128_SHA256,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_256_SHA256,
|
||||
TLS1_RFC_RSA_WITH_AES_256_SHA256,
|
||||
TLS1_CK_RSA_WITH_AES_256_SHA256,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
|
||||
TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256,
|
||||
TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
|
||||
TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256,
|
||||
TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_AES256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_AES_128_SHA256,
|
||||
TLS1_RFC_ADH_WITH_AES_128_SHA256,
|
||||
TLS1_CK_ADH_WITH_AES_128_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_AES_256_SHA256,
|
||||
TLS1_RFC_ADH_WITH_AES_256_SHA256,
|
||||
TLS1_CK_ADH_WITH_AES_256_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_128_CCM,
|
||||
TLS1_RFC_RSA_WITH_AES_128_CCM,
|
||||
TLS1_CK_RSA_WITH_AES_128_CCM,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES128CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_256_CCM,
|
||||
TLS1_RFC_RSA_WITH_AES_256_CCM,
|
||||
TLS1_CK_RSA_WITH_AES_256_CCM,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES256CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_128_CCM,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_128_CCM,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_128_CCM,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_256_CCM,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_256_CCM,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_256_CCM,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_128_CCM_8,
|
||||
TLS1_RFC_RSA_WITH_AES_128_CCM_8,
|
||||
TLS1_CK_RSA_WITH_AES_128_CCM_8,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES128CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_AES_256_CCM_8,
|
||||
TLS1_RFC_RSA_WITH_AES_256_CCM_8,
|
||||
TLS1_CK_RSA_WITH_AES_256_CCM_8,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_AES256CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8,
|
||||
TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8,
|
||||
TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_128_CCM,
|
||||
TLS1_RFC_PSK_WITH_AES_128_CCM,
|
||||
TLS1_CK_PSK_WITH_AES_128_CCM,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_256_CCM,
|
||||
TLS1_RFC_PSK_WITH_AES_256_CCM,
|
||||
TLS1_CK_PSK_WITH_AES_256_CCM,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_128_CCM,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_128_CCM,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_128_CCM,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_256_CCM,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_256_CCM,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_256_CCM,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_128_CCM_8,
|
||||
TLS1_RFC_PSK_WITH_AES_128_CCM_8,
|
||||
TLS1_CK_PSK_WITH_AES_128_CCM_8,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_256_CCM_8,
|
||||
TLS1_RFC_PSK_WITH_AES_256_CCM_8,
|
||||
TLS1_CK_PSK_WITH_AES_256_CCM_8,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES128CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES256CCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES128CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES256CCM8,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA,
|
||||
TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
|
||||
TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
|
||||
TLS1_RFC_ECDH_anon_WITH_NULL_SHA,
|
||||
TLS1_CK_ECDH_anon_WITH_NULL_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aNULL,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
|
||||
TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA,
|
||||
TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aNULL,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aNULL,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_NULL_SHA,
|
||||
TLS1_RFC_PSK_WITH_NULL_SHA,
|
||||
TLS1_CK_PSK_WITH_NULL_SHA,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_NULL_SHA,
|
||||
TLS1_RFC_DHE_PSK_WITH_NULL_SHA,
|
||||
TLS1_CK_DHE_PSK_WITH_NULL_SHA,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_NULL_SHA,
|
||||
TLS1_RFC_RSA_PSK_WITH_NULL_SHA,
|
||||
TLS1_CK_RSA_PSK_WITH_NULL_SHA,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_PSK_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_PSK_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256,
|
||||
TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_AES128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384,
|
||||
TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_AES256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_CK_PSK_WITH_AES_128_CBC_SHA256,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_CK_PSK_WITH_AES_256_CBC_SHA384,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_NULL_SHA256,
|
||||
TLS1_RFC_PSK_WITH_NULL_SHA256,
|
||||
TLS1_CK_PSK_WITH_NULL_SHA256,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_NULL_SHA384,
|
||||
TLS1_RFC_PSK_WITH_NULL_SHA384,
|
||||
TLS1_CK_PSK_WITH_NULL_SHA384,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_NULL_SHA256,
|
||||
TLS1_RFC_DHE_PSK_WITH_NULL_SHA256,
|
||||
TLS1_CK_DHE_PSK_WITH_NULL_SHA256,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_NULL_SHA384,
|
||||
TLS1_RFC_DHE_PSK_WITH_NULL_SHA384,
|
||||
TLS1_CK_DHE_PSK_WITH_NULL_SHA384,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_NULL_SHA256,
|
||||
TLS1_RFC_RSA_PSK_WITH_NULL_SHA256,
|
||||
TLS1_CK_RSA_PSK_WITH_NULL_SHA256,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_eNULL,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_NULL_SHA384,
|
||||
TLS1_RFC_RSA_PSK_WITH_NULL_SHA384,
|
||||
TLS1_CK_RSA_PSK_WITH_NULL_SHA384,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_eNULL,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_AES256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA,
|
||||
TLS1_CK_ECDHE_PSK_WITH_NULL_SHA,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256,
|
||||
TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384,
|
||||
TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_eNULL,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_STRONG_NONE | SSL_FIPS,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
|
||||
# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aSRP,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aRSA,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aDSS,
|
||||
SSL_3DES,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
112,
|
||||
168,
|
||||
},
|
||||
# endif
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aSRP,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aRSA,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aDSS,
|
||||
SSL_AES128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aSRP,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aRSA,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
|
||||
TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
|
||||
TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
|
||||
SSL_kSRP,
|
||||
SSL_aDSS,
|
||||
SSL_AES256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
|
||||
#if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305)
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
|
||||
TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305,
|
||||
TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305,
|
||||
TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_RFC_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_CK_PSK_WITH_CHACHA20_POLY1305,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305,
|
||||
TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_CHACHA20POLY1305,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
#endif /* !defined(OPENSSL_NO_CHACHA) &&
|
||||
* !defined(OPENSSL_NO_POLY1305) */
|
||||
|
||||
#ifndef OPENSSL_NO_CAMELLIA
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kEDH,
|
||||
SSL_aDSS,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kEDH,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kEDH,
|
||||
SSL_aNULL,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
SSL_kEDH,
|
||||
SSL_aDSS,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
SSL_kEDH,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
SSL_kEDH,
|
||||
SSL_aNULL,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA384,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA384,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CAMELLIA128,
|
||||
SSL_SHA256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_CAMELLIA256,
|
||||
SSL_SHA384,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
#endif /* OPENSSL_NO_CAMELLIA */
|
||||
|
||||
#ifndef OPENSSL_NO_GOST
|
||||
{
|
||||
1,
|
||||
"GOST2001-GOST89-GOST89",
|
||||
"TLS_GOSTR341001_WITH_28147_CNT_IMIT",
|
||||
0x3000081,
|
||||
SSL_kGOST,
|
||||
SSL_aGOST01,
|
||||
SSL_eGOST2814789CNT,
|
||||
SSL_GOST89MAC,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94 | TLS1_STREAM_MAC,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
"GOST2001-NULL-GOST94",
|
||||
"TLS_GOSTR341001_WITH_NULL_GOSTR3411",
|
||||
0x3000083,
|
||||
SSL_kGOST,
|
||||
SSL_aGOST01,
|
||||
SSL_eNULL,
|
||||
SSL_GOST94,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_STRONG_NONE,
|
||||
SSL_HANDSHAKE_MAC_GOST94 | TLS1_PRF_GOST94,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
{
|
||||
1,
|
||||
"GOST2012-GOST8912-GOST8912",
|
||||
NULL,
|
||||
0x0300ff85,
|
||||
SSL_kGOST,
|
||||
SSL_aGOST12 | SSL_aGOST01,
|
||||
SSL_eGOST2814789CNT12,
|
||||
SSL_GOST89MAC12,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
"GOST2012-NULL-GOST12",
|
||||
NULL,
|
||||
0x0300ff87,
|
||||
SSL_kGOST,
|
||||
SSL_aGOST12 | SSL_aGOST01,
|
||||
SSL_eNULL,
|
||||
SSL_GOST12_256,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_STRONG_NONE,
|
||||
SSL_HANDSHAKE_MAC_GOST12_256 | TLS1_PRF_GOST12_256 | TLS1_STREAM_MAC,
|
||||
0,
|
||||
0,
|
||||
},
|
||||
#endif /* OPENSSL_NO_GOST */
|
||||
|
||||
#ifndef OPENSSL_NO_IDEA
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_IDEA_128_SHA,
|
||||
SSL3_RFC_RSA_IDEA_128_SHA,
|
||||
SSL3_CK_RSA_IDEA_128_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_IDEA,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_1_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_SEED
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_SEED_SHA,
|
||||
TLS1_RFC_RSA_WITH_SEED_SHA,
|
||||
TLS1_CK_RSA_WITH_SEED_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_SEED,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
|
||||
TLS1_RFC_DHE_DSS_WITH_SEED_SHA,
|
||||
TLS1_CK_DHE_DSS_WITH_SEED_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_SEED,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
|
||||
TLS1_RFC_DHE_RSA_WITH_SEED_SHA,
|
||||
TLS1_CK_DHE_RSA_WITH_SEED_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_SEED,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ADH_WITH_SEED_SHA,
|
||||
TLS1_RFC_ADH_WITH_SEED_SHA,
|
||||
TLS1_CK_ADH_WITH_SEED_SHA,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_SEED,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_BAD_VER, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
#endif /* OPENSSL_NO_SEED */
|
||||
|
||||
#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_RC4_128_MD5,
|
||||
SSL3_RFC_RSA_RC4_128_MD5,
|
||||
SSL3_CK_RSA_RC4_128_MD5,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_RC4,
|
||||
SSL_MD5,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_RSA_RC4_128_SHA,
|
||||
SSL3_RFC_RSA_RC4_128_SHA,
|
||||
SSL3_CK_RSA_RC4_128_SHA,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
SSL3_TXT_ADH_RC4_128_MD5,
|
||||
SSL3_RFC_ADH_RC4_128_MD5,
|
||||
SSL3_CK_ADH_RC4_128_MD5,
|
||||
SSL_kDHE,
|
||||
SSL_aNULL,
|
||||
SSL_RC4,
|
||||
SSL_MD5,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA,
|
||||
SSL_kECDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
|
||||
TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA,
|
||||
TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aNULL,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA,
|
||||
TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
TLS1_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_RFC_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_CK_PSK_WITH_RC4_128_SHA,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_CK_RSA_PSK_WITH_RC4_128_SHA,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA,
|
||||
TLS1_CK_DHE_PSK_WITH_RC4_128_SHA,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_RC4,
|
||||
SSL_SHA1,
|
||||
SSL3_VERSION, TLS1_2_VERSION,
|
||||
0, 0,
|
||||
SSL_NOT_DEFAULT | SSL_MEDIUM,
|
||||
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
#endif /* OPENSSL_NO_WEAK_SSL_CIPHERS */
|
||||
|
||||
#ifndef OPENSSL_NO_ARIA
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kRSA,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kDHE,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kDHE,
|
||||
SSL_aDSS,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aECDSA,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kECDHE,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kPSK,
|
||||
SSL_aPSK,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kDHEPSK,
|
||||
SSL_aPSK,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA128GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256,
|
||||
128,
|
||||
128,
|
||||
},
|
||||
{
|
||||
1,
|
||||
TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
SSL_kRSAPSK,
|
||||
SSL_aRSA,
|
||||
SSL_ARIA256GCM,
|
||||
SSL_AEAD,
|
||||
TLS1_2_VERSION, TLS1_2_VERSION,
|
||||
DTLS1_2_VERSION, DTLS1_2_VERSION,
|
||||
SSL_NOT_DEFAULT | SSL_HIGH,
|
||||
SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384,
|
||||
256,
|
||||
256,
|
||||
},
|
||||
#endif /* OPENSSL_NO_ARIA */
|
||||
};
|
||||
|
||||
/*
|
||||
* The list of known Signalling Cipher-Suite Value "ciphers", non-valid
|
||||
* values stuffed into the ciphers field of the wire protocol for signalling
|
||||
* purposes.
|
||||
*/
|
||||
static SSL_CIPHER ssl3_scsvs[] = {
|
||||
{
|
||||
0,
|
||||
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
|
||||
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
|
||||
SSL3_CK_SCSV,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
},
|
||||
{
|
||||
0,
|
||||
"TLS_FALLBACK_SCSV",
|
||||
"TLS_FALLBACK_SCSV",
|
||||
SSL3_CK_FALLBACK_SCSV,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
},
|
||||
};
|
||||
|
||||
static int cipher_compare(const void *a, const void *b)
|
||||
{
|
||||
const SSL_CIPHER *ap = (const SSL_CIPHER *)a;
|
||||
const SSL_CIPHER *bp = (const SSL_CIPHER *)b;
|
||||
|
||||
if (ap->id == bp->id)
|
||||
return 0;
|
||||
return ap->id < bp->id ? -1 : 1;
|
||||
}
|
||||
|
||||
void ssl_sort_cipher_list(void)
|
||||
{
|
||||
qsort(tls13_ciphers, TLS13_NUM_CIPHERS, sizeof(tls13_ciphers[0]),
|
||||
cipher_compare);
|
||||
qsort(ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(ssl3_ciphers[0]),
|
||||
cipher_compare);
|
||||
qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare);
|
||||
}
|
||||
|
||||
static int ssl_undefined_function_1(SSL *ssl, unsigned char *r, size_t s,
|
||||
const char * t, size_t u,
|
||||
const unsigned char * v, size_t w, int x)
|
||||
{
|
||||
(void)r;
|
||||
(void)s;
|
||||
(void)t;
|
||||
(void)u;
|
||||
(void)v;
|
||||
(void)w;
|
||||
(void)x;
|
||||
return ssl_undefined_function(ssl);
|
||||
}
|
||||
|
||||
const SSL3_ENC_METHOD SSLv3_enc_data = {
|
||||
ssl3_enc,
|
||||
n_ssl3_mac,
|
||||
ssl3_setup_key_block,
|
||||
ssl3_generate_master_secret,
|
||||
ssl3_change_cipher_state,
|
||||
ssl3_final_finish_mac,
|
||||
SSL3_MD_CLIENT_FINISHED_CONST, 4,
|
||||
SSL3_MD_SERVER_FINISHED_CONST, 4,
|
||||
ssl3_alert_code,
|
||||
ssl_undefined_function_1,
|
||||
0,
|
||||
ssl3_set_handshake_header,
|
||||
tls_close_construct_packet,
|
||||
ssl3_handshake_write
|
||||
};
|
||||
|
||||
long ssl3_default_timeout(void)
|
||||
{
|
||||
/*
|
||||
* 2 hours, the 24 hours mentioned in the SSLv3 spec is way too long for
|
||||
* http, the cache would over fill
|
||||
*/
|
||||
return (60 * 60 * 2);
|
||||
}
|
||||
|
||||
int ssl3_num_ciphers(void)
|
||||
{
|
||||
return SSL3_NUM_CIPHERS;
|
||||
}
|
||||
|
||||
const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
|
||||
{
|
||||
if (u < SSL3_NUM_CIPHERS)
|
||||
return &(ssl3_ciphers[SSL3_NUM_CIPHERS - 1 - u]);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int ssl3_set_handshake_header(SSL *s, WPACKET *pkt, int htype)
|
||||
{
|
||||
/* No header in the event of a CCS */
|
||||
if (htype == SSL3_MT_CHANGE_CIPHER_SPEC)
|
||||
return 1;
|
||||
|
||||
/* Set the content type and 3 bytes for the message len */
|
||||
if (!WPACKET_put_bytes_u8(pkt, htype)
|
||||
|| !WPACKET_start_sub_packet_u24(pkt))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ssl3_handshake_write(SSL *s)
|
||||
{
|
||||
return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
|
||||
}
|
||||
|
||||
int ssl3_new(SSL *s)
|
||||
{
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
if (!SSL_SRP_CTX_init(s))
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
if (!s->method->ssl_clear(s))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void ssl3_free(SSL *s)
|
||||
{
|
||||
if (s == NULL)
|
||||
return;
|
||||
|
||||
ssl3_cleanup_key_block(s);
|
||||
|
||||
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
|
||||
EVP_PKEY_free(s->s3.peer_tmp);
|
||||
s->s3.peer_tmp = NULL;
|
||||
EVP_PKEY_free(s->s3.tmp.pkey);
|
||||
s->s3.tmp.pkey = NULL;
|
||||
#endif
|
||||
|
||||
OPENSSL_free(s->s3.tmp.ctype);
|
||||
sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
|
||||
OPENSSL_free(s->s3.tmp.ciphers_raw);
|
||||
OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
|
||||
OPENSSL_free(s->s3.tmp.peer_sigalgs);
|
||||
OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
|
||||
ssl3_free_digest_list(s);
|
||||
OPENSSL_free(s->s3.alpn_selected);
|
||||
OPENSSL_free(s->s3.alpn_proposed);
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
SSL_SRP_CTX_free(s);
|
||||
#endif
|
||||
memset(&s->s3, 0, sizeof(s->s3));
|
||||
}
|
||||
|
||||
int ssl3_clear(SSL *s)
|
||||
{
|
||||
ssl3_cleanup_key_block(s);
|
||||
OPENSSL_free(s->s3.tmp.ctype);
|
||||
sk_X509_NAME_pop_free(s->s3.tmp.peer_ca_names, X509_NAME_free);
|
||||
OPENSSL_free(s->s3.tmp.ciphers_raw);
|
||||
OPENSSL_clear_free(s->s3.tmp.pms, s->s3.tmp.pmslen);
|
||||
OPENSSL_free(s->s3.tmp.peer_sigalgs);
|
||||
OPENSSL_free(s->s3.tmp.peer_cert_sigalgs);
|
||||
|
||||
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
|
||||
EVP_PKEY_free(s->s3.tmp.pkey);
|
||||
EVP_PKEY_free(s->s3.peer_tmp);
|
||||
#endif /* !OPENSSL_NO_EC */
|
||||
|
||||
ssl3_free_digest_list(s);
|
||||
|
||||
OPENSSL_free(s->s3.alpn_selected);
|
||||
OPENSSL_free(s->s3.alpn_proposed);
|
||||
|
||||
/* NULL/zero-out everything in the s3 struct */
|
||||
memset(&s->s3, 0, sizeof(s->s3));
|
||||
|
||||
if (!ssl_free_wbio_buffer(s))
|
||||
return 0;
|
||||
|
||||
s->version = SSL3_VERSION;
|
||||
|
||||
#if !defined(OPENSSL_NO_NEXTPROTONEG)
|
||||
OPENSSL_free(s->ext.npn);
|
||||
s->ext.npn = NULL;
|
||||
s->ext.npn_len = 0;
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
static char *srp_password_from_info_cb(SSL *s, void *arg)
|
||||
{
|
||||
return OPENSSL_strdup(s->srp_ctx.info);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
|
||||
|
||||
long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
switch (cmd) {
|
||||
case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
|
||||
break;
|
||||
case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
|
||||
ret = s->s3.num_renegotiations;
|
||||
break;
|
||||
case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
|
||||
ret = s->s3.num_renegotiations;
|
||||
s->s3.num_renegotiations = 0;
|
||||
break;
|
||||
case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
|
||||
ret = s->s3.total_renegotiations;
|
||||
break;
|
||||
case SSL_CTRL_GET_FLAGS:
|
||||
ret = (int)(s->s3.flags);
|
||||
break;
|
||||
#ifndef OPENSSL_NO_DH
|
||||
case SSL_CTRL_SET_TMP_DH:
|
||||
{
|
||||
DH *dh = (DH *)parg;
|
||||
EVP_PKEY *pkdh = NULL;
|
||||
if (dh == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
pkdh = ssl_dh_to_pkey(dh);
|
||||
if (pkdh == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
if (!ssl_security(s, SSL_SECOP_TMP_DH,
|
||||
EVP_PKEY_security_bits(pkdh), 0, pkdh)) {
|
||||
SSLerr(SSL_F_SSL3_CTRL, SSL_R_DH_KEY_TOO_SMALL);
|
||||
EVP_PKEY_free(pkdh);
|
||||
return 0;
|
||||
}
|
||||
EVP_PKEY_free(s->cert->dh_tmp);
|
||||
s->cert->dh_tmp = pkdh;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case SSL_CTRL_SET_TMP_DH_CB:
|
||||
{
|
||||
SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return ret;
|
||||
}
|
||||
case SSL_CTRL_SET_DH_AUTO:
|
||||
s->cert->dh_tmp_auto = larg;
|
||||
return 1;
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_EC
|
||||
case SSL_CTRL_SET_TMP_ECDH:
|
||||
{
|
||||
const EC_GROUP *group = NULL;
|
||||
int nid;
|
||||
|
||||
if (parg == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
group = EC_KEY_get0_group((const EC_KEY *)parg);
|
||||
if (group == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTRL, EC_R_MISSING_PARAMETERS);
|
||||
return 0;
|
||||
}
|
||||
nid = EC_GROUP_get_curve_name(group);
|
||||
if (nid == NID_undef)
|
||||
return 0;
|
||||
return tls1_set_groups(&s->ext.supportedgroups,
|
||||
&s->ext.supportedgroups_len,
|
||||
&nid, 1);
|
||||
}
|
||||
break;
|
||||
#endif /* !OPENSSL_NO_EC */
|
||||
case SSL_CTRL_SET_TLSEXT_HOSTNAME:
|
||||
/*
|
||||
* TODO(OpenSSL1.2)
|
||||
* This API is only used for a client to set what SNI it will request
|
||||
* from the server, but we currently allow it to be used on servers
|
||||
* as well, which is a programming error. Currently we just clear
|
||||
* the field in SSL_do_handshake() for server SSLs, but when we can
|
||||
* make ABI-breaking changes, we may want to make use of this API
|
||||
* an error on server SSLs.
|
||||
*/
|
||||
if (larg == TLSEXT_NAMETYPE_host_name) {
|
||||
size_t len;
|
||||
|
||||
OPENSSL_free(s->ext.hostname);
|
||||
s->ext.hostname = NULL;
|
||||
|
||||
ret = 1;
|
||||
if (parg == NULL)
|
||||
break;
|
||||
len = strlen((char *)parg);
|
||||
if (len == 0 || len > TLSEXT_MAXLEN_host_name) {
|
||||
SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
|
||||
return 0;
|
||||
}
|
||||
if ((s->ext.hostname = OPENSSL_strdup((char *)parg)) == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTRL, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
SSLerr(SSL_F_SSL3_CTRL, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
|
||||
s->ext.debug_arg = parg;
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
|
||||
ret = s->ext.status_type;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
|
||||
s->ext.status_type = larg;
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
|
||||
*(STACK_OF(X509_EXTENSION) **)parg = s->ext.ocsp.exts;
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
|
||||
s->ext.ocsp.exts = parg;
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
|
||||
*(STACK_OF(OCSP_RESPID) **)parg = s->ext.ocsp.ids;
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
|
||||
s->ext.ocsp.ids = parg;
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
|
||||
*(unsigned char **)parg = s->ext.ocsp.resp;
|
||||
if (s->ext.ocsp.resp_len == 0
|
||||
|| s->ext.ocsp.resp_len > LONG_MAX)
|
||||
return -1;
|
||||
return (long)s->ext.ocsp.resp_len;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
|
||||
OPENSSL_free(s->ext.ocsp.resp);
|
||||
s->ext.ocsp.resp = parg;
|
||||
s->ext.ocsp.resp_len = larg;
|
||||
ret = 1;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_CHAIN:
|
||||
if (larg)
|
||||
return ssl_cert_set1_chain(s, NULL, (STACK_OF(X509) *)parg);
|
||||
else
|
||||
return ssl_cert_set0_chain(s, NULL, (STACK_OF(X509) *)parg);
|
||||
|
||||
case SSL_CTRL_CHAIN_CERT:
|
||||
if (larg)
|
||||
return ssl_cert_add1_chain_cert(s, NULL, (X509 *)parg);
|
||||
else
|
||||
return ssl_cert_add0_chain_cert(s, NULL, (X509 *)parg);
|
||||
|
||||
case SSL_CTRL_GET_CHAIN_CERTS:
|
||||
*(STACK_OF(X509) **)parg = s->cert->key->chain;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SELECT_CURRENT_CERT:
|
||||
return ssl_cert_select_current(s->cert, (X509 *)parg);
|
||||
|
||||
case SSL_CTRL_SET_CURRENT_CERT:
|
||||
if (larg == SSL_CERT_SET_SERVER) {
|
||||
const SSL_CIPHER *cipher;
|
||||
if (!s->server)
|
||||
return 0;
|
||||
cipher = s->s3.tmp.new_cipher;
|
||||
if (cipher == NULL)
|
||||
return 0;
|
||||
/*
|
||||
* No certificate for unauthenticated ciphersuites or using SRP
|
||||
* authentication
|
||||
*/
|
||||
if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
|
||||
return 2;
|
||||
if (s->s3.tmp.cert == NULL)
|
||||
return 0;
|
||||
s->cert->key = s->s3.tmp.cert;
|
||||
return 1;
|
||||
}
|
||||
return ssl_cert_set_current(s->cert, larg);
|
||||
|
||||
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
|
||||
case SSL_CTRL_GET_GROUPS:
|
||||
{
|
||||
uint16_t *clist;
|
||||
size_t clistlen;
|
||||
|
||||
if (!s->session)
|
||||
return 0;
|
||||
clist = s->ext.peer_supportedgroups;
|
||||
clistlen = s->ext.peer_supportedgroups_len;
|
||||
if (parg) {
|
||||
size_t i;
|
||||
int *cptr = parg;
|
||||
|
||||
for (i = 0; i < clistlen; i++) {
|
||||
const TLS_GROUP_INFO *cinf = tls1_group_id_lookup(clist[i]);
|
||||
|
||||
if (cinf != NULL)
|
||||
cptr[i] = cinf->nid;
|
||||
else
|
||||
cptr[i] = TLSEXT_nid_unknown | clist[i];
|
||||
}
|
||||
}
|
||||
return (int)clistlen;
|
||||
}
|
||||
|
||||
case SSL_CTRL_SET_GROUPS:
|
||||
return tls1_set_groups(&s->ext.supportedgroups,
|
||||
&s->ext.supportedgroups_len, parg, larg);
|
||||
|
||||
case SSL_CTRL_SET_GROUPS_LIST:
|
||||
return tls1_set_groups_list(&s->ext.supportedgroups,
|
||||
&s->ext.supportedgroups_len, parg);
|
||||
|
||||
case SSL_CTRL_GET_SHARED_GROUP:
|
||||
{
|
||||
uint16_t id = tls1_shared_group(s, larg);
|
||||
|
||||
if (larg != -1) {
|
||||
const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
|
||||
|
||||
return ginf == NULL ? 0 : ginf->nid;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
#endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
|
||||
|
||||
case SSL_CTRL_SET_SIGALGS:
|
||||
return tls1_set_sigalgs(s->cert, parg, larg, 0);
|
||||
|
||||
case SSL_CTRL_SET_SIGALGS_LIST:
|
||||
return tls1_set_sigalgs_list(s->cert, parg, 0);
|
||||
|
||||
case SSL_CTRL_SET_CLIENT_SIGALGS:
|
||||
return tls1_set_sigalgs(s->cert, parg, larg, 1);
|
||||
|
||||
case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
|
||||
return tls1_set_sigalgs_list(s->cert, parg, 1);
|
||||
|
||||
case SSL_CTRL_GET_CLIENT_CERT_TYPES:
|
||||
{
|
||||
const unsigned char **pctype = parg;
|
||||
if (s->server || !s->s3.tmp.cert_req)
|
||||
return 0;
|
||||
if (pctype)
|
||||
*pctype = s->s3.tmp.ctype;
|
||||
return s->s3.tmp.ctype_len;
|
||||
}
|
||||
|
||||
case SSL_CTRL_SET_CLIENT_CERT_TYPES:
|
||||
if (!s->server)
|
||||
return 0;
|
||||
return ssl3_set_req_cert_type(s->cert, parg, larg);
|
||||
|
||||
case SSL_CTRL_BUILD_CERT_CHAIN:
|
||||
return ssl_build_cert_chain(s, NULL, larg);
|
||||
|
||||
case SSL_CTRL_SET_VERIFY_CERT_STORE:
|
||||
return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
|
||||
|
||||
case SSL_CTRL_SET_CHAIN_CERT_STORE:
|
||||
return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
|
||||
|
||||
case SSL_CTRL_GET_PEER_SIGNATURE_NID:
|
||||
if (s->s3.tmp.peer_sigalg == NULL)
|
||||
return 0;
|
||||
*(int *)parg = s->s3.tmp.peer_sigalg->hash;
|
||||
return 1;
|
||||
|
||||
case SSL_CTRL_GET_SIGNATURE_NID:
|
||||
if (s->s3.tmp.sigalg == NULL)
|
||||
return 0;
|
||||
*(int *)parg = s->s3.tmp.sigalg->hash;
|
||||
return 1;
|
||||
|
||||
case SSL_CTRL_GET_PEER_TMP_KEY:
|
||||
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
|
||||
if (s->session == NULL || s->s3.peer_tmp == NULL) {
|
||||
return 0;
|
||||
} else {
|
||||
EVP_PKEY_up_ref(s->s3.peer_tmp);
|
||||
*(EVP_PKEY **)parg = s->s3.peer_tmp;
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
case SSL_CTRL_GET_TMP_KEY:
|
||||
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
|
||||
if (s->session == NULL || s->s3.tmp.pkey == NULL) {
|
||||
return 0;
|
||||
} else {
|
||||
EVP_PKEY_up_ref(s->s3.tmp.pkey);
|
||||
*(EVP_PKEY **)parg = s->s3.tmp.pkey;
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
case SSL_CTRL_GET_EC_POINT_FORMATS:
|
||||
{
|
||||
const unsigned char **pformat = parg;
|
||||
|
||||
if (s->ext.peer_ecpointformats == NULL)
|
||||
return 0;
|
||||
*pformat = s->ext.peer_ecpointformats;
|
||||
return (int)s->ext.peer_ecpointformats_len;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
switch (cmd) {
|
||||
#ifndef OPENSSL_NO_DH
|
||||
case SSL_CTRL_SET_TMP_DH_CB:
|
||||
{
|
||||
s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
|
||||
s->ext.debug_cb = (void (*)(SSL *, int, int,
|
||||
const unsigned char *, int, void *))fp;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
|
||||
{
|
||||
s->not_resumable_session_cb = (int (*)(SSL *, int))fp;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
|
||||
{
|
||||
switch (cmd) {
|
||||
#ifndef OPENSSL_NO_DH
|
||||
case SSL_CTRL_SET_TMP_DH:
|
||||
{
|
||||
DH *dh = (DH *)parg;
|
||||
EVP_PKEY *pkdh = NULL;
|
||||
if (dh == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
pkdh = ssl_dh_to_pkey(dh);
|
||||
if (pkdh == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
if (!ssl_ctx_security(ctx, SSL_SECOP_TMP_DH,
|
||||
EVP_PKEY_security_bits(pkdh), 0, pkdh)) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_DH_KEY_TOO_SMALL);
|
||||
EVP_PKEY_free(pkdh);
|
||||
return 0;
|
||||
}
|
||||
EVP_PKEY_free(ctx->cert->dh_tmp);
|
||||
ctx->cert->dh_tmp = pkdh;
|
||||
return 1;
|
||||
}
|
||||
case SSL_CTRL_SET_TMP_DH_CB:
|
||||
{
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return 0;
|
||||
}
|
||||
case SSL_CTRL_SET_DH_AUTO:
|
||||
ctx->cert->dh_tmp_auto = larg;
|
||||
return 1;
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_EC
|
||||
case SSL_CTRL_SET_TMP_ECDH:
|
||||
{
|
||||
const EC_GROUP *group = NULL;
|
||||
int nid;
|
||||
|
||||
if (parg == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
group = EC_KEY_get0_group((const EC_KEY *)parg);
|
||||
if (group == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, EC_R_MISSING_PARAMETERS);
|
||||
return 0;
|
||||
}
|
||||
nid = EC_GROUP_get_curve_name(group);
|
||||
if (nid == NID_undef)
|
||||
return 0;
|
||||
return tls1_set_groups(&ctx->ext.supportedgroups,
|
||||
&ctx->ext.supportedgroups_len,
|
||||
&nid, 1);
|
||||
}
|
||||
#endif /* !OPENSSL_NO_EC */
|
||||
case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
|
||||
ctx->ext.servername_arg = parg;
|
||||
break;
|
||||
case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
|
||||
case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
|
||||
{
|
||||
unsigned char *keys = parg;
|
||||
long tick_keylen = (sizeof(ctx->ext.tick_key_name) +
|
||||
sizeof(ctx->ext.secure->tick_hmac_key) +
|
||||
sizeof(ctx->ext.secure->tick_aes_key));
|
||||
if (keys == NULL)
|
||||
return tick_keylen;
|
||||
if (larg != tick_keylen) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_TICKET_KEYS_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) {
|
||||
memcpy(ctx->ext.tick_key_name, keys,
|
||||
sizeof(ctx->ext.tick_key_name));
|
||||
memcpy(ctx->ext.secure->tick_hmac_key,
|
||||
keys + sizeof(ctx->ext.tick_key_name),
|
||||
sizeof(ctx->ext.secure->tick_hmac_key));
|
||||
memcpy(ctx->ext.secure->tick_aes_key,
|
||||
keys + sizeof(ctx->ext.tick_key_name) +
|
||||
sizeof(ctx->ext.secure->tick_hmac_key),
|
||||
sizeof(ctx->ext.secure->tick_aes_key));
|
||||
} else {
|
||||
memcpy(keys, ctx->ext.tick_key_name,
|
||||
sizeof(ctx->ext.tick_key_name));
|
||||
memcpy(keys + sizeof(ctx->ext.tick_key_name),
|
||||
ctx->ext.secure->tick_hmac_key,
|
||||
sizeof(ctx->ext.secure->tick_hmac_key));
|
||||
memcpy(keys + sizeof(ctx->ext.tick_key_name) +
|
||||
sizeof(ctx->ext.secure->tick_hmac_key),
|
||||
ctx->ext.secure->tick_aes_key,
|
||||
sizeof(ctx->ext.secure->tick_aes_key));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
case SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE:
|
||||
return ctx->ext.status_type;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
|
||||
ctx->ext.status_type = larg;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
|
||||
ctx->ext.status_arg = parg;
|
||||
return 1;
|
||||
|
||||
case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG:
|
||||
*(void**)parg = ctx->ext.status_arg;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB:
|
||||
*(int (**)(SSL*, void*))parg = ctx->ext.status_cb;
|
||||
break;
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME:
|
||||
ctx->srp_ctx.srp_Mask |= SSL_kSRP;
|
||||
OPENSSL_free(ctx->srp_ctx.login);
|
||||
ctx->srp_ctx.login = NULL;
|
||||
if (parg == NULL)
|
||||
break;
|
||||
if (strlen((const char *)parg) > 255 || strlen((const char *)parg) < 1) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, SSL_R_INVALID_SRP_USERNAME);
|
||||
return 0;
|
||||
}
|
||||
if ((ctx->srp_ctx.login = OPENSSL_strdup((char *)parg)) == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD:
|
||||
ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
|
||||
srp_password_from_info_cb;
|
||||
if (ctx->srp_ctx.info != NULL)
|
||||
OPENSSL_free(ctx->srp_ctx.info);
|
||||
if ((ctx->srp_ctx.info = BUF_strdup((char *)parg)) == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case SSL_CTRL_SET_SRP_ARG:
|
||||
ctx->srp_ctx.srp_Mask |= SSL_kSRP;
|
||||
ctx->srp_ctx.SRP_cb_arg = parg;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH:
|
||||
ctx->srp_ctx.strength = larg;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
|
||||
case SSL_CTRL_SET_GROUPS:
|
||||
return tls1_set_groups(&ctx->ext.supportedgroups,
|
||||
&ctx->ext.supportedgroups_len,
|
||||
parg, larg);
|
||||
|
||||
case SSL_CTRL_SET_GROUPS_LIST:
|
||||
return tls1_set_groups_list(&ctx->ext.supportedgroups,
|
||||
&ctx->ext.supportedgroups_len,
|
||||
parg);
|
||||
#endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
|
||||
|
||||
case SSL_CTRL_SET_SIGALGS:
|
||||
return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
|
||||
|
||||
case SSL_CTRL_SET_SIGALGS_LIST:
|
||||
return tls1_set_sigalgs_list(ctx->cert, parg, 0);
|
||||
|
||||
case SSL_CTRL_SET_CLIENT_SIGALGS:
|
||||
return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
|
||||
|
||||
case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
|
||||
return tls1_set_sigalgs_list(ctx->cert, parg, 1);
|
||||
|
||||
case SSL_CTRL_SET_CLIENT_CERT_TYPES:
|
||||
return ssl3_set_req_cert_type(ctx->cert, parg, larg);
|
||||
|
||||
case SSL_CTRL_BUILD_CERT_CHAIN:
|
||||
return ssl_build_cert_chain(NULL, ctx, larg);
|
||||
|
||||
case SSL_CTRL_SET_VERIFY_CERT_STORE:
|
||||
return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
|
||||
|
||||
case SSL_CTRL_SET_CHAIN_CERT_STORE:
|
||||
return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
|
||||
|
||||
/* A Thawte special :-) */
|
||||
case SSL_CTRL_EXTRA_CHAIN_CERT:
|
||||
if (ctx->extra_certs == NULL) {
|
||||
if ((ctx->extra_certs = sk_X509_new_null()) == NULL) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (!sk_X509_push(ctx->extra_certs, (X509 *)parg)) {
|
||||
SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
|
||||
if (ctx->extra_certs == NULL && larg == 0)
|
||||
*(STACK_OF(X509) **)parg = ctx->cert->key->chain;
|
||||
else
|
||||
*(STACK_OF(X509) **)parg = ctx->extra_certs;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
|
||||
sk_X509_pop_free(ctx->extra_certs, X509_free);
|
||||
ctx->extra_certs = NULL;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_CHAIN:
|
||||
if (larg)
|
||||
return ssl_cert_set1_chain(NULL, ctx, (STACK_OF(X509) *)parg);
|
||||
else
|
||||
return ssl_cert_set0_chain(NULL, ctx, (STACK_OF(X509) *)parg);
|
||||
|
||||
case SSL_CTRL_CHAIN_CERT:
|
||||
if (larg)
|
||||
return ssl_cert_add1_chain_cert(NULL, ctx, (X509 *)parg);
|
||||
else
|
||||
return ssl_cert_add0_chain_cert(NULL, ctx, (X509 *)parg);
|
||||
|
||||
case SSL_CTRL_GET_CHAIN_CERTS:
|
||||
*(STACK_OF(X509) **)parg = ctx->cert->key->chain;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SELECT_CURRENT_CERT:
|
||||
return ssl_cert_select_current(ctx->cert, (X509 *)parg);
|
||||
|
||||
case SSL_CTRL_SET_CURRENT_CERT:
|
||||
return ssl_cert_set_current(ctx->cert, larg);
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
|
||||
{
|
||||
switch (cmd) {
|
||||
#ifndef OPENSSL_NO_DH
|
||||
case SSL_CTRL_SET_TMP_DH_CB:
|
||||
{
|
||||
ctx->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
|
||||
ctx->ext.servername_cb = (int (*)(SSL *, int *, void *))fp;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
|
||||
ctx->ext.status_cb = (int (*)(SSL *, void *))fp;
|
||||
break;
|
||||
|
||||
case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
|
||||
ctx->ext.ticket_key_cb = (int (*)(SSL *, unsigned char *,
|
||||
unsigned char *,
|
||||
EVP_CIPHER_CTX *,
|
||||
HMAC_CTX *, int))fp;
|
||||
break;
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
case SSL_CTRL_SET_SRP_VERIFY_PARAM_CB:
|
||||
ctx->srp_ctx.srp_Mask |= SSL_kSRP;
|
||||
ctx->srp_ctx.SRP_verify_param_callback = (int (*)(SSL *, void *))fp;
|
||||
break;
|
||||
case SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB:
|
||||
ctx->srp_ctx.srp_Mask |= SSL_kSRP;
|
||||
ctx->srp_ctx.TLS_ext_srp_username_callback =
|
||||
(int (*)(SSL *, int *, void *))fp;
|
||||
break;
|
||||
case SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB:
|
||||
ctx->srp_ctx.srp_Mask |= SSL_kSRP;
|
||||
ctx->srp_ctx.SRP_give_srp_client_pwd_callback =
|
||||
(char *(*)(SSL *, void *))fp;
|
||||
break;
|
||||
#endif
|
||||
case SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB:
|
||||
{
|
||||
ctx->not_resumable_session_cb = (int (*)(SSL *, int))fp;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
const SSL_CIPHER *ssl3_get_cipher_by_id(uint32_t id)
|
||||
{
|
||||
SSL_CIPHER c;
|
||||
const SSL_CIPHER *cp;
|
||||
|
||||
c.id = id;
|
||||
cp = OBJ_bsearch_ssl_cipher_id(&c, tls13_ciphers, TLS13_NUM_CIPHERS);
|
||||
if (cp != NULL)
|
||||
return cp;
|
||||
cp = OBJ_bsearch_ssl_cipher_id(&c, ssl3_ciphers, SSL3_NUM_CIPHERS);
|
||||
if (cp != NULL)
|
||||
return cp;
|
||||
return OBJ_bsearch_ssl_cipher_id(&c, ssl3_scsvs, SSL3_NUM_SCSVS);
|
||||
}
|
||||
|
||||
const SSL_CIPHER *ssl3_get_cipher_by_std_name(const char *stdname)
|
||||
{
|
||||
SSL_CIPHER *c = NULL, *tbl;
|
||||
SSL_CIPHER *alltabs[] = {tls13_ciphers, ssl3_ciphers};
|
||||
size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS};
|
||||
|
||||
/* this is not efficient, necessary to optimize this? */
|
||||
for (j = 0; j < OSSL_NELEM(alltabs); j++) {
|
||||
for (i = 0, tbl = alltabs[j]; i < tblsize[j]; i++, tbl++) {
|
||||
if (tbl->stdname == NULL)
|
||||
continue;
|
||||
if (strcmp(stdname, tbl->stdname) == 0) {
|
||||
c = tbl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (c == NULL) {
|
||||
tbl = ssl3_scsvs;
|
||||
for (i = 0; i < SSL3_NUM_SCSVS; i++, tbl++) {
|
||||
if (strcmp(stdname, tbl->stdname) == 0) {
|
||||
c = tbl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function needs to check if the ciphers required are actually
|
||||
* available
|
||||
*/
|
||||
const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
|
||||
{
|
||||
return ssl3_get_cipher_by_id(SSL3_CK_CIPHERSUITE_FLAG
|
||||
| ((uint32_t)p[0] << 8L)
|
||||
| (uint32_t)p[1]);
|
||||
}
|
||||
|
||||
int ssl3_put_cipher_by_char(const SSL_CIPHER *c, WPACKET *pkt, size_t *len)
|
||||
{
|
||||
if ((c->id & 0xff000000) != SSL3_CK_CIPHERSUITE_FLAG) {
|
||||
*len = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!WPACKET_put_bytes_u16(pkt, c->id & 0xffff))
|
||||
return 0;
|
||||
|
||||
*len = 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* ssl3_choose_cipher - choose a cipher from those offered by the client
|
||||
* @s: SSL connection
|
||||
* @clnt: ciphers offered by the client
|
||||
* @srvr: ciphers enabled on the server?
|
||||
*
|
||||
* Returns the selected cipher or NULL when no common ciphers.
|
||||
*/
|
||||
const SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
|
||||
STACK_OF(SSL_CIPHER) *srvr)
|
||||
{
|
||||
const SSL_CIPHER *c, *ret = NULL;
|
||||
STACK_OF(SSL_CIPHER) *prio, *allow;
|
||||
int i, ii, ok, prefer_sha256 = 0;
|
||||
unsigned long alg_k = 0, alg_a = 0, mask_k = 0, mask_a = 0;
|
||||
const EVP_MD *mdsha256 = EVP_sha256();
|
||||
#ifndef OPENSSL_NO_CHACHA
|
||||
STACK_OF(SSL_CIPHER) *prio_chacha = NULL;
|
||||
#endif
|
||||
|
||||
/* Let's see which ciphers we can support */
|
||||
|
||||
/*
|
||||
* Do not set the compare functions, because this may lead to a
|
||||
* reordering by "id". We want to keep the original ordering. We may pay
|
||||
* a price in performance during sk_SSL_CIPHER_find(), but would have to
|
||||
* pay with the price of sk_SSL_CIPHER_dup().
|
||||
*/
|
||||
|
||||
OSSL_TRACE_BEGIN(TLS_CIPHER) {
|
||||
BIO_printf(trc_out, "Server has %d from %p:\n",
|
||||
sk_SSL_CIPHER_num(srvr), (void *)srvr);
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(srvr); ++i) {
|
||||
c = sk_SSL_CIPHER_value(srvr, i);
|
||||
BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
|
||||
}
|
||||
BIO_printf(trc_out, "Client sent %d from %p:\n",
|
||||
sk_SSL_CIPHER_num(clnt), (void *)clnt);
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(clnt); ++i) {
|
||||
c = sk_SSL_CIPHER_value(clnt, i);
|
||||
BIO_printf(trc_out, "%p:%s\n", (void *)c, c->name);
|
||||
}
|
||||
} OSSL_TRACE_END(TLS_CIPHER);
|
||||
|
||||
/* SUITE-B takes precedence over server preference and ChaCha priortiy */
|
||||
if (tls1_suiteb(s)) {
|
||||
prio = srvr;
|
||||
allow = clnt;
|
||||
} else if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
|
||||
prio = srvr;
|
||||
allow = clnt;
|
||||
#ifndef OPENSSL_NO_CHACHA
|
||||
/* If ChaCha20 is at the top of the client preference list,
|
||||
and there are ChaCha20 ciphers in the server list, then
|
||||
temporarily prioritize all ChaCha20 ciphers in the servers list. */
|
||||
if (s->options & SSL_OP_PRIORITIZE_CHACHA && sk_SSL_CIPHER_num(clnt) > 0) {
|
||||
c = sk_SSL_CIPHER_value(clnt, 0);
|
||||
if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
|
||||
/* ChaCha20 is client preferred, check server... */
|
||||
int num = sk_SSL_CIPHER_num(srvr);
|
||||
int found = 0;
|
||||
for (i = 0; i < num; i++) {
|
||||
c = sk_SSL_CIPHER_value(srvr, i);
|
||||
if (c->algorithm_enc == SSL_CHACHA20POLY1305) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
prio_chacha = sk_SSL_CIPHER_new_reserve(NULL, num);
|
||||
/* if reserve fails, then there's likely a memory issue */
|
||||
if (prio_chacha != NULL) {
|
||||
/* Put all ChaCha20 at the top, starting with the one we just found */
|
||||
sk_SSL_CIPHER_push(prio_chacha, c);
|
||||
for (i++; i < num; i++) {
|
||||
c = sk_SSL_CIPHER_value(srvr, i);
|
||||
if (c->algorithm_enc == SSL_CHACHA20POLY1305)
|
||||
sk_SSL_CIPHER_push(prio_chacha, c);
|
||||
}
|
||||
/* Pull in the rest */
|
||||
for (i = 0; i < num; i++) {
|
||||
c = sk_SSL_CIPHER_value(srvr, i);
|
||||
if (c->algorithm_enc != SSL_CHACHA20POLY1305)
|
||||
sk_SSL_CIPHER_push(prio_chacha, c);
|
||||
}
|
||||
prio = prio_chacha;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
# endif
|
||||
} else {
|
||||
prio = clnt;
|
||||
allow = srvr;
|
||||
}
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
int j;
|
||||
|
||||
/*
|
||||
* If we allow "old" style PSK callbacks, and we have no certificate (so
|
||||
* we're not going to succeed without a PSK anyway), and we're in
|
||||
* TLSv1.3 then the default hash for a PSK is SHA-256 (as per the
|
||||
* TLSv1.3 spec). Therefore we should prioritise ciphersuites using
|
||||
* that.
|
||||
*/
|
||||
if (s->psk_server_callback != NULL) {
|
||||
for (j = 0; j < SSL_PKEY_NUM && !ssl_has_cert(s, j); j++);
|
||||
if (j == SSL_PKEY_NUM) {
|
||||
/* There are no certificates */
|
||||
prefer_sha256 = 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
tls1_set_cert_validity(s);
|
||||
ssl_set_masks(s);
|
||||
}
|
||||
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
|
||||
c = sk_SSL_CIPHER_value(prio, i);
|
||||
|
||||
/* Skip ciphers not supported by the protocol version */
|
||||
if (!SSL_IS_DTLS(s) &&
|
||||
((s->version < c->min_tls) || (s->version > c->max_tls)))
|
||||
continue;
|
||||
if (SSL_IS_DTLS(s) &&
|
||||
(DTLS_VERSION_LT(s->version, c->min_dtls) ||
|
||||
DTLS_VERSION_GT(s->version, c->max_dtls)))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Since TLS 1.3 ciphersuites can be used with any auth or
|
||||
* key exchange scheme skip tests.
|
||||
*/
|
||||
if (!SSL_IS_TLS13(s)) {
|
||||
mask_k = s->s3.tmp.mask_k;
|
||||
mask_a = s->s3.tmp.mask_a;
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
if (s->srp_ctx.srp_Mask & SSL_kSRP) {
|
||||
mask_k |= SSL_kSRP;
|
||||
mask_a |= SSL_aSRP;
|
||||
}
|
||||
#endif
|
||||
|
||||
alg_k = c->algorithm_mkey;
|
||||
alg_a = c->algorithm_auth;
|
||||
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
/* with PSK there must be server callback set */
|
||||
if ((alg_k & SSL_PSK) && s->psk_server_callback == NULL)
|
||||
continue;
|
||||
#endif /* OPENSSL_NO_PSK */
|
||||
|
||||
ok = (alg_k & mask_k) && (alg_a & mask_a);
|
||||
OSSL_TRACE7(TLS_CIPHER,
|
||||
"%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",
|
||||
ok, alg_k, alg_a, mask_k, mask_a, (void *)c, c->name);
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
/*
|
||||
* if we are considering an ECC cipher suite that uses an ephemeral
|
||||
* EC key check it
|
||||
*/
|
||||
if (alg_k & SSL_kECDHE)
|
||||
ok = ok && tls1_check_ec_tmp_key(s, c->id);
|
||||
#endif /* OPENSSL_NO_EC */
|
||||
|
||||
if (!ok)
|
||||
continue;
|
||||
}
|
||||
ii = sk_SSL_CIPHER_find(allow, c);
|
||||
if (ii >= 0) {
|
||||
/* Check security callback permits this cipher */
|
||||
if (!ssl_security(s, SSL_SECOP_CIPHER_SHARED,
|
||||
c->strength_bits, 0, (void *)c))
|
||||
continue;
|
||||
#if !defined(OPENSSL_NO_EC)
|
||||
if ((alg_k & SSL_kECDHE) && (alg_a & SSL_aECDSA)
|
||||
&& s->s3.is_probably_safari) {
|
||||
if (!ret)
|
||||
ret = sk_SSL_CIPHER_value(allow, ii);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
if (prefer_sha256) {
|
||||
const SSL_CIPHER *tmp = sk_SSL_CIPHER_value(allow, ii);
|
||||
|
||||
if (ssl_md(tmp->algorithm2) == mdsha256) {
|
||||
ret = tmp;
|
||||
break;
|
||||
}
|
||||
if (ret == NULL)
|
||||
ret = tmp;
|
||||
continue;
|
||||
}
|
||||
ret = sk_SSL_CIPHER_value(allow, ii);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifndef OPENSSL_NO_CHACHA
|
||||
sk_SSL_CIPHER_free(prio_chacha);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ssl3_get_req_cert_type(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
uint32_t alg_k, alg_a = 0;
|
||||
|
||||
/* If we have custom certificate types set, use them */
|
||||
if (s->cert->ctype)
|
||||
return WPACKET_memcpy(pkt, s->cert->ctype, s->cert->ctype_len);
|
||||
/* Get mask of algorithms disabled by signature list */
|
||||
ssl_set_sig_mask(&alg_a, s, SSL_SECOP_SIGALG_MASK);
|
||||
|
||||
alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
|
||||
|
||||
#ifndef OPENSSL_NO_GOST
|
||||
if (s->version >= TLS1_VERSION && (alg_k & SSL_kGOST))
|
||||
return WPACKET_put_bytes_u8(pkt, TLS_CT_GOST01_SIGN)
|
||||
&& WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_SIGN)
|
||||
&& WPACKET_put_bytes_u8(pkt, TLS_CT_GOST12_512_SIGN);
|
||||
#endif
|
||||
|
||||
if ((s->version == SSL3_VERSION) && (alg_k & SSL_kDHE)) {
|
||||
#ifndef OPENSSL_NO_DH
|
||||
# ifndef OPENSSL_NO_RSA
|
||||
if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_EPHEMERAL_DH))
|
||||
return 0;
|
||||
# endif
|
||||
# ifndef OPENSSL_NO_DSA
|
||||
if (!WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_EPHEMERAL_DH))
|
||||
return 0;
|
||||
# endif
|
||||
#endif /* !OPENSSL_NO_DH */
|
||||
}
|
||||
#ifndef OPENSSL_NO_RSA
|
||||
if (!(alg_a & SSL_aRSA) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_RSA_SIGN))
|
||||
return 0;
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
if (!(alg_a & SSL_aDSS) && !WPACKET_put_bytes_u8(pkt, SSL3_CT_DSS_SIGN))
|
||||
return 0;
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_EC
|
||||
/*
|
||||
* ECDSA certs can be used with RSA cipher suites too so we don't
|
||||
* need to check for SSL_kECDH or SSL_kECDHE
|
||||
*/
|
||||
if (s->version >= TLS1_VERSION
|
||||
&& !(alg_a & SSL_aECDSA)
|
||||
&& !WPACKET_put_bytes_u8(pkt, TLS_CT_ECDSA_SIGN))
|
||||
return 0;
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
|
||||
{
|
||||
OPENSSL_free(c->ctype);
|
||||
c->ctype = NULL;
|
||||
c->ctype_len = 0;
|
||||
if (p == NULL || len == 0)
|
||||
return 1;
|
||||
if (len > 0xff)
|
||||
return 0;
|
||||
c->ctype = OPENSSL_memdup(p, len);
|
||||
if (c->ctype == NULL)
|
||||
return 0;
|
||||
c->ctype_len = len;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ssl3_shutdown(SSL *s)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Don't do anything much if we have not done the handshake or we don't
|
||||
* want to send messages :-)
|
||||
*/
|
||||
if (s->quiet_shutdown || SSL_in_before(s)) {
|
||||
s->shutdown = (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!(s->shutdown & SSL_SENT_SHUTDOWN)) {
|
||||
s->shutdown |= SSL_SENT_SHUTDOWN;
|
||||
ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_CLOSE_NOTIFY);
|
||||
/*
|
||||
* our shutdown alert has been sent now, and if it still needs to be
|
||||
* written, s->s3.alert_dispatch will be true
|
||||
*/
|
||||
if (s->s3.alert_dispatch)
|
||||
return -1; /* return WANT_WRITE */
|
||||
} else if (s->s3.alert_dispatch) {
|
||||
/* resend it if not sent */
|
||||
ret = s->method->ssl_dispatch_alert(s);
|
||||
if (ret == -1) {
|
||||
/*
|
||||
* we only get to return -1 here the 2nd/Nth invocation, we must
|
||||
* have already signalled return 0 upon a previous invocation,
|
||||
* return WANT_WRITE
|
||||
*/
|
||||
return ret;
|
||||
}
|
||||
} else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
|
||||
size_t readbytes;
|
||||
/*
|
||||
* If we are waiting for a close from our peer, we are closed
|
||||
*/
|
||||
s->method->ssl_read_bytes(s, 0, NULL, NULL, 0, 0, &readbytes);
|
||||
if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN)) {
|
||||
return -1; /* return WANT_READ */
|
||||
}
|
||||
}
|
||||
|
||||
if ((s->shutdown == (SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN)) &&
|
||||
!s->s3.alert_dispatch)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ssl3_write(SSL *s, const void *buf, size_t len, size_t *written)
|
||||
{
|
||||
clear_sys_error();
|
||||
if (s->s3.renegotiate)
|
||||
ssl3_renegotiate_check(s, 0);
|
||||
|
||||
return s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf, len,
|
||||
written);
|
||||
}
|
||||
|
||||
static int ssl3_read_internal(SSL *s, void *buf, size_t len, int peek,
|
||||
size_t *readbytes)
|
||||
{
|
||||
int ret;
|
||||
|
||||
clear_sys_error();
|
||||
if (s->s3.renegotiate)
|
||||
ssl3_renegotiate_check(s, 0);
|
||||
s->s3.in_read_app_data = 1;
|
||||
ret =
|
||||
s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf, len,
|
||||
peek, readbytes);
|
||||
if ((ret == -1) && (s->s3.in_read_app_data == 2)) {
|
||||
/*
|
||||
* ssl3_read_bytes decided to call s->handshake_func, which called
|
||||
* ssl3_read_bytes to read handshake data. However, ssl3_read_bytes
|
||||
* actually found application data and thinks that application data
|
||||
* makes sense here; so disable handshake processing and try to read
|
||||
* application data again.
|
||||
*/
|
||||
ossl_statem_set_in_handshake(s, 1);
|
||||
ret =
|
||||
s->method->ssl_read_bytes(s, SSL3_RT_APPLICATION_DATA, NULL, buf,
|
||||
len, peek, readbytes);
|
||||
ossl_statem_set_in_handshake(s, 0);
|
||||
} else
|
||||
s->s3.in_read_app_data = 0;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ssl3_read(SSL *s, void *buf, size_t len, size_t *readbytes)
|
||||
{
|
||||
return ssl3_read_internal(s, buf, len, 0, readbytes);
|
||||
}
|
||||
|
||||
int ssl3_peek(SSL *s, void *buf, size_t len, size_t *readbytes)
|
||||
{
|
||||
return ssl3_read_internal(s, buf, len, 1, readbytes);
|
||||
}
|
||||
|
||||
int ssl3_renegotiate(SSL *s)
|
||||
{
|
||||
if (s->handshake_func == NULL)
|
||||
return 1;
|
||||
|
||||
s->s3.renegotiate = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if we are waiting to do a renegotiation and if so whether now is a
|
||||
* good time to do it. If |initok| is true then we are being called from inside
|
||||
* the state machine so ignore the result of SSL_in_init(s). Otherwise we
|
||||
* should not do a renegotiation if SSL_in_init(s) is true. Returns 1 if we
|
||||
* should do a renegotiation now and sets up the state machine for it. Otherwise
|
||||
* returns 0.
|
||||
*/
|
||||
int ssl3_renegotiate_check(SSL *s, int initok)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (s->s3.renegotiate) {
|
||||
if (!RECORD_LAYER_read_pending(&s->rlayer)
|
||||
&& !RECORD_LAYER_write_pending(&s->rlayer)
|
||||
&& (initok || !SSL_in_init(s))) {
|
||||
/*
|
||||
* if we are the server, and we have sent a 'RENEGOTIATE'
|
||||
* message, we need to set the state machine into the renegotiate
|
||||
* state.
|
||||
*/
|
||||
ossl_statem_set_renegotiate(s);
|
||||
s->s3.renegotiate = 0;
|
||||
s->s3.num_renegotiations++;
|
||||
s->s3.total_renegotiations++;
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF and
|
||||
* handshake macs if required.
|
||||
*
|
||||
* If PSK and using SHA384 for TLS < 1.2 switch to default.
|
||||
*/
|
||||
long ssl_get_algorithm2(SSL *s)
|
||||
{
|
||||
long alg2;
|
||||
if (s->s3.tmp.new_cipher == NULL)
|
||||
return -1;
|
||||
alg2 = s->s3.tmp.new_cipher->algorithm2;
|
||||
if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF) {
|
||||
if (alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
|
||||
return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
|
||||
} else if (s->s3.tmp.new_cipher->algorithm_mkey & SSL_PSK) {
|
||||
if (alg2 == (SSL_HANDSHAKE_MAC_SHA384 | TLS1_PRF_SHA384))
|
||||
return SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF;
|
||||
}
|
||||
return alg2;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fill a ClientRandom or ServerRandom field of length len. Returns <= 0 on
|
||||
* failure, 1 on success.
|
||||
*/
|
||||
int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, size_t len,
|
||||
DOWNGRADE dgrd)
|
||||
{
|
||||
int send_time = 0, ret;
|
||||
|
||||
if (len < 4)
|
||||
return 0;
|
||||
if (server)
|
||||
send_time = (s->mode & SSL_MODE_SEND_SERVERHELLO_TIME) != 0;
|
||||
else
|
||||
send_time = (s->mode & SSL_MODE_SEND_CLIENTHELLO_TIME) != 0;
|
||||
if (send_time) {
|
||||
unsigned long Time = (unsigned long)time(NULL);
|
||||
unsigned char *p = result;
|
||||
|
||||
l2n(Time, p);
|
||||
ret = RAND_bytes(p, len - 4);
|
||||
} else {
|
||||
ret = RAND_bytes(result, len);
|
||||
}
|
||||
|
||||
if (ret > 0) {
|
||||
if (!ossl_assert(sizeof(tls11downgrade) < len)
|
||||
|| !ossl_assert(sizeof(tls12downgrade) < len))
|
||||
return 0;
|
||||
if (dgrd == DOWNGRADE_TO_1_2)
|
||||
memcpy(result + len - sizeof(tls12downgrade), tls12downgrade,
|
||||
sizeof(tls12downgrade));
|
||||
else if (dgrd == DOWNGRADE_TO_1_1)
|
||||
memcpy(result + len - sizeof(tls11downgrade), tls11downgrade,
|
||||
sizeof(tls11downgrade));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
|
||||
int free_pms)
|
||||
{
|
||||
unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
|
||||
int ret = 0;
|
||||
|
||||
if (alg_k & SSL_PSK) {
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
unsigned char *pskpms, *t;
|
||||
size_t psklen = s->s3.tmp.psklen;
|
||||
size_t pskpmslen;
|
||||
|
||||
/* create PSK premaster_secret */
|
||||
|
||||
/* For plain PSK "other_secret" is psklen zeroes */
|
||||
if (alg_k & SSL_kPSK)
|
||||
pmslen = psklen;
|
||||
|
||||
pskpmslen = 4 + pmslen + psklen;
|
||||
pskpms = OPENSSL_malloc(pskpmslen);
|
||||
if (pskpms == NULL)
|
||||
goto err;
|
||||
t = pskpms;
|
||||
s2n(pmslen, t);
|
||||
if (alg_k & SSL_kPSK)
|
||||
memset(t, 0, pmslen);
|
||||
else
|
||||
memcpy(t, pms, pmslen);
|
||||
t += pmslen;
|
||||
s2n(psklen, t);
|
||||
memcpy(t, s->s3.tmp.psk, psklen);
|
||||
|
||||
OPENSSL_clear_free(s->s3.tmp.psk, psklen);
|
||||
s->s3.tmp.psk = NULL;
|
||||
if (!s->method->ssl3_enc->generate_master_secret(s,
|
||||
s->session->master_key,pskpms, pskpmslen,
|
||||
&s->session->master_key_length)) {
|
||||
OPENSSL_clear_free(pskpms, pskpmslen);
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
OPENSSL_clear_free(pskpms, pskpmslen);
|
||||
#else
|
||||
/* Should never happen */
|
||||
goto err;
|
||||
#endif
|
||||
} else {
|
||||
if (!s->method->ssl3_enc->generate_master_secret(s,
|
||||
s->session->master_key, pms, pmslen,
|
||||
&s->session->master_key_length)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
err:
|
||||
if (pms) {
|
||||
if (free_pms)
|
||||
OPENSSL_clear_free(pms, pmslen);
|
||||
else
|
||||
OPENSSL_cleanse(pms, pmslen);
|
||||
}
|
||||
if (s->server == 0)
|
||||
s->s3.tmp.pms = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Generate a private key from parameters */
|
||||
EVP_PKEY *ssl_generate_pkey(EVP_PKEY *pm)
|
||||
{
|
||||
EVP_PKEY_CTX *pctx = NULL;
|
||||
EVP_PKEY *pkey = NULL;
|
||||
|
||||
if (pm == NULL)
|
||||
return NULL;
|
||||
pctx = EVP_PKEY_CTX_new(pm, NULL);
|
||||
if (pctx == NULL)
|
||||
goto err;
|
||||
if (EVP_PKEY_keygen_init(pctx) <= 0)
|
||||
goto err;
|
||||
if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
|
||||
EVP_PKEY_free(pkey);
|
||||
pkey = NULL;
|
||||
}
|
||||
|
||||
err:
|
||||
EVP_PKEY_CTX_free(pctx);
|
||||
return pkey;
|
||||
}
|
||||
|
||||
/* Generate a private key from a group ID */
|
||||
#if !defined(OPENSSL_NO_DH) || !defined(OPENSSL_NO_EC)
|
||||
EVP_PKEY *ssl_generate_pkey_group(SSL *s, uint16_t id)
|
||||
{
|
||||
const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
|
||||
EVP_PKEY_CTX *pctx = NULL;
|
||||
EVP_PKEY *pkey = NULL;
|
||||
uint16_t gtype;
|
||||
# ifndef OPENSSL_NO_DH
|
||||
DH *dh = NULL;
|
||||
# endif
|
||||
|
||||
if (ginf == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
gtype = ginf->flags & TLS_GROUP_TYPE;
|
||||
# ifndef OPENSSL_NO_DH
|
||||
if (gtype == TLS_GROUP_FFDHE)
|
||||
pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, NULL);
|
||||
# ifndef OPENSSL_NO_EC
|
||||
else
|
||||
# endif
|
||||
# endif
|
||||
# ifndef OPENSSL_NO_EC
|
||||
{
|
||||
if (gtype == TLS_GROUP_CURVE_CUSTOM)
|
||||
pctx = EVP_PKEY_CTX_new_id(ginf->nid, NULL);
|
||||
else
|
||||
pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
|
||||
}
|
||||
# endif
|
||||
if (pctx == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
if (EVP_PKEY_keygen_init(pctx) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
|
||||
ERR_R_EVP_LIB);
|
||||
goto err;
|
||||
}
|
||||
# ifndef OPENSSL_NO_DH
|
||||
if (gtype == TLS_GROUP_FFDHE) {
|
||||
if ((pkey = EVP_PKEY_new()) == NULL
|
||||
|| (dh = DH_new_by_nid(ginf->nid)) == NULL
|
||||
|| !EVP_PKEY_assign(pkey, EVP_PKEY_DH, dh)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
|
||||
ERR_R_EVP_LIB);
|
||||
DH_free(dh);
|
||||
EVP_PKEY_free(pkey);
|
||||
pkey = NULL;
|
||||
goto err;
|
||||
}
|
||||
if (EVP_PKEY_CTX_set_dh_nid(pctx, ginf->nid) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
|
||||
ERR_R_EVP_LIB);
|
||||
EVP_PKEY_free(pkey);
|
||||
pkey = NULL;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
# ifndef OPENSSL_NO_EC
|
||||
else
|
||||
# endif
|
||||
# endif
|
||||
# ifndef OPENSSL_NO_EC
|
||||
{
|
||||
if (gtype != TLS_GROUP_CURVE_CUSTOM
|
||||
&& EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, ginf->nid) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
|
||||
ERR_R_EVP_LIB);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
# endif
|
||||
if (EVP_PKEY_keygen(pctx, &pkey) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_PKEY_GROUP,
|
||||
ERR_R_EVP_LIB);
|
||||
EVP_PKEY_free(pkey);
|
||||
pkey = NULL;
|
||||
}
|
||||
|
||||
err:
|
||||
EVP_PKEY_CTX_free(pctx);
|
||||
return pkey;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Generate parameters from a group ID
|
||||
*/
|
||||
EVP_PKEY *ssl_generate_param_group(uint16_t id)
|
||||
{
|
||||
EVP_PKEY_CTX *pctx = NULL;
|
||||
EVP_PKEY *pkey = NULL;
|
||||
const TLS_GROUP_INFO *ginf = tls1_group_id_lookup(id);
|
||||
int pkey_ctx_id;
|
||||
|
||||
if (ginf == NULL)
|
||||
goto err;
|
||||
|
||||
if ((ginf->flags & TLS_GROUP_TYPE) == TLS_GROUP_CURVE_CUSTOM) {
|
||||
pkey = EVP_PKEY_new();
|
||||
if (pkey != NULL && EVP_PKEY_set_type(pkey, ginf->nid))
|
||||
return pkey;
|
||||
EVP_PKEY_free(pkey);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pkey_ctx_id = (ginf->flags & TLS_GROUP_FFDHE)
|
||||
? EVP_PKEY_DH : EVP_PKEY_EC;
|
||||
pctx = EVP_PKEY_CTX_new_id(pkey_ctx_id, NULL);
|
||||
if (pctx == NULL)
|
||||
goto err;
|
||||
if (EVP_PKEY_paramgen_init(pctx) <= 0)
|
||||
goto err;
|
||||
# ifndef OPENSSL_NO_DH
|
||||
if (ginf->flags & TLS_GROUP_FFDHE) {
|
||||
if (EVP_PKEY_CTX_set_dh_nid(pctx, ginf->nid) <= 0)
|
||||
goto err;
|
||||
}
|
||||
# ifndef OPENSSL_NO_EC
|
||||
else
|
||||
# endif
|
||||
# endif
|
||||
# ifndef OPENSSL_NO_EC
|
||||
{
|
||||
if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, ginf->nid) <= 0)
|
||||
goto err;
|
||||
}
|
||||
# endif
|
||||
if (EVP_PKEY_paramgen(pctx, &pkey) <= 0) {
|
||||
EVP_PKEY_free(pkey);
|
||||
pkey = NULL;
|
||||
}
|
||||
|
||||
err:
|
||||
EVP_PKEY_CTX_free(pctx);
|
||||
return pkey;
|
||||
}
|
||||
|
||||
/* Derive secrets for ECDH/DH */
|
||||
int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey, int gensecret)
|
||||
{
|
||||
int rv = 0;
|
||||
unsigned char *pms = NULL;
|
||||
size_t pmslen = 0;
|
||||
EVP_PKEY_CTX *pctx;
|
||||
|
||||
if (privkey == NULL || pubkey == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pctx = EVP_PKEY_CTX_new(privkey, NULL);
|
||||
|
||||
if (EVP_PKEY_derive_init(pctx) <= 0
|
||||
|| EVP_PKEY_derive_set_peer(pctx, pubkey) <= 0
|
||||
|| EVP_PKEY_derive(pctx, NULL, &pmslen) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_DH
|
||||
if (SSL_IS_TLS13(s) && EVP_PKEY_id(privkey) == EVP_PKEY_DH)
|
||||
EVP_PKEY_CTX_set_dh_pad(pctx, 1);
|
||||
#endif
|
||||
|
||||
pms = OPENSSL_malloc(pmslen);
|
||||
if (pms == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (EVP_PKEY_derive(pctx, pms, &pmslen) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_DERIVE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (gensecret) {
|
||||
/* SSLfatal() called as appropriate in the below functions */
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
/*
|
||||
* If we are resuming then we already generated the early secret
|
||||
* when we created the ClientHello, so don't recreate it.
|
||||
*/
|
||||
if (!s->hit)
|
||||
rv = tls13_generate_secret(s, ssl_handshake_md(s), NULL, NULL,
|
||||
0,
|
||||
(unsigned char *)&s->early_secret);
|
||||
else
|
||||
rv = 1;
|
||||
|
||||
rv = rv && tls13_generate_handshake_secret(s, pms, pmslen);
|
||||
} else {
|
||||
rv = ssl_generate_master_secret(s, pms, pmslen, 0);
|
||||
}
|
||||
} else {
|
||||
/* Save premaster secret */
|
||||
s->s3.tmp.pms = pms;
|
||||
s->s3.tmp.pmslen = pmslen;
|
||||
pms = NULL;
|
||||
rv = 1;
|
||||
}
|
||||
|
||||
err:
|
||||
OPENSSL_clear_free(pms, pmslen);
|
||||
EVP_PKEY_CTX_free(pctx);
|
||||
return rv;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_DH
|
||||
EVP_PKEY *ssl_dh_to_pkey(DH *dh)
|
||||
{
|
||||
EVP_PKEY *ret;
|
||||
if (dh == NULL)
|
||||
return NULL;
|
||||
ret = EVP_PKEY_new();
|
||||
if (EVP_PKEY_set1_DH(ret, dh) <= 0) {
|
||||
EVP_PKEY_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
+1273
@@ -0,0 +1,1273 @@
|
||||
/*
|
||||
* Generated by util/mkerr.pl DO NOT EDIT
|
||||
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/sslerr.h>
|
||||
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
|
||||
static const ERR_STRING_DATA SSL_str_functs[] = {
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_ADD_CLIENT_KEY_SHARE_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_ADD_KEY_SHARE, 0), "add_key_share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_BYTES_TO_CIPHER_LIST, 0),
|
||||
"bytes_to_cipher_list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CHECK_SUITEB_CIPHER_LIST, 0),
|
||||
"check_suiteb_cipher_list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CIPHERSUITE_CB, 0), "ciphersuite_cb"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CONSTRUCT_CA_NAMES, 0), "construct_ca_names"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS, 0),
|
||||
"construct_key_exchange_tbs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CONSTRUCT_STATEFUL_TICKET, 0),
|
||||
"construct_stateful_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CONSTRUCT_STATELESS_TICKET, 0),
|
||||
"construct_stateless_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH, 0),
|
||||
"create_synthetic_message_hash"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CREATE_TICKET_PREQUEL, 0),
|
||||
"create_ticket_prequel"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CT_MOVE_SCTS, 0), "ct_move_scts"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CT_STRICT, 0), "ct_strict"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CUSTOM_EXT_ADD, 0), "custom_ext_add"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_CUSTOM_EXT_PARSE, 0), "custom_ext_parse"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_D2I_SSL_SESSION, 0), "d2i_SSL_SESSION"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DANE_CTX_ENABLE, 0), "dane_ctx_enable"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DANE_MTYPE_SET, 0), "dane_mtype_set"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DANE_TLSA_ADD, 0), "dane_tlsa_add"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DERIVE_SECRET_KEY_AND_IV, 0),
|
||||
"derive_secret_key_and_iv"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DO_DTLS1_WRITE, 0), "do_dtls1_write"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DO_SSL3_WRITE, 0), "do_ssl3_write"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_BUFFER_RECORD, 0),
|
||||
"dtls1_buffer_record"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_CHECK_TIMEOUT_NUM, 0),
|
||||
"dtls1_check_timeout_num"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_HM_FRAGMENT_NEW, 0),
|
||||
"dtls1_hm_fragment_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_PREPROCESS_FRAGMENT, 0),
|
||||
"dtls1_preprocess_fragment"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS, 0),
|
||||
"dtls1_process_buffered_records"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_PROCESS_RECORD, 0),
|
||||
"dtls1_process_record"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_READ_BYTES, 0), "dtls1_read_bytes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_READ_FAILED, 0), "dtls1_read_failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_RETRANSMIT_MESSAGE, 0),
|
||||
"dtls1_retransmit_message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_WRITE_APP_DATA_BYTES, 0),
|
||||
"dtls1_write_app_data_bytes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS1_WRITE_BYTES, 0), "dtls1_write_bytes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLSV1_LISTEN, 0), "DTLSv1_listen"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC, 0),
|
||||
"dtls_construct_change_cipher_spec"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST, 0),
|
||||
"dtls_construct_hello_verify_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS_GET_REASSEMBLED_MESSAGE, 0),
|
||||
"dtls_get_reassembled_message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS_PROCESS_HELLO_VERIFY, 0),
|
||||
"dtls_process_hello_verify"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS_RECORD_LAYER_NEW, 0),
|
||||
"DTLS_RECORD_LAYER_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_DTLS_WAIT_FOR_DRY, 0), "dtls_wait_for_dry"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_EARLY_DATA_COUNT_OK, 0),
|
||||
"early_data_count_ok"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_EARLY_DATA, 0), "final_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_EC_PT_FORMATS, 0),
|
||||
"final_ec_pt_formats"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_EMS, 0), "final_ems"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_KEY_SHARE, 0), "final_key_share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_MAXFRAGMENTLEN, 0),
|
||||
"final_maxfragmentlen"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_RENEGOTIATE, 0), "final_renegotiate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_SERVER_NAME, 0), "final_server_name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_SIG_ALGS, 0), "final_sig_algs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_GET_CERT_VERIFY_TBS_DATA, 0),
|
||||
"get_cert_verify_tbs_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_NSS_KEYLOG_INT, 0), "nss_keylog_int"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OPENSSL_INIT_SSL, 0), "OPENSSL_init_ssl"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION, 0),
|
||||
"ossl_statem_client13_write_transition"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE, 0),
|
||||
"ossl_statem_client_post_process_message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE, 0),
|
||||
"ossl_statem_client_process_message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION, 0),
|
||||
"ossl_statem_client_read_transition"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION, 0),
|
||||
"ossl_statem_client_write_transition"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION, 0),
|
||||
"ossl_statem_server13_write_transition"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE, 0),
|
||||
"ossl_statem_server_post_process_message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER_POST_WORK, 0),
|
||||
"ossl_statem_server_post_work"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE, 0),
|
||||
"ossl_statem_server_process_message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION, 0),
|
||||
"ossl_statem_server_read_transition"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION, 0),
|
||||
"ossl_statem_server_write_transition"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_PARSE_CA_NAMES, 0), "parse_ca_names"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_PITEM_NEW, 0), "pitem_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_PQUEUE_NEW, 0), "pqueue_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_PROCESS_KEY_SHARE_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_READ_STATE_MACHINE, 0), "read_state_machine"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SET_CLIENT_CIPHERSUITE, 0),
|
||||
"set_client_ciphersuite"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET, 0),
|
||||
"srp_generate_client_master_secret"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET, 0),
|
||||
"srp_generate_server_master_secret"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SRP_VERIFY_SERVER_PARAM, 0),
|
||||
"srp_verify_server_param"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_CHANGE_CIPHER_STATE, 0),
|
||||
"ssl3_change_cipher_state"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, 0),
|
||||
"ssl3_check_cert_and_algorithm"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_CTRL, 0), "ssl3_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_CTX_CTRL, 0), "ssl3_ctx_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_DIGEST_CACHED_RECORDS, 0),
|
||||
"ssl3_digest_cached_records"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC, 0),
|
||||
"ssl3_do_change_cipher_spec"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_ENC, 0), "ssl3_enc"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_FINAL_FINISH_MAC, 0),
|
||||
"ssl3_final_finish_mac"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_FINISH_MAC, 0), "ssl3_finish_mac"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GENERATE_KEY_BLOCK, 0),
|
||||
"ssl3_generate_key_block"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GENERATE_MASTER_SECRET, 0),
|
||||
"ssl3_generate_master_secret"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_GET_RECORD, 0), "ssl3_get_record"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_INIT_FINISHED_MAC, 0),
|
||||
"ssl3_init_finished_mac"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_OUTPUT_CERT_CHAIN, 0),
|
||||
"ssl3_output_cert_chain"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_READ_BYTES, 0), "ssl3_read_bytes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_READ_N, 0), "ssl3_read_n"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_SETUP_KEY_BLOCK, 0),
|
||||
"ssl3_setup_key_block"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_SETUP_READ_BUFFER, 0),
|
||||
"ssl3_setup_read_buffer"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_SETUP_WRITE_BUFFER, 0),
|
||||
"ssl3_setup_write_buffer"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_WRITE_BYTES, 0), "ssl3_write_bytes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL3_WRITE_PENDING, 0), "ssl3_write_pending"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_CERT_CHAIN, 0), "ssl_add_cert_chain"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_CERT_TO_BUF, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_CERT_TO_WPACKET, 0),
|
||||
"ssl_add_cert_to_wpacket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, 0),
|
||||
"SSL_add_dir_cert_subjects_to_stack"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK, 0),
|
||||
"SSL_add_file_cert_subjects_to_stack"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_BAD_METHOD, 0), "ssl_bad_method"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_BUILD_CERT_CHAIN, 0),
|
||||
"ssl_build_cert_chain"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_BYTES_TO_CIPHER_LIST, 0),
|
||||
"SSL_bytes_to_cipher_list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CACHE_CIPHERLIST, 0),
|
||||
"ssl_cache_cipherlist"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CERT_ADD0_CHAIN_CERT, 0),
|
||||
"ssl_cert_add0_chain_cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CERT_DUP, 0), "ssl_cert_dup"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CERT_NEW, 0), "ssl_cert_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CERT_SET0_CHAIN, 0),
|
||||
"ssl_cert_set0_chain"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CHECK_PRIVATE_KEY, 0),
|
||||
"SSL_check_private_key"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO, 0),
|
||||
"ssl_check_srp_ext_ClientHello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG, 0),
|
||||
"ssl_check_srvr_ecc_cert_and_alg"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CHOOSE_CLIENT_VERSION, 0),
|
||||
"ssl_choose_client_version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CIPHER_DESCRIPTION, 0),
|
||||
"SSL_CIPHER_description"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CIPHER_LIST_TO_BYTES, 0),
|
||||
"ssl_cipher_list_to_bytes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CIPHER_PROCESS_RULESTR, 0),
|
||||
"ssl_cipher_process_rulestr"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CIPHER_STRENGTH_SORT, 0),
|
||||
"ssl_cipher_strength_sort"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CLEAR, 0), "SSL_clear"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT, 0),
|
||||
"SSL_client_hello_get1_extensions_present"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD, 0),
|
||||
"SSL_COMP_add_compression_method"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CONF_CMD, 0), "SSL_CONF_cmd"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CREATE_CIPHER_LIST, 0),
|
||||
"ssl_create_cipher_list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTRL, 0), "SSL_ctrl"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, 0),
|
||||
"SSL_CTX_check_private_key"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_ENABLE_CT, 0), "SSL_CTX_enable_ct"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_MAKE_PROFILES, 0),
|
||||
"ssl_ctx_make_profiles"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_NEW, 0), "SSL_CTX_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_SET_ALPN_PROTOS, 0),
|
||||
"SSL_CTX_set_alpn_protos"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_SET_CIPHER_LIST, 0),
|
||||
"SSL_CTX_set_cipher_list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, 0),
|
||||
"SSL_CTX_set_client_cert_engine"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK, 0),
|
||||
"SSL_CTX_set_ct_validation_callback"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT, 0),
|
||||
"SSL_CTX_set_session_id_context"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_SET_SSL_VERSION, 0),
|
||||
"SSL_CTX_set_ssl_version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH, 0),
|
||||
"SSL_CTX_set_tlsext_max_fragment_length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_CERTIFICATE, 0),
|
||||
"SSL_CTX_use_certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1, 0),
|
||||
"SSL_CTX_use_certificate_ASN1"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_CERTIFICATE_FILE, 0),
|
||||
"SSL_CTX_use_certificate_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_PRIVATEKEY, 0),
|
||||
"SSL_CTX_use_PrivateKey"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1, 0),
|
||||
"SSL_CTX_use_PrivateKey_ASN1"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE, 0),
|
||||
"SSL_CTX_use_PrivateKey_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, 0),
|
||||
"SSL_CTX_use_psk_identity_hint"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_RSAPRIVATEKEY, 0),
|
||||
"SSL_CTX_use_RSAPrivateKey"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1, 0),
|
||||
"SSL_CTX_use_RSAPrivateKey_ASN1"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE, 0),
|
||||
"SSL_CTX_use_RSAPrivateKey_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_SERVERINFO, 0),
|
||||
"SSL_CTX_use_serverinfo"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_SERVERINFO_EX, 0),
|
||||
"SSL_CTX_use_serverinfo_ex"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_CTX_USE_SERVERINFO_FILE, 0),
|
||||
"SSL_CTX_use_serverinfo_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_DANE_DUP, 0), "ssl_dane_dup"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_DANE_ENABLE, 0), "SSL_dane_enable"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_DERIVE, 0), "ssl_derive"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_DO_CONFIG, 0), "ssl_do_config"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_DO_HANDSHAKE, 0), "SSL_do_handshake"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_DUP_CA_LIST, 0), "SSL_dup_CA_list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_ENABLE_CT, 0), "SSL_enable_ct"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_GENERATE_PKEY_GROUP, 0),
|
||||
"ssl_generate_pkey_group"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_GENERATE_SESSION_ID, 0),
|
||||
"ssl_generate_session_id"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_GET_NEW_SESSION, 0),
|
||||
"ssl_get_new_session"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_GET_PREV_SESSION, 0),
|
||||
"ssl_get_prev_session"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_GET_SERVER_CERT_INDEX, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_GET_SIGN_PKEY, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_HANDSHAKE_HASH, 0), "ssl_handshake_hash"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_INIT_WBIO_BUFFER, 0),
|
||||
"ssl_init_wbio_buffer"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_KEY_UPDATE, 0), "SSL_key_update"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_LOAD_CLIENT_CA_FILE, 0),
|
||||
"SSL_load_client_CA_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_LOG_MASTER_SECRET, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE, 0),
|
||||
"ssl_log_rsa_client_key_exchange"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_MODULE_INIT, 0), "ssl_module_init"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_NEW, 0), "SSL_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_NEXT_PROTO_VALIDATE, 0),
|
||||
"ssl_next_proto_validate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PEEK, 0), "SSL_peek"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PEEK_EX, 0), "SSL_peek_ex"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_PEEK_INTERNAL, 0), "ssl_peek_internal"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_READ, 0), "SSL_read"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_READ_EARLY_DATA, 0),
|
||||
"SSL_read_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_READ_EX, 0), "SSL_read_ex"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_READ_INTERNAL, 0), "ssl_read_internal"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_RENEGOTIATE, 0), "SSL_renegotiate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_RENEGOTIATE_ABBREVIATED, 0),
|
||||
"SSL_renegotiate_abbreviated"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SENDFILE, 0), "SSL_sendfile"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_DUP, 0), "ssl_session_dup"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_NEW, 0), "SSL_SESSION_new"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_PRINT_FP, 0),
|
||||
"SSL_SESSION_print_fp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_SET1_ID, 0),
|
||||
"SSL_SESSION_set1_id"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SESSION_SET1_ID_CONTEXT, 0),
|
||||
"SSL_SESSION_set1_id_context"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_ALPN_PROTOS, 0),
|
||||
"SSL_set_alpn_protos"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_CERT, 0), "ssl_set_cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_CERT_AND_KEY, 0),
|
||||
"ssl_set_cert_and_key"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_CIPHER_LIST, 0),
|
||||
"SSL_set_cipher_list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_CT_VALIDATION_CALLBACK, 0),
|
||||
"SSL_set_ct_validation_callback"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_FD, 0), "SSL_set_fd"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_PKEY, 0), "ssl_set_pkey"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_RFD, 0), "SSL_set_rfd"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_SESSION, 0), "SSL_set_session"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_SESSION_ID_CONTEXT, 0),
|
||||
"SSL_set_session_id_context"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_SESSION_TICKET_EXT, 0),
|
||||
"SSL_set_session_ticket_ext"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH, 0),
|
||||
"SSL_set_tlsext_max_fragment_length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SET_WFD, 0), "SSL_set_wfd"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SHUTDOWN, 0), "SSL_shutdown"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_SRP_CTX_INIT, 0), "SSL_SRP_CTX_init"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_START_ASYNC_JOB, 0),
|
||||
"ssl_start_async_job"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_UNDEFINED_FUNCTION, 0),
|
||||
"ssl_undefined_function"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_UNDEFINED_VOID_FUNCTION, 0),
|
||||
"ssl_undefined_void_function"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_CERTIFICATE, 0),
|
||||
"SSL_use_certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_CERTIFICATE_ASN1, 0),
|
||||
"SSL_use_certificate_ASN1"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_CERTIFICATE_FILE, 0),
|
||||
"SSL_use_certificate_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_PRIVATEKEY, 0), "SSL_use_PrivateKey"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_PRIVATEKEY_ASN1, 0),
|
||||
"SSL_use_PrivateKey_ASN1"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_PRIVATEKEY_FILE, 0),
|
||||
"SSL_use_PrivateKey_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_PSK_IDENTITY_HINT, 0),
|
||||
"SSL_use_psk_identity_hint"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_RSAPRIVATEKEY, 0),
|
||||
"SSL_use_RSAPrivateKey"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1, 0),
|
||||
"SSL_use_RSAPrivateKey_ASN1"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_USE_RSAPRIVATEKEY_FILE, 0),
|
||||
"SSL_use_RSAPrivateKey_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_VALIDATE_CT, 0), "ssl_validate_ct"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_VERIFY_CERT_CHAIN, 0),
|
||||
"ssl_verify_cert_chain"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, 0),
|
||||
"SSL_verify_client_post_handshake"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_WRITE, 0), "SSL_write"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_WRITE_EARLY_DATA, 0),
|
||||
"SSL_write_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_WRITE_EARLY_FINISH, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_WRITE_EX, 0), "SSL_write_ex"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_SSL_WRITE_INTERNAL, 0), "ssl_write_internal"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_STATE_MACHINE, 0), "state_machine"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS12_CHECK_PEER_SIGALG, 0),
|
||||
"tls12_check_peer_sigalg"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS12_COPY_SIGALGS, 0), "tls12_copy_sigalgs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_CHANGE_CIPHER_STATE, 0),
|
||||
"tls13_change_cipher_state"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_ENC, 0), "tls13_enc"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_FINAL_FINISH_MAC, 0),
|
||||
"tls13_final_finish_mac"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_GENERATE_SECRET, 0),
|
||||
"tls13_generate_secret"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_HKDF_EXPAND, 0), "tls13_hkdf_expand"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA, 0),
|
||||
"tls13_restore_handshake_digest_for_pha"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA, 0),
|
||||
"tls13_save_handshake_digest_for_pha"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS13_SETUP_KEY_BLOCK, 0),
|
||||
"tls13_setup_key_block"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_CHANGE_CIPHER_STATE, 0),
|
||||
"tls1_change_cipher_state"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_ENC, 0), "tls1_enc"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_EXPORT_KEYING_MATERIAL, 0),
|
||||
"tls1_export_keying_material"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_GET_CURVELIST, 0), "tls1_get_curvelist"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_PRF, 0), "tls1_PRF"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_SAVE_U16, 0), "tls1_save_u16"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_SETUP_KEY_BLOCK, 0),
|
||||
"tls1_setup_key_block"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_SET_GROUPS, 0), "tls1_set_groups"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_SET_RAW_SIGALGS, 0),
|
||||
"tls1_set_raw_sigalgs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_SET_SERVER_SIGALGS, 0),
|
||||
"tls1_set_server_sigalgs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_SET_SHARED_SIGALGS, 0),
|
||||
"tls1_set_shared_sigalgs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS1_SET_SIGALGS, 0), "tls1_set_sigalgs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CHOOSE_SIGALG, 0), "tls_choose_sigalg"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK, 0),
|
||||
"tls_client_key_exchange_post_work"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_COLLECT_EXTENSIONS, 0),
|
||||
"tls_collect_extensions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES, 0),
|
||||
"tls_construct_certificate_authorities"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, 0),
|
||||
"tls_construct_certificate_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CERT_STATUS, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY, 0),
|
||||
"tls_construct_cert_status_body"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CERT_VERIFY, 0),
|
||||
"tls_construct_cert_verify"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC, 0),
|
||||
"tls_construct_change_cipher_spec"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CKE_DHE, 0),
|
||||
"tls_construct_cke_dhe"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CKE_ECDHE, 0),
|
||||
"tls_construct_cke_ecdhe"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CKE_GOST, 0),
|
||||
"tls_construct_cke_gost"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, 0),
|
||||
"tls_construct_cke_psk_preamble"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CKE_RSA, 0),
|
||||
"tls_construct_cke_rsa"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CKE_SRP, 0),
|
||||
"tls_construct_cke_srp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE, 0),
|
||||
"tls_construct_client_certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CLIENT_HELLO, 0),
|
||||
"tls_construct_client_hello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE, 0),
|
||||
"tls_construct_client_key_exchange"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_ALPN, 0),
|
||||
"tls_construct_ctos_alpn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_COOKIE, 0),
|
||||
"tls_construct_ctos_cookie"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA, 0),
|
||||
"tls_construct_ctos_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS, 0),
|
||||
"tls_construct_ctos_ec_pt_formats"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_EMS, 0),
|
||||
"tls_construct_ctos_ems"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_ETM, 0),
|
||||
"tls_construct_ctos_etm"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_HELLO, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE, 0),
|
||||
"tls_construct_ctos_key_share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN, 0),
|
||||
"tls_construct_ctos_maxfragmentlen"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_NPN, 0),
|
||||
"tls_construct_ctos_npn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_PADDING, 0),
|
||||
"tls_construct_ctos_padding"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH, 0),
|
||||
"tls_construct_ctos_post_handshake_auth"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_PSK, 0),
|
||||
"tls_construct_ctos_psk"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES, 0),
|
||||
"tls_construct_ctos_psk_kex_modes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE, 0),
|
||||
"tls_construct_ctos_renegotiate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SCT, 0),
|
||||
"tls_construct_ctos_sct"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME, 0),
|
||||
"tls_construct_ctos_server_name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET, 0),
|
||||
"tls_construct_ctos_session_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS, 0),
|
||||
"tls_construct_ctos_sig_algs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SRP, 0),
|
||||
"tls_construct_ctos_srp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST, 0),
|
||||
"tls_construct_ctos_status_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS, 0),
|
||||
"tls_construct_ctos_supported_groups"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS, 0),
|
||||
"tls_construct_ctos_supported_versions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP, 0),
|
||||
"tls_construct_ctos_use_srtp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_VERIFY, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS, 0),
|
||||
"tls_construct_encrypted_extensions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA, 0),
|
||||
"tls_construct_end_of_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_EXTENSIONS, 0),
|
||||
"tls_construct_extensions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_FINISHED, 0),
|
||||
"tls_construct_finished"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_HELLO_REQUEST, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST, 0),
|
||||
"tls_construct_hello_retry_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_KEY_UPDATE, 0),
|
||||
"tls_construct_key_update"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET, 0),
|
||||
"tls_construct_new_session_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_NEXT_PROTO, 0),
|
||||
"tls_construct_next_proto"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE, 0),
|
||||
"tls_construct_server_certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_SERVER_HELLO, 0),
|
||||
"tls_construct_server_hello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, 0),
|
||||
"tls_construct_server_key_exchange"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_ALPN, 0),
|
||||
"tls_construct_stoc_alpn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_COOKIE, 0),
|
||||
"tls_construct_stoc_cookie"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG, 0),
|
||||
"tls_construct_stoc_cryptopro_bug"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_DONE, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA, 0),
|
||||
"tls_construct_stoc_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS, 0),
|
||||
"tls_construct_stoc_ec_pt_formats"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_EMS, 0),
|
||||
"tls_construct_stoc_ems"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_ETM, 0),
|
||||
"tls_construct_stoc_etm"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_HELLO, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE, 0),
|
||||
"tls_construct_stoc_key_share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN, 0),
|
||||
"tls_construct_stoc_maxfragmentlen"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG, 0),
|
||||
"tls_construct_stoc_next_proto_neg"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_PSK, 0),
|
||||
"tls_construct_stoc_psk"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE, 0),
|
||||
"tls_construct_stoc_renegotiate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME, 0),
|
||||
"tls_construct_stoc_server_name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET, 0),
|
||||
"tls_construct_stoc_session_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST, 0),
|
||||
"tls_construct_stoc_status_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS, 0),
|
||||
"tls_construct_stoc_supported_groups"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS, 0),
|
||||
"tls_construct_stoc_supported_versions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP, 0),
|
||||
"tls_construct_stoc_use_srtp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, 0),
|
||||
"tls_early_post_process_client_hello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_FINISH_HANDSHAKE, 0),
|
||||
"tls_finish_handshake"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_GET_MESSAGE_BODY, 0),
|
||||
"tls_get_message_body"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_GET_MESSAGE_HEADER, 0),
|
||||
"tls_get_message_header"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_HANDLE_ALPN, 0), "tls_handle_alpn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_HANDLE_STATUS_REQUEST, 0),
|
||||
"tls_handle_status_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES, 0),
|
||||
"tls_parse_certificate_authorities"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_ALPN, 0),
|
||||
"tls_parse_ctos_alpn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_COOKIE, 0),
|
||||
"tls_parse_ctos_cookie"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_EARLY_DATA, 0),
|
||||
"tls_parse_ctos_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS, 0),
|
||||
"tls_parse_ctos_ec_pt_formats"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_EMS, 0), "tls_parse_ctos_ems"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_KEY_SHARE, 0),
|
||||
"tls_parse_ctos_key_share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN, 0),
|
||||
"tls_parse_ctos_maxfragmentlen"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH, 0),
|
||||
"tls_parse_ctos_post_handshake_auth"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_PSK, 0), "tls_parse_ctos_psk"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES, 0),
|
||||
"tls_parse_ctos_psk_kex_modes"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_RENEGOTIATE, 0),
|
||||
"tls_parse_ctos_renegotiate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_SERVER_NAME, 0),
|
||||
"tls_parse_ctos_server_name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_SESSION_TICKET, 0),
|
||||
"tls_parse_ctos_session_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_SIG_ALGS, 0),
|
||||
"tls_parse_ctos_sig_algs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT, 0),
|
||||
"tls_parse_ctos_sig_algs_cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_SRP, 0), "tls_parse_ctos_srp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST, 0),
|
||||
"tls_parse_ctos_status_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS, 0),
|
||||
"tls_parse_ctos_supported_groups"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_USE_SRTP, 0),
|
||||
"tls_parse_ctos_use_srtp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_ALPN, 0),
|
||||
"tls_parse_stoc_alpn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_COOKIE, 0),
|
||||
"tls_parse_stoc_cookie"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_EARLY_DATA, 0),
|
||||
"tls_parse_stoc_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS, 0),
|
||||
"tls_parse_stoc_ec_pt_formats"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_KEY_SHARE, 0),
|
||||
"tls_parse_stoc_key_share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN, 0),
|
||||
"tls_parse_stoc_maxfragmentlen"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_NPN, 0), "tls_parse_stoc_npn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_PSK, 0), "tls_parse_stoc_psk"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_RENEGOTIATE, 0),
|
||||
"tls_parse_stoc_renegotiate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_SCT, 0), "tls_parse_stoc_sct"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_SERVER_NAME, 0),
|
||||
"tls_parse_stoc_server_name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_SESSION_TICKET, 0),
|
||||
"tls_parse_stoc_session_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_STATUS_REQUEST, 0),
|
||||
"tls_parse_stoc_status_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS, 0),
|
||||
"tls_parse_stoc_supported_versions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_USE_SRTP, 0),
|
||||
"tls_parse_stoc_use_srtp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_POST_PROCESS_CLIENT_HELLO, 0),
|
||||
"tls_post_process_client_hello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE, 0),
|
||||
"tls_post_process_client_key_exchange"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE, 0),
|
||||
"tls_prepare_client_certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST, 0),
|
||||
"tls_process_as_hello_retry_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST, 0),
|
||||
"tls_process_certificate_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CERT_STATUS, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CERT_STATUS_BODY, 0),
|
||||
"tls_process_cert_status_body"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CERT_VERIFY, 0),
|
||||
"tls_process_cert_verify"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC, 0),
|
||||
"tls_process_change_cipher_spec"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CKE_DHE, 0),
|
||||
"tls_process_cke_dhe"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CKE_ECDHE, 0),
|
||||
"tls_process_cke_ecdhe"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CKE_GOST, 0),
|
||||
"tls_process_cke_gost"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, 0),
|
||||
"tls_process_cke_psk_preamble"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CKE_RSA, 0),
|
||||
"tls_process_cke_rsa"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CKE_SRP, 0),
|
||||
"tls_process_cke_srp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, 0),
|
||||
"tls_process_client_certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CLIENT_HELLO, 0),
|
||||
"tls_process_client_hello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE, 0),
|
||||
"tls_process_client_key_exchange"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS, 0),
|
||||
"tls_process_encrypted_extensions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_END_OF_EARLY_DATA, 0),
|
||||
"tls_process_end_of_early_data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_FINISHED, 0),
|
||||
"tls_process_finished"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_HELLO_REQ, 0),
|
||||
"tls_process_hello_req"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST, 0),
|
||||
"tls_process_hello_retry_request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT, 0),
|
||||
"tls_process_initial_server_flight"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_KEY_EXCHANGE, 0),
|
||||
"tls_process_key_exchange"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_KEY_UPDATE, 0),
|
||||
"tls_process_key_update"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_NEW_SESSION_TICKET, 0),
|
||||
"tls_process_new_session_ticket"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_NEXT_PROTO, 0),
|
||||
"tls_process_next_proto"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_SERVER_CERTIFICATE, 0),
|
||||
"tls_process_server_certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_SERVER_DONE, 0),
|
||||
"tls_process_server_done"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_SERVER_HELLO, 0),
|
||||
"tls_process_server_hello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_SKE_DHE, 0),
|
||||
"tls_process_ske_dhe"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_SKE_ECDHE, 0),
|
||||
"tls_process_ske_ecdhe"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE, 0),
|
||||
"tls_process_ske_psk_preamble"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PROCESS_SKE_SRP, 0),
|
||||
"tls_process_ske_srp"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PSK_DO_BINDER, 0), "tls_psk_do_binder"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT, 0), ""},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_SETUP_HANDSHAKE, 0),
|
||||
"tls_setup_handshake"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_USE_CERTIFICATE_CHAIN_FILE, 0),
|
||||
"use_certificate_chain_file"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_WPACKET_INTERN_INIT_LEN, 0),
|
||||
"wpacket_intern_init_len"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_WPACKET_START_SUB_PACKET_LEN__, 0),
|
||||
"WPACKET_start_sub_packet_len__"},
|
||||
{ERR_PACK(ERR_LIB_SSL, SSL_F_WRITE_STATE_MACHINE, 0),
|
||||
"write_state_machine"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const ERR_STRING_DATA SSL_str_reasons[] = {
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY),
|
||||
"application data after close notify"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_APP_DATA_IN_HANDSHAKE),
|
||||
"app data in handshake"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT),
|
||||
"attempt to reuse session in different context"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE),
|
||||
"at least TLS 1.0 needed in FIPS mode"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE),
|
||||
"at least (D)TLS 1.2 needed in Suite B mode"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_CHANGE_CIPHER_SPEC),
|
||||
"bad change cipher spec"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_CIPHER), "bad cipher"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA), "bad data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DATA_RETURNED_BY_CALLBACK),
|
||||
"bad data returned by callback"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DECOMPRESSION), "bad decompression"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DH_VALUE), "bad dh value"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_DIGEST_LENGTH), "bad digest length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_EARLY_DATA), "bad early data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_ECC_CERT), "bad ecc cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_ECPOINT), "bad ecpoint"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_EXTENSION), "bad extension"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_HANDSHAKE_LENGTH),
|
||||
"bad handshake length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_HANDSHAKE_STATE),
|
||||
"bad handshake state"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_HELLO_REQUEST), "bad hello request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_HRR_VERSION), "bad hrr version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_KEY_SHARE), "bad key share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_KEY_UPDATE), "bad key update"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_LEGACY_VERSION), "bad legacy version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_LENGTH), "bad length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PACKET), "bad packet"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PACKET_LENGTH), "bad packet length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PROTOCOL_VERSION_NUMBER),
|
||||
"bad protocol version number"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PSK), "bad psk"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_PSK_IDENTITY), "bad psk identity"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RECORD_TYPE), "bad record type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_RSA_ENCRYPT), "bad rsa encrypt"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SIGNATURE), "bad signature"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRP_A_LENGTH), "bad srp a length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRP_PARAMETERS), "bad srp parameters"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRTP_MKI_VALUE), "bad srtp mki value"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST),
|
||||
"bad srtp protection profile list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_SSL_FILETYPE), "bad ssl filetype"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_VALUE), "bad value"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BAD_WRITE_RETRY), "bad write retry"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BINDER_DOES_NOT_VERIFY),
|
||||
"binder does not verify"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BIO_NOT_SET), "bio not set"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BLOCK_CIPHER_PAD_IS_WRONG),
|
||||
"block cipher pad is wrong"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_BN_LIB), "bn lib"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CALLBACK_FAILED), "callback failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CANNOT_CHANGE_CIPHER),
|
||||
"cannot change cipher"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CA_DN_LENGTH_MISMATCH),
|
||||
"ca dn length mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CA_KEY_TOO_SMALL), "ca key too small"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CA_MD_TOO_WEAK), "ca md too weak"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CCS_RECEIVED_EARLY), "ccs received early"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CERTIFICATE_VERIFY_FAILED),
|
||||
"certificate verify failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CERT_CB_ERROR), "cert cb error"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CERT_LENGTH_MISMATCH),
|
||||
"cert length mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED),
|
||||
"ciphersuite digest has changed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CIPHER_CODE_WRONG_LENGTH),
|
||||
"cipher code wrong length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CIPHER_OR_HASH_UNAVAILABLE),
|
||||
"cipher or hash unavailable"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CLIENTHELLO_TLSEXT), "clienthello tlsext"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSED_LENGTH_TOO_LONG),
|
||||
"compressed length too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_DISABLED),
|
||||
"compression disabled"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_FAILURE),
|
||||
"compression failure"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE),
|
||||
"compression id not within private range"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COMPRESSION_LIBRARY_ERROR),
|
||||
"compression library error"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CONNECTION_TYPE_NOT_SET),
|
||||
"connection type not set"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CONTEXT_NOT_DANE_ENABLED),
|
||||
"context not dane enabled"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COOKIE_GEN_CALLBACK_FAILURE),
|
||||
"cookie gen callback failure"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_COOKIE_MISMATCH), "cookie mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED),
|
||||
"custom ext handler already installed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_ALREADY_ENABLED),
|
||||
"dane already enabled"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL),
|
||||
"dane cannot override mtype full"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_NOT_ENABLED), "dane not enabled"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_BAD_CERTIFICATE),
|
||||
"dane tlsa bad certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE),
|
||||
"dane tlsa bad certificate usage"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_BAD_DATA_LENGTH),
|
||||
"dane tlsa bad data length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH),
|
||||
"dane tlsa bad digest length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE),
|
||||
"dane tlsa bad matching type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY),
|
||||
"dane tlsa bad public key"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_BAD_SELECTOR),
|
||||
"dane tlsa bad selector"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DANE_TLSA_NULL_DATA),
|
||||
"dane tlsa null data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DATA_BETWEEN_CCS_AND_FINISHED),
|
||||
"data between ccs and finished"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DATA_LENGTH_TOO_LONG),
|
||||
"data length too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DECRYPTION_FAILED), "decryption failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC),
|
||||
"decryption failed or bad record mac"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DH_KEY_TOO_SMALL), "dh key too small"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG),
|
||||
"dh public value length is wrong"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DIGEST_CHECK_FAILED),
|
||||
"digest check failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DTLS_MESSAGE_TOO_BIG),
|
||||
"dtls message too big"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_DUPLICATE_COMPRESSION_ID),
|
||||
"duplicate compression id"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ECC_CERT_NOT_FOR_SIGNING),
|
||||
"ecc cert not for signing"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE),
|
||||
"ecdh required for suiteb mode"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EE_KEY_TOO_SMALL), "ee key too small"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST),
|
||||
"empty srtp protection profile list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ENCRYPTED_LENGTH_TOO_LONG),
|
||||
"encrypted length too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST),
|
||||
"error in received cipher list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN),
|
||||
"error setting tlsa base domain"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE),
|
||||
"exceeds max fragment size"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EXCESSIVE_MESSAGE_SIZE),
|
||||
"excessive message size"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EXTENSION_NOT_RECEIVED),
|
||||
"extension not received"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EXTRA_DATA_IN_MESSAGE),
|
||||
"extra data in message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_EXT_LENGTH_MISMATCH),
|
||||
"ext length mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_FAILED_TO_INIT_ASYNC),
|
||||
"failed to init async"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_FRAGMENTED_CLIENT_HELLO),
|
||||
"fragmented client hello"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_GOT_A_FIN_BEFORE_A_CCS),
|
||||
"got a fin before a ccs"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_HTTPS_PROXY_REQUEST),
|
||||
"https proxy request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_HTTP_REQUEST), "http request"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ILLEGAL_POINT_COMPRESSION),
|
||||
"illegal point compression"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_ILLEGAL_SUITEB_DIGEST),
|
||||
"illegal Suite B digest"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INAPPROPRIATE_FALLBACK),
|
||||
"inappropriate fallback"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INCONSISTENT_COMPRESSION),
|
||||
"inconsistent compression"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INCONSISTENT_EARLY_DATA_ALPN),
|
||||
"inconsistent early data alpn"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INCONSISTENT_EARLY_DATA_SNI),
|
||||
"inconsistent early data sni"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INCONSISTENT_EXTMS), "inconsistent extms"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INSUFFICIENT_SECURITY),
|
||||
"insufficient security"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_ALERT), "invalid alert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_CCS_MESSAGE),
|
||||
"invalid ccs message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_CERTIFICATE_OR_ALG),
|
||||
"invalid certificate or alg"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_COMMAND), "invalid command"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_COMPRESSION_ALGORITHM),
|
||||
"invalid compression algorithm"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_CONFIG), "invalid config"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_CONFIGURATION_NAME),
|
||||
"invalid configuration name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_CONTEXT), "invalid context"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_CT_VALIDATION_TYPE),
|
||||
"invalid ct validation type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_KEY_UPDATE_TYPE),
|
||||
"invalid key update type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_MAX_EARLY_DATA),
|
||||
"invalid max early data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_NULL_CMD_NAME),
|
||||
"invalid null cmd name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_SEQUENCE_NUMBER),
|
||||
"invalid sequence number"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_SERVERINFO_DATA),
|
||||
"invalid serverinfo data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_SESSION_ID), "invalid session id"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_SRP_USERNAME),
|
||||
"invalid srp username"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_STATUS_RESPONSE),
|
||||
"invalid status response"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_INVALID_TICKET_KEYS_LENGTH),
|
||||
"invalid ticket keys length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LENGTH_MISMATCH), "length mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LENGTH_TOO_LONG), "length too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LENGTH_TOO_SHORT), "length too short"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LIBRARY_BUG), "library bug"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_LIBRARY_HAS_NO_CIPHERS),
|
||||
"library has no ciphers"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_DSA_SIGNING_CERT),
|
||||
"missing dsa signing cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_ECDSA_SIGNING_CERT),
|
||||
"missing ecdsa signing cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_FATAL), "missing fatal"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_PARAMETERS), "missing parameters"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_CERTIFICATE),
|
||||
"missing rsa certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_ENCRYPTING_CERT),
|
||||
"missing rsa encrypting cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_SIGNING_CERT),
|
||||
"missing rsa signing cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_SIGALGS_EXTENSION),
|
||||
"missing sigalgs extension"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_SIGNING_CERT),
|
||||
"missing signing cert"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_SRP_PARAM),
|
||||
"can't find SRP server param"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION),
|
||||
"missing supported groups extension"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_TMP_DH_KEY), "missing tmp dh key"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_TMP_ECDH_KEY),
|
||||
"missing tmp ecdh key"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA),
|
||||
"mixed handshake and non handshake data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NOT_ON_RECORD_BOUNDARY),
|
||||
"not on record boundary"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NOT_REPLACING_CERTIFICATE),
|
||||
"not replacing certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NOT_SERVER), "not server"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_APPLICATION_PROTOCOL),
|
||||
"no application protocol"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATES_RETURNED),
|
||||
"no certificates returned"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATE_ASSIGNED),
|
||||
"no certificate assigned"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CERTIFICATE_SET), "no certificate set"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CHANGE_FOLLOWING_HRR),
|
||||
"no change following hrr"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHERS_AVAILABLE),
|
||||
"no ciphers available"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHERS_SPECIFIED),
|
||||
"no ciphers specified"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CIPHER_MATCH), "no cipher match"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_CLIENT_CERT_METHOD),
|
||||
"no client cert method"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_COMPRESSION_SPECIFIED),
|
||||
"no compression specified"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_COOKIE_CALLBACK_SET),
|
||||
"no cookie callback set"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER),
|
||||
"Peer haven't sent GOST certificate, required for selected ciphersuite"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_METHOD_SPECIFIED),
|
||||
"no method specified"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PEM_EXTENSIONS), "no pem extensions"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PRIVATE_KEY_ASSIGNED),
|
||||
"no private key assigned"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_PROTOCOLS_AVAILABLE),
|
||||
"no protocols available"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_RENEGOTIATION), "no renegotiation"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_REQUIRED_DIGEST), "no required digest"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SHARED_CIPHER), "no shared cipher"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SHARED_GROUPS), "no shared groups"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS),
|
||||
"no shared signature algorithms"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SRTP_PROFILES), "no srtp profiles"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SUITABLE_KEY_SHARE),
|
||||
"no suitable key share"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM),
|
||||
"no suitable signature algorithm"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_VALID_SCTS), "no valid scts"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NO_VERIFY_COOKIE_CALLBACK),
|
||||
"no verify cookie callback"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NULL_SSL_CTX), "null ssl ctx"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NULL_SSL_METHOD_PASSED),
|
||||
"null ssl method passed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED),
|
||||
"old session cipher not returned"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED),
|
||||
"old session compression algorithm not returned"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OVERFLOW_ERROR), "overflow error"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PACKET_LENGTH_TOO_LONG),
|
||||
"packet length too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PARSE_TLSEXT), "parse tlsext"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PATH_TOO_LONG), "path too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE),
|
||||
"peer did not return a certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEM_NAME_BAD_PREFIX),
|
||||
"pem name bad prefix"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PEM_NAME_TOO_SHORT), "pem name too short"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PIPELINE_FAILURE), "pipeline failure"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR),
|
||||
"post handshake auth encoding err"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PRIVATE_KEY_MISMATCH),
|
||||
"private key mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PROTOCOL_IS_SHUTDOWN),
|
||||
"protocol is shutdown"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PSK_IDENTITY_NOT_FOUND),
|
||||
"psk identity not found"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PSK_NO_CLIENT_CB), "psk no client cb"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_PSK_NO_SERVER_CB), "psk no server cb"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_READ_BIO_NOT_SET), "read bio not set"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_READ_TIMEOUT_EXPIRED),
|
||||
"read timeout expired"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RECORD_LENGTH_MISMATCH),
|
||||
"record length mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RECORD_TOO_SMALL), "record too small"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RENEGOTIATE_EXT_TOO_LONG),
|
||||
"renegotiate ext too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RENEGOTIATION_ENCODING_ERR),
|
||||
"renegotiation encoding err"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_RENEGOTIATION_MISMATCH),
|
||||
"renegotiation mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REQUEST_PENDING), "request pending"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REQUEST_SENT), "request sent"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REQUIRED_CIPHER_MISSING),
|
||||
"required cipher missing"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING),
|
||||
"required compression algorithm missing"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING),
|
||||
"scsv received when renegotiating"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SCT_VERIFICATION_FAILED),
|
||||
"sct verification failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SERVERHELLO_TLSEXT), "serverhello tlsext"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED),
|
||||
"session id context uninitialized"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHUTDOWN_WHILE_IN_INIT),
|
||||
"shutdown while in init"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SIGNATURE_ALGORITHMS_ERROR),
|
||||
"signature algorithms error"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE),
|
||||
"signature for non signing certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRP_A_CALC), "error with the srp params"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES),
|
||||
"srtp could not allocate profiles"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG),
|
||||
"srtp protection profile list too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE),
|
||||
"srtp unknown protection profile"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH),
|
||||
"ssl3 ext invalid max fragment length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_EXT_INVALID_SERVERNAME),
|
||||
"ssl3 ext invalid servername"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE),
|
||||
"ssl3 ext invalid servername type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL3_SESSION_ID_TOO_LONG),
|
||||
"ssl3 session id too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE),
|
||||
"sslv3 alert bad certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC),
|
||||
"sslv3 alert bad record mac"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED),
|
||||
"sslv3 alert certificate expired"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED),
|
||||
"sslv3 alert certificate revoked"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN),
|
||||
"sslv3 alert certificate unknown"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE),
|
||||
"sslv3 alert decompression failure"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE),
|
||||
"sslv3 alert handshake failure"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER),
|
||||
"sslv3 alert illegal parameter"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_NO_CERTIFICATE),
|
||||
"sslv3 alert no certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE),
|
||||
"sslv3 alert unexpected message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE),
|
||||
"sslv3 alert unsupported certificate"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_COMMAND_SECTION_EMPTY),
|
||||
"ssl command section empty"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_COMMAND_SECTION_NOT_FOUND),
|
||||
"ssl command section not found"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION),
|
||||
"ssl ctx has no default ssl version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_HANDSHAKE_FAILURE),
|
||||
"ssl handshake failure"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS),
|
||||
"ssl library has no ciphers"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_NEGATIVE_LENGTH),
|
||||
"ssl negative length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SECTION_EMPTY), "ssl section empty"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SECTION_NOT_FOUND),
|
||||
"ssl section not found"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_CALLBACK_FAILED),
|
||||
"ssl session id callback failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_CONFLICT),
|
||||
"ssl session id conflict"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG),
|
||||
"ssl session id context too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH),
|
||||
"ssl session id has bad length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_ID_TOO_LONG),
|
||||
"ssl session id too long"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SSL_SESSION_VERSION_MISMATCH),
|
||||
"ssl session version mismatch"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_STILL_IN_INIT), "still in init"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED),
|
||||
"tlsv13 alert certificate required"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV13_ALERT_MISSING_EXTENSION),
|
||||
"tlsv13 alert missing extension"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_ACCESS_DENIED),
|
||||
"tlsv1 alert access denied"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_DECODE_ERROR),
|
||||
"tlsv1 alert decode error"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED),
|
||||
"tlsv1 alert decryption failed"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_DECRYPT_ERROR),
|
||||
"tlsv1 alert decrypt error"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION),
|
||||
"tlsv1 alert export restriction"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK),
|
||||
"tlsv1 alert inappropriate fallback"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY),
|
||||
"tlsv1 alert insufficient security"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_INTERNAL_ERROR),
|
||||
"tlsv1 alert internal error"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION),
|
||||
"tlsv1 alert no renegotiation"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION),
|
||||
"tlsv1 alert protocol version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW),
|
||||
"tlsv1 alert record overflow"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_UNKNOWN_CA),
|
||||
"tlsv1 alert unknown ca"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_ALERT_USER_CANCELLED),
|
||||
"tlsv1 alert user cancelled"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE),
|
||||
"tlsv1 bad certificate hash value"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE),
|
||||
"tlsv1 bad certificate status response"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE),
|
||||
"tlsv1 certificate unobtainable"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_UNRECOGNIZED_NAME),
|
||||
"tlsv1 unrecognized name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLSV1_UNSUPPORTED_EXTENSION),
|
||||
"tlsv1 unsupported extension"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLS_ILLEGAL_EXPORTER_LABEL),
|
||||
"tls illegal exporter label"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST),
|
||||
"tls invalid ecpointformat list"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TOO_MANY_KEY_UPDATES),
|
||||
"too many key updates"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TOO_MANY_WARN_ALERTS),
|
||||
"too many warn alerts"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_TOO_MUCH_EARLY_DATA),
|
||||
"too much early data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS),
|
||||
"unable to find ecdh parameters"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS),
|
||||
"unable to find public key parameters"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES),
|
||||
"unable to load ssl3 md5 routines"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES),
|
||||
"unable to load ssl3 sha1 routines"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_CCS_MESSAGE),
|
||||
"unexpected ccs message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_END_OF_EARLY_DATA),
|
||||
"unexpected end of early data"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_MESSAGE), "unexpected message"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNEXPECTED_RECORD), "unexpected record"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNINITIALIZED), "uninitialized"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_ALERT_TYPE), "unknown alert type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CERTIFICATE_TYPE),
|
||||
"unknown certificate type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CIPHER_RETURNED),
|
||||
"unknown cipher returned"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CIPHER_TYPE),
|
||||
"unknown cipher type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_CMD_NAME), "unknown cmd name"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_COMMAND), "unknown command"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_DIGEST), "unknown digest"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE),
|
||||
"unknown key exchange type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_PKEY_TYPE), "unknown pkey type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_PROTOCOL), "unknown protocol"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_SSL_VERSION),
|
||||
"unknown ssl version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNKNOWN_STATE), "unknown state"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED),
|
||||
"unsafe legacy renegotiation disabled"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSOLICITED_EXTENSION),
|
||||
"unsolicited extension"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM),
|
||||
"unsupported compression algorithm"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE),
|
||||
"unsupported elliptic curve"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_PROTOCOL),
|
||||
"unsupported protocol"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_SSL_VERSION),
|
||||
"unsupported ssl version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_UNSUPPORTED_STATUS_TYPE),
|
||||
"unsupported status type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_USE_SRTP_NOT_NEGOTIATED),
|
||||
"use srtp not negotiated"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_VERSION_TOO_HIGH), "version too high"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_VERSION_TOO_LOW), "version too low"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CERTIFICATE_TYPE),
|
||||
"wrong certificate type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CIPHER_RETURNED),
|
||||
"wrong cipher returned"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_CURVE), "wrong curve"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_LENGTH),
|
||||
"wrong signature length"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_SIZE),
|
||||
"wrong signature size"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SIGNATURE_TYPE),
|
||||
"wrong signature type"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_SSL_VERSION), "wrong ssl version"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_WRONG_VERSION_NUMBER),
|
||||
"wrong version number"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_X509_LIB), "x509 lib"},
|
||||
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS),
|
||||
"x509 verification setup problems"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
int ERR_load_SSL_strings(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
if (ERR_func_error_string(SSL_str_functs[0].error) == NULL) {
|
||||
ERR_load_strings_const(SSL_str_functs);
|
||||
ERR_load_strings_const(SSL_str_reasons);
|
||||
}
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
+5723
@@ -0,0 +1,5723 @@
|
||||
/*
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
|
||||
* Copyright 2005 Nokia. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "ssl_locl.h"
|
||||
#include "e_os.h"
|
||||
#include <openssl/objects.h>
|
||||
#include <openssl/x509v3.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/rand_drbg.h>
|
||||
#include <openssl/ocsp.h>
|
||||
#include <openssl/dh.h>
|
||||
#include <openssl/engine.h>
|
||||
#include <openssl/async.h>
|
||||
#include <openssl/ct.h>
|
||||
#include <openssl/trace.h>
|
||||
#include "internal/cryptlib.h"
|
||||
#include "internal/refcount.h"
|
||||
#include "internal/ktls.h"
|
||||
|
||||
static int ssl_undefined_function_1(SSL *ssl, SSL3_RECORD *r, size_t s, int t)
|
||||
{
|
||||
(void)r;
|
||||
(void)s;
|
||||
(void)t;
|
||||
return ssl_undefined_function(ssl);
|
||||
}
|
||||
|
||||
static int ssl_undefined_function_2(SSL *ssl, SSL3_RECORD *r, unsigned char *s,
|
||||
int t)
|
||||
{
|
||||
(void)r;
|
||||
(void)s;
|
||||
(void)t;
|
||||
return ssl_undefined_function(ssl);
|
||||
}
|
||||
|
||||
static int ssl_undefined_function_3(SSL *ssl, unsigned char *r,
|
||||
unsigned char *s, size_t t, size_t *u)
|
||||
{
|
||||
(void)r;
|
||||
(void)s;
|
||||
(void)t;
|
||||
(void)u;
|
||||
return ssl_undefined_function(ssl);
|
||||
}
|
||||
|
||||
static int ssl_undefined_function_4(SSL *ssl, int r)
|
||||
{
|
||||
(void)r;
|
||||
return ssl_undefined_function(ssl);
|
||||
}
|
||||
|
||||
static size_t ssl_undefined_function_5(SSL *ssl, const char *r, size_t s,
|
||||
unsigned char *t)
|
||||
{
|
||||
(void)r;
|
||||
(void)s;
|
||||
(void)t;
|
||||
return ssl_undefined_function(ssl);
|
||||
}
|
||||
|
||||
static int ssl_undefined_function_6(int r)
|
||||
{
|
||||
(void)r;
|
||||
return ssl_undefined_function(NULL);
|
||||
}
|
||||
|
||||
static int ssl_undefined_function_7(SSL *ssl, unsigned char *r, size_t s,
|
||||
const char *t, size_t u,
|
||||
const unsigned char *v, size_t w, int x)
|
||||
{
|
||||
(void)r;
|
||||
(void)s;
|
||||
(void)t;
|
||||
(void)u;
|
||||
(void)v;
|
||||
(void)w;
|
||||
(void)x;
|
||||
return ssl_undefined_function(ssl);
|
||||
}
|
||||
|
||||
SSL3_ENC_METHOD ssl3_undef_enc_method = {
|
||||
ssl_undefined_function_1,
|
||||
ssl_undefined_function_2,
|
||||
ssl_undefined_function,
|
||||
ssl_undefined_function_3,
|
||||
ssl_undefined_function_4,
|
||||
ssl_undefined_function_5,
|
||||
NULL, /* client_finished_label */
|
||||
0, /* client_finished_label_len */
|
||||
NULL, /* server_finished_label */
|
||||
0, /* server_finished_label_len */
|
||||
ssl_undefined_function_6,
|
||||
ssl_undefined_function_7,
|
||||
};
|
||||
|
||||
struct ssl_async_args {
|
||||
SSL *s;
|
||||
void *buf;
|
||||
size_t num;
|
||||
enum { READFUNC, WRITEFUNC, OTHERFUNC } type;
|
||||
union {
|
||||
int (*func_read) (SSL *, void *, size_t, size_t *);
|
||||
int (*func_write) (SSL *, const void *, size_t, size_t *);
|
||||
int (*func_other) (SSL *);
|
||||
} f;
|
||||
};
|
||||
|
||||
static const struct {
|
||||
uint8_t mtype;
|
||||
uint8_t ord;
|
||||
int nid;
|
||||
} dane_mds[] = {
|
||||
{
|
||||
DANETLS_MATCHING_FULL, 0, NID_undef
|
||||
},
|
||||
{
|
||||
DANETLS_MATCHING_2256, 1, NID_sha256
|
||||
},
|
||||
{
|
||||
DANETLS_MATCHING_2512, 2, NID_sha512
|
||||
},
|
||||
};
|
||||
|
||||
static int dane_ctx_enable(struct dane_ctx_st *dctx)
|
||||
{
|
||||
const EVP_MD **mdevp;
|
||||
uint8_t *mdord;
|
||||
uint8_t mdmax = DANETLS_MATCHING_LAST;
|
||||
int n = ((int)mdmax) + 1; /* int to handle PrivMatch(255) */
|
||||
size_t i;
|
||||
|
||||
if (dctx->mdevp != NULL)
|
||||
return 1;
|
||||
|
||||
mdevp = OPENSSL_zalloc(n * sizeof(*mdevp));
|
||||
mdord = OPENSSL_zalloc(n * sizeof(*mdord));
|
||||
|
||||
if (mdord == NULL || mdevp == NULL) {
|
||||
OPENSSL_free(mdord);
|
||||
OPENSSL_free(mdevp);
|
||||
SSLerr(SSL_F_DANE_CTX_ENABLE, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Install default entries */
|
||||
for (i = 0; i < OSSL_NELEM(dane_mds); ++i) {
|
||||
const EVP_MD *md;
|
||||
|
||||
if (dane_mds[i].nid == NID_undef ||
|
||||
(md = EVP_get_digestbynid(dane_mds[i].nid)) == NULL)
|
||||
continue;
|
||||
mdevp[dane_mds[i].mtype] = md;
|
||||
mdord[dane_mds[i].mtype] = dane_mds[i].ord;
|
||||
}
|
||||
|
||||
dctx->mdevp = mdevp;
|
||||
dctx->mdord = mdord;
|
||||
dctx->mdmax = mdmax;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void dane_ctx_final(struct dane_ctx_st *dctx)
|
||||
{
|
||||
OPENSSL_free(dctx->mdevp);
|
||||
dctx->mdevp = NULL;
|
||||
|
||||
OPENSSL_free(dctx->mdord);
|
||||
dctx->mdord = NULL;
|
||||
dctx->mdmax = 0;
|
||||
}
|
||||
|
||||
static void tlsa_free(danetls_record *t)
|
||||
{
|
||||
if (t == NULL)
|
||||
return;
|
||||
OPENSSL_free(t->data);
|
||||
EVP_PKEY_free(t->spki);
|
||||
OPENSSL_free(t);
|
||||
}
|
||||
|
||||
static void dane_final(SSL_DANE *dane)
|
||||
{
|
||||
sk_danetls_record_pop_free(dane->trecs, tlsa_free);
|
||||
dane->trecs = NULL;
|
||||
|
||||
sk_X509_pop_free(dane->certs, X509_free);
|
||||
dane->certs = NULL;
|
||||
|
||||
X509_free(dane->mcert);
|
||||
dane->mcert = NULL;
|
||||
dane->mtlsa = NULL;
|
||||
dane->mdpth = -1;
|
||||
dane->pdpth = -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* dane_copy - Copy dane configuration, sans verification state.
|
||||
*/
|
||||
static int ssl_dane_dup(SSL *to, SSL *from)
|
||||
{
|
||||
int num;
|
||||
int i;
|
||||
|
||||
if (!DANETLS_ENABLED(&from->dane))
|
||||
return 1;
|
||||
|
||||
num = sk_danetls_record_num(from->dane.trecs);
|
||||
dane_final(&to->dane);
|
||||
to->dane.flags = from->dane.flags;
|
||||
to->dane.dctx = &to->ctx->dane;
|
||||
to->dane.trecs = sk_danetls_record_new_reserve(NULL, num);
|
||||
|
||||
if (to->dane.trecs == NULL) {
|
||||
SSLerr(SSL_F_SSL_DANE_DUP, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < num; ++i) {
|
||||
danetls_record *t = sk_danetls_record_value(from->dane.trecs, i);
|
||||
|
||||
if (SSL_dane_tlsa_add(to, t->usage, t->selector, t->mtype,
|
||||
t->data, t->dlen) <= 0)
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int dane_mtype_set(struct dane_ctx_st *dctx,
|
||||
const EVP_MD *md, uint8_t mtype, uint8_t ord)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (mtype == DANETLS_MATCHING_FULL && md != NULL) {
|
||||
SSLerr(SSL_F_DANE_MTYPE_SET, SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mtype > dctx->mdmax) {
|
||||
const EVP_MD **mdevp;
|
||||
uint8_t *mdord;
|
||||
int n = ((int)mtype) + 1;
|
||||
|
||||
mdevp = OPENSSL_realloc(dctx->mdevp, n * sizeof(*mdevp));
|
||||
if (mdevp == NULL) {
|
||||
SSLerr(SSL_F_DANE_MTYPE_SET, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
dctx->mdevp = mdevp;
|
||||
|
||||
mdord = OPENSSL_realloc(dctx->mdord, n * sizeof(*mdord));
|
||||
if (mdord == NULL) {
|
||||
SSLerr(SSL_F_DANE_MTYPE_SET, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
dctx->mdord = mdord;
|
||||
|
||||
/* Zero-fill any gaps */
|
||||
for (i = dctx->mdmax + 1; i < mtype; ++i) {
|
||||
mdevp[i] = NULL;
|
||||
mdord[i] = 0;
|
||||
}
|
||||
|
||||
dctx->mdmax = mtype;
|
||||
}
|
||||
|
||||
dctx->mdevp[mtype] = md;
|
||||
/* Coerce ordinal of disabled matching types to 0 */
|
||||
dctx->mdord[mtype] = (md == NULL) ? 0 : ord;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const EVP_MD *tlsa_md_get(SSL_DANE *dane, uint8_t mtype)
|
||||
{
|
||||
if (mtype > dane->dctx->mdmax)
|
||||
return NULL;
|
||||
return dane->dctx->mdevp[mtype];
|
||||
}
|
||||
|
||||
static int dane_tlsa_add(SSL_DANE *dane,
|
||||
uint8_t usage,
|
||||
uint8_t selector,
|
||||
uint8_t mtype, unsigned const char *data, size_t dlen)
|
||||
{
|
||||
danetls_record *t;
|
||||
const EVP_MD *md = NULL;
|
||||
int ilen = (int)dlen;
|
||||
int i;
|
||||
int num;
|
||||
|
||||
if (dane->trecs == NULL) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_NOT_ENABLED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ilen < 0 || dlen != (size_t)ilen) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_DATA_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (usage > DANETLS_USAGE_LAST) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (selector > DANETLS_SELECTOR_LAST) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_SELECTOR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mtype != DANETLS_MATCHING_FULL) {
|
||||
md = tlsa_md_get(dane, mtype);
|
||||
if (md == NULL) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_MATCHING_TYPE);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (md != NULL && dlen != (size_t)EVP_MD_size(md)) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
if (!data) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_NULL_DATA);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((t = OPENSSL_zalloc(sizeof(*t))) == NULL) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
|
||||
t->usage = usage;
|
||||
t->selector = selector;
|
||||
t->mtype = mtype;
|
||||
t->data = OPENSSL_malloc(dlen);
|
||||
if (t->data == NULL) {
|
||||
tlsa_free(t);
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
memcpy(t->data, data, dlen);
|
||||
t->dlen = dlen;
|
||||
|
||||
/* Validate and cache full certificate or public key */
|
||||
if (mtype == DANETLS_MATCHING_FULL) {
|
||||
const unsigned char *p = data;
|
||||
X509 *cert = NULL;
|
||||
EVP_PKEY *pkey = NULL;
|
||||
|
||||
switch (selector) {
|
||||
case DANETLS_SELECTOR_CERT:
|
||||
if (!d2i_X509(&cert, &p, ilen) || p < data ||
|
||||
dlen != (size_t)(p - data)) {
|
||||
tlsa_free(t);
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
|
||||
return 0;
|
||||
}
|
||||
if (X509_get0_pubkey(cert) == NULL) {
|
||||
tlsa_free(t);
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_CERTIFICATE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((DANETLS_USAGE_BIT(usage) & DANETLS_TA_MASK) == 0) {
|
||||
X509_free(cert);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* For usage DANE-TA(2), we support authentication via "2 0 0" TLSA
|
||||
* records that contain full certificates of trust-anchors that are
|
||||
* not present in the wire chain. For usage PKIX-TA(0), we augment
|
||||
* the chain with untrusted Full(0) certificates from DNS, in case
|
||||
* they are missing from the chain.
|
||||
*/
|
||||
if ((dane->certs == NULL &&
|
||||
(dane->certs = sk_X509_new_null()) == NULL) ||
|
||||
!sk_X509_push(dane->certs, cert)) {
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
|
||||
X509_free(cert);
|
||||
tlsa_free(t);
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case DANETLS_SELECTOR_SPKI:
|
||||
if (!d2i_PUBKEY(&pkey, &p, ilen) || p < data ||
|
||||
dlen != (size_t)(p - data)) {
|
||||
tlsa_free(t);
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, SSL_R_DANE_TLSA_BAD_PUBLIC_KEY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* For usage DANE-TA(2), we support authentication via "2 1 0" TLSA
|
||||
* records that contain full bare keys of trust-anchors that are
|
||||
* not present in the wire chain.
|
||||
*/
|
||||
if (usage == DANETLS_USAGE_DANE_TA)
|
||||
t->spki = pkey;
|
||||
else
|
||||
EVP_PKEY_free(pkey);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*-
|
||||
* Find the right insertion point for the new record.
|
||||
*
|
||||
* See crypto/x509/x509_vfy.c. We sort DANE-EE(3) records first, so that
|
||||
* they can be processed first, as they require no chain building, and no
|
||||
* expiration or hostname checks. Because DANE-EE(3) is numerically
|
||||
* largest, this is accomplished via descending sort by "usage".
|
||||
*
|
||||
* We also sort in descending order by matching ordinal to simplify
|
||||
* the implementation of digest agility in the verification code.
|
||||
*
|
||||
* The choice of order for the selector is not significant, so we
|
||||
* use the same descending order for consistency.
|
||||
*/
|
||||
num = sk_danetls_record_num(dane->trecs);
|
||||
for (i = 0; i < num; ++i) {
|
||||
danetls_record *rec = sk_danetls_record_value(dane->trecs, i);
|
||||
|
||||
if (rec->usage > usage)
|
||||
continue;
|
||||
if (rec->usage < usage)
|
||||
break;
|
||||
if (rec->selector > selector)
|
||||
continue;
|
||||
if (rec->selector < selector)
|
||||
break;
|
||||
if (dane->dctx->mdord[rec->mtype] > dane->dctx->mdord[mtype])
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!sk_danetls_record_insert(dane->trecs, t, i)) {
|
||||
tlsa_free(t);
|
||||
SSLerr(SSL_F_DANE_TLSA_ADD, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
dane->umask |= DANETLS_USAGE_BIT(usage);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return 0 if there is only one version configured and it was disabled
|
||||
* at configure time. Return 1 otherwise.
|
||||
*/
|
||||
static int ssl_check_allowed_versions(int min_version, int max_version)
|
||||
{
|
||||
int minisdtls = 0, maxisdtls = 0;
|
||||
|
||||
/* Figure out if we're doing DTLS versions or TLS versions */
|
||||
if (min_version == DTLS1_BAD_VER
|
||||
|| min_version >> 8 == DTLS1_VERSION_MAJOR)
|
||||
minisdtls = 1;
|
||||
if (max_version == DTLS1_BAD_VER
|
||||
|| max_version >> 8 == DTLS1_VERSION_MAJOR)
|
||||
maxisdtls = 1;
|
||||
/* A wildcard version of 0 could be DTLS or TLS. */
|
||||
if ((minisdtls && !maxisdtls && max_version != 0)
|
||||
|| (maxisdtls && !minisdtls && min_version != 0)) {
|
||||
/* Mixing DTLS and TLS versions will lead to sadness; deny it. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (minisdtls || maxisdtls) {
|
||||
/* Do DTLS version checks. */
|
||||
if (min_version == 0)
|
||||
/* Ignore DTLS1_BAD_VER */
|
||||
min_version = DTLS1_VERSION;
|
||||
if (max_version == 0)
|
||||
max_version = DTLS1_2_VERSION;
|
||||
#ifdef OPENSSL_NO_DTLS1_2
|
||||
if (max_version == DTLS1_2_VERSION)
|
||||
max_version = DTLS1_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_DTLS1
|
||||
if (min_version == DTLS1_VERSION)
|
||||
min_version = DTLS1_2_VERSION;
|
||||
#endif
|
||||
/* Done massaging versions; do the check. */
|
||||
if (0
|
||||
#ifdef OPENSSL_NO_DTLS1
|
||||
|| (DTLS_VERSION_GE(min_version, DTLS1_VERSION)
|
||||
&& DTLS_VERSION_GE(DTLS1_VERSION, max_version))
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_DTLS1_2
|
||||
|| (DTLS_VERSION_GE(min_version, DTLS1_2_VERSION)
|
||||
&& DTLS_VERSION_GE(DTLS1_2_VERSION, max_version))
|
||||
#endif
|
||||
)
|
||||
return 0;
|
||||
} else {
|
||||
/* Regular TLS version checks. */
|
||||
if (min_version == 0)
|
||||
min_version = SSL3_VERSION;
|
||||
if (max_version == 0)
|
||||
max_version = TLS1_3_VERSION;
|
||||
#ifdef OPENSSL_NO_TLS1_3
|
||||
if (max_version == TLS1_3_VERSION)
|
||||
max_version = TLS1_2_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1_2
|
||||
if (max_version == TLS1_2_VERSION)
|
||||
max_version = TLS1_1_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1_1
|
||||
if (max_version == TLS1_1_VERSION)
|
||||
max_version = TLS1_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1
|
||||
if (max_version == TLS1_VERSION)
|
||||
max_version = SSL3_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_SSL3
|
||||
if (min_version == SSL3_VERSION)
|
||||
min_version = TLS1_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1
|
||||
if (min_version == TLS1_VERSION)
|
||||
min_version = TLS1_1_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1_1
|
||||
if (min_version == TLS1_1_VERSION)
|
||||
min_version = TLS1_2_VERSION;
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1_2
|
||||
if (min_version == TLS1_2_VERSION)
|
||||
min_version = TLS1_3_VERSION;
|
||||
#endif
|
||||
/* Done massaging versions; do the check. */
|
||||
if (0
|
||||
#ifdef OPENSSL_NO_SSL3
|
||||
|| (min_version <= SSL3_VERSION && SSL3_VERSION <= max_version)
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1
|
||||
|| (min_version <= TLS1_VERSION && TLS1_VERSION <= max_version)
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1_1
|
||||
|| (min_version <= TLS1_1_VERSION && TLS1_1_VERSION <= max_version)
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1_2
|
||||
|| (min_version <= TLS1_2_VERSION && TLS1_2_VERSION <= max_version)
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_TLS1_3
|
||||
|| (min_version <= TLS1_3_VERSION && TLS1_3_VERSION <= max_version)
|
||||
#endif
|
||||
)
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void clear_ciphers(SSL *s)
|
||||
{
|
||||
/* clear the current cipher */
|
||||
ssl_clear_cipher_ctx(s);
|
||||
ssl_clear_hash_ctx(&s->read_hash);
|
||||
ssl_clear_hash_ctx(&s->write_hash);
|
||||
}
|
||||
|
||||
int SSL_clear(SSL *s)
|
||||
{
|
||||
if (s->method == NULL) {
|
||||
SSLerr(SSL_F_SSL_CLEAR, SSL_R_NO_METHOD_SPECIFIED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ssl_clear_bad_session(s)) {
|
||||
SSL_SESSION_free(s->session);
|
||||
s->session = NULL;
|
||||
}
|
||||
SSL_SESSION_free(s->psksession);
|
||||
s->psksession = NULL;
|
||||
OPENSSL_free(s->psksession_id);
|
||||
s->psksession_id = NULL;
|
||||
s->psksession_id_len = 0;
|
||||
s->hello_retry_request = 0;
|
||||
s->sent_tickets = 0;
|
||||
|
||||
s->error = 0;
|
||||
s->hit = 0;
|
||||
s->shutdown = 0;
|
||||
|
||||
if (s->renegotiate) {
|
||||
SSLerr(SSL_F_SSL_CLEAR, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ossl_statem_clear(s);
|
||||
|
||||
s->version = s->method->version;
|
||||
s->client_version = s->version;
|
||||
s->rwstate = SSL_NOTHING;
|
||||
|
||||
BUF_MEM_free(s->init_buf);
|
||||
s->init_buf = NULL;
|
||||
clear_ciphers(s);
|
||||
s->first_packet = 0;
|
||||
|
||||
s->key_update = SSL_KEY_UPDATE_NONE;
|
||||
|
||||
EVP_MD_CTX_free(s->pha_dgst);
|
||||
s->pha_dgst = NULL;
|
||||
|
||||
/* Reset DANE verification result state */
|
||||
s->dane.mdpth = -1;
|
||||
s->dane.pdpth = -1;
|
||||
X509_free(s->dane.mcert);
|
||||
s->dane.mcert = NULL;
|
||||
s->dane.mtlsa = NULL;
|
||||
|
||||
/* Clear the verification result peername */
|
||||
X509_VERIFY_PARAM_move_peername(s->param, NULL);
|
||||
|
||||
/* Clear any shared connection state */
|
||||
OPENSSL_free(s->shared_sigalgs);
|
||||
s->shared_sigalgs = NULL;
|
||||
s->shared_sigalgslen = 0;
|
||||
|
||||
/*
|
||||
* Check to see if we were changed into a different method, if so, revert
|
||||
* back.
|
||||
*/
|
||||
if (s->method != s->ctx->method) {
|
||||
s->method->ssl_free(s);
|
||||
s->method = s->ctx->method;
|
||||
if (!s->method->ssl_new(s))
|
||||
return 0;
|
||||
} else {
|
||||
if (!s->method->ssl_clear(s))
|
||||
return 0;
|
||||
}
|
||||
|
||||
RECORD_LAYER_clear(&s->rlayer);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** Used to change an SSL_CTXs default SSL method type */
|
||||
int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
|
||||
{
|
||||
STACK_OF(SSL_CIPHER) *sk;
|
||||
|
||||
ctx->method = meth;
|
||||
|
||||
if (!SSL_CTX_set_ciphersuites(ctx, OSSL_default_ciphersuites())) {
|
||||
SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
|
||||
return 0;
|
||||
}
|
||||
sk = ssl_create_cipher_list(ctx->method,
|
||||
ctx->tls13_ciphersuites,
|
||||
&(ctx->cipher_list),
|
||||
&(ctx->cipher_list_by_id),
|
||||
OSSL_default_cipher_list(), ctx->cert);
|
||||
if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
|
||||
SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
SSL *SSL_new(SSL_CTX *ctx)
|
||||
{
|
||||
SSL *s;
|
||||
|
||||
if (ctx == NULL) {
|
||||
SSLerr(SSL_F_SSL_NEW, SSL_R_NULL_SSL_CTX);
|
||||
return NULL;
|
||||
}
|
||||
if (ctx->method == NULL) {
|
||||
SSLerr(SSL_F_SSL_NEW, SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
s = OPENSSL_zalloc(sizeof(*s));
|
||||
if (s == NULL)
|
||||
goto err;
|
||||
|
||||
s->references = 1;
|
||||
s->lock = CRYPTO_THREAD_lock_new();
|
||||
if (s->lock == NULL) {
|
||||
OPENSSL_free(s);
|
||||
s = NULL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
RECORD_LAYER_init(&s->rlayer, s);
|
||||
|
||||
s->options = ctx->options;
|
||||
s->dane.flags = ctx->dane.flags;
|
||||
s->min_proto_version = ctx->min_proto_version;
|
||||
s->max_proto_version = ctx->max_proto_version;
|
||||
s->mode = ctx->mode;
|
||||
s->max_cert_list = ctx->max_cert_list;
|
||||
s->max_early_data = ctx->max_early_data;
|
||||
s->recv_max_early_data = ctx->recv_max_early_data;
|
||||
s->num_tickets = ctx->num_tickets;
|
||||
s->pha_enabled = ctx->pha_enabled;
|
||||
|
||||
/* Shallow copy of the ciphersuites stack */
|
||||
s->tls13_ciphersuites = sk_SSL_CIPHER_dup(ctx->tls13_ciphersuites);
|
||||
if (s->tls13_ciphersuites == NULL)
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* Earlier library versions used to copy the pointer to the CERT, not
|
||||
* its contents; only when setting new parameters for the per-SSL
|
||||
* copy, ssl_cert_new would be called (and the direct reference to
|
||||
* the per-SSL_CTX settings would be lost, but those still were
|
||||
* indirectly accessed for various purposes, and for that reason they
|
||||
* used to be known as s->ctx->default_cert). Now we don't look at the
|
||||
* SSL_CTX's CERT after having duplicated it once.
|
||||
*/
|
||||
s->cert = ssl_cert_dup(ctx->cert);
|
||||
if (s->cert == NULL)
|
||||
goto err;
|
||||
|
||||
RECORD_LAYER_set_read_ahead(&s->rlayer, ctx->read_ahead);
|
||||
s->msg_callback = ctx->msg_callback;
|
||||
s->msg_callback_arg = ctx->msg_callback_arg;
|
||||
s->verify_mode = ctx->verify_mode;
|
||||
s->not_resumable_session_cb = ctx->not_resumable_session_cb;
|
||||
s->record_padding_cb = ctx->record_padding_cb;
|
||||
s->record_padding_arg = ctx->record_padding_arg;
|
||||
s->block_padding = ctx->block_padding;
|
||||
s->sid_ctx_length = ctx->sid_ctx_length;
|
||||
if (!ossl_assert(s->sid_ctx_length <= sizeof(s->sid_ctx)))
|
||||
goto err;
|
||||
memcpy(&s->sid_ctx, &ctx->sid_ctx, sizeof(s->sid_ctx));
|
||||
s->verify_callback = ctx->default_verify_callback;
|
||||
s->generate_session_id = ctx->generate_session_id;
|
||||
|
||||
s->param = X509_VERIFY_PARAM_new();
|
||||
if (s->param == NULL)
|
||||
goto err;
|
||||
X509_VERIFY_PARAM_inherit(s->param, ctx->param);
|
||||
s->quiet_shutdown = ctx->quiet_shutdown;
|
||||
|
||||
s->ext.max_fragment_len_mode = ctx->ext.max_fragment_len_mode;
|
||||
s->max_send_fragment = ctx->max_send_fragment;
|
||||
s->split_send_fragment = ctx->split_send_fragment;
|
||||
s->max_pipelines = ctx->max_pipelines;
|
||||
if (s->max_pipelines > 1)
|
||||
RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
|
||||
if (ctx->default_read_buf_len > 0)
|
||||
SSL_set_default_read_buffer_len(s, ctx->default_read_buf_len);
|
||||
|
||||
SSL_CTX_up_ref(ctx);
|
||||
s->ctx = ctx;
|
||||
s->ext.debug_cb = 0;
|
||||
s->ext.debug_arg = NULL;
|
||||
s->ext.ticket_expected = 0;
|
||||
s->ext.status_type = ctx->ext.status_type;
|
||||
s->ext.status_expected = 0;
|
||||
s->ext.ocsp.ids = NULL;
|
||||
s->ext.ocsp.exts = NULL;
|
||||
s->ext.ocsp.resp = NULL;
|
||||
s->ext.ocsp.resp_len = 0;
|
||||
SSL_CTX_up_ref(ctx);
|
||||
s->session_ctx = ctx;
|
||||
#ifndef OPENSSL_NO_EC
|
||||
if (ctx->ext.ecpointformats) {
|
||||
s->ext.ecpointformats =
|
||||
OPENSSL_memdup(ctx->ext.ecpointformats,
|
||||
ctx->ext.ecpointformats_len);
|
||||
if (!s->ext.ecpointformats)
|
||||
goto err;
|
||||
s->ext.ecpointformats_len =
|
||||
ctx->ext.ecpointformats_len;
|
||||
}
|
||||
#endif
|
||||
if (ctx->ext.supportedgroups) {
|
||||
s->ext.supportedgroups =
|
||||
OPENSSL_memdup(ctx->ext.supportedgroups,
|
||||
ctx->ext.supportedgroups_len
|
||||
* sizeof(*ctx->ext.supportedgroups));
|
||||
if (!s->ext.supportedgroups)
|
||||
goto err;
|
||||
s->ext.supportedgroups_len = ctx->ext.supportedgroups_len;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
s->ext.npn = NULL;
|
||||
#endif
|
||||
|
||||
if (s->ctx->ext.alpn) {
|
||||
s->ext.alpn = OPENSSL_malloc(s->ctx->ext.alpn_len);
|
||||
if (s->ext.alpn == NULL)
|
||||
goto err;
|
||||
memcpy(s->ext.alpn, s->ctx->ext.alpn, s->ctx->ext.alpn_len);
|
||||
s->ext.alpn_len = s->ctx->ext.alpn_len;
|
||||
}
|
||||
|
||||
s->verified_chain = NULL;
|
||||
s->verify_result = X509_V_OK;
|
||||
|
||||
s->default_passwd_callback = ctx->default_passwd_callback;
|
||||
s->default_passwd_callback_userdata = ctx->default_passwd_callback_userdata;
|
||||
|
||||
s->method = ctx->method;
|
||||
|
||||
s->key_update = SSL_KEY_UPDATE_NONE;
|
||||
|
||||
s->allow_early_data_cb = ctx->allow_early_data_cb;
|
||||
s->allow_early_data_cb_data = ctx->allow_early_data_cb_data;
|
||||
|
||||
if (!s->method->ssl_new(s))
|
||||
goto err;
|
||||
|
||||
s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1;
|
||||
|
||||
if (!SSL_clear(s))
|
||||
goto err;
|
||||
|
||||
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data))
|
||||
goto err;
|
||||
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
s->psk_client_callback = ctx->psk_client_callback;
|
||||
s->psk_server_callback = ctx->psk_server_callback;
|
||||
#endif
|
||||
s->psk_find_session_cb = ctx->psk_find_session_cb;
|
||||
s->psk_use_session_cb = ctx->psk_use_session_cb;
|
||||
|
||||
s->async_cb = ctx->async_cb;
|
||||
s->async_cb_arg = ctx->async_cb_arg;
|
||||
|
||||
s->job = NULL;
|
||||
|
||||
#ifndef OPENSSL_NO_CT
|
||||
if (!SSL_set_ct_validation_callback(s, ctx->ct_validation_callback,
|
||||
ctx->ct_validation_callback_arg))
|
||||
goto err;
|
||||
#endif
|
||||
|
||||
return s;
|
||||
err:
|
||||
SSL_free(s);
|
||||
SSLerr(SSL_F_SSL_NEW, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int SSL_is_dtls(const SSL *s)
|
||||
{
|
||||
return SSL_IS_DTLS(s) ? 1 : 0;
|
||||
}
|
||||
|
||||
int SSL_up_ref(SSL *s)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (CRYPTO_UP_REF(&s->references, &i, s->lock) <= 0)
|
||||
return 0;
|
||||
|
||||
REF_PRINT_COUNT("SSL", s);
|
||||
REF_ASSERT_ISNT(i < 2);
|
||||
return ((i > 1) ? 1 : 0);
|
||||
}
|
||||
|
||||
int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,
|
||||
unsigned int sid_ctx_len)
|
||||
{
|
||||
if (sid_ctx_len > sizeof(ctx->sid_ctx)) {
|
||||
SSLerr(SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT,
|
||||
SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
ctx->sid_ctx_length = sid_ctx_len;
|
||||
memcpy(ctx->sid_ctx, sid_ctx, sid_ctx_len);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,
|
||||
unsigned int sid_ctx_len)
|
||||
{
|
||||
if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
|
||||
SSLerr(SSL_F_SSL_SET_SESSION_ID_CONTEXT,
|
||||
SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
ssl->sid_ctx_length = sid_ctx_len;
|
||||
memcpy(ssl->sid_ctx, sid_ctx, sid_ctx_len);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb)
|
||||
{
|
||||
CRYPTO_THREAD_write_lock(ctx->lock);
|
||||
ctx->generate_session_id = cb;
|
||||
CRYPTO_THREAD_unlock(ctx->lock);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_generate_session_id(SSL *ssl, GEN_SESSION_CB cb)
|
||||
{
|
||||
CRYPTO_THREAD_write_lock(ssl->lock);
|
||||
ssl->generate_session_id = cb;
|
||||
CRYPTO_THREAD_unlock(ssl->lock);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,
|
||||
unsigned int id_len)
|
||||
{
|
||||
/*
|
||||
* A quick examination of SSL_SESSION_hash and SSL_SESSION_cmp shows how
|
||||
* we can "construct" a session to give us the desired check - i.e. to
|
||||
* find if there's a session in the hash table that would conflict with
|
||||
* any new session built out of this id/id_len and the ssl_version in use
|
||||
* by this SSL.
|
||||
*/
|
||||
SSL_SESSION r, *p;
|
||||
|
||||
if (id_len > sizeof(r.session_id))
|
||||
return 0;
|
||||
|
||||
r.ssl_version = ssl->version;
|
||||
r.session_id_length = id_len;
|
||||
memcpy(r.session_id, id, id_len);
|
||||
|
||||
CRYPTO_THREAD_read_lock(ssl->session_ctx->lock);
|
||||
p = lh_SSL_SESSION_retrieve(ssl->session_ctx->sessions, &r);
|
||||
CRYPTO_THREAD_unlock(ssl->session_ctx->lock);
|
||||
return (p != NULL);
|
||||
}
|
||||
|
||||
int SSL_CTX_set_purpose(SSL_CTX *s, int purpose)
|
||||
{
|
||||
return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
|
||||
}
|
||||
|
||||
int SSL_set_purpose(SSL *s, int purpose)
|
||||
{
|
||||
return X509_VERIFY_PARAM_set_purpose(s->param, purpose);
|
||||
}
|
||||
|
||||
int SSL_CTX_set_trust(SSL_CTX *s, int trust)
|
||||
{
|
||||
return X509_VERIFY_PARAM_set_trust(s->param, trust);
|
||||
}
|
||||
|
||||
int SSL_set_trust(SSL *s, int trust)
|
||||
{
|
||||
return X509_VERIFY_PARAM_set_trust(s->param, trust);
|
||||
}
|
||||
|
||||
int SSL_set1_host(SSL *s, const char *hostname)
|
||||
{
|
||||
return X509_VERIFY_PARAM_set1_host(s->param, hostname, 0);
|
||||
}
|
||||
|
||||
int SSL_add1_host(SSL *s, const char *hostname)
|
||||
{
|
||||
return X509_VERIFY_PARAM_add1_host(s->param, hostname, 0);
|
||||
}
|
||||
|
||||
void SSL_set_hostflags(SSL *s, unsigned int flags)
|
||||
{
|
||||
X509_VERIFY_PARAM_set_hostflags(s->param, flags);
|
||||
}
|
||||
|
||||
const char *SSL_get0_peername(SSL *s)
|
||||
{
|
||||
return X509_VERIFY_PARAM_get0_peername(s->param);
|
||||
}
|
||||
|
||||
int SSL_CTX_dane_enable(SSL_CTX *ctx)
|
||||
{
|
||||
return dane_ctx_enable(&ctx->dane);
|
||||
}
|
||||
|
||||
unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags)
|
||||
{
|
||||
unsigned long orig = ctx->dane.flags;
|
||||
|
||||
ctx->dane.flags |= flags;
|
||||
return orig;
|
||||
}
|
||||
|
||||
unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags)
|
||||
{
|
||||
unsigned long orig = ctx->dane.flags;
|
||||
|
||||
ctx->dane.flags &= ~flags;
|
||||
return orig;
|
||||
}
|
||||
|
||||
int SSL_dane_enable(SSL *s, const char *basedomain)
|
||||
{
|
||||
SSL_DANE *dane = &s->dane;
|
||||
|
||||
if (s->ctx->dane.mdmax == 0) {
|
||||
SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_CONTEXT_NOT_DANE_ENABLED);
|
||||
return 0;
|
||||
}
|
||||
if (dane->trecs != NULL) {
|
||||
SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_DANE_ALREADY_ENABLED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Default SNI name. This rejects empty names, while set1_host below
|
||||
* accepts them and disables host name checks. To avoid side-effects with
|
||||
* invalid input, set the SNI name first.
|
||||
*/
|
||||
if (s->ext.hostname == NULL) {
|
||||
if (!SSL_set_tlsext_host_name(s, basedomain)) {
|
||||
SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Primary RFC6125 reference identifier */
|
||||
if (!X509_VERIFY_PARAM_set1_host(s->param, basedomain, 0)) {
|
||||
SSLerr(SSL_F_SSL_DANE_ENABLE, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN);
|
||||
return -1;
|
||||
}
|
||||
|
||||
dane->mdpth = -1;
|
||||
dane->pdpth = -1;
|
||||
dane->dctx = &s->ctx->dane;
|
||||
dane->trecs = sk_danetls_record_new_null();
|
||||
|
||||
if (dane->trecs == NULL) {
|
||||
SSLerr(SSL_F_SSL_DANE_ENABLE, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags)
|
||||
{
|
||||
unsigned long orig = ssl->dane.flags;
|
||||
|
||||
ssl->dane.flags |= flags;
|
||||
return orig;
|
||||
}
|
||||
|
||||
unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags)
|
||||
{
|
||||
unsigned long orig = ssl->dane.flags;
|
||||
|
||||
ssl->dane.flags &= ~flags;
|
||||
return orig;
|
||||
}
|
||||
|
||||
int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki)
|
||||
{
|
||||
SSL_DANE *dane = &s->dane;
|
||||
|
||||
if (!DANETLS_ENABLED(dane) || s->verify_result != X509_V_OK)
|
||||
return -1;
|
||||
if (dane->mtlsa) {
|
||||
if (mcert)
|
||||
*mcert = dane->mcert;
|
||||
if (mspki)
|
||||
*mspki = (dane->mcert == NULL) ? dane->mtlsa->spki : NULL;
|
||||
}
|
||||
return dane->mdpth;
|
||||
}
|
||||
|
||||
int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
|
||||
uint8_t *mtype, unsigned const char **data, size_t *dlen)
|
||||
{
|
||||
SSL_DANE *dane = &s->dane;
|
||||
|
||||
if (!DANETLS_ENABLED(dane) || s->verify_result != X509_V_OK)
|
||||
return -1;
|
||||
if (dane->mtlsa) {
|
||||
if (usage)
|
||||
*usage = dane->mtlsa->usage;
|
||||
if (selector)
|
||||
*selector = dane->mtlsa->selector;
|
||||
if (mtype)
|
||||
*mtype = dane->mtlsa->mtype;
|
||||
if (data)
|
||||
*data = dane->mtlsa->data;
|
||||
if (dlen)
|
||||
*dlen = dane->mtlsa->dlen;
|
||||
}
|
||||
return dane->mdpth;
|
||||
}
|
||||
|
||||
SSL_DANE *SSL_get0_dane(SSL *s)
|
||||
{
|
||||
return &s->dane;
|
||||
}
|
||||
|
||||
int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
|
||||
uint8_t mtype, unsigned const char *data, size_t dlen)
|
||||
{
|
||||
return dane_tlsa_add(&s->dane, usage, selector, mtype, data, dlen);
|
||||
}
|
||||
|
||||
int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype,
|
||||
uint8_t ord)
|
||||
{
|
||||
return dane_mtype_set(&ctx->dane, md, mtype, ord);
|
||||
}
|
||||
|
||||
int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
|
||||
{
|
||||
return X509_VERIFY_PARAM_set1(ctx->param, vpm);
|
||||
}
|
||||
|
||||
int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
|
||||
{
|
||||
return X509_VERIFY_PARAM_set1(ssl->param, vpm);
|
||||
}
|
||||
|
||||
X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->param;
|
||||
}
|
||||
|
||||
X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
|
||||
{
|
||||
return ssl->param;
|
||||
}
|
||||
|
||||
void SSL_certs_clear(SSL *s)
|
||||
{
|
||||
ssl_cert_clear_certs(s->cert);
|
||||
}
|
||||
|
||||
void SSL_free(SSL *s)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (s == NULL)
|
||||
return;
|
||||
CRYPTO_DOWN_REF(&s->references, &i, s->lock);
|
||||
REF_PRINT_COUNT("SSL", s);
|
||||
if (i > 0)
|
||||
return;
|
||||
REF_ASSERT_ISNT(i < 0);
|
||||
|
||||
X509_VERIFY_PARAM_free(s->param);
|
||||
dane_final(&s->dane);
|
||||
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL, s, &s->ex_data);
|
||||
|
||||
RECORD_LAYER_release(&s->rlayer);
|
||||
|
||||
/* Ignore return value */
|
||||
ssl_free_wbio_buffer(s);
|
||||
|
||||
BIO_free_all(s->wbio);
|
||||
s->wbio = NULL;
|
||||
BIO_free_all(s->rbio);
|
||||
s->rbio = NULL;
|
||||
|
||||
BUF_MEM_free(s->init_buf);
|
||||
|
||||
/* add extra stuff */
|
||||
sk_SSL_CIPHER_free(s->cipher_list);
|
||||
sk_SSL_CIPHER_free(s->cipher_list_by_id);
|
||||
sk_SSL_CIPHER_free(s->tls13_ciphersuites);
|
||||
sk_SSL_CIPHER_free(s->peer_ciphers);
|
||||
|
||||
/* Make the next call work :-) */
|
||||
if (s->session != NULL) {
|
||||
ssl_clear_bad_session(s);
|
||||
SSL_SESSION_free(s->session);
|
||||
}
|
||||
SSL_SESSION_free(s->psksession);
|
||||
OPENSSL_free(s->psksession_id);
|
||||
|
||||
clear_ciphers(s);
|
||||
|
||||
ssl_cert_free(s->cert);
|
||||
OPENSSL_free(s->shared_sigalgs);
|
||||
/* Free up if allocated */
|
||||
|
||||
OPENSSL_free(s->ext.hostname);
|
||||
SSL_CTX_free(s->session_ctx);
|
||||
#ifndef OPENSSL_NO_EC
|
||||
OPENSSL_free(s->ext.ecpointformats);
|
||||
OPENSSL_free(s->ext.peer_ecpointformats);
|
||||
OPENSSL_free(s->ext.supportedgroups);
|
||||
OPENSSL_free(s->ext.peer_supportedgroups);
|
||||
#endif /* OPENSSL_NO_EC */
|
||||
sk_X509_EXTENSION_pop_free(s->ext.ocsp.exts, X509_EXTENSION_free);
|
||||
#ifndef OPENSSL_NO_OCSP
|
||||
sk_OCSP_RESPID_pop_free(s->ext.ocsp.ids, OCSP_RESPID_free);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_CT
|
||||
SCT_LIST_free(s->scts);
|
||||
OPENSSL_free(s->ext.scts);
|
||||
#endif
|
||||
OPENSSL_free(s->ext.ocsp.resp);
|
||||
OPENSSL_free(s->ext.alpn);
|
||||
OPENSSL_free(s->ext.tls13_cookie);
|
||||
OPENSSL_free(s->clienthello);
|
||||
OPENSSL_free(s->pha_context);
|
||||
EVP_MD_CTX_free(s->pha_dgst);
|
||||
|
||||
sk_X509_NAME_pop_free(s->ca_names, X509_NAME_free);
|
||||
sk_X509_NAME_pop_free(s->client_ca_names, X509_NAME_free);
|
||||
|
||||
sk_X509_pop_free(s->verified_chain, X509_free);
|
||||
|
||||
if (s->method != NULL)
|
||||
s->method->ssl_free(s);
|
||||
|
||||
SSL_CTX_free(s->ctx);
|
||||
|
||||
ASYNC_WAIT_CTX_free(s->waitctx);
|
||||
|
||||
#if !defined(OPENSSL_NO_NEXTPROTONEG)
|
||||
OPENSSL_free(s->ext.npn);
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_SRTP
|
||||
sk_SRTP_PROTECTION_PROFILE_free(s->srtp_profiles);
|
||||
#endif
|
||||
|
||||
CRYPTO_THREAD_lock_free(s->lock);
|
||||
|
||||
OPENSSL_free(s);
|
||||
}
|
||||
|
||||
void SSL_set0_rbio(SSL *s, BIO *rbio)
|
||||
{
|
||||
BIO_free_all(s->rbio);
|
||||
s->rbio = rbio;
|
||||
}
|
||||
|
||||
void SSL_set0_wbio(SSL *s, BIO *wbio)
|
||||
{
|
||||
/*
|
||||
* If the output buffering BIO is still in place, remove it
|
||||
*/
|
||||
if (s->bbio != NULL)
|
||||
s->wbio = BIO_pop(s->wbio);
|
||||
|
||||
BIO_free_all(s->wbio);
|
||||
s->wbio = wbio;
|
||||
|
||||
/* Re-attach |bbio| to the new |wbio|. */
|
||||
if (s->bbio != NULL)
|
||||
s->wbio = BIO_push(s->bbio, s->wbio);
|
||||
}
|
||||
|
||||
void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio)
|
||||
{
|
||||
/*
|
||||
* For historical reasons, this function has many different cases in
|
||||
* ownership handling.
|
||||
*/
|
||||
|
||||
/* If nothing has changed, do nothing */
|
||||
if (rbio == SSL_get_rbio(s) && wbio == SSL_get_wbio(s))
|
||||
return;
|
||||
|
||||
/*
|
||||
* If the two arguments are equal then one fewer reference is granted by the
|
||||
* caller than we want to take
|
||||
*/
|
||||
if (rbio != NULL && rbio == wbio)
|
||||
BIO_up_ref(rbio);
|
||||
|
||||
/*
|
||||
* If only the wbio is changed only adopt one reference.
|
||||
*/
|
||||
if (rbio == SSL_get_rbio(s)) {
|
||||
SSL_set0_wbio(s, wbio);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* There is an asymmetry here for historical reasons. If only the rbio is
|
||||
* changed AND the rbio and wbio were originally different, then we only
|
||||
* adopt one reference.
|
||||
*/
|
||||
if (wbio == SSL_get_wbio(s) && SSL_get_rbio(s) != SSL_get_wbio(s)) {
|
||||
SSL_set0_rbio(s, rbio);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Otherwise, adopt both references. */
|
||||
SSL_set0_rbio(s, rbio);
|
||||
SSL_set0_wbio(s, wbio);
|
||||
}
|
||||
|
||||
BIO *SSL_get_rbio(const SSL *s)
|
||||
{
|
||||
return s->rbio;
|
||||
}
|
||||
|
||||
BIO *SSL_get_wbio(const SSL *s)
|
||||
{
|
||||
if (s->bbio != NULL) {
|
||||
/*
|
||||
* If |bbio| is active, the true caller-configured BIO is its
|
||||
* |next_bio|.
|
||||
*/
|
||||
return BIO_next(s->bbio);
|
||||
}
|
||||
return s->wbio;
|
||||
}
|
||||
|
||||
int SSL_get_fd(const SSL *s)
|
||||
{
|
||||
return SSL_get_rfd(s);
|
||||
}
|
||||
|
||||
int SSL_get_rfd(const SSL *s)
|
||||
{
|
||||
int ret = -1;
|
||||
BIO *b, *r;
|
||||
|
||||
b = SSL_get_rbio(s);
|
||||
r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
|
||||
if (r != NULL)
|
||||
BIO_get_fd(r, &ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_get_wfd(const SSL *s)
|
||||
{
|
||||
int ret = -1;
|
||||
BIO *b, *r;
|
||||
|
||||
b = SSL_get_wbio(s);
|
||||
r = BIO_find_type(b, BIO_TYPE_DESCRIPTOR);
|
||||
if (r != NULL)
|
||||
BIO_get_fd(r, &ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_SOCK
|
||||
int SSL_set_fd(SSL *s, int fd)
|
||||
{
|
||||
int ret = 0;
|
||||
BIO *bio = NULL;
|
||||
|
||||
bio = BIO_new(BIO_s_socket());
|
||||
|
||||
if (bio == NULL) {
|
||||
SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
|
||||
goto err;
|
||||
}
|
||||
BIO_set_fd(bio, fd, BIO_NOCLOSE);
|
||||
SSL_set_bio(s, bio, bio);
|
||||
#ifndef OPENSSL_NO_KTLS
|
||||
/*
|
||||
* The new socket is created successfully regardless of ktls_enable.
|
||||
* ktls_enable doesn't change any functionality of the socket, except
|
||||
* changing the setsockopt to enable the processing of ktls_start.
|
||||
* Thus, it is not a problem to call it for non-TLS sockets.
|
||||
*/
|
||||
ktls_enable(fd);
|
||||
#endif /* OPENSSL_NO_KTLS */
|
||||
ret = 1;
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_set_wfd(SSL *s, int fd)
|
||||
{
|
||||
BIO *rbio = SSL_get_rbio(s);
|
||||
|
||||
if (rbio == NULL || BIO_method_type(rbio) != BIO_TYPE_SOCKET
|
||||
|| (int)BIO_get_fd(rbio, NULL) != fd) {
|
||||
BIO *bio = BIO_new(BIO_s_socket());
|
||||
|
||||
if (bio == NULL) {
|
||||
SSLerr(SSL_F_SSL_SET_WFD, ERR_R_BUF_LIB);
|
||||
return 0;
|
||||
}
|
||||
BIO_set_fd(bio, fd, BIO_NOCLOSE);
|
||||
SSL_set0_wbio(s, bio);
|
||||
#ifndef OPENSSL_NO_KTLS
|
||||
/*
|
||||
* The new socket is created successfully regardless of ktls_enable.
|
||||
* ktls_enable doesn't change any functionality of the socket, except
|
||||
* changing the setsockopt to enable the processing of ktls_start.
|
||||
* Thus, it is not a problem to call it for non-TLS sockets.
|
||||
*/
|
||||
ktls_enable(fd);
|
||||
#endif /* OPENSSL_NO_KTLS */
|
||||
} else {
|
||||
BIO_up_ref(rbio);
|
||||
SSL_set0_wbio(s, rbio);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_rfd(SSL *s, int fd)
|
||||
{
|
||||
BIO *wbio = SSL_get_wbio(s);
|
||||
|
||||
if (wbio == NULL || BIO_method_type(wbio) != BIO_TYPE_SOCKET
|
||||
|| ((int)BIO_get_fd(wbio, NULL) != fd)) {
|
||||
BIO *bio = BIO_new(BIO_s_socket());
|
||||
|
||||
if (bio == NULL) {
|
||||
SSLerr(SSL_F_SSL_SET_RFD, ERR_R_BUF_LIB);
|
||||
return 0;
|
||||
}
|
||||
BIO_set_fd(bio, fd, BIO_NOCLOSE);
|
||||
SSL_set0_rbio(s, bio);
|
||||
} else {
|
||||
BIO_up_ref(wbio);
|
||||
SSL_set0_rbio(s, wbio);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* return length of latest Finished message we sent, copy to 'buf' */
|
||||
size_t SSL_get_finished(const SSL *s, void *buf, size_t count)
|
||||
{
|
||||
size_t ret = 0;
|
||||
|
||||
ret = s->s3.tmp.finish_md_len;
|
||||
if (count > ret)
|
||||
count = ret;
|
||||
memcpy(buf, s->s3.tmp.finish_md, count);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* return length of latest Finished message we expected, copy to 'buf' */
|
||||
size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count)
|
||||
{
|
||||
size_t ret = 0;
|
||||
|
||||
ret = s->s3.tmp.peer_finish_md_len;
|
||||
if (count > ret)
|
||||
count = ret;
|
||||
memcpy(buf, s->s3.tmp.peer_finish_md, count);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_get_verify_mode(const SSL *s)
|
||||
{
|
||||
return s->verify_mode;
|
||||
}
|
||||
|
||||
int SSL_get_verify_depth(const SSL *s)
|
||||
{
|
||||
return X509_VERIFY_PARAM_get_depth(s->param);
|
||||
}
|
||||
|
||||
int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *) {
|
||||
return s->verify_callback;
|
||||
}
|
||||
|
||||
int SSL_CTX_get_verify_mode(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->verify_mode;
|
||||
}
|
||||
|
||||
int SSL_CTX_get_verify_depth(const SSL_CTX *ctx)
|
||||
{
|
||||
return X509_VERIFY_PARAM_get_depth(ctx->param);
|
||||
}
|
||||
|
||||
int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *) {
|
||||
return ctx->default_verify_callback;
|
||||
}
|
||||
|
||||
void SSL_set_verify(SSL *s, int mode,
|
||||
int (*callback) (int ok, X509_STORE_CTX *ctx))
|
||||
{
|
||||
s->verify_mode = mode;
|
||||
if (callback != NULL)
|
||||
s->verify_callback = callback;
|
||||
}
|
||||
|
||||
void SSL_set_verify_depth(SSL *s, int depth)
|
||||
{
|
||||
X509_VERIFY_PARAM_set_depth(s->param, depth);
|
||||
}
|
||||
|
||||
void SSL_set_read_ahead(SSL *s, int yes)
|
||||
{
|
||||
RECORD_LAYER_set_read_ahead(&s->rlayer, yes);
|
||||
}
|
||||
|
||||
int SSL_get_read_ahead(const SSL *s)
|
||||
{
|
||||
return RECORD_LAYER_get_read_ahead(&s->rlayer);
|
||||
}
|
||||
|
||||
int SSL_pending(const SSL *s)
|
||||
{
|
||||
size_t pending = s->method->ssl_pending(s);
|
||||
|
||||
/*
|
||||
* SSL_pending cannot work properly if read-ahead is enabled
|
||||
* (SSL_[CTX_]ctrl(..., SSL_CTRL_SET_READ_AHEAD, 1, NULL)), and it is
|
||||
* impossible to fix since SSL_pending cannot report errors that may be
|
||||
* observed while scanning the new data. (Note that SSL_pending() is
|
||||
* often used as a boolean value, so we'd better not return -1.)
|
||||
*
|
||||
* SSL_pending also cannot work properly if the value >INT_MAX. In that case
|
||||
* we just return INT_MAX.
|
||||
*/
|
||||
return pending < INT_MAX ? (int)pending : INT_MAX;
|
||||
}
|
||||
|
||||
int SSL_has_pending(const SSL *s)
|
||||
{
|
||||
/*
|
||||
* Similar to SSL_pending() but returns a 1 to indicate that we have
|
||||
* unprocessed data available or 0 otherwise (as opposed to the number of
|
||||
* bytes available). Unlike SSL_pending() this will take into account
|
||||
* read_ahead data. A 1 return simply indicates that we have unprocessed
|
||||
* data. That data may not result in any application data, or we may fail
|
||||
* to parse the records for some reason.
|
||||
*/
|
||||
if (RECORD_LAYER_processed_read_pending(&s->rlayer))
|
||||
return 1;
|
||||
|
||||
return RECORD_LAYER_read_pending(&s->rlayer);
|
||||
}
|
||||
|
||||
X509 *SSL_get_peer_certificate(const SSL *s)
|
||||
{
|
||||
X509 *r;
|
||||
|
||||
if ((s == NULL) || (s->session == NULL))
|
||||
r = NULL;
|
||||
else
|
||||
r = s->session->peer;
|
||||
|
||||
if (r == NULL)
|
||||
return r;
|
||||
|
||||
X509_up_ref(r);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s)
|
||||
{
|
||||
STACK_OF(X509) *r;
|
||||
|
||||
if ((s == NULL) || (s->session == NULL))
|
||||
r = NULL;
|
||||
else
|
||||
r = s->session->peer_chain;
|
||||
|
||||
/*
|
||||
* If we are a client, cert_chain includes the peer's own certificate; if
|
||||
* we are a server, it does not.
|
||||
*/
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now in theory, since the calling process own 't' it should be safe to
|
||||
* modify. We need to be able to read f without being hassled
|
||||
*/
|
||||
int SSL_copy_session_id(SSL *t, const SSL *f)
|
||||
{
|
||||
int i;
|
||||
/* Do we need to to SSL locking? */
|
||||
if (!SSL_set_session(t, SSL_get_session(f))) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* what if we are setup for one protocol version but want to talk another
|
||||
*/
|
||||
if (t->method != f->method) {
|
||||
t->method->ssl_free(t);
|
||||
t->method = f->method;
|
||||
if (t->method->ssl_new(t) == 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
CRYPTO_UP_REF(&f->cert->references, &i, f->cert->lock);
|
||||
ssl_cert_free(t->cert);
|
||||
t->cert = f->cert;
|
||||
if (!SSL_set_session_id_context(t, f->sid_ctx, (int)f->sid_ctx_length)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Fix this so it checks all the valid key/cert options */
|
||||
int SSL_CTX_check_private_key(const SSL_CTX *ctx)
|
||||
{
|
||||
if ((ctx == NULL) || (ctx->cert->key->x509 == NULL)) {
|
||||
SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
|
||||
return 0;
|
||||
}
|
||||
if (ctx->cert->key->privatekey == NULL) {
|
||||
SSLerr(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
|
||||
return 0;
|
||||
}
|
||||
return X509_check_private_key
|
||||
(ctx->cert->key->x509, ctx->cert->key->privatekey);
|
||||
}
|
||||
|
||||
/* Fix this function so that it takes an optional type parameter */
|
||||
int SSL_check_private_key(const SSL *ssl)
|
||||
{
|
||||
if (ssl == NULL) {
|
||||
SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
if (ssl->cert->key->x509 == NULL) {
|
||||
SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_CERTIFICATE_ASSIGNED);
|
||||
return 0;
|
||||
}
|
||||
if (ssl->cert->key->privatekey == NULL) {
|
||||
SSLerr(SSL_F_SSL_CHECK_PRIVATE_KEY, SSL_R_NO_PRIVATE_KEY_ASSIGNED);
|
||||
return 0;
|
||||
}
|
||||
return X509_check_private_key(ssl->cert->key->x509,
|
||||
ssl->cert->key->privatekey);
|
||||
}
|
||||
|
||||
int SSL_waiting_for_async(SSL *s)
|
||||
{
|
||||
if (s->job)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds)
|
||||
{
|
||||
ASYNC_WAIT_CTX *ctx = s->waitctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return 0;
|
||||
return ASYNC_WAIT_CTX_get_all_fds(ctx, fds, numfds);
|
||||
}
|
||||
|
||||
int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds,
|
||||
OSSL_ASYNC_FD *delfd, size_t *numdelfds)
|
||||
{
|
||||
ASYNC_WAIT_CTX *ctx = s->waitctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return 0;
|
||||
return ASYNC_WAIT_CTX_get_changed_fds(ctx, addfd, numaddfds, delfd,
|
||||
numdelfds);
|
||||
}
|
||||
|
||||
int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback)
|
||||
{
|
||||
ctx->async_cb = callback;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg)
|
||||
{
|
||||
ctx->async_cb_arg = arg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback)
|
||||
{
|
||||
s->async_cb = callback;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_async_callback_arg(SSL *s, void *arg)
|
||||
{
|
||||
s->async_cb_arg = arg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_get_async_status(SSL *s, int *status)
|
||||
{
|
||||
ASYNC_WAIT_CTX *ctx = s->waitctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return 0;
|
||||
*status = ASYNC_WAIT_CTX_get_status(ctx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_accept(SSL *s)
|
||||
{
|
||||
if (s->handshake_func == NULL) {
|
||||
/* Not properly initialized yet */
|
||||
SSL_set_accept_state(s);
|
||||
}
|
||||
|
||||
return SSL_do_handshake(s);
|
||||
}
|
||||
|
||||
int SSL_connect(SSL *s)
|
||||
{
|
||||
if (s->handshake_func == NULL) {
|
||||
/* Not properly initialized yet */
|
||||
SSL_set_connect_state(s);
|
||||
}
|
||||
|
||||
return SSL_do_handshake(s);
|
||||
}
|
||||
|
||||
long SSL_get_default_timeout(const SSL *s)
|
||||
{
|
||||
return s->method->get_timeout();
|
||||
}
|
||||
|
||||
static int ssl_async_wait_ctx_cb(void *arg)
|
||||
{
|
||||
SSL *s = (SSL *)arg;
|
||||
|
||||
return s->async_cb(s, s->async_cb_arg);
|
||||
}
|
||||
|
||||
static int ssl_start_async_job(SSL *s, struct ssl_async_args *args,
|
||||
int (*func) (void *))
|
||||
{
|
||||
int ret;
|
||||
if (s->waitctx == NULL) {
|
||||
s->waitctx = ASYNC_WAIT_CTX_new();
|
||||
if (s->waitctx == NULL)
|
||||
return -1;
|
||||
if (s->async_cb != NULL
|
||||
&& !ASYNC_WAIT_CTX_set_callback
|
||||
(s->waitctx, ssl_async_wait_ctx_cb, s))
|
||||
return -1;
|
||||
}
|
||||
switch (ASYNC_start_job(&s->job, s->waitctx, &ret, func, args,
|
||||
sizeof(struct ssl_async_args))) {
|
||||
case ASYNC_ERR:
|
||||
s->rwstate = SSL_NOTHING;
|
||||
SSLerr(SSL_F_SSL_START_ASYNC_JOB, SSL_R_FAILED_TO_INIT_ASYNC);
|
||||
return -1;
|
||||
case ASYNC_PAUSE:
|
||||
s->rwstate = SSL_ASYNC_PAUSED;
|
||||
return -1;
|
||||
case ASYNC_NO_JOBS:
|
||||
s->rwstate = SSL_ASYNC_NO_JOBS;
|
||||
return -1;
|
||||
case ASYNC_FINISH:
|
||||
s->job = NULL;
|
||||
return ret;
|
||||
default:
|
||||
s->rwstate = SSL_NOTHING;
|
||||
SSLerr(SSL_F_SSL_START_ASYNC_JOB, ERR_R_INTERNAL_ERROR);
|
||||
/* Shouldn't happen */
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static int ssl_io_intern(void *vargs)
|
||||
{
|
||||
struct ssl_async_args *args;
|
||||
SSL *s;
|
||||
void *buf;
|
||||
size_t num;
|
||||
|
||||
args = (struct ssl_async_args *)vargs;
|
||||
s = args->s;
|
||||
buf = args->buf;
|
||||
num = args->num;
|
||||
switch (args->type) {
|
||||
case READFUNC:
|
||||
return args->f.func_read(s, buf, num, &s->asyncrw);
|
||||
case WRITEFUNC:
|
||||
return args->f.func_write(s, buf, num, &s->asyncrw);
|
||||
case OTHERFUNC:
|
||||
return args->f.func_other(s);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
|
||||
{
|
||||
if (s->handshake_func == NULL) {
|
||||
SSLerr(SSL_F_SSL_READ_INTERNAL, SSL_R_UNINITIALIZED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
|
||||
s->rwstate = SSL_NOTHING;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
|
||||
|| s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY) {
|
||||
SSLerr(SSL_F_SSL_READ_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* If we are a client and haven't received the ServerHello etc then we
|
||||
* better do that
|
||||
*/
|
||||
ossl_statem_check_finish_init(s, 0);
|
||||
|
||||
if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
|
||||
struct ssl_async_args args;
|
||||
int ret;
|
||||
|
||||
args.s = s;
|
||||
args.buf = buf;
|
||||
args.num = num;
|
||||
args.type = READFUNC;
|
||||
args.f.func_read = s->method->ssl_read;
|
||||
|
||||
ret = ssl_start_async_job(s, &args, ssl_io_intern);
|
||||
*readbytes = s->asyncrw;
|
||||
return ret;
|
||||
} else {
|
||||
return s->method->ssl_read(s, buf, num, readbytes);
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_read(SSL *s, void *buf, int num)
|
||||
{
|
||||
int ret;
|
||||
size_t readbytes;
|
||||
|
||||
if (num < 0) {
|
||||
SSLerr(SSL_F_SSL_READ, SSL_R_BAD_LENGTH);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = ssl_read_internal(s, buf, (size_t)num, &readbytes);
|
||||
|
||||
/*
|
||||
* The cast is safe here because ret should be <= INT_MAX because num is
|
||||
* <= INT_MAX
|
||||
*/
|
||||
if (ret > 0)
|
||||
ret = (int)readbytes;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_read_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
|
||||
{
|
||||
int ret = ssl_read_internal(s, buf, num, readbytes);
|
||||
|
||||
if (ret < 0)
|
||||
ret = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!s->server) {
|
||||
SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return SSL_READ_EARLY_DATA_ERROR;
|
||||
}
|
||||
|
||||
switch (s->early_data_state) {
|
||||
case SSL_EARLY_DATA_NONE:
|
||||
if (!SSL_in_before(s)) {
|
||||
SSLerr(SSL_F_SSL_READ_EARLY_DATA,
|
||||
ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return SSL_READ_EARLY_DATA_ERROR;
|
||||
}
|
||||
/* fall through */
|
||||
|
||||
case SSL_EARLY_DATA_ACCEPT_RETRY:
|
||||
s->early_data_state = SSL_EARLY_DATA_ACCEPTING;
|
||||
ret = SSL_accept(s);
|
||||
if (ret <= 0) {
|
||||
/* NBIO or error */
|
||||
s->early_data_state = SSL_EARLY_DATA_ACCEPT_RETRY;
|
||||
return SSL_READ_EARLY_DATA_ERROR;
|
||||
}
|
||||
/* fall through */
|
||||
|
||||
case SSL_EARLY_DATA_READ_RETRY:
|
||||
if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
|
||||
s->early_data_state = SSL_EARLY_DATA_READING;
|
||||
ret = SSL_read_ex(s, buf, num, readbytes);
|
||||
/*
|
||||
* State machine will update early_data_state to
|
||||
* SSL_EARLY_DATA_FINISHED_READING if we get an EndOfEarlyData
|
||||
* message
|
||||
*/
|
||||
if (ret > 0 || (ret <= 0 && s->early_data_state
|
||||
!= SSL_EARLY_DATA_FINISHED_READING)) {
|
||||
s->early_data_state = SSL_EARLY_DATA_READ_RETRY;
|
||||
return ret > 0 ? SSL_READ_EARLY_DATA_SUCCESS
|
||||
: SSL_READ_EARLY_DATA_ERROR;
|
||||
}
|
||||
} else {
|
||||
s->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
|
||||
}
|
||||
*readbytes = 0;
|
||||
return SSL_READ_EARLY_DATA_FINISH;
|
||||
|
||||
default:
|
||||
SSLerr(SSL_F_SSL_READ_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return SSL_READ_EARLY_DATA_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_get_early_data_status(const SSL *s)
|
||||
{
|
||||
return s->ext.early_data;
|
||||
}
|
||||
|
||||
static int ssl_peek_internal(SSL *s, void *buf, size_t num, size_t *readbytes)
|
||||
{
|
||||
if (s->handshake_func == NULL) {
|
||||
SSLerr(SSL_F_SSL_PEEK_INTERNAL, SSL_R_UNINITIALIZED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
|
||||
return 0;
|
||||
}
|
||||
if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
|
||||
struct ssl_async_args args;
|
||||
int ret;
|
||||
|
||||
args.s = s;
|
||||
args.buf = buf;
|
||||
args.num = num;
|
||||
args.type = READFUNC;
|
||||
args.f.func_read = s->method->ssl_peek;
|
||||
|
||||
ret = ssl_start_async_job(s, &args, ssl_io_intern);
|
||||
*readbytes = s->asyncrw;
|
||||
return ret;
|
||||
} else {
|
||||
return s->method->ssl_peek(s, buf, num, readbytes);
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_peek(SSL *s, void *buf, int num)
|
||||
{
|
||||
int ret;
|
||||
size_t readbytes;
|
||||
|
||||
if (num < 0) {
|
||||
SSLerr(SSL_F_SSL_PEEK, SSL_R_BAD_LENGTH);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = ssl_peek_internal(s, buf, (size_t)num, &readbytes);
|
||||
|
||||
/*
|
||||
* The cast is safe here because ret should be <= INT_MAX because num is
|
||||
* <= INT_MAX
|
||||
*/
|
||||
if (ret > 0)
|
||||
ret = (int)readbytes;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int SSL_peek_ex(SSL *s, void *buf, size_t num, size_t *readbytes)
|
||||
{
|
||||
int ret = ssl_peek_internal(s, buf, num, readbytes);
|
||||
|
||||
if (ret < 0)
|
||||
ret = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written)
|
||||
{
|
||||
if (s->handshake_func == NULL) {
|
||||
SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_UNINITIALIZED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (s->shutdown & SSL_SENT_SHUTDOWN) {
|
||||
s->rwstate = SSL_NOTHING;
|
||||
SSLerr(SSL_F_SSL_WRITE_INTERNAL, SSL_R_PROTOCOL_IS_SHUTDOWN);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (s->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY
|
||||
|| s->early_data_state == SSL_EARLY_DATA_ACCEPT_RETRY
|
||||
|| s->early_data_state == SSL_EARLY_DATA_READ_RETRY) {
|
||||
SSLerr(SSL_F_SSL_WRITE_INTERNAL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return 0;
|
||||
}
|
||||
/* If we are a client and haven't sent the Finished we better do that */
|
||||
ossl_statem_check_finish_init(s, 1);
|
||||
|
||||
if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
|
||||
int ret;
|
||||
struct ssl_async_args args;
|
||||
|
||||
args.s = s;
|
||||
args.buf = (void *)buf;
|
||||
args.num = num;
|
||||
args.type = WRITEFUNC;
|
||||
args.f.func_write = s->method->ssl_write;
|
||||
|
||||
ret = ssl_start_async_job(s, &args, ssl_io_intern);
|
||||
*written = s->asyncrw;
|
||||
return ret;
|
||||
} else {
|
||||
return s->method->ssl_write(s, buf, num, written);
|
||||
}
|
||||
}
|
||||
|
||||
ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, int flags)
|
||||
{
|
||||
ossl_ssize_t ret;
|
||||
|
||||
if (s->handshake_func == NULL) {
|
||||
SSLerr(SSL_F_SSL_SENDFILE, SSL_R_UNINITIALIZED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (s->shutdown & SSL_SENT_SHUTDOWN) {
|
||||
s->rwstate = SSL_NOTHING;
|
||||
SSLerr(SSL_F_SSL_SENDFILE, SSL_R_PROTOCOL_IS_SHUTDOWN);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!BIO_get_ktls_send(s->wbio)) {
|
||||
SSLerr(SSL_F_SSL_SENDFILE, SSL_R_UNINITIALIZED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* If we have an alert to send, lets send it */
|
||||
if (s->s3.alert_dispatch) {
|
||||
ret = (ossl_ssize_t)s->method->ssl_dispatch_alert(s);
|
||||
if (ret <= 0) {
|
||||
/* SSLfatal() already called if appropriate */
|
||||
return ret;
|
||||
}
|
||||
/* if it went, fall through and send more stuff */
|
||||
}
|
||||
|
||||
s->rwstate = SSL_WRITING;
|
||||
if (BIO_flush(s->wbio) <= 0) {
|
||||
if (!BIO_should_retry(s->wbio)) {
|
||||
s->rwstate = SSL_NOTHING;
|
||||
} else {
|
||||
#ifdef EAGAIN
|
||||
set_sys_error(EAGAIN);
|
||||
#endif
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_KTLS
|
||||
ret = ktls_sendfile(SSL_get_wfd(s), fd, offset, size, flags);
|
||||
#else
|
||||
ret = -1;
|
||||
#endif
|
||||
if (ret < 0) {
|
||||
#if defined(EAGAIN) && defined(EINTR) && defined(EBUSY)
|
||||
if ((get_last_sys_error() == EAGAIN) ||
|
||||
(get_last_sys_error() == EINTR) ||
|
||||
(get_last_sys_error() == EBUSY))
|
||||
BIO_set_retry_write(s->wbio);
|
||||
else
|
||||
#endif
|
||||
#ifdef OPENSSL_NO_KTLS
|
||||
SYSerr(SYS_F_SENDFILE, get_last_sys_error());
|
||||
#else
|
||||
SSLerr(SSL_F_SSL_SENDFILE, SSL_R_UNINITIALIZED);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
s->rwstate = SSL_NOTHING;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_write(SSL *s, const void *buf, int num)
|
||||
{
|
||||
int ret;
|
||||
size_t written;
|
||||
|
||||
if (num < 0) {
|
||||
SSLerr(SSL_F_SSL_WRITE, SSL_R_BAD_LENGTH);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = ssl_write_internal(s, buf, (size_t)num, &written);
|
||||
|
||||
/*
|
||||
* The cast is safe here because ret should be <= INT_MAX because num is
|
||||
* <= INT_MAX
|
||||
*/
|
||||
if (ret > 0)
|
||||
ret = (int)written;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written)
|
||||
{
|
||||
int ret = ssl_write_internal(s, buf, num, written);
|
||||
|
||||
if (ret < 0)
|
||||
ret = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
|
||||
{
|
||||
int ret, early_data_state;
|
||||
size_t writtmp;
|
||||
uint32_t partialwrite;
|
||||
|
||||
switch (s->early_data_state) {
|
||||
case SSL_EARLY_DATA_NONE:
|
||||
if (s->server
|
||||
|| !SSL_in_before(s)
|
||||
|| ((s->session == NULL || s->session->ext.max_early_data == 0)
|
||||
&& (s->psk_use_session_cb == NULL))) {
|
||||
SSLerr(SSL_F_SSL_WRITE_EARLY_DATA,
|
||||
ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return 0;
|
||||
}
|
||||
/* fall through */
|
||||
|
||||
case SSL_EARLY_DATA_CONNECT_RETRY:
|
||||
s->early_data_state = SSL_EARLY_DATA_CONNECTING;
|
||||
ret = SSL_connect(s);
|
||||
if (ret <= 0) {
|
||||
/* NBIO or error */
|
||||
s->early_data_state = SSL_EARLY_DATA_CONNECT_RETRY;
|
||||
return 0;
|
||||
}
|
||||
/* fall through */
|
||||
|
||||
case SSL_EARLY_DATA_WRITE_RETRY:
|
||||
s->early_data_state = SSL_EARLY_DATA_WRITING;
|
||||
/*
|
||||
* We disable partial write for early data because we don't keep track
|
||||
* of how many bytes we've written between the SSL_write_ex() call and
|
||||
* the flush if the flush needs to be retried)
|
||||
*/
|
||||
partialwrite = s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE;
|
||||
s->mode &= ~SSL_MODE_ENABLE_PARTIAL_WRITE;
|
||||
ret = SSL_write_ex(s, buf, num, &writtmp);
|
||||
s->mode |= partialwrite;
|
||||
if (!ret) {
|
||||
s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
|
||||
return ret;
|
||||
}
|
||||
s->early_data_state = SSL_EARLY_DATA_WRITE_FLUSH;
|
||||
/* fall through */
|
||||
|
||||
case SSL_EARLY_DATA_WRITE_FLUSH:
|
||||
/* The buffering BIO is still in place so we need to flush it */
|
||||
if (statem_flush(s) != 1)
|
||||
return 0;
|
||||
*written = num;
|
||||
s->early_data_state = SSL_EARLY_DATA_WRITE_RETRY;
|
||||
return 1;
|
||||
|
||||
case SSL_EARLY_DATA_FINISHED_READING:
|
||||
case SSL_EARLY_DATA_READ_RETRY:
|
||||
early_data_state = s->early_data_state;
|
||||
/* We are a server writing to an unauthenticated client */
|
||||
s->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
|
||||
ret = SSL_write_ex(s, buf, num, written);
|
||||
/* The buffering BIO is still in place */
|
||||
if (ret)
|
||||
(void)BIO_flush(s->wbio);
|
||||
s->early_data_state = early_data_state;
|
||||
return ret;
|
||||
|
||||
default:
|
||||
SSLerr(SSL_F_SSL_WRITE_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_shutdown(SSL *s)
|
||||
{
|
||||
/*
|
||||
* Note that this function behaves differently from what one might
|
||||
* expect. Return values are 0 for no success (yet), 1 for success; but
|
||||
* calling it once is usually not enough, even if blocking I/O is used
|
||||
* (see ssl3_shutdown).
|
||||
*/
|
||||
|
||||
if (s->handshake_func == NULL) {
|
||||
SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_UNINITIALIZED);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!SSL_in_init(s)) {
|
||||
if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
|
||||
struct ssl_async_args args;
|
||||
|
||||
args.s = s;
|
||||
args.type = OTHERFUNC;
|
||||
args.f.func_other = s->method->ssl_shutdown;
|
||||
|
||||
return ssl_start_async_job(s, &args, ssl_io_intern);
|
||||
} else {
|
||||
return s->method->ssl_shutdown(s);
|
||||
}
|
||||
} else {
|
||||
SSLerr(SSL_F_SSL_SHUTDOWN, SSL_R_SHUTDOWN_WHILE_IN_INIT);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_key_update(SSL *s, int updatetype)
|
||||
{
|
||||
/*
|
||||
* TODO(TLS1.3): How will applications know whether TLSv1.3 has been
|
||||
* negotiated, and that it is appropriate to call SSL_key_update() instead
|
||||
* of SSL_renegotiate().
|
||||
*/
|
||||
if (!SSL_IS_TLS13(s)) {
|
||||
SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_WRONG_SSL_VERSION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (updatetype != SSL_KEY_UPDATE_NOT_REQUESTED
|
||||
&& updatetype != SSL_KEY_UPDATE_REQUESTED) {
|
||||
SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_INVALID_KEY_UPDATE_TYPE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!SSL_is_init_finished(s)) {
|
||||
SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_STILL_IN_INIT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ossl_statem_set_in_init(s, 1);
|
||||
s->key_update = updatetype;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_get_key_update_type(const SSL *s)
|
||||
{
|
||||
return s->key_update;
|
||||
}
|
||||
|
||||
int SSL_renegotiate(SSL *s)
|
||||
{
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_WRONG_SSL_VERSION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
|
||||
SSLerr(SSL_F_SSL_RENEGOTIATE, SSL_R_NO_RENEGOTIATION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s->renegotiate = 1;
|
||||
s->new_session = 1;
|
||||
|
||||
return s->method->ssl_renegotiate(s);
|
||||
}
|
||||
|
||||
int SSL_renegotiate_abbreviated(SSL *s)
|
||||
{
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_WRONG_SSL_VERSION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((s->options & SSL_OP_NO_RENEGOTIATION)) {
|
||||
SSLerr(SSL_F_SSL_RENEGOTIATE_ABBREVIATED, SSL_R_NO_RENEGOTIATION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s->renegotiate = 1;
|
||||
s->new_session = 0;
|
||||
|
||||
return s->method->ssl_renegotiate(s);
|
||||
}
|
||||
|
||||
int SSL_renegotiate_pending(const SSL *s)
|
||||
{
|
||||
/*
|
||||
* becomes true when negotiation is requested; false again once a
|
||||
* handshake has finished
|
||||
*/
|
||||
return (s->renegotiate != 0);
|
||||
}
|
||||
|
||||
long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
|
||||
{
|
||||
long l;
|
||||
|
||||
switch (cmd) {
|
||||
case SSL_CTRL_GET_READ_AHEAD:
|
||||
return RECORD_LAYER_get_read_ahead(&s->rlayer);
|
||||
case SSL_CTRL_SET_READ_AHEAD:
|
||||
l = RECORD_LAYER_get_read_ahead(&s->rlayer);
|
||||
RECORD_LAYER_set_read_ahead(&s->rlayer, larg);
|
||||
return l;
|
||||
|
||||
case SSL_CTRL_SET_MSG_CALLBACK_ARG:
|
||||
s->msg_callback_arg = parg;
|
||||
return 1;
|
||||
|
||||
case SSL_CTRL_MODE:
|
||||
return (s->mode |= larg);
|
||||
case SSL_CTRL_CLEAR_MODE:
|
||||
return (s->mode &= ~larg);
|
||||
case SSL_CTRL_GET_MAX_CERT_LIST:
|
||||
return (long)s->max_cert_list;
|
||||
case SSL_CTRL_SET_MAX_CERT_LIST:
|
||||
if (larg < 0)
|
||||
return 0;
|
||||
l = (long)s->max_cert_list;
|
||||
s->max_cert_list = (size_t)larg;
|
||||
return l;
|
||||
case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
|
||||
if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
|
||||
return 0;
|
||||
#ifndef OPENSSL_NO_KTLS
|
||||
if (s->wbio != NULL && BIO_get_ktls_send(s->wbio))
|
||||
return 0;
|
||||
#endif /* OPENSSL_NO_KTLS */
|
||||
s->max_send_fragment = larg;
|
||||
if (s->max_send_fragment < s->split_send_fragment)
|
||||
s->split_send_fragment = s->max_send_fragment;
|
||||
return 1;
|
||||
case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
|
||||
if ((size_t)larg > s->max_send_fragment || larg == 0)
|
||||
return 0;
|
||||
s->split_send_fragment = larg;
|
||||
return 1;
|
||||
case SSL_CTRL_SET_MAX_PIPELINES:
|
||||
if (larg < 1 || larg > SSL_MAX_PIPELINES)
|
||||
return 0;
|
||||
s->max_pipelines = larg;
|
||||
if (larg > 1)
|
||||
RECORD_LAYER_set_read_ahead(&s->rlayer, 1);
|
||||
return 1;
|
||||
case SSL_CTRL_GET_RI_SUPPORT:
|
||||
return s->s3.send_connection_binding;
|
||||
case SSL_CTRL_CERT_FLAGS:
|
||||
return (s->cert->cert_flags |= larg);
|
||||
case SSL_CTRL_CLEAR_CERT_FLAGS:
|
||||
return (s->cert->cert_flags &= ~larg);
|
||||
|
||||
case SSL_CTRL_GET_RAW_CIPHERLIST:
|
||||
if (parg) {
|
||||
if (s->s3.tmp.ciphers_raw == NULL)
|
||||
return 0;
|
||||
*(unsigned char **)parg = s->s3.tmp.ciphers_raw;
|
||||
return (int)s->s3.tmp.ciphers_rawlen;
|
||||
} else {
|
||||
return TLS_CIPHER_LEN;
|
||||
}
|
||||
case SSL_CTRL_GET_EXTMS_SUPPORT:
|
||||
if (!s->session || SSL_in_init(s) || ossl_statem_get_in_handshake(s))
|
||||
return -1;
|
||||
if (s->session->flags & SSL_SESS_FLAG_EXTMS)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
case SSL_CTRL_SET_MIN_PROTO_VERSION:
|
||||
return ssl_check_allowed_versions(larg, s->max_proto_version)
|
||||
&& ssl_set_version_bound(s->ctx->method->version, (int)larg,
|
||||
&s->min_proto_version);
|
||||
case SSL_CTRL_GET_MIN_PROTO_VERSION:
|
||||
return s->min_proto_version;
|
||||
case SSL_CTRL_SET_MAX_PROTO_VERSION:
|
||||
return ssl_check_allowed_versions(s->min_proto_version, larg)
|
||||
&& ssl_set_version_bound(s->ctx->method->version, (int)larg,
|
||||
&s->max_proto_version);
|
||||
case SSL_CTRL_GET_MAX_PROTO_VERSION:
|
||||
return s->max_proto_version;
|
||||
default:
|
||||
return s->method->ssl_ctrl(s, cmd, larg, parg);
|
||||
}
|
||||
}
|
||||
|
||||
long SSL_callback_ctrl(SSL *s, int cmd, void (*fp) (void))
|
||||
{
|
||||
switch (cmd) {
|
||||
case SSL_CTRL_SET_MSG_CALLBACK:
|
||||
s->msg_callback = (void (*)
|
||||
(int write_p, int version, int content_type,
|
||||
const void *buf, size_t len, SSL *ssl,
|
||||
void *arg))(fp);
|
||||
return 1;
|
||||
|
||||
default:
|
||||
return s->method->ssl_callback_ctrl(s, cmd, fp);
|
||||
}
|
||||
}
|
||||
|
||||
LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->sessions;
|
||||
}
|
||||
|
||||
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
|
||||
{
|
||||
long l;
|
||||
/* For some cases with ctx == NULL perform syntax checks */
|
||||
if (ctx == NULL) {
|
||||
switch (cmd) {
|
||||
#ifndef OPENSSL_NO_EC
|
||||
case SSL_CTRL_SET_GROUPS_LIST:
|
||||
return tls1_set_groups_list(NULL, NULL, parg);
|
||||
#endif
|
||||
case SSL_CTRL_SET_SIGALGS_LIST:
|
||||
case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
|
||||
return tls1_set_sigalgs_list(NULL, parg, 0);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case SSL_CTRL_GET_READ_AHEAD:
|
||||
return ctx->read_ahead;
|
||||
case SSL_CTRL_SET_READ_AHEAD:
|
||||
l = ctx->read_ahead;
|
||||
ctx->read_ahead = larg;
|
||||
return l;
|
||||
|
||||
case SSL_CTRL_SET_MSG_CALLBACK_ARG:
|
||||
ctx->msg_callback_arg = parg;
|
||||
return 1;
|
||||
|
||||
case SSL_CTRL_GET_MAX_CERT_LIST:
|
||||
return (long)ctx->max_cert_list;
|
||||
case SSL_CTRL_SET_MAX_CERT_LIST:
|
||||
if (larg < 0)
|
||||
return 0;
|
||||
l = (long)ctx->max_cert_list;
|
||||
ctx->max_cert_list = (size_t)larg;
|
||||
return l;
|
||||
|
||||
case SSL_CTRL_SET_SESS_CACHE_SIZE:
|
||||
if (larg < 0)
|
||||
return 0;
|
||||
l = (long)ctx->session_cache_size;
|
||||
ctx->session_cache_size = (size_t)larg;
|
||||
return l;
|
||||
case SSL_CTRL_GET_SESS_CACHE_SIZE:
|
||||
return (long)ctx->session_cache_size;
|
||||
case SSL_CTRL_SET_SESS_CACHE_MODE:
|
||||
l = ctx->session_cache_mode;
|
||||
ctx->session_cache_mode = larg;
|
||||
return l;
|
||||
case SSL_CTRL_GET_SESS_CACHE_MODE:
|
||||
return ctx->session_cache_mode;
|
||||
|
||||
case SSL_CTRL_SESS_NUMBER:
|
||||
return lh_SSL_SESSION_num_items(ctx->sessions);
|
||||
case SSL_CTRL_SESS_CONNECT:
|
||||
return tsan_load(&ctx->stats.sess_connect);
|
||||
case SSL_CTRL_SESS_CONNECT_GOOD:
|
||||
return tsan_load(&ctx->stats.sess_connect_good);
|
||||
case SSL_CTRL_SESS_CONNECT_RENEGOTIATE:
|
||||
return tsan_load(&ctx->stats.sess_connect_renegotiate);
|
||||
case SSL_CTRL_SESS_ACCEPT:
|
||||
return tsan_load(&ctx->stats.sess_accept);
|
||||
case SSL_CTRL_SESS_ACCEPT_GOOD:
|
||||
return tsan_load(&ctx->stats.sess_accept_good);
|
||||
case SSL_CTRL_SESS_ACCEPT_RENEGOTIATE:
|
||||
return tsan_load(&ctx->stats.sess_accept_renegotiate);
|
||||
case SSL_CTRL_SESS_HIT:
|
||||
return tsan_load(&ctx->stats.sess_hit);
|
||||
case SSL_CTRL_SESS_CB_HIT:
|
||||
return tsan_load(&ctx->stats.sess_cb_hit);
|
||||
case SSL_CTRL_SESS_MISSES:
|
||||
return tsan_load(&ctx->stats.sess_miss);
|
||||
case SSL_CTRL_SESS_TIMEOUTS:
|
||||
return tsan_load(&ctx->stats.sess_timeout);
|
||||
case SSL_CTRL_SESS_CACHE_FULL:
|
||||
return tsan_load(&ctx->stats.sess_cache_full);
|
||||
case SSL_CTRL_MODE:
|
||||
return (ctx->mode |= larg);
|
||||
case SSL_CTRL_CLEAR_MODE:
|
||||
return (ctx->mode &= ~larg);
|
||||
case SSL_CTRL_SET_MAX_SEND_FRAGMENT:
|
||||
if (larg < 512 || larg > SSL3_RT_MAX_PLAIN_LENGTH)
|
||||
return 0;
|
||||
ctx->max_send_fragment = larg;
|
||||
if (ctx->max_send_fragment < ctx->split_send_fragment)
|
||||
ctx->split_send_fragment = ctx->max_send_fragment;
|
||||
return 1;
|
||||
case SSL_CTRL_SET_SPLIT_SEND_FRAGMENT:
|
||||
if ((size_t)larg > ctx->max_send_fragment || larg == 0)
|
||||
return 0;
|
||||
ctx->split_send_fragment = larg;
|
||||
return 1;
|
||||
case SSL_CTRL_SET_MAX_PIPELINES:
|
||||
if (larg < 1 || larg > SSL_MAX_PIPELINES)
|
||||
return 0;
|
||||
ctx->max_pipelines = larg;
|
||||
return 1;
|
||||
case SSL_CTRL_CERT_FLAGS:
|
||||
return (ctx->cert->cert_flags |= larg);
|
||||
case SSL_CTRL_CLEAR_CERT_FLAGS:
|
||||
return (ctx->cert->cert_flags &= ~larg);
|
||||
case SSL_CTRL_SET_MIN_PROTO_VERSION:
|
||||
return ssl_check_allowed_versions(larg, ctx->max_proto_version)
|
||||
&& ssl_set_version_bound(ctx->method->version, (int)larg,
|
||||
&ctx->min_proto_version);
|
||||
case SSL_CTRL_GET_MIN_PROTO_VERSION:
|
||||
return ctx->min_proto_version;
|
||||
case SSL_CTRL_SET_MAX_PROTO_VERSION:
|
||||
return ssl_check_allowed_versions(ctx->min_proto_version, larg)
|
||||
&& ssl_set_version_bound(ctx->method->version, (int)larg,
|
||||
&ctx->max_proto_version);
|
||||
case SSL_CTRL_GET_MAX_PROTO_VERSION:
|
||||
return ctx->max_proto_version;
|
||||
default:
|
||||
return ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg);
|
||||
}
|
||||
}
|
||||
|
||||
long SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
|
||||
{
|
||||
switch (cmd) {
|
||||
case SSL_CTRL_SET_MSG_CALLBACK:
|
||||
ctx->msg_callback = (void (*)
|
||||
(int write_p, int version, int content_type,
|
||||
const void *buf, size_t len, SSL *ssl,
|
||||
void *arg))(fp);
|
||||
return 1;
|
||||
|
||||
default:
|
||||
return ctx->method->ssl_ctx_callback_ctrl(ctx, cmd, fp);
|
||||
}
|
||||
}
|
||||
|
||||
int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b)
|
||||
{
|
||||
if (a->id > b->id)
|
||||
return 1;
|
||||
if (a->id < b->id)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
|
||||
const SSL_CIPHER *const *bp)
|
||||
{
|
||||
if ((*ap)->id > (*bp)->id)
|
||||
return 1;
|
||||
if ((*ap)->id < (*bp)->id)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** return a STACK of the ciphers available for the SSL and in order of
|
||||
* preference */
|
||||
STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s)
|
||||
{
|
||||
if (s != NULL) {
|
||||
if (s->cipher_list != NULL) {
|
||||
return s->cipher_list;
|
||||
} else if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL)) {
|
||||
return s->ctx->cipher_list;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s)
|
||||
{
|
||||
if ((s == NULL) || !s->server)
|
||||
return NULL;
|
||||
return s->peer_ciphers;
|
||||
}
|
||||
|
||||
STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s)
|
||||
{
|
||||
STACK_OF(SSL_CIPHER) *sk = NULL, *ciphers;
|
||||
int i;
|
||||
|
||||
ciphers = SSL_get_ciphers(s);
|
||||
if (!ciphers)
|
||||
return NULL;
|
||||
if (!ssl_set_client_disabled(s))
|
||||
return NULL;
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
|
||||
const SSL_CIPHER *c = sk_SSL_CIPHER_value(ciphers, i);
|
||||
if (!ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) {
|
||||
if (!sk)
|
||||
sk = sk_SSL_CIPHER_new_null();
|
||||
if (!sk)
|
||||
return NULL;
|
||||
if (!sk_SSL_CIPHER_push(sk, c)) {
|
||||
sk_SSL_CIPHER_free(sk);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
return sk;
|
||||
}
|
||||
|
||||
/** return a STACK of the ciphers available for the SSL and in order of
|
||||
* algorithm id */
|
||||
STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s)
|
||||
{
|
||||
if (s != NULL) {
|
||||
if (s->cipher_list_by_id != NULL) {
|
||||
return s->cipher_list_by_id;
|
||||
} else if ((s->ctx != NULL) && (s->ctx->cipher_list_by_id != NULL)) {
|
||||
return s->ctx->cipher_list_by_id;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** The old interface to get the same thing as SSL_get_ciphers() */
|
||||
const char *SSL_get_cipher_list(const SSL *s, int n)
|
||||
{
|
||||
const SSL_CIPHER *c;
|
||||
STACK_OF(SSL_CIPHER) *sk;
|
||||
|
||||
if (s == NULL)
|
||||
return NULL;
|
||||
sk = SSL_get_ciphers(s);
|
||||
if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= n))
|
||||
return NULL;
|
||||
c = sk_SSL_CIPHER_value(sk, n);
|
||||
if (c == NULL)
|
||||
return NULL;
|
||||
return c->name;
|
||||
}
|
||||
|
||||
/** return a STACK of the ciphers available for the SSL_CTX and in order of
|
||||
* preference */
|
||||
STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx)
|
||||
{
|
||||
if (ctx != NULL)
|
||||
return ctx->cipher_list;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Distinguish between ciphers controlled by set_ciphersuite() and
|
||||
* set_cipher_list() when counting.
|
||||
*/
|
||||
static int cipher_list_tls12_num(STACK_OF(SSL_CIPHER) *sk)
|
||||
{
|
||||
int i, num = 0;
|
||||
const SSL_CIPHER *c;
|
||||
|
||||
if (sk == NULL)
|
||||
return 0;
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
|
||||
c = sk_SSL_CIPHER_value(sk, i);
|
||||
if (c->min_tls >= TLS1_3_VERSION)
|
||||
continue;
|
||||
num++;
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
/** specify the ciphers to be used by default by the SSL_CTX */
|
||||
int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
|
||||
{
|
||||
STACK_OF(SSL_CIPHER) *sk;
|
||||
|
||||
sk = ssl_create_cipher_list(ctx->method, ctx->tls13_ciphersuites,
|
||||
&ctx->cipher_list, &ctx->cipher_list_by_id, str,
|
||||
ctx->cert);
|
||||
/*
|
||||
* ssl_create_cipher_list may return an empty stack if it was unable to
|
||||
* find a cipher matching the given rule string (for example if the rule
|
||||
* string specifies a cipher which has been disabled). This is not an
|
||||
* error as far as ssl_create_cipher_list is concerned, and hence
|
||||
* ctx->cipher_list and ctx->cipher_list_by_id has been updated.
|
||||
*/
|
||||
if (sk == NULL)
|
||||
return 0;
|
||||
else if (cipher_list_tls12_num(sk) == 0) {
|
||||
SSLerr(SSL_F_SSL_CTX_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** specify the ciphers to be used by the SSL */
|
||||
int SSL_set_cipher_list(SSL *s, const char *str)
|
||||
{
|
||||
STACK_OF(SSL_CIPHER) *sk;
|
||||
|
||||
sk = ssl_create_cipher_list(s->ctx->method, s->tls13_ciphersuites,
|
||||
&s->cipher_list, &s->cipher_list_by_id, str,
|
||||
s->cert);
|
||||
/* see comment in SSL_CTX_set_cipher_list */
|
||||
if (sk == NULL)
|
||||
return 0;
|
||||
else if (cipher_list_tls12_num(sk) == 0) {
|
||||
SSLerr(SSL_F_SSL_SET_CIPHER_LIST, SSL_R_NO_CIPHER_MATCH);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size)
|
||||
{
|
||||
char *p;
|
||||
STACK_OF(SSL_CIPHER) *clntsk, *srvrsk;
|
||||
const SSL_CIPHER *c;
|
||||
int i;
|
||||
|
||||
if (!s->server
|
||||
|| s->peer_ciphers == NULL
|
||||
|| size < 2)
|
||||
return NULL;
|
||||
|
||||
p = buf;
|
||||
clntsk = s->peer_ciphers;
|
||||
srvrsk = SSL_get_ciphers(s);
|
||||
if (clntsk == NULL || srvrsk == NULL)
|
||||
return NULL;
|
||||
|
||||
if (sk_SSL_CIPHER_num(clntsk) == 0 || sk_SSL_CIPHER_num(srvrsk) == 0)
|
||||
return NULL;
|
||||
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(clntsk); i++) {
|
||||
int n;
|
||||
|
||||
c = sk_SSL_CIPHER_value(clntsk, i);
|
||||
if (sk_SSL_CIPHER_find(srvrsk, c) < 0)
|
||||
continue;
|
||||
|
||||
n = strlen(c->name);
|
||||
if (n + 1 > size) {
|
||||
if (p != buf)
|
||||
--p;
|
||||
*p = '\0';
|
||||
return buf;
|
||||
}
|
||||
strcpy(p, c->name);
|
||||
p += n;
|
||||
*(p++) = ':';
|
||||
size -= n + 1;
|
||||
}
|
||||
p[-1] = '\0';
|
||||
return buf;
|
||||
}
|
||||
|
||||
/** return a servername extension value if provided in Client Hello, or NULL.
|
||||
* So far, only host_name types are defined (RFC 3546).
|
||||
*/
|
||||
|
||||
const char *SSL_get_servername(const SSL *s, const int type)
|
||||
{
|
||||
if (type != TLSEXT_NAMETYPE_host_name)
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* SNI is not negotiated in pre-TLS-1.3 resumption flows, so fake up an
|
||||
* SNI value to return if we are resuming/resumed. N.B. that we still
|
||||
* call the relevant callbacks for such resumption flows, and callbacks
|
||||
* might error out if there is not a SNI value available.
|
||||
*/
|
||||
if (s->hit)
|
||||
return s->session->ext.hostname;
|
||||
return s->ext.hostname;
|
||||
}
|
||||
|
||||
int SSL_get_servername_type(const SSL *s)
|
||||
{
|
||||
if (s->session
|
||||
&& (!s->ext.hostname ? s->session->
|
||||
ext.hostname : s->ext.hostname))
|
||||
return TLSEXT_NAMETYPE_host_name;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* SSL_select_next_proto implements the standard protocol selection. It is
|
||||
* expected that this function is called from the callback set by
|
||||
* SSL_CTX_set_next_proto_select_cb. The protocol data is assumed to be a
|
||||
* vector of 8-bit, length prefixed byte strings. The length byte itself is
|
||||
* not included in the length. A byte string of length 0 is invalid. No byte
|
||||
* string may be truncated. The current, but experimental algorithm for
|
||||
* selecting the protocol is: 1) If the server doesn't support NPN then this
|
||||
* is indicated to the callback. In this case, the client application has to
|
||||
* abort the connection or have a default application level protocol. 2) If
|
||||
* the server supports NPN, but advertises an empty list then the client
|
||||
* selects the first protocol in its list, but indicates via the API that this
|
||||
* fallback case was enacted. 3) Otherwise, the client finds the first
|
||||
* protocol in the server's list that it supports and selects this protocol.
|
||||
* This is because it's assumed that the server has better information about
|
||||
* which protocol a client should use. 4) If the client doesn't support any
|
||||
* of the server's advertised protocols, then this is treated the same as
|
||||
* case 2. It returns either OPENSSL_NPN_NEGOTIATED if a common protocol was
|
||||
* found, or OPENSSL_NPN_NO_OVERLAP if the fallback case was reached.
|
||||
*/
|
||||
int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
|
||||
const unsigned char *server,
|
||||
unsigned int server_len,
|
||||
const unsigned char *client, unsigned int client_len)
|
||||
{
|
||||
unsigned int i, j;
|
||||
const unsigned char *result;
|
||||
int status = OPENSSL_NPN_UNSUPPORTED;
|
||||
|
||||
/*
|
||||
* For each protocol in server preference order, see if we support it.
|
||||
*/
|
||||
for (i = 0; i < server_len;) {
|
||||
for (j = 0; j < client_len;) {
|
||||
if (server[i] == client[j] &&
|
||||
memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
|
||||
/* We found a match */
|
||||
result = &server[i];
|
||||
status = OPENSSL_NPN_NEGOTIATED;
|
||||
goto found;
|
||||
}
|
||||
j += client[j];
|
||||
j++;
|
||||
}
|
||||
i += server[i];
|
||||
i++;
|
||||
}
|
||||
|
||||
/* There's no overlap between our protocols and the server's list. */
|
||||
result = client;
|
||||
status = OPENSSL_NPN_NO_OVERLAP;
|
||||
|
||||
found:
|
||||
*out = (unsigned char *)result + 1;
|
||||
*outlen = result[0];
|
||||
return status;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
/*
|
||||
* SSL_get0_next_proto_negotiated sets *data and *len to point to the
|
||||
* client's requested protocol for this connection and returns 0. If the
|
||||
* client didn't request any protocol, then *data is set to NULL. Note that
|
||||
* the client can request any protocol it chooses. The value returned from
|
||||
* this function need not be a member of the list of supported protocols
|
||||
* provided by the callback.
|
||||
*/
|
||||
void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
|
||||
unsigned *len)
|
||||
{
|
||||
*data = s->ext.npn;
|
||||
if (!*data) {
|
||||
*len = 0;
|
||||
} else {
|
||||
*len = (unsigned int)s->ext.npn_len;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* SSL_CTX_set_npn_advertised_cb sets a callback that is called when
|
||||
* a TLS server needs a list of supported protocols for Next Protocol
|
||||
* Negotiation. The returned list must be in wire format. The list is
|
||||
* returned by setting |out| to point to it and |outlen| to its length. This
|
||||
* memory will not be modified, but one should assume that the SSL* keeps a
|
||||
* reference to it. The callback should return SSL_TLSEXT_ERR_OK if it
|
||||
* wishes to advertise. Otherwise, no such extension will be included in the
|
||||
* ServerHello.
|
||||
*/
|
||||
void SSL_CTX_set_npn_advertised_cb(SSL_CTX *ctx,
|
||||
SSL_CTX_npn_advertised_cb_func cb,
|
||||
void *arg)
|
||||
{
|
||||
ctx->ext.npn_advertised_cb = cb;
|
||||
ctx->ext.npn_advertised_cb_arg = arg;
|
||||
}
|
||||
|
||||
/*
|
||||
* SSL_CTX_set_next_proto_select_cb sets a callback that is called when a
|
||||
* client needs to select a protocol from the server's provided list. |out|
|
||||
* must be set to point to the selected protocol (which may be within |in|).
|
||||
* The length of the protocol name must be written into |outlen|. The
|
||||
* server's advertised protocols are provided in |in| and |inlen|. The
|
||||
* callback can assume that |in| is syntactically valid. The client must
|
||||
* select a protocol. It is fatal to the connection if this callback returns
|
||||
* a value other than SSL_TLSEXT_ERR_OK.
|
||||
*/
|
||||
void SSL_CTX_set_npn_select_cb(SSL_CTX *ctx,
|
||||
SSL_CTX_npn_select_cb_func cb,
|
||||
void *arg)
|
||||
{
|
||||
ctx->ext.npn_select_cb = cb;
|
||||
ctx->ext.npn_select_cb_arg = arg;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
|
||||
* |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
|
||||
* length-prefixed strings). Returns 0 on success.
|
||||
*/
|
||||
int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
|
||||
unsigned int protos_len)
|
||||
{
|
||||
OPENSSL_free(ctx->ext.alpn);
|
||||
ctx->ext.alpn = OPENSSL_memdup(protos, protos_len);
|
||||
if (ctx->ext.alpn == NULL) {
|
||||
SSLerr(SSL_F_SSL_CTX_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
|
||||
return 1;
|
||||
}
|
||||
ctx->ext.alpn_len = protos_len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
|
||||
* |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
|
||||
* length-prefixed strings). Returns 0 on success.
|
||||
*/
|
||||
int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
|
||||
unsigned int protos_len)
|
||||
{
|
||||
OPENSSL_free(ssl->ext.alpn);
|
||||
ssl->ext.alpn = OPENSSL_memdup(protos, protos_len);
|
||||
if (ssl->ext.alpn == NULL) {
|
||||
SSLerr(SSL_F_SSL_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE);
|
||||
return 1;
|
||||
}
|
||||
ssl->ext.alpn_len = protos_len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
|
||||
* called during ClientHello processing in order to select an ALPN protocol
|
||||
* from the client's list of offered protocols.
|
||||
*/
|
||||
void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
|
||||
SSL_CTX_alpn_select_cb_func cb,
|
||||
void *arg)
|
||||
{
|
||||
ctx->ext.alpn_select_cb = cb;
|
||||
ctx->ext.alpn_select_cb_arg = arg;
|
||||
}
|
||||
|
||||
/*
|
||||
* SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from |ssl|.
|
||||
* On return it sets |*data| to point to |*len| bytes of protocol name
|
||||
* (not including the leading length-prefix byte). If the server didn't
|
||||
* respond with a negotiated protocol then |*len| will be zero.
|
||||
*/
|
||||
void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
|
||||
unsigned int *len)
|
||||
{
|
||||
*data = ssl->s3.alpn_selected;
|
||||
if (*data == NULL)
|
||||
*len = 0;
|
||||
else
|
||||
*len = (unsigned int)ssl->s3.alpn_selected_len;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (s->version < TLS1_VERSION && s->version != DTLS1_BAD_VER)
|
||||
return -1;
|
||||
|
||||
return s->method->ssl3_enc->export_keying_material(s, out, olen, label,
|
||||
llen, context,
|
||||
contextlen, use_context);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (s->version != TLS1_3_VERSION)
|
||||
return 0;
|
||||
|
||||
return tls13_export_keying_material_early(s, out, olen, label, llen,
|
||||
context, contextlen);
|
||||
}
|
||||
|
||||
static unsigned long ssl_session_hash(const SSL_SESSION *a)
|
||||
{
|
||||
const unsigned char *session_id = a->session_id;
|
||||
unsigned long l;
|
||||
unsigned char tmp_storage[4];
|
||||
|
||||
if (a->session_id_length < sizeof(tmp_storage)) {
|
||||
memset(tmp_storage, 0, sizeof(tmp_storage));
|
||||
memcpy(tmp_storage, a->session_id, a->session_id_length);
|
||||
session_id = tmp_storage;
|
||||
}
|
||||
|
||||
l = (unsigned long)
|
||||
((unsigned long)session_id[0]) |
|
||||
((unsigned long)session_id[1] << 8L) |
|
||||
((unsigned long)session_id[2] << 16L) |
|
||||
((unsigned long)session_id[3] << 24L);
|
||||
return l;
|
||||
}
|
||||
|
||||
/*
|
||||
* NB: If this function (or indeed the hash function which uses a sort of
|
||||
* coarser function than this one) is changed, ensure
|
||||
* SSL_CTX_has_matching_session_id() is checked accordingly. It relies on
|
||||
* being able to construct an SSL_SESSION that will collide with any existing
|
||||
* session with a matching session ID.
|
||||
*/
|
||||
static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b)
|
||||
{
|
||||
if (a->ssl_version != b->ssl_version)
|
||||
return 1;
|
||||
if (a->session_id_length != b->session_id_length)
|
||||
return 1;
|
||||
return memcmp(a->session_id, b->session_id, a->session_id_length);
|
||||
}
|
||||
|
||||
/*
|
||||
* These wrapper functions should remain rather than redeclaring
|
||||
* SSL_SESSION_hash and SSL_SESSION_cmp for void* types and casting each
|
||||
* variable. The reason is that the functions aren't static, they're exposed
|
||||
* via ssl.h.
|
||||
*/
|
||||
|
||||
SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
|
||||
{
|
||||
SSL_CTX *ret = NULL;
|
||||
|
||||
if (meth == NULL) {
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_NULL_SSL_METHOD_PASSED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
|
||||
return NULL;
|
||||
|
||||
if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) {
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_X509_VERIFICATION_SETUP_PROBLEMS);
|
||||
goto err;
|
||||
}
|
||||
ret = OPENSSL_zalloc(sizeof(*ret));
|
||||
if (ret == NULL)
|
||||
goto err;
|
||||
|
||||
ret->method = meth;
|
||||
ret->min_proto_version = 0;
|
||||
ret->max_proto_version = 0;
|
||||
ret->mode = SSL_MODE_AUTO_RETRY;
|
||||
ret->session_cache_mode = SSL_SESS_CACHE_SERVER;
|
||||
ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT;
|
||||
/* We take the system default. */
|
||||
ret->session_timeout = meth->get_timeout();
|
||||
ret->references = 1;
|
||||
ret->lock = CRYPTO_THREAD_lock_new();
|
||||
if (ret->lock == NULL) {
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
|
||||
OPENSSL_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT;
|
||||
ret->verify_mode = SSL_VERIFY_NONE;
|
||||
if ((ret->cert = ssl_cert_new()) == NULL)
|
||||
goto err;
|
||||
|
||||
ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp);
|
||||
if (ret->sessions == NULL)
|
||||
goto err;
|
||||
ret->cert_store = X509_STORE_new();
|
||||
if (ret->cert_store == NULL)
|
||||
goto err;
|
||||
#ifndef OPENSSL_NO_CT
|
||||
ret->ctlog_store = CTLOG_STORE_new();
|
||||
if (ret->ctlog_store == NULL)
|
||||
goto err;
|
||||
#endif
|
||||
|
||||
if (!SSL_CTX_set_ciphersuites(ret, OSSL_default_ciphersuites()))
|
||||
goto err;
|
||||
|
||||
if (!ssl_create_cipher_list(ret->method,
|
||||
ret->tls13_ciphersuites,
|
||||
&ret->cipher_list, &ret->cipher_list_by_id,
|
||||
OSSL_default_cipher_list(), ret->cert)
|
||||
|| sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
|
||||
goto err2;
|
||||
}
|
||||
|
||||
ret->param = X509_VERIFY_PARAM_new();
|
||||
if (ret->param == NULL)
|
||||
goto err;
|
||||
|
||||
if ((ret->md5 = EVP_get_digestbyname("ssl3-md5")) == NULL) {
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES);
|
||||
goto err2;
|
||||
}
|
||||
if ((ret->sha1 = EVP_get_digestbyname("ssl3-sha1")) == NULL) {
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES);
|
||||
goto err2;
|
||||
}
|
||||
|
||||
if ((ret->ca_names = sk_X509_NAME_new_null()) == NULL)
|
||||
goto err;
|
||||
|
||||
if ((ret->client_ca_names = sk_X509_NAME_new_null()) == NULL)
|
||||
goto err;
|
||||
|
||||
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_CTX, ret, &ret->ex_data))
|
||||
goto err;
|
||||
|
||||
if ((ret->ext.secure = OPENSSL_secure_zalloc(sizeof(*ret->ext.secure))) == NULL)
|
||||
goto err;
|
||||
|
||||
/* No compression for DTLS */
|
||||
if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS))
|
||||
ret->comp_methods = SSL_COMP_get_compression_methods();
|
||||
|
||||
ret->max_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
|
||||
ret->split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH;
|
||||
|
||||
/* Setup RFC5077 ticket keys */
|
||||
if ((RAND_bytes(ret->ext.tick_key_name,
|
||||
sizeof(ret->ext.tick_key_name)) <= 0)
|
||||
|| (RAND_priv_bytes(ret->ext.secure->tick_hmac_key,
|
||||
sizeof(ret->ext.secure->tick_hmac_key)) <= 0)
|
||||
|| (RAND_priv_bytes(ret->ext.secure->tick_aes_key,
|
||||
sizeof(ret->ext.secure->tick_aes_key)) <= 0))
|
||||
ret->options |= SSL_OP_NO_TICKET;
|
||||
|
||||
if (RAND_priv_bytes(ret->ext.cookie_hmac_key,
|
||||
sizeof(ret->ext.cookie_hmac_key)) <= 0)
|
||||
goto err;
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
if (!SSL_CTX_SRP_CTX_init(ret))
|
||||
goto err;
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
# ifdef OPENSSL_SSL_CLIENT_ENGINE_AUTO
|
||||
# define eng_strx(x) #x
|
||||
# define eng_str(x) eng_strx(x)
|
||||
/* Use specific client engine automatically... ignore errors */
|
||||
{
|
||||
ENGINE *eng;
|
||||
eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
|
||||
if (!eng) {
|
||||
ERR_clear_error();
|
||||
ENGINE_load_builtin_engines();
|
||||
eng = ENGINE_by_id(eng_str(OPENSSL_SSL_CLIENT_ENGINE_AUTO));
|
||||
}
|
||||
if (!eng || !SSL_CTX_set_client_cert_engine(ret, eng))
|
||||
ERR_clear_error();
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
/*
|
||||
* Default is to connect to non-RI servers. When RI is more widely
|
||||
* deployed might change this.
|
||||
*/
|
||||
ret->options |= SSL_OP_LEGACY_SERVER_CONNECT;
|
||||
/*
|
||||
* Disable compression by default to prevent CRIME. Applications can
|
||||
* re-enable compression by configuring
|
||||
* SSL_CTX_clear_options(ctx, SSL_OP_NO_COMPRESSION);
|
||||
* or by using the SSL_CONF library. Similarly we also enable TLSv1.3
|
||||
* middlebox compatibility by default. This may be disabled by default in
|
||||
* a later OpenSSL version.
|
||||
*/
|
||||
ret->options |= SSL_OP_NO_COMPRESSION | SSL_OP_ENABLE_MIDDLEBOX_COMPAT;
|
||||
|
||||
ret->ext.status_type = TLSEXT_STATUSTYPE_nothing;
|
||||
|
||||
/*
|
||||
* We cannot usefully set a default max_early_data here (which gets
|
||||
* propagated in SSL_new(), for the following reason: setting the
|
||||
* SSL field causes tls_construct_stoc_early_data() to tell the
|
||||
* client that early data will be accepted when constructing a TLS 1.3
|
||||
* session ticket, and the client will accordingly send us early data
|
||||
* when using that ticket (if the client has early data to send).
|
||||
* However, in order for the early data to actually be consumed by
|
||||
* the application, the application must also have calls to
|
||||
* SSL_read_early_data(); otherwise we'll just skip past the early data
|
||||
* and ignore it. So, since the application must add calls to
|
||||
* SSL_read_early_data(), we also require them to add
|
||||
* calls to SSL_CTX_set_max_early_data() in order to use early data,
|
||||
* eliminating the bandwidth-wasting early data in the case described
|
||||
* above.
|
||||
*/
|
||||
ret->max_early_data = 0;
|
||||
|
||||
/*
|
||||
* Default recv_max_early_data is a fully loaded single record. Could be
|
||||
* split across multiple records in practice. We set this differently to
|
||||
* max_early_data so that, in the default case, we do not advertise any
|
||||
* support for early_data, but if a client were to send us some (e.g.
|
||||
* because of an old, stale ticket) then we will tolerate it and skip over
|
||||
* it.
|
||||
*/
|
||||
ret->recv_max_early_data = SSL3_RT_MAX_PLAIN_LENGTH;
|
||||
|
||||
/* By default we send two session tickets automatically in TLSv1.3 */
|
||||
ret->num_tickets = 2;
|
||||
|
||||
ssl_ctx_system_config(ret);
|
||||
|
||||
return ret;
|
||||
err:
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
|
||||
err2:
|
||||
SSL_CTX_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int SSL_CTX_up_ref(SSL_CTX *ctx)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (CRYPTO_UP_REF(&ctx->references, &i, ctx->lock) <= 0)
|
||||
return 0;
|
||||
|
||||
REF_PRINT_COUNT("SSL_CTX", ctx);
|
||||
REF_ASSERT_ISNT(i < 2);
|
||||
return ((i > 1) ? 1 : 0);
|
||||
}
|
||||
|
||||
void SSL_CTX_free(SSL_CTX *a)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (a == NULL)
|
||||
return;
|
||||
|
||||
CRYPTO_DOWN_REF(&a->references, &i, a->lock);
|
||||
REF_PRINT_COUNT("SSL_CTX", a);
|
||||
if (i > 0)
|
||||
return;
|
||||
REF_ASSERT_ISNT(i < 0);
|
||||
|
||||
X509_VERIFY_PARAM_free(a->param);
|
||||
dane_ctx_final(&a->dane);
|
||||
|
||||
/*
|
||||
* Free internal session cache. However: the remove_cb() may reference
|
||||
* the ex_data of SSL_CTX, thus the ex_data store can only be removed
|
||||
* after the sessions were flushed.
|
||||
* As the ex_data handling routines might also touch the session cache,
|
||||
* the most secure solution seems to be: empty (flush) the cache, then
|
||||
* free ex_data, then finally free the cache.
|
||||
* (See ticket [openssl.org #212].)
|
||||
*/
|
||||
if (a->sessions != NULL)
|
||||
SSL_CTX_flush_sessions(a, 0);
|
||||
|
||||
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_CTX, a, &a->ex_data);
|
||||
lh_SSL_SESSION_free(a->sessions);
|
||||
X509_STORE_free(a->cert_store);
|
||||
#ifndef OPENSSL_NO_CT
|
||||
CTLOG_STORE_free(a->ctlog_store);
|
||||
#endif
|
||||
sk_SSL_CIPHER_free(a->cipher_list);
|
||||
sk_SSL_CIPHER_free(a->cipher_list_by_id);
|
||||
sk_SSL_CIPHER_free(a->tls13_ciphersuites);
|
||||
ssl_cert_free(a->cert);
|
||||
sk_X509_NAME_pop_free(a->ca_names, X509_NAME_free);
|
||||
sk_X509_NAME_pop_free(a->client_ca_names, X509_NAME_free);
|
||||
sk_X509_pop_free(a->extra_certs, X509_free);
|
||||
a->comp_methods = NULL;
|
||||
#ifndef OPENSSL_NO_SRTP
|
||||
sk_SRTP_PROTECTION_PROFILE_free(a->srtp_profiles);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
SSL_CTX_SRP_CTX_free(a);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
ENGINE_finish(a->client_cert_engine);
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
OPENSSL_free(a->ext.ecpointformats);
|
||||
OPENSSL_free(a->ext.supportedgroups);
|
||||
#endif
|
||||
OPENSSL_free(a->ext.alpn);
|
||||
OPENSSL_secure_free(a->ext.secure);
|
||||
|
||||
CRYPTO_THREAD_lock_free(a->lock);
|
||||
|
||||
OPENSSL_free(a);
|
||||
}
|
||||
|
||||
void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb)
|
||||
{
|
||||
ctx->default_passwd_callback = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u)
|
||||
{
|
||||
ctx->default_passwd_callback_userdata = u;
|
||||
}
|
||||
|
||||
pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->default_passwd_callback;
|
||||
}
|
||||
|
||||
void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->default_passwd_callback_userdata;
|
||||
}
|
||||
|
||||
void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb)
|
||||
{
|
||||
s->default_passwd_callback = cb;
|
||||
}
|
||||
|
||||
void SSL_set_default_passwd_cb_userdata(SSL *s, void *u)
|
||||
{
|
||||
s->default_passwd_callback_userdata = u;
|
||||
}
|
||||
|
||||
pem_password_cb *SSL_get_default_passwd_cb(SSL *s)
|
||||
{
|
||||
return s->default_passwd_callback;
|
||||
}
|
||||
|
||||
void *SSL_get_default_passwd_cb_userdata(SSL *s)
|
||||
{
|
||||
return s->default_passwd_callback_userdata;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
|
||||
int (*cb) (X509_STORE_CTX *, void *),
|
||||
void *arg)
|
||||
{
|
||||
ctx->app_verify_callback = cb;
|
||||
ctx->app_verify_arg = arg;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode,
|
||||
int (*cb) (int, X509_STORE_CTX *))
|
||||
{
|
||||
ctx->verify_mode = mode;
|
||||
ctx->default_verify_callback = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
|
||||
{
|
||||
X509_VERIFY_PARAM_set_depth(ctx->param, depth);
|
||||
}
|
||||
|
||||
void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg)
|
||||
{
|
||||
ssl_cert_set_cert_cb(c->cert, cb, arg);
|
||||
}
|
||||
|
||||
void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
|
||||
{
|
||||
ssl_cert_set_cert_cb(s->cert, cb, arg);
|
||||
}
|
||||
|
||||
void ssl_set_masks(SSL *s)
|
||||
{
|
||||
CERT *c = s->cert;
|
||||
uint32_t *pvalid = s->s3.tmp.valid_flags;
|
||||
int rsa_enc, rsa_sign, dh_tmp, dsa_sign;
|
||||
unsigned long mask_k, mask_a;
|
||||
#ifndef OPENSSL_NO_EC
|
||||
int have_ecc_cert, ecdsa_ok;
|
||||
#endif
|
||||
if (c == NULL)
|
||||
return;
|
||||
|
||||
#ifndef OPENSSL_NO_DH
|
||||
dh_tmp = (c->dh_tmp != NULL || c->dh_tmp_cb != NULL || c->dh_tmp_auto);
|
||||
#else
|
||||
dh_tmp = 0;
|
||||
#endif
|
||||
|
||||
rsa_enc = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
|
||||
rsa_sign = pvalid[SSL_PKEY_RSA] & CERT_PKEY_VALID;
|
||||
dsa_sign = pvalid[SSL_PKEY_DSA_SIGN] & CERT_PKEY_VALID;
|
||||
#ifndef OPENSSL_NO_EC
|
||||
have_ecc_cert = pvalid[SSL_PKEY_ECC] & CERT_PKEY_VALID;
|
||||
#endif
|
||||
mask_k = 0;
|
||||
mask_a = 0;
|
||||
|
||||
OSSL_TRACE4(TLS_CIPHER, "dh_tmp=%d rsa_enc=%d rsa_sign=%d dsa_sign=%d\n",
|
||||
dh_tmp, rsa_enc, rsa_sign, dsa_sign);
|
||||
|
||||
#ifndef OPENSSL_NO_GOST
|
||||
if (ssl_has_cert(s, SSL_PKEY_GOST12_512)) {
|
||||
mask_k |= SSL_kGOST;
|
||||
mask_a |= SSL_aGOST12;
|
||||
}
|
||||
if (ssl_has_cert(s, SSL_PKEY_GOST12_256)) {
|
||||
mask_k |= SSL_kGOST;
|
||||
mask_a |= SSL_aGOST12;
|
||||
}
|
||||
if (ssl_has_cert(s, SSL_PKEY_GOST01)) {
|
||||
mask_k |= SSL_kGOST;
|
||||
mask_a |= SSL_aGOST01;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (rsa_enc)
|
||||
mask_k |= SSL_kRSA;
|
||||
|
||||
if (dh_tmp)
|
||||
mask_k |= SSL_kDHE;
|
||||
|
||||
/*
|
||||
* If we only have an RSA-PSS certificate allow RSA authentication
|
||||
* if TLS 1.2 and peer supports it.
|
||||
*/
|
||||
|
||||
if (rsa_enc || rsa_sign || (ssl_has_cert(s, SSL_PKEY_RSA_PSS_SIGN)
|
||||
&& pvalid[SSL_PKEY_RSA_PSS_SIGN] & CERT_PKEY_EXPLICIT_SIGN
|
||||
&& TLS1_get_version(s) == TLS1_2_VERSION))
|
||||
mask_a |= SSL_aRSA;
|
||||
|
||||
if (dsa_sign) {
|
||||
mask_a |= SSL_aDSS;
|
||||
}
|
||||
|
||||
mask_a |= SSL_aNULL;
|
||||
|
||||
/*
|
||||
* An ECC certificate may be usable for ECDH and/or ECDSA cipher suites
|
||||
* depending on the key usage extension.
|
||||
*/
|
||||
#ifndef OPENSSL_NO_EC
|
||||
if (have_ecc_cert) {
|
||||
uint32_t ex_kusage;
|
||||
ex_kusage = X509_get_key_usage(c->pkeys[SSL_PKEY_ECC].x509);
|
||||
ecdsa_ok = ex_kusage & X509v3_KU_DIGITAL_SIGNATURE;
|
||||
if (!(pvalid[SSL_PKEY_ECC] & CERT_PKEY_SIGN))
|
||||
ecdsa_ok = 0;
|
||||
if (ecdsa_ok)
|
||||
mask_a |= SSL_aECDSA;
|
||||
}
|
||||
/* Allow Ed25519 for TLS 1.2 if peer supports it */
|
||||
if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED25519)
|
||||
&& pvalid[SSL_PKEY_ED25519] & CERT_PKEY_EXPLICIT_SIGN
|
||||
&& TLS1_get_version(s) == TLS1_2_VERSION)
|
||||
mask_a |= SSL_aECDSA;
|
||||
|
||||
/* Allow Ed448 for TLS 1.2 if peer supports it */
|
||||
if (!(mask_a & SSL_aECDSA) && ssl_has_cert(s, SSL_PKEY_ED448)
|
||||
&& pvalid[SSL_PKEY_ED448] & CERT_PKEY_EXPLICIT_SIGN
|
||||
&& TLS1_get_version(s) == TLS1_2_VERSION)
|
||||
mask_a |= SSL_aECDSA;
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
mask_k |= SSL_kECDHE;
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
mask_k |= SSL_kPSK;
|
||||
mask_a |= SSL_aPSK;
|
||||
if (mask_k & SSL_kRSA)
|
||||
mask_k |= SSL_kRSAPSK;
|
||||
if (mask_k & SSL_kDHE)
|
||||
mask_k |= SSL_kDHEPSK;
|
||||
if (mask_k & SSL_kECDHE)
|
||||
mask_k |= SSL_kECDHEPSK;
|
||||
#endif
|
||||
|
||||
s->s3.tmp.mask_k = mask_k;
|
||||
s->s3.tmp.mask_a = mask_a;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
|
||||
int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
|
||||
{
|
||||
if (s->s3.tmp.new_cipher->algorithm_auth & SSL_aECDSA) {
|
||||
/* key usage, if present, must allow signing */
|
||||
if (!(X509_get_key_usage(x) & X509v3_KU_DIGITAL_SIGNATURE)) {
|
||||
SSLerr(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG,
|
||||
SSL_R_ECC_CERT_NOT_FOR_SIGNING);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1; /* all checks are ok */
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
|
||||
size_t *serverinfo_length)
|
||||
{
|
||||
CERT_PKEY *cpk = s->s3.tmp.cert;
|
||||
*serverinfo_length = 0;
|
||||
|
||||
if (cpk == NULL || cpk->serverinfo == NULL)
|
||||
return 0;
|
||||
|
||||
*serverinfo = cpk->serverinfo;
|
||||
*serverinfo_length = cpk->serverinfo_length;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void ssl_update_cache(SSL *s, int mode)
|
||||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* If the session_id_length is 0, we are not supposed to cache it, and it
|
||||
* would be rather hard to do anyway :-)
|
||||
*/
|
||||
if (s->session->session_id_length == 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* If sid_ctx_length is 0 there is no specific application context
|
||||
* associated with this session, so when we try to resume it and
|
||||
* SSL_VERIFY_PEER is requested to verify the client identity, we have no
|
||||
* indication that this is actually a session for the proper application
|
||||
* context, and the *handshake* will fail, not just the resumption attempt.
|
||||
* Do not cache (on the server) these sessions that are not resumable
|
||||
* (clients can set SSL_VERIFY_PEER without needing a sid_ctx set).
|
||||
*/
|
||||
if (s->server && s->session->sid_ctx_length == 0
|
||||
&& (s->verify_mode & SSL_VERIFY_PEER) != 0)
|
||||
return;
|
||||
|
||||
i = s->session_ctx->session_cache_mode;
|
||||
if ((i & mode) != 0
|
||||
&& (!s->hit || SSL_IS_TLS13(s))) {
|
||||
/*
|
||||
* Add the session to the internal cache. In server side TLSv1.3 we
|
||||
* normally don't do this because by default it's a full stateless ticket
|
||||
* with only a dummy session id so there is no reason to cache it,
|
||||
* unless:
|
||||
* - we are doing early_data, in which case we cache so that we can
|
||||
* detect replays
|
||||
* - the application has set a remove_session_cb so needs to know about
|
||||
* session timeout events
|
||||
* - SSL_OP_NO_TICKET is set in which case it is a stateful ticket
|
||||
*/
|
||||
if ((i & SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0
|
||||
&& (!SSL_IS_TLS13(s)
|
||||
|| !s->server
|
||||
|| (s->max_early_data > 0
|
||||
&& (s->options & SSL_OP_NO_ANTI_REPLAY) == 0)
|
||||
|| s->session_ctx->remove_session_cb != NULL
|
||||
|| (s->options & SSL_OP_NO_TICKET) != 0))
|
||||
SSL_CTX_add_session(s->session_ctx, s->session);
|
||||
|
||||
/*
|
||||
* Add the session to the external cache. We do this even in server side
|
||||
* TLSv1.3 without early data because some applications just want to
|
||||
* know about the creation of a session and aren't doing a full cache.
|
||||
*/
|
||||
if (s->session_ctx->new_session_cb != NULL) {
|
||||
SSL_SESSION_up_ref(s->session);
|
||||
if (!s->session_ctx->new_session_cb(s, s->session))
|
||||
SSL_SESSION_free(s->session);
|
||||
}
|
||||
}
|
||||
|
||||
/* auto flush every 255 connections */
|
||||
if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) {
|
||||
TSAN_QUALIFIER int *stat;
|
||||
if (mode & SSL_SESS_CACHE_CLIENT)
|
||||
stat = &s->session_ctx->stats.sess_connect_good;
|
||||
else
|
||||
stat = &s->session_ctx->stats.sess_accept_good;
|
||||
if ((tsan_load(stat) & 0xff) == 0xff)
|
||||
SSL_CTX_flush_sessions(s->session_ctx, (unsigned long)time(NULL));
|
||||
}
|
||||
}
|
||||
|
||||
const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->method;
|
||||
}
|
||||
|
||||
const SSL_METHOD *SSL_get_ssl_method(const SSL *s)
|
||||
{
|
||||
return s->method;
|
||||
}
|
||||
|
||||
int SSL_set_ssl_method(SSL *s, const SSL_METHOD *meth)
|
||||
{
|
||||
int ret = 1;
|
||||
|
||||
if (s->method != meth) {
|
||||
const SSL_METHOD *sm = s->method;
|
||||
int (*hf) (SSL *) = s->handshake_func;
|
||||
|
||||
if (sm->version == meth->version)
|
||||
s->method = meth;
|
||||
else {
|
||||
sm->ssl_free(s);
|
||||
s->method = meth;
|
||||
ret = s->method->ssl_new(s);
|
||||
}
|
||||
|
||||
if (hf == sm->ssl_connect)
|
||||
s->handshake_func = meth->ssl_connect;
|
||||
else if (hf == sm->ssl_accept)
|
||||
s->handshake_func = meth->ssl_accept;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_get_error(const SSL *s, int i)
|
||||
{
|
||||
int reason;
|
||||
unsigned long l;
|
||||
BIO *bio;
|
||||
|
||||
if (i > 0)
|
||||
return SSL_ERROR_NONE;
|
||||
|
||||
/*
|
||||
* Make things return SSL_ERROR_SYSCALL when doing SSL_do_handshake etc,
|
||||
* where we do encode the error
|
||||
*/
|
||||
if ((l = ERR_peek_error()) != 0) {
|
||||
if (ERR_GET_LIB(l) == ERR_LIB_SYS)
|
||||
return SSL_ERROR_SYSCALL;
|
||||
else
|
||||
return SSL_ERROR_SSL;
|
||||
}
|
||||
|
||||
if (SSL_want_read(s)) {
|
||||
bio = SSL_get_rbio(s);
|
||||
if (BIO_should_read(bio))
|
||||
return SSL_ERROR_WANT_READ;
|
||||
else if (BIO_should_write(bio))
|
||||
/*
|
||||
* This one doesn't make too much sense ... We never try to write
|
||||
* to the rbio, and an application program where rbio and wbio
|
||||
* are separate couldn't even know what it should wait for.
|
||||
* However if we ever set s->rwstate incorrectly (so that we have
|
||||
* SSL_want_read(s) instead of SSL_want_write(s)) and rbio and
|
||||
* wbio *are* the same, this test works around that bug; so it
|
||||
* might be safer to keep it.
|
||||
*/
|
||||
return SSL_ERROR_WANT_WRITE;
|
||||
else if (BIO_should_io_special(bio)) {
|
||||
reason = BIO_get_retry_reason(bio);
|
||||
if (reason == BIO_RR_CONNECT)
|
||||
return SSL_ERROR_WANT_CONNECT;
|
||||
else if (reason == BIO_RR_ACCEPT)
|
||||
return SSL_ERROR_WANT_ACCEPT;
|
||||
else
|
||||
return SSL_ERROR_SYSCALL; /* unknown */
|
||||
}
|
||||
}
|
||||
|
||||
if (SSL_want_write(s)) {
|
||||
/* Access wbio directly - in order to use the buffered bio if present */
|
||||
bio = s->wbio;
|
||||
if (BIO_should_write(bio))
|
||||
return SSL_ERROR_WANT_WRITE;
|
||||
else if (BIO_should_read(bio))
|
||||
/*
|
||||
* See above (SSL_want_read(s) with BIO_should_write(bio))
|
||||
*/
|
||||
return SSL_ERROR_WANT_READ;
|
||||
else if (BIO_should_io_special(bio)) {
|
||||
reason = BIO_get_retry_reason(bio);
|
||||
if (reason == BIO_RR_CONNECT)
|
||||
return SSL_ERROR_WANT_CONNECT;
|
||||
else if (reason == BIO_RR_ACCEPT)
|
||||
return SSL_ERROR_WANT_ACCEPT;
|
||||
else
|
||||
return SSL_ERROR_SYSCALL;
|
||||
}
|
||||
}
|
||||
if (SSL_want_x509_lookup(s))
|
||||
return SSL_ERROR_WANT_X509_LOOKUP;
|
||||
if (SSL_want_async(s))
|
||||
return SSL_ERROR_WANT_ASYNC;
|
||||
if (SSL_want_async_job(s))
|
||||
return SSL_ERROR_WANT_ASYNC_JOB;
|
||||
if (SSL_want_client_hello_cb(s))
|
||||
return SSL_ERROR_WANT_CLIENT_HELLO_CB;
|
||||
|
||||
if ((s->shutdown & SSL_RECEIVED_SHUTDOWN) &&
|
||||
(s->s3.warn_alert == SSL_AD_CLOSE_NOTIFY))
|
||||
return SSL_ERROR_ZERO_RETURN;
|
||||
|
||||
return SSL_ERROR_SYSCALL;
|
||||
}
|
||||
|
||||
static int ssl_do_handshake_intern(void *vargs)
|
||||
{
|
||||
struct ssl_async_args *args;
|
||||
SSL *s;
|
||||
|
||||
args = (struct ssl_async_args *)vargs;
|
||||
s = args->s;
|
||||
|
||||
return s->handshake_func(s);
|
||||
}
|
||||
|
||||
int SSL_do_handshake(SSL *s)
|
||||
{
|
||||
int ret = 1;
|
||||
|
||||
if (s->handshake_func == NULL) {
|
||||
SSLerr(SSL_F_SSL_DO_HANDSHAKE, SSL_R_CONNECTION_TYPE_NOT_SET);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ossl_statem_check_finish_init(s, -1);
|
||||
|
||||
s->method->ssl_renegotiate_check(s, 0);
|
||||
|
||||
if (SSL_in_init(s) || SSL_in_before(s)) {
|
||||
if ((s->mode & SSL_MODE_ASYNC) && ASYNC_get_current_job() == NULL) {
|
||||
struct ssl_async_args args;
|
||||
|
||||
args.s = s;
|
||||
|
||||
ret = ssl_start_async_job(s, &args, ssl_do_handshake_intern);
|
||||
} else {
|
||||
ret = s->handshake_func(s);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void SSL_set_accept_state(SSL *s)
|
||||
{
|
||||
s->server = 1;
|
||||
s->shutdown = 0;
|
||||
ossl_statem_clear(s);
|
||||
s->handshake_func = s->method->ssl_accept;
|
||||
clear_ciphers(s);
|
||||
}
|
||||
|
||||
void SSL_set_connect_state(SSL *s)
|
||||
{
|
||||
s->server = 0;
|
||||
s->shutdown = 0;
|
||||
ossl_statem_clear(s);
|
||||
s->handshake_func = s->method->ssl_connect;
|
||||
clear_ciphers(s);
|
||||
}
|
||||
|
||||
int ssl_undefined_function(SSL *s)
|
||||
{
|
||||
SSLerr(SSL_F_SSL_UNDEFINED_FUNCTION, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ssl_undefined_void_function(void)
|
||||
{
|
||||
SSLerr(SSL_F_SSL_UNDEFINED_VOID_FUNCTION,
|
||||
ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ssl_undefined_const_function(const SSL *s)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const SSL_METHOD *ssl_bad_method(int ver)
|
||||
{
|
||||
SSLerr(SSL_F_SSL_BAD_METHOD, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *ssl_protocol_to_string(int version)
|
||||
{
|
||||
switch(version)
|
||||
{
|
||||
case TLS1_3_VERSION:
|
||||
return "TLSv1.3";
|
||||
|
||||
case TLS1_2_VERSION:
|
||||
return "TLSv1.2";
|
||||
|
||||
case TLS1_1_VERSION:
|
||||
return "TLSv1.1";
|
||||
|
||||
case TLS1_VERSION:
|
||||
return "TLSv1";
|
||||
|
||||
case SSL3_VERSION:
|
||||
return "SSLv3";
|
||||
|
||||
case DTLS1_BAD_VER:
|
||||
return "DTLSv0.9";
|
||||
|
||||
case DTLS1_VERSION:
|
||||
return "DTLSv1";
|
||||
|
||||
case DTLS1_2_VERSION:
|
||||
return "DTLSv1.2";
|
||||
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
|
||||
const char *SSL_get_version(const SSL *s)
|
||||
{
|
||||
return ssl_protocol_to_string(s->version);
|
||||
}
|
||||
|
||||
static int dup_ca_names(STACK_OF(X509_NAME) **dst, STACK_OF(X509_NAME) *src)
|
||||
{
|
||||
STACK_OF(X509_NAME) *sk;
|
||||
X509_NAME *xn;
|
||||
int i;
|
||||
|
||||
if (src == NULL) {
|
||||
*dst = NULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((sk = sk_X509_NAME_new_null()) == NULL)
|
||||
return 0;
|
||||
for (i = 0; i < sk_X509_NAME_num(src); i++) {
|
||||
xn = X509_NAME_dup(sk_X509_NAME_value(src, i));
|
||||
if (xn == NULL) {
|
||||
sk_X509_NAME_pop_free(sk, X509_NAME_free);
|
||||
return 0;
|
||||
}
|
||||
if (sk_X509_NAME_insert(sk, xn, i) == 0) {
|
||||
X509_NAME_free(xn);
|
||||
sk_X509_NAME_pop_free(sk, X509_NAME_free);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
*dst = sk;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
SSL *SSL_dup(SSL *s)
|
||||
{
|
||||
SSL *ret;
|
||||
int i;
|
||||
|
||||
/* If we're not quiescent, just up_ref! */
|
||||
if (!SSL_in_init(s) || !SSL_in_before(s)) {
|
||||
CRYPTO_UP_REF(&s->references, &i, s->lock);
|
||||
return s;
|
||||
}
|
||||
|
||||
/*
|
||||
* Otherwise, copy configuration state, and session if set.
|
||||
*/
|
||||
if ((ret = SSL_new(SSL_get_SSL_CTX(s))) == NULL)
|
||||
return NULL;
|
||||
|
||||
if (s->session != NULL) {
|
||||
/*
|
||||
* Arranges to share the same session via up_ref. This "copies"
|
||||
* session-id, SSL_METHOD, sid_ctx, and 'cert'
|
||||
*/
|
||||
if (!SSL_copy_session_id(ret, s))
|
||||
goto err;
|
||||
} else {
|
||||
/*
|
||||
* No session has been established yet, so we have to expect that
|
||||
* s->cert or ret->cert will be changed later -- they should not both
|
||||
* point to the same object, and thus we can't use
|
||||
* SSL_copy_session_id.
|
||||
*/
|
||||
if (!SSL_set_ssl_method(ret, s->method))
|
||||
goto err;
|
||||
|
||||
if (s->cert != NULL) {
|
||||
ssl_cert_free(ret->cert);
|
||||
ret->cert = ssl_cert_dup(s->cert);
|
||||
if (ret->cert == NULL)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!SSL_set_session_id_context(ret, s->sid_ctx,
|
||||
(int)s->sid_ctx_length))
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!ssl_dane_dup(ret, s))
|
||||
goto err;
|
||||
ret->version = s->version;
|
||||
ret->options = s->options;
|
||||
ret->mode = s->mode;
|
||||
SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s));
|
||||
SSL_set_read_ahead(ret, SSL_get_read_ahead(s));
|
||||
ret->msg_callback = s->msg_callback;
|
||||
ret->msg_callback_arg = s->msg_callback_arg;
|
||||
SSL_set_verify(ret, SSL_get_verify_mode(s), SSL_get_verify_callback(s));
|
||||
SSL_set_verify_depth(ret, SSL_get_verify_depth(s));
|
||||
ret->generate_session_id = s->generate_session_id;
|
||||
|
||||
SSL_set_info_callback(ret, SSL_get_info_callback(s));
|
||||
|
||||
/* copy app data, a little dangerous perhaps */
|
||||
if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data))
|
||||
goto err;
|
||||
|
||||
/* setup rbio, and wbio */
|
||||
if (s->rbio != NULL) {
|
||||
if (!BIO_dup_state(s->rbio, (char *)&ret->rbio))
|
||||
goto err;
|
||||
}
|
||||
if (s->wbio != NULL) {
|
||||
if (s->wbio != s->rbio) {
|
||||
if (!BIO_dup_state(s->wbio, (char *)&ret->wbio))
|
||||
goto err;
|
||||
} else {
|
||||
BIO_up_ref(ret->rbio);
|
||||
ret->wbio = ret->rbio;
|
||||
}
|
||||
}
|
||||
|
||||
ret->server = s->server;
|
||||
if (s->handshake_func) {
|
||||
if (s->server)
|
||||
SSL_set_accept_state(ret);
|
||||
else
|
||||
SSL_set_connect_state(ret);
|
||||
}
|
||||
ret->shutdown = s->shutdown;
|
||||
ret->hit = s->hit;
|
||||
|
||||
ret->default_passwd_callback = s->default_passwd_callback;
|
||||
ret->default_passwd_callback_userdata = s->default_passwd_callback_userdata;
|
||||
|
||||
X509_VERIFY_PARAM_inherit(ret->param, s->param);
|
||||
|
||||
/* dup the cipher_list and cipher_list_by_id stacks */
|
||||
if (s->cipher_list != NULL) {
|
||||
if ((ret->cipher_list = sk_SSL_CIPHER_dup(s->cipher_list)) == NULL)
|
||||
goto err;
|
||||
}
|
||||
if (s->cipher_list_by_id != NULL)
|
||||
if ((ret->cipher_list_by_id = sk_SSL_CIPHER_dup(s->cipher_list_by_id))
|
||||
== NULL)
|
||||
goto err;
|
||||
|
||||
/* Dup the client_CA list */
|
||||
if (!dup_ca_names(&ret->ca_names, s->ca_names)
|
||||
|| !dup_ca_names(&ret->client_ca_names, s->client_ca_names))
|
||||
goto err;
|
||||
|
||||
return ret;
|
||||
|
||||
err:
|
||||
SSL_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ssl_clear_cipher_ctx(SSL *s)
|
||||
{
|
||||
if (s->enc_read_ctx != NULL) {
|
||||
EVP_CIPHER_CTX_free(s->enc_read_ctx);
|
||||
s->enc_read_ctx = NULL;
|
||||
}
|
||||
if (s->enc_write_ctx != NULL) {
|
||||
EVP_CIPHER_CTX_free(s->enc_write_ctx);
|
||||
s->enc_write_ctx = NULL;
|
||||
}
|
||||
#ifndef OPENSSL_NO_COMP
|
||||
COMP_CTX_free(s->expand);
|
||||
s->expand = NULL;
|
||||
COMP_CTX_free(s->compress);
|
||||
s->compress = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
X509 *SSL_get_certificate(const SSL *s)
|
||||
{
|
||||
if (s->cert != NULL)
|
||||
return s->cert->key->x509;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EVP_PKEY *SSL_get_privatekey(const SSL *s)
|
||||
{
|
||||
if (s->cert != NULL)
|
||||
return s->cert->key->privatekey;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
|
||||
{
|
||||
if (ctx->cert != NULL)
|
||||
return ctx->cert->key->x509;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
|
||||
{
|
||||
if (ctx->cert != NULL)
|
||||
return ctx->cert->key->privatekey;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
|
||||
{
|
||||
if ((s->session != NULL) && (s->session->cipher != NULL))
|
||||
return s->session->cipher;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s)
|
||||
{
|
||||
return s->s3.tmp.new_cipher;
|
||||
}
|
||||
|
||||
const COMP_METHOD *SSL_get_current_compression(const SSL *s)
|
||||
{
|
||||
#ifndef OPENSSL_NO_COMP
|
||||
return s->compress ? COMP_CTX_get_method(s->compress) : NULL;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
const COMP_METHOD *SSL_get_current_expansion(const SSL *s)
|
||||
{
|
||||
#ifndef OPENSSL_NO_COMP
|
||||
return s->expand ? COMP_CTX_get_method(s->expand) : NULL;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
int ssl_init_wbio_buffer(SSL *s)
|
||||
{
|
||||
BIO *bbio;
|
||||
|
||||
if (s->bbio != NULL) {
|
||||
/* Already buffered. */
|
||||
return 1;
|
||||
}
|
||||
|
||||
bbio = BIO_new(BIO_f_buffer());
|
||||
if (bbio == NULL || !BIO_set_read_buffer_size(bbio, 1)) {
|
||||
BIO_free(bbio);
|
||||
SSLerr(SSL_F_SSL_INIT_WBIO_BUFFER, ERR_R_BUF_LIB);
|
||||
return 0;
|
||||
}
|
||||
s->bbio = bbio;
|
||||
s->wbio = BIO_push(bbio, s->wbio);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ssl_free_wbio_buffer(SSL *s)
|
||||
{
|
||||
/* callers ensure s is never null */
|
||||
if (s->bbio == NULL)
|
||||
return 1;
|
||||
|
||||
s->wbio = BIO_pop(s->wbio);
|
||||
BIO_free(s->bbio);
|
||||
s->bbio = NULL;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode)
|
||||
{
|
||||
ctx->quiet_shutdown = mode;
|
||||
}
|
||||
|
||||
int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->quiet_shutdown;
|
||||
}
|
||||
|
||||
void SSL_set_quiet_shutdown(SSL *s, int mode)
|
||||
{
|
||||
s->quiet_shutdown = mode;
|
||||
}
|
||||
|
||||
int SSL_get_quiet_shutdown(const SSL *s)
|
||||
{
|
||||
return s->quiet_shutdown;
|
||||
}
|
||||
|
||||
void SSL_set_shutdown(SSL *s, int mode)
|
||||
{
|
||||
s->shutdown = mode;
|
||||
}
|
||||
|
||||
int SSL_get_shutdown(const SSL *s)
|
||||
{
|
||||
return s->shutdown;
|
||||
}
|
||||
|
||||
int SSL_version(const SSL *s)
|
||||
{
|
||||
return s->version;
|
||||
}
|
||||
|
||||
int SSL_client_version(const SSL *s)
|
||||
{
|
||||
return s->client_version;
|
||||
}
|
||||
|
||||
SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl)
|
||||
{
|
||||
return ssl->ctx;
|
||||
}
|
||||
|
||||
SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
|
||||
{
|
||||
CERT *new_cert;
|
||||
if (ssl->ctx == ctx)
|
||||
return ssl->ctx;
|
||||
if (ctx == NULL)
|
||||
ctx = ssl->session_ctx;
|
||||
new_cert = ssl_cert_dup(ctx->cert);
|
||||
if (new_cert == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!custom_exts_copy_flags(&new_cert->custext, &ssl->cert->custext)) {
|
||||
ssl_cert_free(new_cert);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ssl_cert_free(ssl->cert);
|
||||
ssl->cert = new_cert;
|
||||
|
||||
/*
|
||||
* Program invariant: |sid_ctx| has fixed size (SSL_MAX_SID_CTX_LENGTH),
|
||||
* so setter APIs must prevent invalid lengths from entering the system.
|
||||
*/
|
||||
if (!ossl_assert(ssl->sid_ctx_length <= sizeof(ssl->sid_ctx)))
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* If the session ID context matches that of the parent SSL_CTX,
|
||||
* inherit it from the new SSL_CTX as well. If however the context does
|
||||
* not match (i.e., it was set per-ssl with SSL_set_session_id_context),
|
||||
* leave it unchanged.
|
||||
*/
|
||||
if ((ssl->ctx != NULL) &&
|
||||
(ssl->sid_ctx_length == ssl->ctx->sid_ctx_length) &&
|
||||
(memcmp(ssl->sid_ctx, ssl->ctx->sid_ctx, ssl->sid_ctx_length) == 0)) {
|
||||
ssl->sid_ctx_length = ctx->sid_ctx_length;
|
||||
memcpy(&ssl->sid_ctx, &ctx->sid_ctx, sizeof(ssl->sid_ctx));
|
||||
}
|
||||
|
||||
SSL_CTX_up_ref(ctx);
|
||||
SSL_CTX_free(ssl->ctx); /* decrement reference count */
|
||||
ssl->ctx = ctx;
|
||||
|
||||
return ssl->ctx;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
|
||||
{
|
||||
return X509_STORE_set_default_paths(ctx->cert_store);
|
||||
}
|
||||
|
||||
int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx)
|
||||
{
|
||||
X509_LOOKUP *lookup;
|
||||
|
||||
lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_hash_dir());
|
||||
if (lookup == NULL)
|
||||
return 0;
|
||||
X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
|
||||
|
||||
/* Clear any errors if the default directory does not exist */
|
||||
ERR_clear_error();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_default_verify_file(SSL_CTX *ctx)
|
||||
{
|
||||
X509_LOOKUP *lookup;
|
||||
|
||||
lookup = X509_STORE_add_lookup(ctx->cert_store, X509_LOOKUP_file());
|
||||
if (lookup == NULL)
|
||||
return 0;
|
||||
|
||||
X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
|
||||
|
||||
/* Clear any errors if the default file does not exist */
|
||||
ERR_clear_error();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,
|
||||
const char *CApath)
|
||||
{
|
||||
return X509_STORE_load_locations(ctx->cert_store, CAfile, CApath);
|
||||
}
|
||||
|
||||
void SSL_set_info_callback(SSL *ssl,
|
||||
void (*cb) (const SSL *ssl, int type, int val))
|
||||
{
|
||||
ssl->info_callback = cb;
|
||||
}
|
||||
|
||||
/*
|
||||
* One compiler (Diab DCC) doesn't like argument names in returned function
|
||||
* pointer.
|
||||
*/
|
||||
void (*SSL_get_info_callback(const SSL *ssl)) (const SSL * /* ssl */ ,
|
||||
int /* type */ ,
|
||||
int /* val */ ) {
|
||||
return ssl->info_callback;
|
||||
}
|
||||
|
||||
void SSL_set_verify_result(SSL *ssl, long arg)
|
||||
{
|
||||
ssl->verify_result = arg;
|
||||
}
|
||||
|
||||
long SSL_get_verify_result(const SSL *ssl)
|
||||
{
|
||||
return ssl->verify_result;
|
||||
}
|
||||
|
||||
size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen)
|
||||
{
|
||||
if (outlen == 0)
|
||||
return sizeof(ssl->s3.client_random);
|
||||
if (outlen > sizeof(ssl->s3.client_random))
|
||||
outlen = sizeof(ssl->s3.client_random);
|
||||
memcpy(out, ssl->s3.client_random, outlen);
|
||||
return outlen;
|
||||
}
|
||||
|
||||
size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen)
|
||||
{
|
||||
if (outlen == 0)
|
||||
return sizeof(ssl->s3.server_random);
|
||||
if (outlen > sizeof(ssl->s3.server_random))
|
||||
outlen = sizeof(ssl->s3.server_random);
|
||||
memcpy(out, ssl->s3.server_random, outlen);
|
||||
return outlen;
|
||||
}
|
||||
|
||||
size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
|
||||
unsigned char *out, size_t outlen)
|
||||
{
|
||||
if (outlen == 0)
|
||||
return session->master_key_length;
|
||||
if (outlen > session->master_key_length)
|
||||
outlen = session->master_key_length;
|
||||
memcpy(out, session->master_key, outlen);
|
||||
return outlen;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
|
||||
size_t len)
|
||||
{
|
||||
if (len > sizeof(sess->master_key))
|
||||
return 0;
|
||||
|
||||
memcpy(sess->master_key, in, len);
|
||||
sess->master_key_length = len;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int SSL_set_ex_data(SSL *s, int idx, void *arg)
|
||||
{
|
||||
return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
|
||||
}
|
||||
|
||||
void *SSL_get_ex_data(const SSL *s, int idx)
|
||||
{
|
||||
return CRYPTO_get_ex_data(&s->ex_data, idx);
|
||||
}
|
||||
|
||||
int SSL_CTX_set_ex_data(SSL_CTX *s, int idx, void *arg)
|
||||
{
|
||||
return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
|
||||
}
|
||||
|
||||
void *SSL_CTX_get_ex_data(const SSL_CTX *s, int idx)
|
||||
{
|
||||
return CRYPTO_get_ex_data(&s->ex_data, idx);
|
||||
}
|
||||
|
||||
X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->cert_store;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store)
|
||||
{
|
||||
X509_STORE_free(ctx->cert_store);
|
||||
ctx->cert_store = store;
|
||||
}
|
||||
|
||||
void SSL_CTX_set1_cert_store(SSL_CTX *ctx, X509_STORE *store)
|
||||
{
|
||||
if (store != NULL)
|
||||
X509_STORE_up_ref(store);
|
||||
SSL_CTX_set_cert_store(ctx, store);
|
||||
}
|
||||
|
||||
int SSL_want(const SSL *s)
|
||||
{
|
||||
return s->rwstate;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Set the callback for generating temporary DH keys.
|
||||
* \param ctx the SSL context.
|
||||
* \param dh the callback
|
||||
*/
|
||||
|
||||
#ifndef OPENSSL_NO_DH
|
||||
void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
|
||||
DH *(*dh) (SSL *ssl, int is_export,
|
||||
int keylength))
|
||||
{
|
||||
SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
|
||||
}
|
||||
|
||||
void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export,
|
||||
int keylength))
|
||||
{
|
||||
SSL_callback_ctrl(ssl, SSL_CTRL_SET_TMP_DH_CB, (void (*)(void))dh);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint)
|
||||
{
|
||||
if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
|
||||
SSLerr(SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
OPENSSL_free(ctx->cert->psk_identity_hint);
|
||||
if (identity_hint != NULL) {
|
||||
ctx->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
|
||||
if (ctx->cert->psk_identity_hint == NULL)
|
||||
return 0;
|
||||
} else
|
||||
ctx->cert->psk_identity_hint = NULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
|
||||
if (identity_hint != NULL && strlen(identity_hint) > PSK_MAX_IDENTITY_LEN) {
|
||||
SSLerr(SSL_F_SSL_USE_PSK_IDENTITY_HINT, SSL_R_DATA_LENGTH_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
OPENSSL_free(s->cert->psk_identity_hint);
|
||||
if (identity_hint != NULL) {
|
||||
s->cert->psk_identity_hint = OPENSSL_strdup(identity_hint);
|
||||
if (s->cert->psk_identity_hint == NULL)
|
||||
return 0;
|
||||
} else
|
||||
s->cert->psk_identity_hint = NULL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const char *SSL_get_psk_identity_hint(const SSL *s)
|
||||
{
|
||||
if (s == NULL || s->session == NULL)
|
||||
return NULL;
|
||||
return s->session->psk_identity_hint;
|
||||
}
|
||||
|
||||
const char *SSL_get_psk_identity(const SSL *s)
|
||||
{
|
||||
if (s == NULL || s->session == NULL)
|
||||
return NULL;
|
||||
return s->session->psk_identity;
|
||||
}
|
||||
|
||||
void SSL_set_psk_client_callback(SSL *s, SSL_psk_client_cb_func cb)
|
||||
{
|
||||
s->psk_client_callback = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb)
|
||||
{
|
||||
ctx->psk_client_callback = cb;
|
||||
}
|
||||
|
||||
void SSL_set_psk_server_callback(SSL *s, SSL_psk_server_cb_func cb)
|
||||
{
|
||||
s->psk_server_callback = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb)
|
||||
{
|
||||
ctx->psk_server_callback = cb;
|
||||
}
|
||||
#endif
|
||||
|
||||
void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb)
|
||||
{
|
||||
s->psk_find_session_cb = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx,
|
||||
SSL_psk_find_session_cb_func cb)
|
||||
{
|
||||
ctx->psk_find_session_cb = cb;
|
||||
}
|
||||
|
||||
void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb)
|
||||
{
|
||||
s->psk_use_session_cb = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
|
||||
SSL_psk_use_session_cb_func cb)
|
||||
{
|
||||
ctx->psk_use_session_cb = cb;
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
SSL_callback_ctrl(ssl, SSL_CTRL_SET_MSG_CALLBACK, (void (*)(void))cb);
|
||||
}
|
||||
|
||||
void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx,
|
||||
int (*cb) (SSL *ssl,
|
||||
int
|
||||
is_forward_secure))
|
||||
{
|
||||
SSL_CTX_callback_ctrl(ctx, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
|
||||
(void (*)(void))cb);
|
||||
}
|
||||
|
||||
void SSL_set_not_resumable_session_callback(SSL *ssl,
|
||||
int (*cb) (SSL *ssl,
|
||||
int is_forward_secure))
|
||||
{
|
||||
SSL_callback_ctrl(ssl, SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB,
|
||||
(void (*)(void))cb);
|
||||
}
|
||||
|
||||
void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx,
|
||||
size_t (*cb) (SSL *ssl, int type,
|
||||
size_t len, void *arg))
|
||||
{
|
||||
ctx->record_padding_cb = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg)
|
||||
{
|
||||
ctx->record_padding_arg = arg;
|
||||
}
|
||||
|
||||
void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->record_padding_arg;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size)
|
||||
{
|
||||
/* block size of 0 or 1 is basically no padding */
|
||||
if (block_size == 1)
|
||||
ctx->block_padding = 0;
|
||||
else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
|
||||
ctx->block_padding = block_size;
|
||||
else
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void SSL_set_record_padding_callback(SSL *ssl,
|
||||
size_t (*cb) (SSL *ssl, int type,
|
||||
size_t len, void *arg))
|
||||
{
|
||||
ssl->record_padding_cb = cb;
|
||||
}
|
||||
|
||||
void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg)
|
||||
{
|
||||
ssl->record_padding_arg = arg;
|
||||
}
|
||||
|
||||
void *SSL_get_record_padding_callback_arg(const SSL *ssl)
|
||||
{
|
||||
return ssl->record_padding_arg;
|
||||
}
|
||||
|
||||
int SSL_set_block_padding(SSL *ssl, size_t block_size)
|
||||
{
|
||||
/* block size of 0 or 1 is basically no padding */
|
||||
if (block_size == 1)
|
||||
ssl->block_padding = 0;
|
||||
else if (block_size <= SSL3_RT_MAX_PLAIN_LENGTH)
|
||||
ssl->block_padding = block_size;
|
||||
else
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_num_tickets(SSL *s, size_t num_tickets)
|
||||
{
|
||||
s->num_tickets = num_tickets;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
size_t SSL_get_num_tickets(const SSL *s)
|
||||
{
|
||||
return s->num_tickets;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets)
|
||||
{
|
||||
ctx->num_tickets = num_tickets;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->num_tickets;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocates new EVP_MD_CTX and sets pointer to it into given pointer
|
||||
* variable, freeing EVP_MD_CTX previously stored in that variable, if any.
|
||||
* If EVP_MD pointer is passed, initializes ctx with this |md|.
|
||||
* Returns the newly allocated ctx;
|
||||
*/
|
||||
|
||||
EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md)
|
||||
{
|
||||
ssl_clear_hash_ctx(hash);
|
||||
*hash = EVP_MD_CTX_new();
|
||||
if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) {
|
||||
EVP_MD_CTX_free(*hash);
|
||||
*hash = NULL;
|
||||
return NULL;
|
||||
}
|
||||
return *hash;
|
||||
}
|
||||
|
||||
void ssl_clear_hash_ctx(EVP_MD_CTX **hash)
|
||||
{
|
||||
|
||||
EVP_MD_CTX_free(*hash);
|
||||
*hash = NULL;
|
||||
}
|
||||
|
||||
/* Retrieve handshake hashes */
|
||||
int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
|
||||
size_t *hashlen)
|
||||
{
|
||||
EVP_MD_CTX *ctx = NULL;
|
||||
EVP_MD_CTX *hdgst = s->s3.handshake_dgst;
|
||||
int hashleni = EVP_MD_CTX_size(hdgst);
|
||||
int ret = 0;
|
||||
|
||||
if (hashleni < 0 || (size_t)hashleni > outlen) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ctx = EVP_MD_CTX_new();
|
||||
if (ctx == NULL)
|
||||
goto err;
|
||||
|
||||
if (!EVP_MD_CTX_copy_ex(ctx, hdgst)
|
||||
|| EVP_DigestFinal_ex(ctx, out, NULL) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
*hashlen = hashleni;
|
||||
|
||||
ret = 1;
|
||||
err:
|
||||
EVP_MD_CTX_free(ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_session_reused(const SSL *s)
|
||||
{
|
||||
return s->hit;
|
||||
}
|
||||
|
||||
int SSL_is_server(const SSL *s)
|
||||
{
|
||||
return s->server;
|
||||
}
|
||||
|
||||
#if !OPENSSL_API_1_1_0
|
||||
void SSL_set_debug(SSL *s, int debug)
|
||||
{
|
||||
/* Old function was do-nothing anyway... */
|
||||
(void)s;
|
||||
(void)debug;
|
||||
}
|
||||
#endif
|
||||
|
||||
void SSL_set_security_level(SSL *s, int level)
|
||||
{
|
||||
s->cert->sec_level = level;
|
||||
}
|
||||
|
||||
int SSL_get_security_level(const SSL *s)
|
||||
{
|
||||
return s->cert->sec_level;
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
s->cert->sec_cb = cb;
|
||||
}
|
||||
|
||||
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) {
|
||||
return s->cert->sec_cb;
|
||||
}
|
||||
|
||||
void SSL_set0_security_ex_data(SSL *s, void *ex)
|
||||
{
|
||||
s->cert->sec_ex = ex;
|
||||
}
|
||||
|
||||
void *SSL_get0_security_ex_data(const SSL *s)
|
||||
{
|
||||
return s->cert->sec_ex;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_security_level(SSL_CTX *ctx, int level)
|
||||
{
|
||||
ctx->cert->sec_level = level;
|
||||
}
|
||||
|
||||
int SSL_CTX_get_security_level(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->cert->sec_level;
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
ctx->cert->sec_cb = cb;
|
||||
}
|
||||
|
||||
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) {
|
||||
return ctx->cert->sec_cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex)
|
||||
{
|
||||
ctx->cert->sec_ex = ex;
|
||||
}
|
||||
|
||||
void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->cert->sec_ex;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get/Set/Clear options in SSL_CTX or SSL, formerly macros, now functions that
|
||||
* can return unsigned long, instead of the generic long return value from the
|
||||
* control interface.
|
||||
*/
|
||||
unsigned long SSL_CTX_get_options(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->options;
|
||||
}
|
||||
|
||||
unsigned long SSL_get_options(const SSL *s)
|
||||
{
|
||||
return s->options;
|
||||
}
|
||||
|
||||
unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op)
|
||||
{
|
||||
return ctx->options |= op;
|
||||
}
|
||||
|
||||
unsigned long SSL_set_options(SSL *s, unsigned long op)
|
||||
{
|
||||
return s->options |= op;
|
||||
}
|
||||
|
||||
unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op)
|
||||
{
|
||||
return ctx->options &= ~op;
|
||||
}
|
||||
|
||||
unsigned long SSL_clear_options(SSL *s, unsigned long op)
|
||||
{
|
||||
return s->options &= ~op;
|
||||
}
|
||||
|
||||
STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s)
|
||||
{
|
||||
return s->verified_chain;
|
||||
}
|
||||
|
||||
IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
|
||||
|
||||
#ifndef OPENSSL_NO_CT
|
||||
|
||||
/*
|
||||
* Moves SCTs from the |src| stack to the |dst| stack.
|
||||
* The source of each SCT will be set to |origin|.
|
||||
* If |dst| points to a NULL pointer, a new stack will be created and owned by
|
||||
* the caller.
|
||||
* Returns the number of SCTs moved, or a negative integer if an error occurs.
|
||||
*/
|
||||
static int ct_move_scts(STACK_OF(SCT) **dst, STACK_OF(SCT) *src,
|
||||
sct_source_t origin)
|
||||
{
|
||||
int scts_moved = 0;
|
||||
SCT *sct = NULL;
|
||||
|
||||
if (*dst == NULL) {
|
||||
*dst = sk_SCT_new_null();
|
||||
if (*dst == NULL) {
|
||||
SSLerr(SSL_F_CT_MOVE_SCTS, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
while ((sct = sk_SCT_pop(src)) != NULL) {
|
||||
if (SCT_set_source(sct, origin) != 1)
|
||||
goto err;
|
||||
|
||||
if (sk_SCT_push(*dst, sct) <= 0)
|
||||
goto err;
|
||||
scts_moved += 1;
|
||||
}
|
||||
|
||||
return scts_moved;
|
||||
err:
|
||||
if (sct != NULL)
|
||||
sk_SCT_push(src, sct); /* Put the SCT back */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Look for data collected during ServerHello and parse if found.
|
||||
* Returns the number of SCTs extracted.
|
||||
*/
|
||||
static int ct_extract_tls_extension_scts(SSL *s)
|
||||
{
|
||||
int scts_extracted = 0;
|
||||
|
||||
if (s->ext.scts != NULL) {
|
||||
const unsigned char *p = s->ext.scts;
|
||||
STACK_OF(SCT) *scts = o2i_SCT_LIST(NULL, &p, s->ext.scts_len);
|
||||
|
||||
scts_extracted = ct_move_scts(&s->scts, scts, SCT_SOURCE_TLS_EXTENSION);
|
||||
|
||||
SCT_LIST_free(scts);
|
||||
}
|
||||
|
||||
return scts_extracted;
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks for an OCSP response and then attempts to extract any SCTs found if it
|
||||
* contains an SCT X509 extension. They will be stored in |s->scts|.
|
||||
* Returns:
|
||||
* - The number of SCTs extracted, assuming an OCSP response exists.
|
||||
* - 0 if no OCSP response exists or it contains no SCTs.
|
||||
* - A negative integer if an error occurs.
|
||||
*/
|
||||
static int ct_extract_ocsp_response_scts(SSL *s)
|
||||
{
|
||||
# ifndef OPENSSL_NO_OCSP
|
||||
int scts_extracted = 0;
|
||||
const unsigned char *p;
|
||||
OCSP_BASICRESP *br = NULL;
|
||||
OCSP_RESPONSE *rsp = NULL;
|
||||
STACK_OF(SCT) *scts = NULL;
|
||||
int i;
|
||||
|
||||
if (s->ext.ocsp.resp == NULL || s->ext.ocsp.resp_len == 0)
|
||||
goto err;
|
||||
|
||||
p = s->ext.ocsp.resp;
|
||||
rsp = d2i_OCSP_RESPONSE(NULL, &p, (int)s->ext.ocsp.resp_len);
|
||||
if (rsp == NULL)
|
||||
goto err;
|
||||
|
||||
br = OCSP_response_get1_basic(rsp);
|
||||
if (br == NULL)
|
||||
goto err;
|
||||
|
||||
for (i = 0; i < OCSP_resp_count(br); ++i) {
|
||||
OCSP_SINGLERESP *single = OCSP_resp_get0(br, i);
|
||||
|
||||
if (single == NULL)
|
||||
continue;
|
||||
|
||||
scts =
|
||||
OCSP_SINGLERESP_get1_ext_d2i(single, NID_ct_cert_scts, NULL, NULL);
|
||||
scts_extracted =
|
||||
ct_move_scts(&s->scts, scts, SCT_SOURCE_OCSP_STAPLED_RESPONSE);
|
||||
if (scts_extracted < 0)
|
||||
goto err;
|
||||
}
|
||||
err:
|
||||
SCT_LIST_free(scts);
|
||||
OCSP_BASICRESP_free(br);
|
||||
OCSP_RESPONSE_free(rsp);
|
||||
return scts_extracted;
|
||||
# else
|
||||
/* Behave as if no OCSP response exists */
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Attempts to extract SCTs from the peer certificate.
|
||||
* Return the number of SCTs extracted, or a negative integer if an error
|
||||
* occurs.
|
||||
*/
|
||||
static int ct_extract_x509v3_extension_scts(SSL *s)
|
||||
{
|
||||
int scts_extracted = 0;
|
||||
X509 *cert = s->session != NULL ? s->session->peer : NULL;
|
||||
|
||||
if (cert != NULL) {
|
||||
STACK_OF(SCT) *scts =
|
||||
X509_get_ext_d2i(cert, NID_ct_precert_scts, NULL, NULL);
|
||||
|
||||
scts_extracted =
|
||||
ct_move_scts(&s->scts, scts, SCT_SOURCE_X509V3_EXTENSION);
|
||||
|
||||
SCT_LIST_free(scts);
|
||||
}
|
||||
|
||||
return scts_extracted;
|
||||
}
|
||||
|
||||
/*
|
||||
* Attempts to find all received SCTs by checking TLS extensions, the OCSP
|
||||
* response (if it exists) and X509v3 extensions in the certificate.
|
||||
* Returns NULL if an error occurs.
|
||||
*/
|
||||
const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s)
|
||||
{
|
||||
if (!s->scts_parsed) {
|
||||
if (ct_extract_tls_extension_scts(s) < 0 ||
|
||||
ct_extract_ocsp_response_scts(s) < 0 ||
|
||||
ct_extract_x509v3_extension_scts(s) < 0)
|
||||
goto err;
|
||||
|
||||
s->scts_parsed = 1;
|
||||
}
|
||||
return s->scts;
|
||||
err:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int ct_permissive(const CT_POLICY_EVAL_CTX * ctx,
|
||||
const STACK_OF(SCT) *scts, void *unused_arg)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ct_strict(const CT_POLICY_EVAL_CTX * ctx,
|
||||
const STACK_OF(SCT) *scts, void *unused_arg)
|
||||
{
|
||||
int count = scts != NULL ? sk_SCT_num(scts) : 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < count; ++i) {
|
||||
SCT *sct = sk_SCT_value(scts, i);
|
||||
int status = SCT_get_validation_status(sct);
|
||||
|
||||
if (status == SCT_VALIDATION_STATUS_VALID)
|
||||
return 1;
|
||||
}
|
||||
SSLerr(SSL_F_CT_STRICT, SSL_R_NO_VALID_SCTS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
|
||||
void *arg)
|
||||
{
|
||||
/*
|
||||
* Since code exists that uses the custom extension handler for CT, look
|
||||
* for this and throw an error if they have already registered to use CT.
|
||||
*/
|
||||
if (callback != NULL && SSL_CTX_has_client_custom_ext(s->ctx,
|
||||
TLSEXT_TYPE_signed_certificate_timestamp))
|
||||
{
|
||||
SSLerr(SSL_F_SSL_SET_CT_VALIDATION_CALLBACK,
|
||||
SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (callback != NULL) {
|
||||
/*
|
||||
* If we are validating CT, then we MUST accept SCTs served via OCSP
|
||||
*/
|
||||
if (!SSL_set_tlsext_status_type(s, TLSEXT_STATUSTYPE_ocsp))
|
||||
return 0;
|
||||
}
|
||||
|
||||
s->ct_validation_callback = callback;
|
||||
s->ct_validation_callback_arg = arg;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx,
|
||||
ssl_ct_validation_cb callback, void *arg)
|
||||
{
|
||||
/*
|
||||
* Since code exists that uses the custom extension handler for CT, look for
|
||||
* this and throw an error if they have already registered to use CT.
|
||||
*/
|
||||
if (callback != NULL && SSL_CTX_has_client_custom_ext(ctx,
|
||||
TLSEXT_TYPE_signed_certificate_timestamp))
|
||||
{
|
||||
SSLerr(SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK,
|
||||
SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ctx->ct_validation_callback = callback;
|
||||
ctx->ct_validation_callback_arg = arg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_ct_is_enabled(const SSL *s)
|
||||
{
|
||||
return s->ct_validation_callback != NULL;
|
||||
}
|
||||
|
||||
int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->ct_validation_callback != NULL;
|
||||
}
|
||||
|
||||
int ssl_validate_ct(SSL *s)
|
||||
{
|
||||
int ret = 0;
|
||||
X509 *cert = s->session != NULL ? s->session->peer : NULL;
|
||||
X509 *issuer;
|
||||
SSL_DANE *dane = &s->dane;
|
||||
CT_POLICY_EVAL_CTX *ctx = NULL;
|
||||
const STACK_OF(SCT) *scts;
|
||||
|
||||
/*
|
||||
* If no callback is set, the peer is anonymous, or its chain is invalid,
|
||||
* skip SCT validation - just return success. Applications that continue
|
||||
* handshakes without certificates, with unverified chains, or pinned leaf
|
||||
* certificates are outside the scope of the WebPKI and CT.
|
||||
*
|
||||
* The above exclusions notwithstanding the vast majority of peers will
|
||||
* have rather ordinary certificate chains validated by typical
|
||||
* applications that perform certificate verification and therefore will
|
||||
* process SCTs when enabled.
|
||||
*/
|
||||
if (s->ct_validation_callback == NULL || cert == NULL ||
|
||||
s->verify_result != X509_V_OK ||
|
||||
s->verified_chain == NULL || sk_X509_num(s->verified_chain) <= 1)
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* CT not applicable for chains validated via DANE-TA(2) or DANE-EE(3)
|
||||
* trust-anchors. See https://tools.ietf.org/html/rfc7671#section-4.2
|
||||
*/
|
||||
if (DANETLS_ENABLED(dane) && dane->mtlsa != NULL) {
|
||||
switch (dane->mtlsa->usage) {
|
||||
case DANETLS_USAGE_DANE_TA:
|
||||
case DANETLS_USAGE_DANE_EE:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
ctx = CT_POLICY_EVAL_CTX_new();
|
||||
if (ctx == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_VALIDATE_CT,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
|
||||
issuer = sk_X509_value(s->verified_chain, 1);
|
||||
CT_POLICY_EVAL_CTX_set1_cert(ctx, cert);
|
||||
CT_POLICY_EVAL_CTX_set1_issuer(ctx, issuer);
|
||||
CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(ctx, s->ctx->ctlog_store);
|
||||
CT_POLICY_EVAL_CTX_set_time(
|
||||
ctx, (uint64_t)SSL_SESSION_get_time(SSL_get0_session(s)) * 1000);
|
||||
|
||||
scts = SSL_get0_peer_scts(s);
|
||||
|
||||
/*
|
||||
* This function returns success (> 0) only when all the SCTs are valid, 0
|
||||
* when some are invalid, and < 0 on various internal errors (out of
|
||||
* memory, etc.). Having some, or even all, invalid SCTs is not sufficient
|
||||
* reason to abort the handshake, that decision is up to the callback.
|
||||
* Therefore, we error out only in the unexpected case that the return
|
||||
* value is negative.
|
||||
*
|
||||
* XXX: One might well argue that the return value of this function is an
|
||||
* unfortunate design choice. Its job is only to determine the validation
|
||||
* status of each of the provided SCTs. So long as it correctly separates
|
||||
* the wheat from the chaff it should return success. Failure in this case
|
||||
* ought to correspond to an inability to carry out its duties.
|
||||
*/
|
||||
if (SCT_LIST_validate(scts, ctx) < 0) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
|
||||
SSL_R_SCT_VERIFICATION_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = s->ct_validation_callback(ctx, scts, s->ct_validation_callback_arg);
|
||||
if (ret < 0)
|
||||
ret = 0; /* This function returns 0 on failure */
|
||||
if (!ret)
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL_VALIDATE_CT,
|
||||
SSL_R_CALLBACK_FAILED);
|
||||
|
||||
end:
|
||||
CT_POLICY_EVAL_CTX_free(ctx);
|
||||
/*
|
||||
* With SSL_VERIFY_NONE the session may be cached and re-used despite a
|
||||
* failure return code here. Also the application may wish the complete
|
||||
* the handshake, and then disconnect cleanly at a higher layer, after
|
||||
* checking the verification status of the completed connection.
|
||||
*
|
||||
* We therefore force a certificate verification failure which will be
|
||||
* visible via SSL_get_verify_result() and cached as part of any resumed
|
||||
* session.
|
||||
*
|
||||
* Note: the permissive callback is for information gathering only, always
|
||||
* returns success, and does not affect verification status. Only the
|
||||
* strict callback or a custom application-specified callback can trigger
|
||||
* connection failure or record a verification error.
|
||||
*/
|
||||
if (ret <= 0)
|
||||
s->verify_result = X509_V_ERR_NO_VALID_SCTS;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode)
|
||||
{
|
||||
switch (validation_mode) {
|
||||
default:
|
||||
SSLerr(SSL_F_SSL_CTX_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
|
||||
return 0;
|
||||
case SSL_CT_VALIDATION_PERMISSIVE:
|
||||
return SSL_CTX_set_ct_validation_callback(ctx, ct_permissive, NULL);
|
||||
case SSL_CT_VALIDATION_STRICT:
|
||||
return SSL_CTX_set_ct_validation_callback(ctx, ct_strict, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_enable_ct(SSL *s, int validation_mode)
|
||||
{
|
||||
switch (validation_mode) {
|
||||
default:
|
||||
SSLerr(SSL_F_SSL_ENABLE_CT, SSL_R_INVALID_CT_VALIDATION_TYPE);
|
||||
return 0;
|
||||
case SSL_CT_VALIDATION_PERMISSIVE:
|
||||
return SSL_set_ct_validation_callback(s, ct_permissive, NULL);
|
||||
case SSL_CT_VALIDATION_STRICT:
|
||||
return SSL_set_ct_validation_callback(s, ct_strict, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx)
|
||||
{
|
||||
return CTLOG_STORE_load_default_file(ctx->ctlog_store);
|
||||
}
|
||||
|
||||
int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path)
|
||||
{
|
||||
return CTLOG_STORE_load_file(ctx->ctlog_store, path);
|
||||
}
|
||||
|
||||
void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE * logs)
|
||||
{
|
||||
CTLOG_STORE_free(ctx->ctlog_store);
|
||||
ctx->ctlog_store = logs;
|
||||
}
|
||||
|
||||
const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->ctlog_store;
|
||||
}
|
||||
|
||||
#endif /* OPENSSL_NO_CT */
|
||||
|
||||
void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb,
|
||||
void *arg)
|
||||
{
|
||||
c->client_hello_cb = cb;
|
||||
c->client_hello_cb_arg = arg;
|
||||
}
|
||||
|
||||
int SSL_client_hello_isv2(SSL *s)
|
||||
{
|
||||
if (s->clienthello == NULL)
|
||||
return 0;
|
||||
return s->clienthello->isv2;
|
||||
}
|
||||
|
||||
unsigned int SSL_client_hello_get0_legacy_version(SSL *s)
|
||||
{
|
||||
if (s->clienthello == NULL)
|
||||
return 0;
|
||||
return s->clienthello->legacy_version;
|
||||
}
|
||||
|
||||
size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out)
|
||||
{
|
||||
if (s->clienthello == NULL)
|
||||
return 0;
|
||||
if (out != NULL)
|
||||
*out = s->clienthello->random;
|
||||
return SSL3_RANDOM_SIZE;
|
||||
}
|
||||
|
||||
size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out)
|
||||
{
|
||||
if (s->clienthello == NULL)
|
||||
return 0;
|
||||
if (out != NULL)
|
||||
*out = s->clienthello->session_id;
|
||||
return s->clienthello->session_id_len;
|
||||
}
|
||||
|
||||
size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out)
|
||||
{
|
||||
if (s->clienthello == NULL)
|
||||
return 0;
|
||||
if (out != NULL)
|
||||
*out = PACKET_data(&s->clienthello->ciphersuites);
|
||||
return PACKET_remaining(&s->clienthello->ciphersuites);
|
||||
}
|
||||
|
||||
size_t SSL_client_hello_get0_compression_methods(SSL *s, const unsigned char **out)
|
||||
{
|
||||
if (s->clienthello == NULL)
|
||||
return 0;
|
||||
if (out != NULL)
|
||||
*out = s->clienthello->compressions;
|
||||
return s->clienthello->compressions_len;
|
||||
}
|
||||
|
||||
int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen)
|
||||
{
|
||||
RAW_EXTENSION *ext;
|
||||
int *present;
|
||||
size_t num = 0, i;
|
||||
|
||||
if (s->clienthello == NULL || out == NULL || outlen == NULL)
|
||||
return 0;
|
||||
for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
|
||||
ext = s->clienthello->pre_proc_exts + i;
|
||||
if (ext->present)
|
||||
num++;
|
||||
}
|
||||
if (num == 0) {
|
||||
*out = NULL;
|
||||
*outlen = 0;
|
||||
return 1;
|
||||
}
|
||||
if ((present = OPENSSL_malloc(sizeof(*present) * num)) == NULL) {
|
||||
SSLerr(SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
for (i = 0; i < s->clienthello->pre_proc_exts_len; i++) {
|
||||
ext = s->clienthello->pre_proc_exts + i;
|
||||
if (ext->present) {
|
||||
if (ext->received_order >= num)
|
||||
goto err;
|
||||
present[ext->received_order] = ext->type;
|
||||
}
|
||||
}
|
||||
*out = present;
|
||||
*outlen = num;
|
||||
return 1;
|
||||
err:
|
||||
OPENSSL_free(present);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SSL_client_hello_get0_ext(SSL *s, unsigned int type, const unsigned char **out,
|
||||
size_t *outlen)
|
||||
{
|
||||
size_t i;
|
||||
RAW_EXTENSION *r;
|
||||
|
||||
if (s->clienthello == NULL)
|
||||
return 0;
|
||||
for (i = 0; i < s->clienthello->pre_proc_exts_len; ++i) {
|
||||
r = s->clienthello->pre_proc_exts + i;
|
||||
if (r->present && r->type == type) {
|
||||
if (out != NULL)
|
||||
*out = PACKET_data(&r->data);
|
||||
if (outlen != NULL)
|
||||
*outlen = PACKET_remaining(&r->data);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SSL_free_buffers(SSL *ssl)
|
||||
{
|
||||
RECORD_LAYER *rl = &ssl->rlayer;
|
||||
|
||||
if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl))
|
||||
return 0;
|
||||
|
||||
RECORD_LAYER_release(rl);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_alloc_buffers(SSL *ssl)
|
||||
{
|
||||
return ssl3_setup_buffers(ssl);
|
||||
}
|
||||
|
||||
void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb)
|
||||
{
|
||||
ctx->keylog_callback = cb;
|
||||
}
|
||||
|
||||
SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->keylog_callback;
|
||||
}
|
||||
|
||||
static int nss_keylog_int(const char *prefix,
|
||||
SSL *ssl,
|
||||
const uint8_t *parameter_1,
|
||||
size_t parameter_1_len,
|
||||
const uint8_t *parameter_2,
|
||||
size_t parameter_2_len)
|
||||
{
|
||||
char *out = NULL;
|
||||
char *cursor = NULL;
|
||||
size_t out_len = 0;
|
||||
size_t i;
|
||||
size_t prefix_len;
|
||||
|
||||
if (ssl->ctx->keylog_callback == NULL)
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* Our output buffer will contain the following strings, rendered with
|
||||
* space characters in between, terminated by a NULL character: first the
|
||||
* prefix, then the first parameter, then the second parameter. The
|
||||
* meaning of each parameter depends on the specific key material being
|
||||
* logged. Note that the first and second parameters are encoded in
|
||||
* hexadecimal, so we need a buffer that is twice their lengths.
|
||||
*/
|
||||
prefix_len = strlen(prefix);
|
||||
out_len = prefix_len + (2 * parameter_1_len) + (2 * parameter_2_len) + 3;
|
||||
if ((out = cursor = OPENSSL_malloc(out_len)) == NULL) {
|
||||
SSLfatal(ssl, SSL_AD_INTERNAL_ERROR, SSL_F_NSS_KEYLOG_INT,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
strcpy(cursor, prefix);
|
||||
cursor += prefix_len;
|
||||
*cursor++ = ' ';
|
||||
|
||||
for (i = 0; i < parameter_1_len; i++) {
|
||||
sprintf(cursor, "%02x", parameter_1[i]);
|
||||
cursor += 2;
|
||||
}
|
||||
*cursor++ = ' ';
|
||||
|
||||
for (i = 0; i < parameter_2_len; i++) {
|
||||
sprintf(cursor, "%02x", parameter_2[i]);
|
||||
cursor += 2;
|
||||
}
|
||||
*cursor = '\0';
|
||||
|
||||
ssl->ctx->keylog_callback(ssl, (const char *)out);
|
||||
OPENSSL_clear_free(out, out_len);
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
int ssl_log_rsa_client_key_exchange(SSL *ssl,
|
||||
const uint8_t *encrypted_premaster,
|
||||
size_t encrypted_premaster_len,
|
||||
const uint8_t *premaster,
|
||||
size_t premaster_len)
|
||||
{
|
||||
if (encrypted_premaster_len < 8) {
|
||||
SSLfatal(ssl, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* We only want the first 8 bytes of the encrypted premaster as a tag. */
|
||||
return nss_keylog_int("RSA",
|
||||
ssl,
|
||||
encrypted_premaster,
|
||||
8,
|
||||
premaster,
|
||||
premaster_len);
|
||||
}
|
||||
|
||||
int ssl_log_secret(SSL *ssl,
|
||||
const char *label,
|
||||
const uint8_t *secret,
|
||||
size_t secret_len)
|
||||
{
|
||||
return nss_keylog_int(label,
|
||||
ssl,
|
||||
ssl->s3.client_random,
|
||||
SSL3_RANDOM_SIZE,
|
||||
secret,
|
||||
secret_len);
|
||||
}
|
||||
|
||||
#define SSLV2_CIPHER_LEN 3
|
||||
|
||||
int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format)
|
||||
{
|
||||
int n;
|
||||
|
||||
n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
|
||||
|
||||
if (PACKET_remaining(cipher_suites) == 0) {
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL_CACHE_CIPHERLIST,
|
||||
SSL_R_NO_CIPHERS_SPECIFIED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (PACKET_remaining(cipher_suites) % n != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
|
||||
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
|
||||
return 0;
|
||||
}
|
||||
|
||||
OPENSSL_free(s->s3.tmp.ciphers_raw);
|
||||
s->s3.tmp.ciphers_raw = NULL;
|
||||
s->s3.tmp.ciphers_rawlen = 0;
|
||||
|
||||
if (sslv2format) {
|
||||
size_t numciphers = PACKET_remaining(cipher_suites) / n;
|
||||
PACKET sslv2ciphers = *cipher_suites;
|
||||
unsigned int leadbyte;
|
||||
unsigned char *raw;
|
||||
|
||||
/*
|
||||
* We store the raw ciphers list in SSLv3+ format so we need to do some
|
||||
* preprocessing to convert the list first. If there are any SSLv2 only
|
||||
* ciphersuites with a non-zero leading byte then we are going to
|
||||
* slightly over allocate because we won't store those. But that isn't a
|
||||
* problem.
|
||||
*/
|
||||
raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
|
||||
s->s3.tmp.ciphers_raw = raw;
|
||||
if (raw == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
for (s->s3.tmp.ciphers_rawlen = 0;
|
||||
PACKET_remaining(&sslv2ciphers) > 0;
|
||||
raw += TLS_CIPHER_LEN) {
|
||||
if (!PACKET_get_1(&sslv2ciphers, &leadbyte)
|
||||
|| (leadbyte == 0
|
||||
&& !PACKET_copy_bytes(&sslv2ciphers, raw,
|
||||
TLS_CIPHER_LEN))
|
||||
|| (leadbyte != 0
|
||||
&& !PACKET_forward(&sslv2ciphers, TLS_CIPHER_LEN))) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
|
||||
SSL_R_BAD_PACKET);
|
||||
OPENSSL_free(s->s3.tmp.ciphers_raw);
|
||||
s->s3.tmp.ciphers_raw = NULL;
|
||||
s->s3.tmp.ciphers_rawlen = 0;
|
||||
return 0;
|
||||
}
|
||||
if (leadbyte == 0)
|
||||
s->s3.tmp.ciphers_rawlen += TLS_CIPHER_LEN;
|
||||
}
|
||||
} else if (!PACKET_memdup(cipher_suites, &s->s3.tmp.ciphers_raw,
|
||||
&s->s3.tmp.ciphers_rawlen)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_CACHE_CIPHERLIST,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
PACKET pkt;
|
||||
|
||||
if (!PACKET_buf_init(&pkt, bytes, len))
|
||||
return 0;
|
||||
return bytes_to_cipher_list(s, &pkt, sk, scsvs, isv2format, 0);
|
||||
}
|
||||
|
||||
int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
|
||||
STACK_OF(SSL_CIPHER) **skp,
|
||||
STACK_OF(SSL_CIPHER) **scsvs_out,
|
||||
int sslv2format, int fatal)
|
||||
{
|
||||
const SSL_CIPHER *c;
|
||||
STACK_OF(SSL_CIPHER) *sk = NULL;
|
||||
STACK_OF(SSL_CIPHER) *scsvs = NULL;
|
||||
int n;
|
||||
/* 3 = SSLV2_CIPHER_LEN > TLS_CIPHER_LEN = 2. */
|
||||
unsigned char cipher[SSLV2_CIPHER_LEN];
|
||||
|
||||
n = sslv2format ? SSLV2_CIPHER_LEN : TLS_CIPHER_LEN;
|
||||
|
||||
if (PACKET_remaining(cipher_suites) == 0) {
|
||||
if (fatal)
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_BYTES_TO_CIPHER_LIST,
|
||||
SSL_R_NO_CIPHERS_SPECIFIED);
|
||||
else
|
||||
SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_NO_CIPHERS_SPECIFIED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (PACKET_remaining(cipher_suites) % n != 0) {
|
||||
if (fatal)
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
|
||||
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
|
||||
else
|
||||
SSLerr(SSL_F_BYTES_TO_CIPHER_LIST,
|
||||
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
|
||||
return 0;
|
||||
}
|
||||
|
||||
sk = sk_SSL_CIPHER_new_null();
|
||||
scsvs = sk_SSL_CIPHER_new_null();
|
||||
if (sk == NULL || scsvs == NULL) {
|
||||
if (fatal)
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
else
|
||||
SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
while (PACKET_copy_bytes(cipher_suites, cipher, n)) {
|
||||
/*
|
||||
* SSLv3 ciphers wrapped in an SSLv2-compatible ClientHello have the
|
||||
* first byte set to zero, while true SSLv2 ciphers have a non-zero
|
||||
* first byte. We don't support any true SSLv2 ciphers, so skip them.
|
||||
*/
|
||||
if (sslv2format && cipher[0] != '\0')
|
||||
continue;
|
||||
|
||||
/* For SSLv2-compat, ignore leading 0-byte. */
|
||||
c = ssl_get_cipher_by_char(s, sslv2format ? &cipher[1] : cipher, 1);
|
||||
if (c != NULL) {
|
||||
if ((c->valid && !sk_SSL_CIPHER_push(sk, c)) ||
|
||||
(!c->valid && !sk_SSL_CIPHER_push(scsvs, c))) {
|
||||
if (fatal)
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
|
||||
else
|
||||
SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (PACKET_remaining(cipher_suites) > 0) {
|
||||
if (fatal)
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_BYTES_TO_CIPHER_LIST,
|
||||
SSL_R_BAD_LENGTH);
|
||||
else
|
||||
SSLerr(SSL_F_BYTES_TO_CIPHER_LIST, SSL_R_BAD_LENGTH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (skp != NULL)
|
||||
*skp = sk;
|
||||
else
|
||||
sk_SSL_CIPHER_free(sk);
|
||||
if (scsvs_out != NULL)
|
||||
*scsvs_out = scsvs;
|
||||
else
|
||||
sk_SSL_CIPHER_free(scsvs);
|
||||
return 1;
|
||||
err:
|
||||
sk_SSL_CIPHER_free(sk);
|
||||
sk_SSL_CIPHER_free(scsvs);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data)
|
||||
{
|
||||
ctx->max_early_data = max_early_data;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->max_early_data;
|
||||
}
|
||||
|
||||
int SSL_set_max_early_data(SSL *s, uint32_t max_early_data)
|
||||
{
|
||||
s->max_early_data = max_early_data;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint32_t SSL_get_max_early_data(const SSL *s)
|
||||
{
|
||||
return s->max_early_data;
|
||||
}
|
||||
|
||||
int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data)
|
||||
{
|
||||
ctx->recv_max_early_data = recv_max_early_data;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx)
|
||||
{
|
||||
return ctx->recv_max_early_data;
|
||||
}
|
||||
|
||||
int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data)
|
||||
{
|
||||
s->recv_max_early_data = recv_max_early_data;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint32_t SSL_get_recv_max_early_data(const SSL *s)
|
||||
{
|
||||
return s->recv_max_early_data;
|
||||
}
|
||||
|
||||
__owur unsigned int ssl_get_max_send_fragment(const SSL *ssl)
|
||||
{
|
||||
/* Return any active Max Fragment Len extension */
|
||||
if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session))
|
||||
return GET_MAX_FRAGMENT_LENGTH(ssl->session);
|
||||
|
||||
/* return current SSL connection setting */
|
||||
return ssl->max_send_fragment;
|
||||
}
|
||||
|
||||
__owur unsigned int ssl_get_split_send_fragment(const SSL *ssl)
|
||||
{
|
||||
/* Return a value regarding an active Max Fragment Len extension */
|
||||
if (ssl->session != NULL && USE_MAX_FRAGMENT_LENGTH_EXT(ssl->session)
|
||||
&& ssl->split_send_fragment > GET_MAX_FRAGMENT_LENGTH(ssl->session))
|
||||
return GET_MAX_FRAGMENT_LENGTH(ssl->session);
|
||||
|
||||
/* else limit |split_send_fragment| to current |max_send_fragment| */
|
||||
if (ssl->split_send_fragment > ssl->max_send_fragment)
|
||||
return ssl->max_send_fragment;
|
||||
|
||||
/* return current SSL connection setting */
|
||||
return ssl->split_send_fragment;
|
||||
}
|
||||
|
||||
int SSL_stateless(SSL *s)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Ensure there is no state left over from a previous invocation */
|
||||
if (!SSL_clear(s))
|
||||
return 0;
|
||||
|
||||
ERR_clear_error();
|
||||
|
||||
s->s3.flags |= TLS1_FLAGS_STATELESS;
|
||||
ret = SSL_accept(s);
|
||||
s->s3.flags &= ~TLS1_FLAGS_STATELESS;
|
||||
|
||||
if (ret > 0 && s->ext.cookieok)
|
||||
return 1;
|
||||
|
||||
if (s->hello_retry_request == SSL_HRR_PENDING && !ossl_statem_in_error(s))
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val)
|
||||
{
|
||||
ctx->pha_enabled = val;
|
||||
}
|
||||
|
||||
void SSL_set_post_handshake_auth(SSL *ssl, int val)
|
||||
{
|
||||
ssl->pha_enabled = val;
|
||||
}
|
||||
|
||||
int SSL_verify_client_post_handshake(SSL *ssl)
|
||||
{
|
||||
if (!SSL_IS_TLS13(ssl)) {
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_WRONG_SSL_VERSION);
|
||||
return 0;
|
||||
}
|
||||
if (!ssl->server) {
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_NOT_SERVER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!SSL_is_init_finished(ssl)) {
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_STILL_IN_INIT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (ssl->post_handshake_auth) {
|
||||
case SSL_PHA_NONE:
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_EXTENSION_NOT_RECEIVED);
|
||||
return 0;
|
||||
default:
|
||||
case SSL_PHA_EXT_SENT:
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
case SSL_PHA_EXT_RECEIVED:
|
||||
break;
|
||||
case SSL_PHA_REQUEST_PENDING:
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_PENDING);
|
||||
return 0;
|
||||
case SSL_PHA_REQUESTED:
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_REQUEST_SENT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ssl->post_handshake_auth = SSL_PHA_REQUEST_PENDING;
|
||||
|
||||
/* checks verify_mode and algorithm_auth */
|
||||
if (!send_certificate_request(ssl)) {
|
||||
ssl->post_handshake_auth = SSL_PHA_EXT_RECEIVED; /* restore on error */
|
||||
SSLerr(SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE, SSL_R_INVALID_CONFIG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ossl_statem_set_in_init(ssl, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
ctx->generate_ticket_cb = gen_cb;
|
||||
ctx->decrypt_ticket_cb = dec_cb;
|
||||
ctx->ticket_cb_data = arg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx,
|
||||
SSL_allow_early_data_cb_fn cb,
|
||||
void *arg)
|
||||
{
|
||||
ctx->allow_early_data_cb = cb;
|
||||
ctx->allow_early_data_cb_data = arg;
|
||||
}
|
||||
|
||||
void SSL_set_allow_early_data_cb(SSL *s,
|
||||
SSL_allow_early_data_cb_fn cb,
|
||||
void *arg)
|
||||
{
|
||||
s->allow_early_data_cb = cb;
|
||||
s->allow_early_data_cb_data = arg;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ssl/ssl_lib.c
|
||||
+++ ssl/ssl_lib.c
|
||||
@@ -3144,7 +3203,7 @@
|
||||
ret->tls13_ciphersuites,
|
||||
&ret->cipher_list, &ret->cipher_list_by_id,
|
||||
SSL_DEFAULT_CIPHER_LIST, ret->cert)
|
||||
- || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
|
||||
+ || sk_SSL_CIPHER_num(ret->cipher_list->ciphers) <= 0) {
|
||||
SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
|
||||
goto err2;
|
||||
}
|
||||
+2693
@@ -0,0 +1,2693 @@
|
||||
/*
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
|
||||
* Copyright 2005 Nokia. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#ifndef HEADER_SSL_LOCL_H
|
||||
# define HEADER_SSL_LOCL_H
|
||||
|
||||
# include "e_os.h" /* struct timeval for DTLS */
|
||||
# include <stdlib.h>
|
||||
# include <time.h>
|
||||
# include <string.h>
|
||||
# include <errno.h>
|
||||
|
||||
# include <openssl/buffer.h>
|
||||
# include <openssl/comp.h>
|
||||
# include <openssl/bio.h>
|
||||
# include <openssl/rsa.h>
|
||||
# include <openssl/dsa.h>
|
||||
# include <openssl/err.h>
|
||||
# include <openssl/ssl.h>
|
||||
# include <openssl/async.h>
|
||||
# include <openssl/symhacks.h>
|
||||
# include <openssl/ct.h>
|
||||
# include "record/record.h"
|
||||
# include "statem/statem.h"
|
||||
# include "packet_locl.h"
|
||||
# include "internal/dane.h"
|
||||
# include "internal/refcount.h"
|
||||
# include "internal/tsan_assist.h"
|
||||
# include "internal/bio.h"
|
||||
|
||||
# ifdef OPENSSL_BUILD_SHLIBSSL
|
||||
# undef OPENSSL_EXTERN
|
||||
# define OPENSSL_EXTERN OPENSSL_EXPORT
|
||||
# endif
|
||||
|
||||
# define c2l(c,l) (l = ((unsigned long)(*((c)++))) , \
|
||||
l|=(((unsigned long)(*((c)++)))<< 8), \
|
||||
l|=(((unsigned long)(*((c)++)))<<16), \
|
||||
l|=(((unsigned long)(*((c)++)))<<24))
|
||||
|
||||
/* NOTE - c is not incremented as per c2l */
|
||||
# define c2ln(c,l1,l2,n) { \
|
||||
c+=n; \
|
||||
l1=l2=0; \
|
||||
switch (n) { \
|
||||
case 8: l2 =((unsigned long)(*(--(c))))<<24; \
|
||||
case 7: l2|=((unsigned long)(*(--(c))))<<16; \
|
||||
case 6: l2|=((unsigned long)(*(--(c))))<< 8; \
|
||||
case 5: l2|=((unsigned long)(*(--(c)))); \
|
||||
case 4: l1 =((unsigned long)(*(--(c))))<<24; \
|
||||
case 3: l1|=((unsigned long)(*(--(c))))<<16; \
|
||||
case 2: l1|=((unsigned long)(*(--(c))))<< 8; \
|
||||
case 1: l1|=((unsigned long)(*(--(c)))); \
|
||||
} \
|
||||
}
|
||||
|
||||
# define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>24)&0xff))
|
||||
|
||||
# define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24, \
|
||||
l|=((unsigned long)(*((c)++)))<<16, \
|
||||
l|=((unsigned long)(*((c)++)))<< 8, \
|
||||
l|=((unsigned long)(*((c)++))))
|
||||
|
||||
# define n2l8(c,l) (l =((uint64_t)(*((c)++)))<<56, \
|
||||
l|=((uint64_t)(*((c)++)))<<48, \
|
||||
l|=((uint64_t)(*((c)++)))<<40, \
|
||||
l|=((uint64_t)(*((c)++)))<<32, \
|
||||
l|=((uint64_t)(*((c)++)))<<24, \
|
||||
l|=((uint64_t)(*((c)++)))<<16, \
|
||||
l|=((uint64_t)(*((c)++)))<< 8, \
|
||||
l|=((uint64_t)(*((c)++))))
|
||||
|
||||
|
||||
# define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l) )&0xff))
|
||||
|
||||
# define l2n6(l,c) (*((c)++)=(unsigned char)(((l)>>40)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>32)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>24)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l) )&0xff))
|
||||
|
||||
# define l2n8(l,c) (*((c)++)=(unsigned char)(((l)>>56)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>48)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>40)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>32)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>24)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l) )&0xff))
|
||||
|
||||
/* NOTE - c is not incremented as per l2c */
|
||||
# define l2cn(l1,l2,c,n) { \
|
||||
c+=n; \
|
||||
switch (n) { \
|
||||
case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
|
||||
case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
|
||||
case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
|
||||
case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
|
||||
case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
|
||||
case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
|
||||
case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
|
||||
case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
|
||||
} \
|
||||
}
|
||||
|
||||
# define n2s(c,s) ((s=(((unsigned int)((c)[0]))<< 8)| \
|
||||
(((unsigned int)((c)[1])) )),(c)+=2)
|
||||
# define s2n(s,c) (((c)[0]=(unsigned char)(((s)>> 8)&0xff), \
|
||||
(c)[1]=(unsigned char)(((s) )&0xff)),(c)+=2)
|
||||
|
||||
# define n2l3(c,l) ((l =(((unsigned long)((c)[0]))<<16)| \
|
||||
(((unsigned long)((c)[1]))<< 8)| \
|
||||
(((unsigned long)((c)[2])) )),(c)+=3)
|
||||
|
||||
# define l2n3(l,c) (((c)[0]=(unsigned char)(((l)>>16)&0xff), \
|
||||
(c)[1]=(unsigned char)(((l)>> 8)&0xff), \
|
||||
(c)[2]=(unsigned char)(((l) )&0xff)),(c)+=3)
|
||||
|
||||
# define TLS_MAX_VERSION_INTERNAL TLS1_3_VERSION
|
||||
# define DTLS_MAX_VERSION_INTERNAL DTLS1_2_VERSION
|
||||
|
||||
/*
|
||||
* DTLS version numbers are strange because they're inverted. Except for
|
||||
* DTLS1_BAD_VER, which should be considered "lower" than the rest.
|
||||
*/
|
||||
# define dtls_ver_ordinal(v1) (((v1) == DTLS1_BAD_VER) ? 0xff00 : (v1))
|
||||
# define DTLS_VERSION_GT(v1, v2) (dtls_ver_ordinal(v1) < dtls_ver_ordinal(v2))
|
||||
# define DTLS_VERSION_GE(v1, v2) (dtls_ver_ordinal(v1) <= dtls_ver_ordinal(v2))
|
||||
# define DTLS_VERSION_LT(v1, v2) (dtls_ver_ordinal(v1) > dtls_ver_ordinal(v2))
|
||||
# define DTLS_VERSION_LE(v1, v2) (dtls_ver_ordinal(v1) >= dtls_ver_ordinal(v2))
|
||||
|
||||
|
||||
/*
|
||||
* Define the Bitmasks for SSL_CIPHER.algorithms.
|
||||
* This bits are used packed as dense as possible. If new methods/ciphers
|
||||
* etc will be added, the bits a likely to change, so this information
|
||||
* is for internal library use only, even though SSL_CIPHER.algorithms
|
||||
* can be publicly accessed.
|
||||
* Use the according functions for cipher management instead.
|
||||
*
|
||||
* The bit mask handling in the selection and sorting scheme in
|
||||
* ssl_create_cipher_list() has only limited capabilities, reflecting
|
||||
* that the different entities within are mutually exclusive:
|
||||
* ONLY ONE BIT PER MASK CAN BE SET AT A TIME.
|
||||
*/
|
||||
|
||||
/* Bits for algorithm_mkey (key exchange algorithm) */
|
||||
/* RSA key exchange */
|
||||
# define SSL_kRSA 0x00000001U
|
||||
/* tmp DH key no DH cert */
|
||||
# define SSL_kDHE 0x00000002U
|
||||
/* synonym */
|
||||
# define SSL_kEDH SSL_kDHE
|
||||
/* ephemeral ECDH */
|
||||
# define SSL_kECDHE 0x00000004U
|
||||
/* synonym */
|
||||
# define SSL_kEECDH SSL_kECDHE
|
||||
/* PSK */
|
||||
# define SSL_kPSK 0x00000008U
|
||||
/* GOST key exchange */
|
||||
# define SSL_kGOST 0x00000010U
|
||||
/* SRP */
|
||||
# define SSL_kSRP 0x00000020U
|
||||
|
||||
# define SSL_kRSAPSK 0x00000040U
|
||||
# define SSL_kECDHEPSK 0x00000080U
|
||||
# define SSL_kDHEPSK 0x00000100U
|
||||
|
||||
/* all PSK */
|
||||
|
||||
# define SSL_PSK (SSL_kPSK | SSL_kRSAPSK | SSL_kECDHEPSK | SSL_kDHEPSK)
|
||||
|
||||
/* Any appropriate key exchange algorithm (for TLS 1.3 ciphersuites) */
|
||||
# define SSL_kANY 0x00000000U
|
||||
|
||||
/* Bits for algorithm_auth (server authentication) */
|
||||
/* RSA auth */
|
||||
# define SSL_aRSA 0x00000001U
|
||||
/* DSS auth */
|
||||
# define SSL_aDSS 0x00000002U
|
||||
/* no auth (i.e. use ADH or AECDH) */
|
||||
# define SSL_aNULL 0x00000004U
|
||||
/* ECDSA auth*/
|
||||
# define SSL_aECDSA 0x00000008U
|
||||
/* PSK auth */
|
||||
# define SSL_aPSK 0x00000010U
|
||||
/* GOST R 34.10-2001 signature auth */
|
||||
# define SSL_aGOST01 0x00000020U
|
||||
/* SRP auth */
|
||||
# define SSL_aSRP 0x00000040U
|
||||
/* GOST R 34.10-2012 signature auth */
|
||||
# define SSL_aGOST12 0x00000080U
|
||||
/* Any appropriate signature auth (for TLS 1.3 ciphersuites) */
|
||||
# define SSL_aANY 0x00000000U
|
||||
/* All bits requiring a certificate */
|
||||
#define SSL_aCERT \
|
||||
(SSL_aRSA | SSL_aDSS | SSL_aECDSA | SSL_aGOST01 | SSL_aGOST12)
|
||||
|
||||
/* Bits for algorithm_enc (symmetric encryption) */
|
||||
# define SSL_DES 0x00000001U
|
||||
# define SSL_3DES 0x00000002U
|
||||
# define SSL_RC4 0x00000004U
|
||||
# define SSL_RC2 0x00000008U
|
||||
# define SSL_IDEA 0x00000010U
|
||||
# define SSL_eNULL 0x00000020U
|
||||
# define SSL_AES128 0x00000040U
|
||||
# define SSL_AES256 0x00000080U
|
||||
# define SSL_CAMELLIA128 0x00000100U
|
||||
# define SSL_CAMELLIA256 0x00000200U
|
||||
# define SSL_eGOST2814789CNT 0x00000400U
|
||||
# define SSL_SEED 0x00000800U
|
||||
# define SSL_AES128GCM 0x00001000U
|
||||
# define SSL_AES256GCM 0x00002000U
|
||||
# define SSL_AES128CCM 0x00004000U
|
||||
# define SSL_AES256CCM 0x00008000U
|
||||
# define SSL_AES128CCM8 0x00010000U
|
||||
# define SSL_AES256CCM8 0x00020000U
|
||||
# define SSL_eGOST2814789CNT12 0x00040000U
|
||||
# define SSL_CHACHA20POLY1305 0x00080000U
|
||||
# define SSL_ARIA128GCM 0x00100000U
|
||||
# define SSL_ARIA256GCM 0x00200000U
|
||||
|
||||
# define SSL_AESGCM (SSL_AES128GCM | SSL_AES256GCM)
|
||||
# define SSL_AESCCM (SSL_AES128CCM | SSL_AES256CCM | SSL_AES128CCM8 | SSL_AES256CCM8)
|
||||
# define SSL_AES (SSL_AES128|SSL_AES256|SSL_AESGCM|SSL_AESCCM)
|
||||
# define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256)
|
||||
# define SSL_CHACHA20 (SSL_CHACHA20POLY1305)
|
||||
# define SSL_ARIAGCM (SSL_ARIA128GCM | SSL_ARIA256GCM)
|
||||
# define SSL_ARIA (SSL_ARIAGCM)
|
||||
|
||||
/* Bits for algorithm_mac (symmetric authentication) */
|
||||
|
||||
# define SSL_MD5 0x00000001U
|
||||
# define SSL_SHA1 0x00000002U
|
||||
# define SSL_GOST94 0x00000004U
|
||||
# define SSL_GOST89MAC 0x00000008U
|
||||
# define SSL_SHA256 0x00000010U
|
||||
# define SSL_SHA384 0x00000020U
|
||||
/* Not a real MAC, just an indication it is part of cipher */
|
||||
# define SSL_AEAD 0x00000040U
|
||||
# define SSL_GOST12_256 0x00000080U
|
||||
# define SSL_GOST89MAC12 0x00000100U
|
||||
# define SSL_GOST12_512 0x00000200U
|
||||
|
||||
/*
|
||||
* When adding new digest in the ssl_ciph.c and increment SSL_MD_NUM_IDX make
|
||||
* sure to update this constant too
|
||||
*/
|
||||
|
||||
# define SSL_MD_MD5_IDX 0
|
||||
# define SSL_MD_SHA1_IDX 1
|
||||
# define SSL_MD_GOST94_IDX 2
|
||||
# define SSL_MD_GOST89MAC_IDX 3
|
||||
# define SSL_MD_SHA256_IDX 4
|
||||
# define SSL_MD_SHA384_IDX 5
|
||||
# define SSL_MD_GOST12_256_IDX 6
|
||||
# define SSL_MD_GOST89MAC12_IDX 7
|
||||
# define SSL_MD_GOST12_512_IDX 8
|
||||
# define SSL_MD_MD5_SHA1_IDX 9
|
||||
# define SSL_MD_SHA224_IDX 10
|
||||
# define SSL_MD_SHA512_IDX 11
|
||||
# define SSL_MAX_DIGEST 12
|
||||
|
||||
/* Bits for algorithm2 (handshake digests and other extra flags) */
|
||||
|
||||
/* Bits 0-7 are handshake MAC */
|
||||
# define SSL_HANDSHAKE_MAC_MASK 0xFF
|
||||
# define SSL_HANDSHAKE_MAC_MD5_SHA1 SSL_MD_MD5_SHA1_IDX
|
||||
# define SSL_HANDSHAKE_MAC_SHA256 SSL_MD_SHA256_IDX
|
||||
# define SSL_HANDSHAKE_MAC_SHA384 SSL_MD_SHA384_IDX
|
||||
# define SSL_HANDSHAKE_MAC_GOST94 SSL_MD_GOST94_IDX
|
||||
# define SSL_HANDSHAKE_MAC_GOST12_256 SSL_MD_GOST12_256_IDX
|
||||
# define SSL_HANDSHAKE_MAC_GOST12_512 SSL_MD_GOST12_512_IDX
|
||||
# define SSL_HANDSHAKE_MAC_DEFAULT SSL_HANDSHAKE_MAC_MD5_SHA1
|
||||
|
||||
/* Bits 8-15 bits are PRF */
|
||||
# define TLS1_PRF_DGST_SHIFT 8
|
||||
# define TLS1_PRF_SHA1_MD5 (SSL_MD_MD5_SHA1_IDX << TLS1_PRF_DGST_SHIFT)
|
||||
# define TLS1_PRF_SHA256 (SSL_MD_SHA256_IDX << TLS1_PRF_DGST_SHIFT)
|
||||
# define TLS1_PRF_SHA384 (SSL_MD_SHA384_IDX << TLS1_PRF_DGST_SHIFT)
|
||||
# define TLS1_PRF_GOST94 (SSL_MD_GOST94_IDX << TLS1_PRF_DGST_SHIFT)
|
||||
# define TLS1_PRF_GOST12_256 (SSL_MD_GOST12_256_IDX << TLS1_PRF_DGST_SHIFT)
|
||||
# define TLS1_PRF_GOST12_512 (SSL_MD_GOST12_512_IDX << TLS1_PRF_DGST_SHIFT)
|
||||
# define TLS1_PRF (SSL_MD_MD5_SHA1_IDX << TLS1_PRF_DGST_SHIFT)
|
||||
|
||||
/*
|
||||
* Stream MAC for GOST ciphersuites from cryptopro draft (currently this also
|
||||
* goes into algorithm2)
|
||||
*/
|
||||
# define TLS1_STREAM_MAC 0x10000
|
||||
|
||||
# define SSL_STRONG_MASK 0x0000001FU
|
||||
# define SSL_DEFAULT_MASK 0X00000020U
|
||||
|
||||
# define SSL_STRONG_NONE 0x00000001U
|
||||
# define SSL_LOW 0x00000002U
|
||||
# define SSL_MEDIUM 0x00000004U
|
||||
# define SSL_HIGH 0x00000008U
|
||||
# define SSL_FIPS 0x00000010U
|
||||
# define SSL_NOT_DEFAULT 0x00000020U
|
||||
|
||||
/* we have used 0000003f - 26 bits left to go */
|
||||
|
||||
/* Flag used on OpenSSL ciphersuite ids to indicate they are for SSLv3+ */
|
||||
# define SSL3_CK_CIPHERSUITE_FLAG 0x03000000
|
||||
|
||||
/* Check if an SSL structure is using DTLS */
|
||||
# define SSL_IS_DTLS(s) (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
|
||||
|
||||
/* Check if we are using TLSv1.3 */
|
||||
# define SSL_IS_TLS13(s) (!SSL_IS_DTLS(s) \
|
||||
&& (s)->method->version >= TLS1_3_VERSION \
|
||||
&& (s)->method->version != TLS_ANY_VERSION)
|
||||
|
||||
# define SSL_TREAT_AS_TLS13(s) \
|
||||
(SSL_IS_TLS13(s) || (s)->early_data_state == SSL_EARLY_DATA_CONNECTING \
|
||||
|| (s)->early_data_state == SSL_EARLY_DATA_CONNECT_RETRY \
|
||||
|| (s)->early_data_state == SSL_EARLY_DATA_WRITING \
|
||||
|| (s)->early_data_state == SSL_EARLY_DATA_WRITE_RETRY \
|
||||
|| (s)->hello_retry_request == SSL_HRR_PENDING)
|
||||
|
||||
# define SSL_IS_FIRST_HANDSHAKE(S) ((s)->s3.tmp.finish_md_len == 0 \
|
||||
|| (s)->s3.tmp.peer_finish_md_len == 0)
|
||||
|
||||
/* See if we need explicit IV */
|
||||
# define SSL_USE_EXPLICIT_IV(s) \
|
||||
(s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
|
||||
/*
|
||||
* See if we use signature algorithms extension and signature algorithm
|
||||
* before signatures.
|
||||
*/
|
||||
# define SSL_USE_SIGALGS(s) \
|
||||
(s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SIGALGS)
|
||||
/*
|
||||
* Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
|
||||
* apply to others in future.
|
||||
*/
|
||||
# define SSL_USE_TLS1_2_CIPHERS(s) \
|
||||
(s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS)
|
||||
/*
|
||||
* Determine if a client can use TLS 1.2 ciphersuites: can't rely on method
|
||||
* flags because it may not be set to correct version yet.
|
||||
*/
|
||||
# define SSL_CLIENT_USE_TLS1_2_CIPHERS(s) \
|
||||
((!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION) || \
|
||||
(SSL_IS_DTLS(s) && DTLS_VERSION_GE(s->client_version, DTLS1_2_VERSION)))
|
||||
/*
|
||||
* Determine if a client should send signature algorithms extension:
|
||||
* as with TLS1.2 cipher we can't rely on method flags.
|
||||
*/
|
||||
# define SSL_CLIENT_USE_SIGALGS(s) \
|
||||
SSL_CLIENT_USE_TLS1_2_CIPHERS(s)
|
||||
|
||||
# define IS_MAX_FRAGMENT_LENGTH_EXT_VALID(value) \
|
||||
(((value) >= TLSEXT_max_fragment_length_512) && \
|
||||
((value) <= TLSEXT_max_fragment_length_4096))
|
||||
# define USE_MAX_FRAGMENT_LENGTH_EXT(session) \
|
||||
IS_MAX_FRAGMENT_LENGTH_EXT_VALID(session->ext.max_fragment_len_mode)
|
||||
# define GET_MAX_FRAGMENT_LENGTH(session) \
|
||||
(512U << (session->ext.max_fragment_len_mode - 1))
|
||||
|
||||
# define SSL_READ_ETM(s) (s->s3.flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_READ)
|
||||
# define SSL_WRITE_ETM(s) (s->s3.flags & TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE)
|
||||
|
||||
/* Mostly for SSLv3 */
|
||||
# define SSL_PKEY_RSA 0
|
||||
# define SSL_PKEY_RSA_PSS_SIGN 1
|
||||
# define SSL_PKEY_DSA_SIGN 2
|
||||
# define SSL_PKEY_ECC 3
|
||||
# define SSL_PKEY_GOST01 4
|
||||
# define SSL_PKEY_GOST12_256 5
|
||||
# define SSL_PKEY_GOST12_512 6
|
||||
# define SSL_PKEY_ED25519 7
|
||||
# define SSL_PKEY_ED448 8
|
||||
# define SSL_PKEY_NUM 9
|
||||
|
||||
/*-
|
||||
* SSL_kRSA <- RSA_ENC
|
||||
* SSL_kDH <- DH_ENC & (RSA_ENC | RSA_SIGN | DSA_SIGN)
|
||||
* SSL_kDHE <- RSA_ENC | RSA_SIGN | DSA_SIGN
|
||||
* SSL_aRSA <- RSA_ENC | RSA_SIGN
|
||||
* SSL_aDSS <- DSA_SIGN
|
||||
*/
|
||||
|
||||
/*-
|
||||
#define CERT_INVALID 0
|
||||
#define CERT_PUBLIC_KEY 1
|
||||
#define CERT_PRIVATE_KEY 2
|
||||
*/
|
||||
|
||||
/* Post-Handshake Authentication state */
|
||||
typedef enum {
|
||||
SSL_PHA_NONE = 0,
|
||||
SSL_PHA_EXT_SENT, /* client-side only: extension sent */
|
||||
SSL_PHA_EXT_RECEIVED, /* server-side only: extension received */
|
||||
SSL_PHA_REQUEST_PENDING, /* server-side only: request pending */
|
||||
SSL_PHA_REQUESTED /* request received by client, or sent by server */
|
||||
} SSL_PHA_STATE;
|
||||
|
||||
/* CipherSuite length. SSLv3 and all TLS versions. */
|
||||
# define TLS_CIPHER_LEN 2
|
||||
/* used to hold info on the particular ciphers used */
|
||||
struct ssl_cipher_st {
|
||||
uint32_t valid;
|
||||
const char *name; /* text name */
|
||||
const char *stdname; /* RFC name */
|
||||
uint32_t id; /* id, 4 bytes, first is version */
|
||||
/*
|
||||
* changed in 1.0.0: these four used to be portions of a single value
|
||||
* 'algorithms'
|
||||
*/
|
||||
uint32_t algorithm_mkey; /* key exchange algorithm */
|
||||
uint32_t algorithm_auth; /* server authentication */
|
||||
uint32_t algorithm_enc; /* symmetric encryption */
|
||||
uint32_t algorithm_mac; /* symmetric authentication */
|
||||
int min_tls; /* minimum SSL/TLS protocol version */
|
||||
int max_tls; /* maximum SSL/TLS protocol version */
|
||||
int min_dtls; /* minimum DTLS protocol version */
|
||||
int max_dtls; /* maximum DTLS protocol version */
|
||||
uint32_t algo_strength; /* strength and export flags */
|
||||
uint32_t algorithm2; /* Extra flags */
|
||||
int32_t strength_bits; /* Number of bits really used */
|
||||
uint32_t alg_bits; /* Number of bits for algorithm */
|
||||
};
|
||||
|
||||
/* Used to hold SSL/TLS functions */
|
||||
struct ssl_method_st {
|
||||
int version;
|
||||
unsigned flags;
|
||||
unsigned long mask;
|
||||
int (*ssl_new) (SSL *s);
|
||||
int (*ssl_clear) (SSL *s);
|
||||
void (*ssl_free) (SSL *s);
|
||||
int (*ssl_accept) (SSL *s);
|
||||
int (*ssl_connect) (SSL *s);
|
||||
int (*ssl_read) (SSL *s, void *buf, size_t len, size_t *readbytes);
|
||||
int (*ssl_peek) (SSL *s, void *buf, size_t len, size_t *readbytes);
|
||||
int (*ssl_write) (SSL *s, const void *buf, size_t len, size_t *written);
|
||||
int (*ssl_shutdown) (SSL *s);
|
||||
int (*ssl_renegotiate) (SSL *s);
|
||||
int (*ssl_renegotiate_check) (SSL *s, int);
|
||||
int (*ssl_read_bytes) (SSL *s, int type, int *recvd_type,
|
||||
unsigned char *buf, size_t len, int peek,
|
||||
size_t *readbytes);
|
||||
int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, size_t len,
|
||||
size_t *written);
|
||||
int (*ssl_dispatch_alert) (SSL *s);
|
||||
long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg);
|
||||
long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg);
|
||||
const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr);
|
||||
int (*put_cipher_by_char) (const SSL_CIPHER *cipher, WPACKET *pkt,
|
||||
size_t *len);
|
||||
size_t (*ssl_pending) (const SSL *s);
|
||||
int (*num_ciphers) (void);
|
||||
const SSL_CIPHER *(*get_cipher) (unsigned ncipher);
|
||||
long (*get_timeout) (void);
|
||||
const struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */
|
||||
int (*ssl_version) (void);
|
||||
long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void));
|
||||
long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void));
|
||||
};
|
||||
|
||||
/*
|
||||
* Matches the length of PSK_MAX_PSK_LEN. We keep it the same value for
|
||||
* consistency, even in the event of OPENSSL_NO_PSK being defined.
|
||||
*/
|
||||
# define TLS13_MAX_RESUMPTION_PSK_LENGTH 256
|
||||
|
||||
/*-
|
||||
* Lets make this into an ASN.1 type structure as follows
|
||||
* SSL_SESSION_ID ::= SEQUENCE {
|
||||
* version INTEGER, -- structure version number
|
||||
* SSLversion INTEGER, -- SSL version number
|
||||
* Cipher OCTET STRING, -- the 3 byte cipher ID
|
||||
* Session_ID OCTET STRING, -- the Session ID
|
||||
* Master_key OCTET STRING, -- the master key
|
||||
* Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument
|
||||
* Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time
|
||||
* Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds
|
||||
* Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate
|
||||
* Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context
|
||||
* Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer'
|
||||
* HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension
|
||||
* PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint
|
||||
* PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity
|
||||
* Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket
|
||||
* Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only)
|
||||
* Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method
|
||||
* SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username
|
||||
* flags [ 13 ] EXPLICIT INTEGER -- optional flags
|
||||
* }
|
||||
* Look in ssl/ssl_asn1.c for more details
|
||||
* I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).
|
||||
*/
|
||||
struct ssl_session_st {
|
||||
int ssl_version; /* what ssl version session info is being kept
|
||||
* in here? */
|
||||
size_t master_key_length;
|
||||
|
||||
/* TLSv1.3 early_secret used for external PSKs */
|
||||
unsigned char early_secret[EVP_MAX_MD_SIZE];
|
||||
/*
|
||||
* For <=TLS1.2 this is the master_key. For TLS1.3 this is the resumption
|
||||
* PSK
|
||||
*/
|
||||
unsigned char master_key[TLS13_MAX_RESUMPTION_PSK_LENGTH];
|
||||
/* session_id - valid? */
|
||||
size_t session_id_length;
|
||||
unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
|
||||
/*
|
||||
* this is used to determine whether the session is being reused in the
|
||||
* appropriate context. It is up to the application to set this, via
|
||||
* SSL_new
|
||||
*/
|
||||
size_t sid_ctx_length;
|
||||
unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
|
||||
# ifndef OPENSSL_NO_PSK
|
||||
char *psk_identity_hint;
|
||||
char *psk_identity;
|
||||
# endif
|
||||
/*
|
||||
* Used to indicate that session resumption is not allowed. Applications
|
||||
* can also set this bit for a new session via not_resumable_session_cb
|
||||
* to disable session caching and tickets.
|
||||
*/
|
||||
int not_resumable;
|
||||
/* This is the cert and type for the other end. */
|
||||
X509 *peer;
|
||||
int peer_type;
|
||||
/* Certificate chain peer sent. */
|
||||
STACK_OF(X509) *peer_chain;
|
||||
/*
|
||||
* when app_verify_callback accepts a session where the peer's
|
||||
* certificate is not ok, we must remember the error for session reuse:
|
||||
*/
|
||||
long verify_result; /* only for servers */
|
||||
CRYPTO_REF_COUNT references;
|
||||
long timeout;
|
||||
long time;
|
||||
unsigned int compress_meth; /* Need to lookup the method */
|
||||
const SSL_CIPHER *cipher;
|
||||
unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used to
|
||||
* load the 'cipher' structure */
|
||||
CRYPTO_EX_DATA ex_data; /* application specific data */
|
||||
/*
|
||||
* These are used to make removal of session-ids more efficient and to
|
||||
* implement a maximum cache size.
|
||||
*/
|
||||
struct ssl_session_st *prev, *next;
|
||||
|
||||
struct {
|
||||
char *hostname;
|
||||
/* RFC4507 info */
|
||||
unsigned char *tick; /* Session ticket */
|
||||
size_t ticklen; /* Session ticket length */
|
||||
/* Session lifetime hint in seconds */
|
||||
unsigned long tick_lifetime_hint;
|
||||
uint32_t tick_age_add;
|
||||
/* Max number of bytes that can be sent as early data */
|
||||
uint32_t max_early_data;
|
||||
/* The ALPN protocol selected for this session */
|
||||
unsigned char *alpn_selected;
|
||||
size_t alpn_selected_len;
|
||||
/*
|
||||
* Maximum Fragment Length as per RFC 4366.
|
||||
* If this value does not contain RFC 4366 allowed values (1-4) then
|
||||
* either the Maximum Fragment Length Negotiation failed or was not
|
||||
* performed at all.
|
||||
*/
|
||||
uint8_t max_fragment_len_mode;
|
||||
} ext;
|
||||
# ifndef OPENSSL_NO_SRP
|
||||
char *srp_username;
|
||||
# endif
|
||||
unsigned char *ticket_appdata;
|
||||
size_t ticket_appdata_len;
|
||||
uint32_t flags;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
};
|
||||
|
||||
/* Extended master secret support */
|
||||
# define SSL_SESS_FLAG_EXTMS 0x1
|
||||
|
||||
# ifndef OPENSSL_NO_SRP
|
||||
|
||||
typedef struct srp_ctx_st {
|
||||
/* param for all the callbacks */
|
||||
void *SRP_cb_arg;
|
||||
/* set client Hello login callback */
|
||||
int (*TLS_ext_srp_username_callback) (SSL *, int *, void *);
|
||||
/* set SRP N/g param callback for verification */
|
||||
int (*SRP_verify_param_callback) (SSL *, void *);
|
||||
/* set SRP client passwd callback */
|
||||
char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *);
|
||||
char *login;
|
||||
BIGNUM *N, *g, *s, *B, *A;
|
||||
BIGNUM *a, *b, *v;
|
||||
char *info;
|
||||
int strength;
|
||||
unsigned long srp_Mask;
|
||||
} SRP_CTX;
|
||||
|
||||
# endif
|
||||
|
||||
typedef enum {
|
||||
SSL_EARLY_DATA_NONE = 0,
|
||||
SSL_EARLY_DATA_CONNECT_RETRY,
|
||||
SSL_EARLY_DATA_CONNECTING,
|
||||
SSL_EARLY_DATA_WRITE_RETRY,
|
||||
SSL_EARLY_DATA_WRITING,
|
||||
SSL_EARLY_DATA_WRITE_FLUSH,
|
||||
SSL_EARLY_DATA_UNAUTH_WRITING,
|
||||
SSL_EARLY_DATA_FINISHED_WRITING,
|
||||
SSL_EARLY_DATA_ACCEPT_RETRY,
|
||||
SSL_EARLY_DATA_ACCEPTING,
|
||||
SSL_EARLY_DATA_READ_RETRY,
|
||||
SSL_EARLY_DATA_READING,
|
||||
SSL_EARLY_DATA_FINISHED_READING
|
||||
} SSL_EARLY_DATA_STATE;
|
||||
|
||||
/*
|
||||
* We check that the amount of unreadable early data doesn't exceed
|
||||
* max_early_data. max_early_data is given in plaintext bytes. However if it is
|
||||
* unreadable then we only know the number of ciphertext bytes. We also don't
|
||||
* know how much the overhead should be because it depends on the ciphersuite.
|
||||
* We make a small allowance. We assume 5 records of actual data plus the end
|
||||
* of early data alert record. Each record has a tag and a content type byte.
|
||||
* The longest tag length we know of is EVP_GCM_TLS_TAG_LEN. We don't count the
|
||||
* content of the alert record either which is 2 bytes.
|
||||
*/
|
||||
# define EARLY_DATA_CIPHERTEXT_OVERHEAD ((6 * (EVP_GCM_TLS_TAG_LEN + 1)) + 2)
|
||||
|
||||
/*
|
||||
* The allowance we have between the client's calculated ticket age and our own.
|
||||
* We allow for 10 seconds (units are in ms). If a ticket is presented and the
|
||||
* client's age calculation is different by more than this than our own then we
|
||||
* do not allow that ticket for early_data.
|
||||
*/
|
||||
# define TICKET_AGE_ALLOWANCE (10 * 1000)
|
||||
|
||||
#define MAX_COMPRESSIONS_SIZE 255
|
||||
|
||||
struct ssl_comp_st {
|
||||
int id;
|
||||
const char *name;
|
||||
COMP_METHOD *method;
|
||||
};
|
||||
|
||||
typedef struct raw_extension_st {
|
||||
/* Raw packet data for the extension */
|
||||
PACKET data;
|
||||
/* Set to 1 if the extension is present or 0 otherwise */
|
||||
int present;
|
||||
/* Set to 1 if we have already parsed the extension or 0 otherwise */
|
||||
int parsed;
|
||||
/* The type of this extension, i.e. a TLSEXT_TYPE_* value */
|
||||
unsigned int type;
|
||||
/* Track what order extensions are received in (0-based). */
|
||||
size_t received_order;
|
||||
} RAW_EXTENSION;
|
||||
|
||||
typedef struct {
|
||||
unsigned int isv2;
|
||||
unsigned int legacy_version;
|
||||
unsigned char random[SSL3_RANDOM_SIZE];
|
||||
size_t session_id_len;
|
||||
unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
|
||||
size_t dtls_cookie_len;
|
||||
unsigned char dtls_cookie[DTLS1_COOKIE_LENGTH];
|
||||
PACKET ciphersuites;
|
||||
size_t compressions_len;
|
||||
unsigned char compressions[MAX_COMPRESSIONS_SIZE];
|
||||
PACKET extensions;
|
||||
size_t pre_proc_exts_len;
|
||||
RAW_EXTENSION *pre_proc_exts;
|
||||
} CLIENTHELLO_MSG;
|
||||
|
||||
/*
|
||||
* Extension index values NOTE: Any updates to these defines should be mirrored
|
||||
* with equivalent updates to ext_defs in extensions.c
|
||||
*/
|
||||
typedef enum tlsext_index_en {
|
||||
TLSEXT_IDX_renegotiate,
|
||||
TLSEXT_IDX_server_name,
|
||||
TLSEXT_IDX_max_fragment_length,
|
||||
TLSEXT_IDX_srp,
|
||||
TLSEXT_IDX_ec_point_formats,
|
||||
TLSEXT_IDX_supported_groups,
|
||||
TLSEXT_IDX_session_ticket,
|
||||
TLSEXT_IDX_status_request,
|
||||
TLSEXT_IDX_next_proto_neg,
|
||||
TLSEXT_IDX_application_layer_protocol_negotiation,
|
||||
TLSEXT_IDX_use_srtp,
|
||||
TLSEXT_IDX_encrypt_then_mac,
|
||||
TLSEXT_IDX_signed_certificate_timestamp,
|
||||
TLSEXT_IDX_extended_master_secret,
|
||||
TLSEXT_IDX_signature_algorithms_cert,
|
||||
TLSEXT_IDX_post_handshake_auth,
|
||||
TLSEXT_IDX_signature_algorithms,
|
||||
TLSEXT_IDX_supported_versions,
|
||||
TLSEXT_IDX_psk_kex_modes,
|
||||
TLSEXT_IDX_key_share,
|
||||
TLSEXT_IDX_cookie,
|
||||
TLSEXT_IDX_cryptopro_bug,
|
||||
TLSEXT_IDX_early_data,
|
||||
TLSEXT_IDX_certificate_authorities,
|
||||
TLSEXT_IDX_padding,
|
||||
TLSEXT_IDX_psk,
|
||||
/* Dummy index - must always be the last entry */
|
||||
TLSEXT_IDX_num_builtins
|
||||
} TLSEXT_INDEX;
|
||||
|
||||
DEFINE_LHASH_OF(SSL_SESSION);
|
||||
/* Needed in ssl_cert.c */
|
||||
DEFINE_LHASH_OF(X509_NAME);
|
||||
|
||||
# define TLSEXT_KEYNAME_LENGTH 16
|
||||
# define TLSEXT_TICK_KEY_LENGTH 32
|
||||
|
||||
typedef struct ssl_ctx_ext_secure_st {
|
||||
unsigned char tick_hmac_key[TLSEXT_TICK_KEY_LENGTH];
|
||||
unsigned char tick_aes_key[TLSEXT_TICK_KEY_LENGTH];
|
||||
} SSL_CTX_EXT_SECURE;
|
||||
|
||||
struct ssl_ctx_st {
|
||||
const SSL_METHOD *method;
|
||||
STACK_OF(SSL_CIPHER) *cipher_list;
|
||||
/* same as above but sorted for lookup */
|
||||
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
||||
/* TLSv1.3 specific ciphersuites */
|
||||
STACK_OF(SSL_CIPHER) *tls13_ciphersuites;
|
||||
struct x509_store_st /* X509_STORE */ *cert_store;
|
||||
LHASH_OF(SSL_SESSION) *sessions;
|
||||
/*
|
||||
* Most session-ids that will be cached, default is
|
||||
* SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited.
|
||||
*/
|
||||
size_t session_cache_size;
|
||||
struct ssl_session_st *session_cache_head;
|
||||
struct ssl_session_st *session_cache_tail;
|
||||
/*
|
||||
* This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT,
|
||||
* SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which
|
||||
* means only SSL_accept will cache SSL_SESSIONS.
|
||||
*/
|
||||
uint32_t session_cache_mode;
|
||||
/*
|
||||
* If timeout is not 0, it is the default timeout value set when
|
||||
* SSL_new() is called. This has been put in to make life easier to set
|
||||
* things up
|
||||
*/
|
||||
long session_timeout;
|
||||
/*
|
||||
* If this callback is not null, it will be called each time a session id
|
||||
* is added to the cache. If this function returns 1, it means that the
|
||||
* callback will do a SSL_SESSION_free() when it has finished using it.
|
||||
* Otherwise, on 0, it means the callback has finished with it. If
|
||||
* remove_session_cb is not null, it will be called when a session-id is
|
||||
* removed from the cache. After the call, OpenSSL will
|
||||
* SSL_SESSION_free() it.
|
||||
*/
|
||||
int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess);
|
||||
void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess);
|
||||
SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl,
|
||||
const unsigned char *data, int len,
|
||||
int *copy);
|
||||
struct {
|
||||
TSAN_QUALIFIER int sess_connect; /* SSL new conn - started */
|
||||
TSAN_QUALIFIER int sess_connect_renegotiate; /* SSL reneg - requested */
|
||||
TSAN_QUALIFIER int sess_connect_good; /* SSL new conne/reneg - finished */
|
||||
TSAN_QUALIFIER int sess_accept; /* SSL new accept - started */
|
||||
TSAN_QUALIFIER int sess_accept_renegotiate; /* SSL reneg - requested */
|
||||
TSAN_QUALIFIER int sess_accept_good; /* SSL accept/reneg - finished */
|
||||
TSAN_QUALIFIER int sess_miss; /* session lookup misses */
|
||||
TSAN_QUALIFIER int sess_timeout; /* reuse attempt on timeouted session */
|
||||
TSAN_QUALIFIER int sess_cache_full; /* session removed due to full cache */
|
||||
TSAN_QUALIFIER int sess_hit; /* session reuse actually done */
|
||||
TSAN_QUALIFIER int sess_cb_hit; /* session-id that was not in
|
||||
* the cache was passed back via
|
||||
* the callback. This indicates
|
||||
* that the application is
|
||||
* supplying session-id's from
|
||||
* other processes - spooky
|
||||
* :-) */
|
||||
} stats;
|
||||
|
||||
CRYPTO_REF_COUNT references;
|
||||
|
||||
/* if defined, these override the X509_verify_cert() calls */
|
||||
int (*app_verify_callback) (X509_STORE_CTX *, void *);
|
||||
void *app_verify_arg;
|
||||
/*
|
||||
* before OpenSSL 0.9.7, 'app_verify_arg' was ignored
|
||||
* ('app_verify_callback' was called with just one argument)
|
||||
*/
|
||||
|
||||
/* Default password callback. */
|
||||
pem_password_cb *default_passwd_callback;
|
||||
|
||||
/* Default password callback user data. */
|
||||
void *default_passwd_callback_userdata;
|
||||
|
||||
/* get client cert callback */
|
||||
int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey);
|
||||
|
||||
/* cookie generate callback */
|
||||
int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie,
|
||||
unsigned int *cookie_len);
|
||||
|
||||
/* verify cookie callback */
|
||||
int (*app_verify_cookie_cb) (SSL *ssl, const unsigned char *cookie,
|
||||
unsigned int cookie_len);
|
||||
|
||||
/* TLS1.3 app-controlled cookie generate callback */
|
||||
int (*gen_stateless_cookie_cb) (SSL *ssl, unsigned char *cookie,
|
||||
size_t *cookie_len);
|
||||
|
||||
/* TLS1.3 verify app-controlled cookie callback */
|
||||
int (*verify_stateless_cookie_cb) (SSL *ssl, const unsigned char *cookie,
|
||||
size_t cookie_len);
|
||||
|
||||
CRYPTO_EX_DATA ex_data;
|
||||
|
||||
const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */
|
||||
const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */
|
||||
|
||||
STACK_OF(X509) *extra_certs;
|
||||
STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */
|
||||
|
||||
/* Default values used when no per-SSL value is defined follow */
|
||||
|
||||
/* used if SSL's info_callback is NULL */
|
||||
void (*info_callback) (const SSL *ssl, int type, int val);
|
||||
|
||||
/*
|
||||
* What we put in certificate_authorities extension for TLS 1.3
|
||||
* (ClientHello and CertificateRequest) or just client cert requests for
|
||||
* earlier versions. If client_ca_names is populated then it is only used
|
||||
* for client cert requests, and in preference to ca_names.
|
||||
*/
|
||||
STACK_OF(X509_NAME) *ca_names;
|
||||
STACK_OF(X509_NAME) *client_ca_names;
|
||||
|
||||
/*
|
||||
* Default values to use in SSL structures follow (these are copied by
|
||||
* SSL_new)
|
||||
*/
|
||||
|
||||
uint32_t options;
|
||||
uint32_t mode;
|
||||
int min_proto_version;
|
||||
int max_proto_version;
|
||||
size_t max_cert_list;
|
||||
|
||||
struct cert_st /* CERT */ *cert;
|
||||
int read_ahead;
|
||||
|
||||
/* callback that allows applications to peek at protocol messages */
|
||||
void (*msg_callback) (int write_p, int version, int content_type,
|
||||
const void *buf, size_t len, SSL *ssl, void *arg);
|
||||
void *msg_callback_arg;
|
||||
|
||||
uint32_t verify_mode;
|
||||
size_t sid_ctx_length;
|
||||
unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
|
||||
/* called 'verify_callback' in the SSL */
|
||||
int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx);
|
||||
|
||||
/* Default generate session ID callback. */
|
||||
GEN_SESSION_CB generate_session_id;
|
||||
|
||||
X509_VERIFY_PARAM *param;
|
||||
|
||||
int quiet_shutdown;
|
||||
|
||||
# ifndef OPENSSL_NO_CT
|
||||
CTLOG_STORE *ctlog_store; /* CT Log Store */
|
||||
/*
|
||||
* Validates that the SCTs (Signed Certificate Timestamps) are sufficient.
|
||||
* If they are not, the connection should be aborted.
|
||||
*/
|
||||
ssl_ct_validation_cb ct_validation_callback;
|
||||
void *ct_validation_callback_arg;
|
||||
# endif
|
||||
|
||||
/*
|
||||
* If we're using more than one pipeline how should we divide the data
|
||||
* up between the pipes?
|
||||
*/
|
||||
size_t split_send_fragment;
|
||||
/*
|
||||
* Maximum amount of data to send in one fragment. actual record size can
|
||||
* be more than this due to padding and MAC overheads.
|
||||
*/
|
||||
size_t max_send_fragment;
|
||||
|
||||
/* Up to how many pipelines should we use? If 0 then 1 is assumed */
|
||||
size_t max_pipelines;
|
||||
|
||||
/* The default read buffer length to use (0 means not set) */
|
||||
size_t default_read_buf_len;
|
||||
|
||||
# ifndef OPENSSL_NO_ENGINE
|
||||
/*
|
||||
* Engine to pass requests for client certs to
|
||||
*/
|
||||
ENGINE *client_cert_engine;
|
||||
# endif
|
||||
|
||||
/* ClientHello callback. Mostly for extensions, but not entirely. */
|
||||
SSL_client_hello_cb_fn client_hello_cb;
|
||||
void *client_hello_cb_arg;
|
||||
|
||||
/* TLS extensions. */
|
||||
struct {
|
||||
/* TLS extensions servername callback */
|
||||
int (*servername_cb) (SSL *, int *, void *);
|
||||
void *servername_arg;
|
||||
/* RFC 4507 session ticket keys */
|
||||
unsigned char tick_key_name[TLSEXT_KEYNAME_LENGTH];
|
||||
SSL_CTX_EXT_SECURE *secure;
|
||||
/* Callback to support customisation of ticket key setting */
|
||||
int (*ticket_key_cb) (SSL *ssl,
|
||||
unsigned char *name, unsigned char *iv,
|
||||
EVP_CIPHER_CTX *ectx, HMAC_CTX *hctx, int enc);
|
||||
|
||||
/* certificate status request info */
|
||||
/* Callback for status request */
|
||||
int (*status_cb) (SSL *ssl, void *arg);
|
||||
void *status_arg;
|
||||
/* ext status type used for CSR extension (OCSP Stapling) */
|
||||
int status_type;
|
||||
/* RFC 4366 Maximum Fragment Length Negotiation */
|
||||
uint8_t max_fragment_len_mode;
|
||||
|
||||
# ifndef OPENSSL_NO_EC
|
||||
/* EC extension values inherited by SSL structure */
|
||||
size_t ecpointformats_len;
|
||||
unsigned char *ecpointformats;
|
||||
# endif /* OPENSSL_NO_EC */
|
||||
|
||||
size_t supportedgroups_len;
|
||||
uint16_t *supportedgroups;
|
||||
|
||||
/*
|
||||
* ALPN information (we are in the process of transitioning from NPN to
|
||||
* ALPN.)
|
||||
*/
|
||||
|
||||
/*-
|
||||
* For a server, this contains a callback function that allows the
|
||||
* server to select the protocol for the connection.
|
||||
* out: on successful return, this must point to the raw protocol
|
||||
* name (without the length prefix).
|
||||
* outlen: on successful return, this contains the length of |*out|.
|
||||
* in: points to the client's list of supported protocols in
|
||||
* wire-format.
|
||||
* inlen: the length of |in|.
|
||||
*/
|
||||
int (*alpn_select_cb) (SSL *s,
|
||||
const unsigned char **out,
|
||||
unsigned char *outlen,
|
||||
const unsigned char *in,
|
||||
unsigned int inlen, void *arg);
|
||||
void *alpn_select_cb_arg;
|
||||
|
||||
/*
|
||||
* For a client, this contains the list of supported protocols in wire
|
||||
* format.
|
||||
*/
|
||||
unsigned char *alpn;
|
||||
size_t alpn_len;
|
||||
|
||||
# ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
/* Next protocol negotiation information */
|
||||
|
||||
/*
|
||||
* For a server, this contains a callback function by which the set of
|
||||
* advertised protocols can be provided.
|
||||
*/
|
||||
SSL_CTX_npn_advertised_cb_func npn_advertised_cb;
|
||||
void *npn_advertised_cb_arg;
|
||||
/*
|
||||
* For a client, this contains a callback function that selects the next
|
||||
* protocol from the list provided by the server.
|
||||
*/
|
||||
SSL_CTX_npn_select_cb_func npn_select_cb;
|
||||
void *npn_select_cb_arg;
|
||||
# endif
|
||||
|
||||
unsigned char cookie_hmac_key[SHA256_DIGEST_LENGTH];
|
||||
} ext;
|
||||
|
||||
# ifndef OPENSSL_NO_PSK
|
||||
SSL_psk_client_cb_func psk_client_callback;
|
||||
SSL_psk_server_cb_func psk_server_callback;
|
||||
# endif
|
||||
SSL_psk_find_session_cb_func psk_find_session_cb;
|
||||
SSL_psk_use_session_cb_func psk_use_session_cb;
|
||||
|
||||
# ifndef OPENSSL_NO_SRP
|
||||
SRP_CTX srp_ctx; /* ctx for SRP authentication */
|
||||
# endif
|
||||
|
||||
/* Shared DANE context */
|
||||
struct dane_ctx_st dane;
|
||||
|
||||
# ifndef OPENSSL_NO_SRTP
|
||||
/* SRTP profiles we are willing to do from RFC 5764 */
|
||||
STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
|
||||
# endif
|
||||
/*
|
||||
* Callback for disabling session caching and ticket support on a session
|
||||
* basis, depending on the chosen cipher.
|
||||
*/
|
||||
int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);
|
||||
|
||||
CRYPTO_RWLOCK *lock;
|
||||
|
||||
/*
|
||||
* Callback for logging key material for use with debugging tools like
|
||||
* Wireshark. The callback should log `line` followed by a newline.
|
||||
*/
|
||||
SSL_CTX_keylog_cb_func keylog_callback;
|
||||
|
||||
/*
|
||||
* The maximum number of bytes advertised in session tickets that can be
|
||||
* sent as early data.
|
||||
*/
|
||||
uint32_t max_early_data;
|
||||
|
||||
/*
|
||||
* The maximum number of bytes of early data that a server will tolerate
|
||||
* (which should be at least as much as max_early_data).
|
||||
*/
|
||||
uint32_t recv_max_early_data;
|
||||
|
||||
/* TLS1.3 padding callback */
|
||||
size_t (*record_padding_cb)(SSL *s, int type, size_t len, void *arg);
|
||||
void *record_padding_arg;
|
||||
size_t block_padding;
|
||||
|
||||
/* Session ticket appdata */
|
||||
SSL_CTX_generate_session_ticket_fn generate_ticket_cb;
|
||||
SSL_CTX_decrypt_session_ticket_fn decrypt_ticket_cb;
|
||||
void *ticket_cb_data;
|
||||
|
||||
/* The number of TLS1.3 tickets to automatically send */
|
||||
size_t num_tickets;
|
||||
|
||||
/* Callback to determine if early_data is acceptable or not */
|
||||
SSL_allow_early_data_cb_fn allow_early_data_cb;
|
||||
void *allow_early_data_cb_data;
|
||||
|
||||
/* Do we advertise Post-handshake auth support? */
|
||||
int pha_enabled;
|
||||
|
||||
/* Callback for SSL async handling */
|
||||
SSL_async_callback_fn async_cb;
|
||||
void *async_cb_arg;
|
||||
};
|
||||
|
||||
typedef struct cert_pkey_st CERT_PKEY;
|
||||
|
||||
struct ssl_st {
|
||||
/*
|
||||
* protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION,
|
||||
* DTLS1_VERSION)
|
||||
*/
|
||||
int version;
|
||||
/* SSLv3 */
|
||||
const SSL_METHOD *method;
|
||||
/*
|
||||
* There are 2 BIO's even though they are normally both the same. This
|
||||
* is so data can be read and written to different handlers
|
||||
*/
|
||||
/* used by SSL_read */
|
||||
BIO *rbio;
|
||||
/* used by SSL_write */
|
||||
BIO *wbio;
|
||||
/* used during session-id reuse to concatenate messages */
|
||||
BIO *bbio;
|
||||
/*
|
||||
* This holds a variable that indicates what we were doing when a 0 or -1
|
||||
* is returned. This is needed for non-blocking IO so we know what
|
||||
* request needs re-doing when in SSL_accept or SSL_connect
|
||||
*/
|
||||
int rwstate;
|
||||
int (*handshake_func) (SSL *);
|
||||
/*
|
||||
* Imagine that here's a boolean member "init" that is switched as soon
|
||||
* as SSL_set_{accept/connect}_state is called for the first time, so
|
||||
* that "state" and "handshake_func" are properly initialized. But as
|
||||
* handshake_func is == 0 until then, we use this test instead of an
|
||||
* "init" member.
|
||||
*/
|
||||
/* are we the server side? */
|
||||
int server;
|
||||
/*
|
||||
* Generate a new session or reuse an old one.
|
||||
* NB: For servers, the 'new' session may actually be a previously
|
||||
* cached session or even the previous session unless
|
||||
* SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set
|
||||
*/
|
||||
int new_session;
|
||||
/* don't send shutdown packets */
|
||||
int quiet_shutdown;
|
||||
/* we have shut things down, 0x01 sent, 0x02 for received */
|
||||
int shutdown;
|
||||
/* where we are */
|
||||
OSSL_STATEM statem;
|
||||
SSL_EARLY_DATA_STATE early_data_state;
|
||||
BUF_MEM *init_buf; /* buffer used during init */
|
||||
void *init_msg; /* pointer to handshake message body, set by
|
||||
* ssl3_get_message() */
|
||||
size_t init_num; /* amount read/written */
|
||||
size_t init_off; /* amount read/written */
|
||||
|
||||
struct {
|
||||
long flags;
|
||||
size_t read_mac_secret_size;
|
||||
unsigned char read_mac_secret[EVP_MAX_MD_SIZE];
|
||||
size_t write_mac_secret_size;
|
||||
unsigned char write_mac_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char server_random[SSL3_RANDOM_SIZE];
|
||||
unsigned char client_random[SSL3_RANDOM_SIZE];
|
||||
/* flags for countermeasure against known-IV weakness */
|
||||
int need_empty_fragments;
|
||||
int empty_fragment_done;
|
||||
/* used during startup, digest all incoming/outgoing packets */
|
||||
BIO *handshake_buffer;
|
||||
/*
|
||||
* When handshake digest is determined, buffer is hashed and
|
||||
* freed and MD_CTX for the required digest is stored here.
|
||||
*/
|
||||
EVP_MD_CTX *handshake_dgst;
|
||||
/*
|
||||
* Set whenever an expected ChangeCipherSpec message is processed.
|
||||
* Unset when the peer's Finished message is received.
|
||||
* Unexpected ChangeCipherSpec messages trigger a fatal alert.
|
||||
*/
|
||||
int change_cipher_spec;
|
||||
int warn_alert;
|
||||
int fatal_alert;
|
||||
/*
|
||||
* we allow one fatal and one warning alert to be outstanding, send close
|
||||
* alert via the warning alert
|
||||
*/
|
||||
int alert_dispatch;
|
||||
unsigned char send_alert[2];
|
||||
/*
|
||||
* This flag is set when we should renegotiate ASAP, basically when there
|
||||
* is no more data in the read or write buffers
|
||||
*/
|
||||
int renegotiate;
|
||||
int total_renegotiations;
|
||||
int num_renegotiations;
|
||||
int in_read_app_data;
|
||||
struct {
|
||||
/* actually only need to be 16+20 for SSLv3 and 12 for TLS */
|
||||
unsigned char finish_md[EVP_MAX_MD_SIZE * 2];
|
||||
size_t finish_md_len;
|
||||
unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2];
|
||||
size_t peer_finish_md_len;
|
||||
size_t message_size;
|
||||
int message_type;
|
||||
/* used to hold the new cipher we are going to use */
|
||||
const SSL_CIPHER *new_cipher;
|
||||
# if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
|
||||
EVP_PKEY *pkey; /* holds short lived DH/ECDH key */
|
||||
# endif
|
||||
/* used for certificate requests */
|
||||
int cert_req;
|
||||
/* Certificate types in certificate request message. */
|
||||
uint8_t *ctype;
|
||||
size_t ctype_len;
|
||||
/* Certificate authorities list peer sent */
|
||||
STACK_OF(X509_NAME) *peer_ca_names;
|
||||
size_t key_block_length;
|
||||
unsigned char *key_block;
|
||||
const EVP_CIPHER *new_sym_enc;
|
||||
const EVP_MD *new_hash;
|
||||
int new_mac_pkey_type;
|
||||
size_t new_mac_secret_size;
|
||||
# ifndef OPENSSL_NO_COMP
|
||||
const SSL_COMP *new_compression;
|
||||
# else
|
||||
char *new_compression;
|
||||
# endif
|
||||
int cert_request;
|
||||
/* Raw values of the cipher list from a client */
|
||||
unsigned char *ciphers_raw;
|
||||
size_t ciphers_rawlen;
|
||||
/* Temporary storage for premaster secret */
|
||||
unsigned char *pms;
|
||||
size_t pmslen;
|
||||
# ifndef OPENSSL_NO_PSK
|
||||
/* Temporary storage for PSK key */
|
||||
unsigned char *psk;
|
||||
size_t psklen;
|
||||
# endif
|
||||
/* Signature algorithm we actually use */
|
||||
const struct sigalg_lookup_st *sigalg;
|
||||
/* Pointer to certificate we use */
|
||||
CERT_PKEY *cert;
|
||||
/*
|
||||
* signature algorithms peer reports: e.g. supported signature
|
||||
* algorithms extension for server or as part of a certificate
|
||||
* request for client.
|
||||
* Keep track of the algorithms for TLS and X.509 usage separately.
|
||||
*/
|
||||
uint16_t *peer_sigalgs;
|
||||
uint16_t *peer_cert_sigalgs;
|
||||
/* Size of above arrays */
|
||||
size_t peer_sigalgslen;
|
||||
size_t peer_cert_sigalgslen;
|
||||
/* Sigalg peer actually uses */
|
||||
const struct sigalg_lookup_st *peer_sigalg;
|
||||
/*
|
||||
* Set if corresponding CERT_PKEY can be used with current
|
||||
* SSL session: e.g. appropriate curve, signature algorithms etc.
|
||||
* If zero it can't be used at all.
|
||||
*/
|
||||
uint32_t valid_flags[SSL_PKEY_NUM];
|
||||
/*
|
||||
* For servers the following masks are for the key and auth algorithms
|
||||
* that are supported by the certs below. For clients they are masks of
|
||||
* *disabled* algorithms based on the current session.
|
||||
*/
|
||||
uint32_t mask_k;
|
||||
uint32_t mask_a;
|
||||
/*
|
||||
* The following are used by the client to see if a cipher is allowed or
|
||||
* not. It contains the minimum and maximum version the client's using
|
||||
* based on what it knows so far.
|
||||
*/
|
||||
int min_ver;
|
||||
int max_ver;
|
||||
} tmp;
|
||||
|
||||
/* Connection binding to prevent renegotiation attacks */
|
||||
unsigned char previous_client_finished[EVP_MAX_MD_SIZE];
|
||||
size_t previous_client_finished_len;
|
||||
unsigned char previous_server_finished[EVP_MAX_MD_SIZE];
|
||||
size_t previous_server_finished_len;
|
||||
int send_connection_binding; /* TODOEKR */
|
||||
|
||||
# ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
/*
|
||||
* Set if we saw the Next Protocol Negotiation extension from our peer.
|
||||
*/
|
||||
int npn_seen;
|
||||
# endif
|
||||
|
||||
/*
|
||||
* ALPN information (we are in the process of transitioning from NPN to
|
||||
* ALPN.)
|
||||
*/
|
||||
|
||||
/*
|
||||
* In a server these point to the selected ALPN protocol after the
|
||||
* ClientHello has been processed. In a client these contain the protocol
|
||||
* that the server selected once the ServerHello has been processed.
|
||||
*/
|
||||
unsigned char *alpn_selected;
|
||||
size_t alpn_selected_len;
|
||||
/* used by the server to know what options were proposed */
|
||||
unsigned char *alpn_proposed;
|
||||
size_t alpn_proposed_len;
|
||||
/* used by the client to know if it actually sent alpn */
|
||||
int alpn_sent;
|
||||
|
||||
# ifndef OPENSSL_NO_EC
|
||||
/*
|
||||
* This is set to true if we believe that this is a version of Safari
|
||||
* running on OS X 10.6 or newer. We wish to know this because Safari on
|
||||
* 10.8 .. 10.8.3 has broken ECDHE-ECDSA support.
|
||||
*/
|
||||
char is_probably_safari;
|
||||
# endif /* !OPENSSL_NO_EC */
|
||||
|
||||
/* For clients: peer temporary key */
|
||||
# if !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH)
|
||||
/* The group_id for the DH/ECDH key */
|
||||
uint16_t group_id;
|
||||
EVP_PKEY *peer_tmp;
|
||||
# endif
|
||||
|
||||
} s3;
|
||||
|
||||
struct dtls1_state_st *d1; /* DTLSv1 variables */
|
||||
/* callback that allows applications to peek at protocol messages */
|
||||
void (*msg_callback) (int write_p, int version, int content_type,
|
||||
const void *buf, size_t len, SSL *ssl, void *arg);
|
||||
void *msg_callback_arg;
|
||||
int hit; /* reusing a previous session */
|
||||
X509_VERIFY_PARAM *param;
|
||||
/* Per connection DANE state */
|
||||
SSL_DANE dane;
|
||||
/* crypto */
|
||||
STACK_OF(SSL_CIPHER) *peer_ciphers;
|
||||
STACK_OF(SSL_CIPHER) *cipher_list;
|
||||
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
||||
/* TLSv1.3 specific ciphersuites */
|
||||
STACK_OF(SSL_CIPHER) *tls13_ciphersuites;
|
||||
/*
|
||||
* These are the ones being used, the ones in SSL_SESSION are the ones to
|
||||
* be 'copied' into these ones
|
||||
*/
|
||||
uint32_t mac_flags;
|
||||
/*
|
||||
* The TLS1.3 secrets.
|
||||
*/
|
||||
unsigned char early_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char handshake_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char master_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char resumption_master_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char client_finished_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char server_finished_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char server_finished_hash[EVP_MAX_MD_SIZE];
|
||||
unsigned char handshake_traffic_hash[EVP_MAX_MD_SIZE];
|
||||
unsigned char client_app_traffic_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char server_app_traffic_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char exporter_master_secret[EVP_MAX_MD_SIZE];
|
||||
unsigned char early_exporter_master_secret[EVP_MAX_MD_SIZE];
|
||||
EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */
|
||||
unsigned char read_iv[EVP_MAX_IV_LENGTH]; /* TLSv1.3 static read IV */
|
||||
EVP_MD_CTX *read_hash; /* used for mac generation */
|
||||
COMP_CTX *compress; /* compression */
|
||||
COMP_CTX *expand; /* uncompress */
|
||||
EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
|
||||
unsigned char write_iv[EVP_MAX_IV_LENGTH]; /* TLSv1.3 static write IV */
|
||||
EVP_MD_CTX *write_hash; /* used for mac generation */
|
||||
/* session info */
|
||||
/* client cert? */
|
||||
/* This is used to hold the server certificate used */
|
||||
struct cert_st /* CERT */ *cert;
|
||||
|
||||
/*
|
||||
* The hash of all messages prior to the CertificateVerify, and the length
|
||||
* of that hash.
|
||||
*/
|
||||
unsigned char cert_verify_hash[EVP_MAX_MD_SIZE];
|
||||
size_t cert_verify_hash_len;
|
||||
|
||||
/* Flag to indicate whether we should send a HelloRetryRequest or not */
|
||||
enum {SSL_HRR_NONE = 0, SSL_HRR_PENDING, SSL_HRR_COMPLETE}
|
||||
hello_retry_request;
|
||||
|
||||
/*
|
||||
* the session_id_context is used to ensure sessions are only reused in
|
||||
* the appropriate context
|
||||
*/
|
||||
size_t sid_ctx_length;
|
||||
unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];
|
||||
/* This can also be in the session once a session is established */
|
||||
SSL_SESSION *session;
|
||||
/* TLSv1.3 PSK session */
|
||||
SSL_SESSION *psksession;
|
||||
unsigned char *psksession_id;
|
||||
size_t psksession_id_len;
|
||||
/* Default generate session ID callback. */
|
||||
GEN_SESSION_CB generate_session_id;
|
||||
/*
|
||||
* The temporary TLSv1.3 session id. This isn't really a session id at all
|
||||
* but is a random value sent in the legacy session id field.
|
||||
*/
|
||||
unsigned char tmp_session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];
|
||||
size_t tmp_session_id_len;
|
||||
/* Used in SSL3 */
|
||||
/*
|
||||
* 0 don't care about verify failure.
|
||||
* 1 fail if verify fails
|
||||
*/
|
||||
uint32_t verify_mode;
|
||||
/* fail if callback returns 0 */
|
||||
int (*verify_callback) (int ok, X509_STORE_CTX *ctx);
|
||||
/* optional informational callback */
|
||||
void (*info_callback) (const SSL *ssl, int type, int val);
|
||||
/* error bytes to be written */
|
||||
int error;
|
||||
/* actual code */
|
||||
int error_code;
|
||||
# ifndef OPENSSL_NO_PSK
|
||||
SSL_psk_client_cb_func psk_client_callback;
|
||||
SSL_psk_server_cb_func psk_server_callback;
|
||||
# endif
|
||||
SSL_psk_find_session_cb_func psk_find_session_cb;
|
||||
SSL_psk_use_session_cb_func psk_use_session_cb;
|
||||
|
||||
SSL_CTX *ctx;
|
||||
/* Verified chain of peer */
|
||||
STACK_OF(X509) *verified_chain;
|
||||
long verify_result;
|
||||
/* extra application data */
|
||||
CRYPTO_EX_DATA ex_data;
|
||||
/*
|
||||
* What we put in certificate_authorities extension for TLS 1.3
|
||||
* (ClientHello and CertificateRequest) or just client cert requests for
|
||||
* earlier versions. If client_ca_names is populated then it is only used
|
||||
* for client cert requests, and in preference to ca_names.
|
||||
*/
|
||||
STACK_OF(X509_NAME) *ca_names;
|
||||
STACK_OF(X509_NAME) *client_ca_names;
|
||||
CRYPTO_REF_COUNT references;
|
||||
/* protocol behaviour */
|
||||
uint32_t options;
|
||||
/* API behaviour */
|
||||
uint32_t mode;
|
||||
int min_proto_version;
|
||||
int max_proto_version;
|
||||
size_t max_cert_list;
|
||||
int first_packet;
|
||||
/*
|
||||
* What was passed in ClientHello.legacy_version. Used for RSA pre-master
|
||||
* secret and SSLv3/TLS (<=1.2) rollback check
|
||||
*/
|
||||
int client_version;
|
||||
/*
|
||||
* If we're using more than one pipeline how should we divide the data
|
||||
* up between the pipes?
|
||||
*/
|
||||
size_t split_send_fragment;
|
||||
/*
|
||||
* Maximum amount of data to send in one fragment. actual record size can
|
||||
* be more than this due to padding and MAC overheads.
|
||||
*/
|
||||
size_t max_send_fragment;
|
||||
/* Up to how many pipelines should we use? If 0 then 1 is assumed */
|
||||
size_t max_pipelines;
|
||||
|
||||
struct {
|
||||
/* Built-in extension flags */
|
||||
uint8_t extflags[TLSEXT_IDX_num_builtins];
|
||||
/* TLS extension debug callback */
|
||||
void (*debug_cb)(SSL *s, int client_server, int type,
|
||||
const unsigned char *data, int len, void *arg);
|
||||
void *debug_arg;
|
||||
char *hostname;
|
||||
/* certificate status request info */
|
||||
/* Status type or -1 if no status type */
|
||||
int status_type;
|
||||
/* Raw extension data, if seen */
|
||||
unsigned char *scts;
|
||||
/* Length of raw extension data, if seen */
|
||||
uint16_t scts_len;
|
||||
/* Expect OCSP CertificateStatus message */
|
||||
int status_expected;
|
||||
|
||||
struct {
|
||||
/* OCSP status request only */
|
||||
STACK_OF(OCSP_RESPID) *ids;
|
||||
X509_EXTENSIONS *exts;
|
||||
/* OCSP response received or to be sent */
|
||||
unsigned char *resp;
|
||||
size_t resp_len;
|
||||
} ocsp;
|
||||
|
||||
/* RFC4507 session ticket expected to be received or sent */
|
||||
int ticket_expected;
|
||||
# ifndef OPENSSL_NO_EC
|
||||
size_t ecpointformats_len;
|
||||
/* our list */
|
||||
unsigned char *ecpointformats;
|
||||
|
||||
size_t peer_ecpointformats_len;
|
||||
/* peer's list */
|
||||
unsigned char *peer_ecpointformats;
|
||||
# endif /* OPENSSL_NO_EC */
|
||||
size_t supportedgroups_len;
|
||||
/* our list */
|
||||
uint16_t *supportedgroups;
|
||||
|
||||
size_t peer_supportedgroups_len;
|
||||
/* peer's list */
|
||||
uint16_t *peer_supportedgroups;
|
||||
|
||||
/* TLS Session Ticket extension override */
|
||||
TLS_SESSION_TICKET_EXT *session_ticket;
|
||||
/* TLS Session Ticket extension callback */
|
||||
tls_session_ticket_ext_cb_fn session_ticket_cb;
|
||||
void *session_ticket_cb_arg;
|
||||
/* TLS pre-shared secret session resumption */
|
||||
tls_session_secret_cb_fn session_secret_cb;
|
||||
void *session_secret_cb_arg;
|
||||
/*
|
||||
* For a client, this contains the list of supported protocols in wire
|
||||
* format.
|
||||
*/
|
||||
unsigned char *alpn;
|
||||
size_t alpn_len;
|
||||
/*
|
||||
* Next protocol negotiation. For the client, this is the protocol that
|
||||
* we sent in NextProtocol and is set when handling ServerHello
|
||||
* extensions. For a server, this is the client's selected_protocol from
|
||||
* NextProtocol and is set when handling the NextProtocol message, before
|
||||
* the Finished message.
|
||||
*/
|
||||
unsigned char *npn;
|
||||
size_t npn_len;
|
||||
|
||||
/* The available PSK key exchange modes */
|
||||
int psk_kex_mode;
|
||||
|
||||
/* Set to one if we have negotiated ETM */
|
||||
int use_etm;
|
||||
|
||||
/* Are we expecting to receive early data? */
|
||||
int early_data;
|
||||
/* Is the session suitable for early data? */
|
||||
int early_data_ok;
|
||||
|
||||
/* May be sent by a server in HRR. Must be echoed back in ClientHello */
|
||||
unsigned char *tls13_cookie;
|
||||
size_t tls13_cookie_len;
|
||||
/* Have we received a cookie from the client? */
|
||||
int cookieok;
|
||||
|
||||
/*
|
||||
* Maximum Fragment Length as per RFC 4366.
|
||||
* If this member contains one of the allowed values (1-4)
|
||||
* then we should include Maximum Fragment Length Negotiation
|
||||
* extension in Client Hello.
|
||||
* Please note that value of this member does not have direct
|
||||
* effect. The actual (binding) value is stored in SSL_SESSION,
|
||||
* as this extension is optional on server side.
|
||||
*/
|
||||
uint8_t max_fragment_len_mode;
|
||||
|
||||
/*
|
||||
* On the client side the number of ticket identities we sent in the
|
||||
* ClientHello. On the server side the identity of the ticket we
|
||||
* selected.
|
||||
*/
|
||||
int tick_identity;
|
||||
} ext;
|
||||
|
||||
/*
|
||||
* Parsed form of the ClientHello, kept around across client_hello_cb
|
||||
* calls.
|
||||
*/
|
||||
CLIENTHELLO_MSG *clienthello;
|
||||
|
||||
/*-
|
||||
* no further mod of servername
|
||||
* 0 : call the servername extension callback.
|
||||
* 1 : prepare 2, allow last ack just after in server callback.
|
||||
* 2 : don't call servername callback, no ack in server hello
|
||||
*/
|
||||
int servername_done;
|
||||
# ifndef OPENSSL_NO_CT
|
||||
/*
|
||||
* Validates that the SCTs (Signed Certificate Timestamps) are sufficient.
|
||||
* If they are not, the connection should be aborted.
|
||||
*/
|
||||
ssl_ct_validation_cb ct_validation_callback;
|
||||
/* User-supplied argument that is passed to the ct_validation_callback */
|
||||
void *ct_validation_callback_arg;
|
||||
/*
|
||||
* Consolidated stack of SCTs from all sources.
|
||||
* Lazily populated by CT_get_peer_scts(SSL*)
|
||||
*/
|
||||
STACK_OF(SCT) *scts;
|
||||
/* Have we attempted to find/parse SCTs yet? */
|
||||
int scts_parsed;
|
||||
# endif
|
||||
SSL_CTX *session_ctx; /* initial ctx, used to store sessions */
|
||||
# ifndef OPENSSL_NO_SRTP
|
||||
/* What we'll do */
|
||||
STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
|
||||
/* What's been chosen */
|
||||
SRTP_PROTECTION_PROFILE *srtp_profile;
|
||||
# endif
|
||||
/*-
|
||||
* 1 if we are renegotiating.
|
||||
* 2 if we are a server and are inside a handshake
|
||||
* (i.e. not just sending a HelloRequest)
|
||||
*/
|
||||
int renegotiate;
|
||||
/* If sending a KeyUpdate is pending */
|
||||
int key_update;
|
||||
/* Post-handshake authentication state */
|
||||
SSL_PHA_STATE post_handshake_auth;
|
||||
int pha_enabled;
|
||||
uint8_t* pha_context;
|
||||
size_t pha_context_len;
|
||||
int certreqs_sent;
|
||||
EVP_MD_CTX *pha_dgst; /* this is just the digest through ClientFinished */
|
||||
|
||||
# ifndef OPENSSL_NO_SRP
|
||||
/* ctx for SRP authentication */
|
||||
SRP_CTX srp_ctx;
|
||||
# endif
|
||||
/*
|
||||
* Callback for disabling session caching and ticket support on a session
|
||||
* basis, depending on the chosen cipher.
|
||||
*/
|
||||
int (*not_resumable_session_cb) (SSL *ssl, int is_forward_secure);
|
||||
RECORD_LAYER rlayer;
|
||||
/* Default password callback. */
|
||||
pem_password_cb *default_passwd_callback;
|
||||
/* Default password callback user data. */
|
||||
void *default_passwd_callback_userdata;
|
||||
/* Async Job info */
|
||||
ASYNC_JOB *job;
|
||||
ASYNC_WAIT_CTX *waitctx;
|
||||
size_t asyncrw;
|
||||
|
||||
/*
|
||||
* The maximum number of bytes advertised in session tickets that can be
|
||||
* sent as early data.
|
||||
*/
|
||||
uint32_t max_early_data;
|
||||
/*
|
||||
* The maximum number of bytes of early data that a server will tolerate
|
||||
* (which should be at least as much as max_early_data).
|
||||
*/
|
||||
uint32_t recv_max_early_data;
|
||||
|
||||
/*
|
||||
* The number of bytes of early data received so far. If we accepted early
|
||||
* data then this is a count of the plaintext bytes. If we rejected it then
|
||||
* this is a count of the ciphertext bytes.
|
||||
*/
|
||||
uint32_t early_data_count;
|
||||
|
||||
/* TLS1.3 padding callback */
|
||||
size_t (*record_padding_cb)(SSL *s, int type, size_t len, void *arg);
|
||||
void *record_padding_arg;
|
||||
size_t block_padding;
|
||||
|
||||
CRYPTO_RWLOCK *lock;
|
||||
RAND_DRBG *drbg;
|
||||
|
||||
/* The number of TLS1.3 tickets to automatically send */
|
||||
size_t num_tickets;
|
||||
/* The number of TLS1.3 tickets actually sent so far */
|
||||
size_t sent_tickets;
|
||||
/* The next nonce value to use when we send a ticket on this connection */
|
||||
uint64_t next_ticket_nonce;
|
||||
|
||||
/* Callback to determine if early_data is acceptable or not */
|
||||
SSL_allow_early_data_cb_fn allow_early_data_cb;
|
||||
void *allow_early_data_cb_data;
|
||||
|
||||
/* Callback for SSL async handling */
|
||||
SSL_async_callback_fn async_cb;
|
||||
void *async_cb_arg;
|
||||
|
||||
/*
|
||||
* Signature algorithms shared by client and server: cached because these
|
||||
* are used most often.
|
||||
*/
|
||||
const struct sigalg_lookup_st **shared_sigalgs;
|
||||
size_t shared_sigalgslen;
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure containing table entry of values associated with the signature
|
||||
* algorithms (signature scheme) extension
|
||||
*/
|
||||
typedef struct sigalg_lookup_st {
|
||||
/* TLS 1.3 signature scheme name */
|
||||
const char *name;
|
||||
/* Raw value used in extension */
|
||||
uint16_t sigalg;
|
||||
/* NID of hash algorithm or NID_undef if no hash */
|
||||
int hash;
|
||||
/* Index of hash algorithm or -1 if no hash algorithm */
|
||||
int hash_idx;
|
||||
/* NID of signature algorithm */
|
||||
int sig;
|
||||
/* Index of signature algorithm */
|
||||
int sig_idx;
|
||||
/* Combined hash and signature NID, if any */
|
||||
int sigandhash;
|
||||
/* Required public key curve (ECDSA only) */
|
||||
int curve;
|
||||
} SIGALG_LOOKUP;
|
||||
|
||||
typedef struct tls_group_info_st {
|
||||
int nid; /* Curve NID */
|
||||
int secbits; /* Bits of security (from SP800-57) */
|
||||
uint32_t flags; /* For group type and applicable TLS versions */
|
||||
uint16_t group_id; /* Group ID */
|
||||
} TLS_GROUP_INFO;
|
||||
|
||||
/* flags values */
|
||||
# define TLS_GROUP_TYPE 0x0000000FU /* Mask for group type */
|
||||
# define TLS_GROUP_CURVE_PRIME 0x00000001U
|
||||
# define TLS_GROUP_CURVE_CHAR2 0x00000002U
|
||||
# define TLS_GROUP_CURVE_CUSTOM 0x00000004U
|
||||
# define TLS_GROUP_FFDHE 0x00000008U
|
||||
# define TLS_GROUP_ONLY_FOR_TLS1_3 0x00000010U
|
||||
|
||||
# define TLS_GROUP_FFDHE_FOR_TLS1_3 (TLS_GROUP_FFDHE|TLS_GROUP_ONLY_FOR_TLS1_3)
|
||||
|
||||
/*
|
||||
* Structure containing table entry of certificate info corresponding to
|
||||
* CERT_PKEY entries
|
||||
*/
|
||||
typedef struct {
|
||||
int nid; /* NID of public key algorithm */
|
||||
uint32_t amask; /* authmask corresponding to key type */
|
||||
} SSL_CERT_LOOKUP;
|
||||
|
||||
/* DTLS structures */
|
||||
|
||||
# ifndef OPENSSL_NO_SCTP
|
||||
# define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP"
|
||||
# endif
|
||||
|
||||
/* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */
|
||||
# define DTLS1_MAX_MTU_OVERHEAD 48
|
||||
|
||||
/*
|
||||
* Flag used in message reuse to indicate the buffer contains the record
|
||||
* header as well as the handshake message header.
|
||||
*/
|
||||
# define DTLS1_SKIP_RECORD_HEADER 2
|
||||
|
||||
struct dtls1_retransmit_state {
|
||||
EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */
|
||||
EVP_MD_CTX *write_hash; /* used for mac generation */
|
||||
COMP_CTX *compress; /* compression */
|
||||
SSL_SESSION *session;
|
||||
unsigned short epoch;
|
||||
};
|
||||
|
||||
struct hm_header_st {
|
||||
unsigned char type;
|
||||
size_t msg_len;
|
||||
unsigned short seq;
|
||||
size_t frag_off;
|
||||
size_t frag_len;
|
||||
unsigned int is_ccs;
|
||||
struct dtls1_retransmit_state saved_retransmit_state;
|
||||
};
|
||||
|
||||
struct dtls1_timeout_st {
|
||||
/* Number of read timeouts so far */
|
||||
unsigned int read_timeouts;
|
||||
/* Number of write timeouts so far */
|
||||
unsigned int write_timeouts;
|
||||
/* Number of alerts received so far */
|
||||
unsigned int num_alerts;
|
||||
};
|
||||
|
||||
typedef struct hm_fragment_st {
|
||||
struct hm_header_st msg_header;
|
||||
unsigned char *fragment;
|
||||
unsigned char *reassembly;
|
||||
} hm_fragment;
|
||||
|
||||
typedef struct pqueue_st pqueue;
|
||||
typedef struct pitem_st pitem;
|
||||
|
||||
struct pitem_st {
|
||||
unsigned char priority[8]; /* 64-bit value in big-endian encoding */
|
||||
void *data;
|
||||
pitem *next;
|
||||
};
|
||||
|
||||
typedef struct pitem_st *piterator;
|
||||
|
||||
pitem *pitem_new(unsigned char *prio64be, void *data);
|
||||
void pitem_free(pitem *item);
|
||||
pqueue *pqueue_new(void);
|
||||
void pqueue_free(pqueue *pq);
|
||||
pitem *pqueue_insert(pqueue *pq, pitem *item);
|
||||
pitem *pqueue_peek(pqueue *pq);
|
||||
pitem *pqueue_pop(pqueue *pq);
|
||||
pitem *pqueue_find(pqueue *pq, unsigned char *prio64be);
|
||||
pitem *pqueue_iterator(pqueue *pq);
|
||||
pitem *pqueue_next(piterator *iter);
|
||||
size_t pqueue_size(pqueue *pq);
|
||||
|
||||
typedef struct dtls1_state_st {
|
||||
unsigned char cookie[DTLS1_COOKIE_LENGTH];
|
||||
size_t cookie_len;
|
||||
unsigned int cookie_verified;
|
||||
/* handshake message numbers */
|
||||
unsigned short handshake_write_seq;
|
||||
unsigned short next_handshake_write_seq;
|
||||
unsigned short handshake_read_seq;
|
||||
/* Buffered handshake messages */
|
||||
pqueue *buffered_messages;
|
||||
/* Buffered (sent) handshake records */
|
||||
pqueue *sent_messages;
|
||||
size_t link_mtu; /* max on-the-wire DTLS packet size */
|
||||
size_t mtu; /* max DTLS packet size */
|
||||
struct hm_header_st w_msg_hdr;
|
||||
struct hm_header_st r_msg_hdr;
|
||||
struct dtls1_timeout_st timeout;
|
||||
/*
|
||||
* Indicates when the last handshake msg sent will timeout
|
||||
*/
|
||||
struct timeval next_timeout;
|
||||
/* Timeout duration */
|
||||
unsigned int timeout_duration_us;
|
||||
|
||||
unsigned int retransmitting;
|
||||
# ifndef OPENSSL_NO_SCTP
|
||||
int shutdown_received;
|
||||
# endif
|
||||
|
||||
DTLS_timer_cb timer_cb;
|
||||
|
||||
} DTLS1_STATE;
|
||||
|
||||
# ifndef OPENSSL_NO_EC
|
||||
/*
|
||||
* From ECC-TLS draft, used in encoding the curve type in ECParameters
|
||||
*/
|
||||
# define EXPLICIT_PRIME_CURVE_TYPE 1
|
||||
# define EXPLICIT_CHAR2_CURVE_TYPE 2
|
||||
# define NAMED_CURVE_TYPE 3
|
||||
# endif /* OPENSSL_NO_EC */
|
||||
|
||||
struct cert_pkey_st {
|
||||
X509 *x509;
|
||||
EVP_PKEY *privatekey;
|
||||
/* Chain for this certificate */
|
||||
STACK_OF(X509) *chain;
|
||||
/*-
|
||||
* serverinfo data for this certificate. The data is in TLS Extension
|
||||
* wire format, specifically it's a series of records like:
|
||||
* uint16_t extension_type; // (RFC 5246, 7.4.1.4, Extension)
|
||||
* uint16_t length;
|
||||
* uint8_t data[length];
|
||||
*/
|
||||
unsigned char *serverinfo;
|
||||
size_t serverinfo_length;
|
||||
};
|
||||
/* Retrieve Suite B flags */
|
||||
# define tls1_suiteb(s) (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
|
||||
/* Uses to check strict mode: suite B modes are always strict */
|
||||
# define SSL_CERT_FLAGS_CHECK_TLS_STRICT \
|
||||
(SSL_CERT_FLAG_SUITEB_128_LOS|SSL_CERT_FLAG_TLS_STRICT)
|
||||
|
||||
typedef enum {
|
||||
ENDPOINT_CLIENT = 0,
|
||||
ENDPOINT_SERVER,
|
||||
ENDPOINT_BOTH
|
||||
} ENDPOINT;
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned short ext_type;
|
||||
ENDPOINT role;
|
||||
/* The context which this extension applies to */
|
||||
unsigned int context;
|
||||
/*
|
||||
* Per-connection flags relating to this extension type: not used if
|
||||
* part of an SSL_CTX structure.
|
||||
*/
|
||||
uint32_t ext_flags;
|
||||
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;
|
||||
} custom_ext_method;
|
||||
|
||||
/* ext_flags values */
|
||||
|
||||
/*
|
||||
* Indicates an extension has been received. Used to check for unsolicited or
|
||||
* duplicate extensions.
|
||||
*/
|
||||
# define SSL_EXT_FLAG_RECEIVED 0x1
|
||||
/*
|
||||
* Indicates an extension has been sent: used to enable sending of
|
||||
* corresponding ServerHello extension.
|
||||
*/
|
||||
# define SSL_EXT_FLAG_SENT 0x2
|
||||
|
||||
typedef struct {
|
||||
custom_ext_method *meths;
|
||||
size_t meths_count;
|
||||
} custom_ext_methods;
|
||||
|
||||
typedef struct cert_st {
|
||||
/* Current active set */
|
||||
/*
|
||||
* ALWAYS points to an element of the pkeys array
|
||||
* Probably it would make more sense to store
|
||||
* an index, not a pointer.
|
||||
*/
|
||||
CERT_PKEY *key;
|
||||
# ifndef OPENSSL_NO_DH
|
||||
EVP_PKEY *dh_tmp;
|
||||
DH *(*dh_tmp_cb) (SSL *ssl, int is_export, int keysize);
|
||||
int dh_tmp_auto;
|
||||
# endif
|
||||
/* Flags related to certificates */
|
||||
uint32_t cert_flags;
|
||||
CERT_PKEY pkeys[SSL_PKEY_NUM];
|
||||
/* Custom certificate types sent in certificate request message. */
|
||||
uint8_t *ctype;
|
||||
size_t ctype_len;
|
||||
/*
|
||||
* supported signature algorithms. When set on a client this is sent in
|
||||
* the client hello as the supported signature algorithms extension. For
|
||||
* servers it represents the signature algorithms we are willing to use.
|
||||
*/
|
||||
uint16_t *conf_sigalgs;
|
||||
/* Size of above array */
|
||||
size_t conf_sigalgslen;
|
||||
/*
|
||||
* Client authentication signature algorithms, if not set then uses
|
||||
* conf_sigalgs. On servers these will be the signature algorithms sent
|
||||
* to the client in a certificate request for TLS 1.2. On a client this
|
||||
* represents the signature algorithms we are willing to use for client
|
||||
* authentication.
|
||||
*/
|
||||
uint16_t *client_sigalgs;
|
||||
/* Size of above array */
|
||||
size_t client_sigalgslen;
|
||||
/*
|
||||
* Certificate setup callback: if set is called whenever a certificate
|
||||
* may be required (client or server). the callback can then examine any
|
||||
* appropriate parameters and setup any certificates required. This
|
||||
* allows advanced applications to select certificates on the fly: for
|
||||
* example based on supported signature algorithms or curves.
|
||||
*/
|
||||
int (*cert_cb) (SSL *ssl, void *arg);
|
||||
void *cert_cb_arg;
|
||||
/*
|
||||
* Optional X509_STORE for chain building or certificate validation If
|
||||
* NULL the parent SSL_CTX store is used instead.
|
||||
*/
|
||||
X509_STORE *chain_store;
|
||||
X509_STORE *verify_store;
|
||||
/* Custom extensions */
|
||||
custom_ext_methods custext;
|
||||
/* Security callback */
|
||||
int (*sec_cb) (const SSL *s, const SSL_CTX *ctx, int op, int bits, int nid,
|
||||
void *other, void *ex);
|
||||
/* Security level */
|
||||
int sec_level;
|
||||
void *sec_ex;
|
||||
# ifndef OPENSSL_NO_PSK
|
||||
/* If not NULL psk identity hint to use for servers */
|
||||
char *psk_identity_hint;
|
||||
# endif
|
||||
CRYPTO_REF_COUNT references; /* >1 only if SSL_copy_session_id is used */
|
||||
CRYPTO_RWLOCK *lock;
|
||||
} CERT;
|
||||
|
||||
# define FP_ICC (int (*)(const void *,const void *))
|
||||
|
||||
/*
|
||||
* This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff It is a bit
|
||||
* of a mess of functions, but hell, think of it as an opaque structure :-)
|
||||
*/
|
||||
typedef struct ssl3_enc_method {
|
||||
int (*enc) (SSL *, SSL3_RECORD *, size_t, int);
|
||||
int (*mac) (SSL *, SSL3_RECORD *, unsigned char *, int);
|
||||
int (*setup_key_block) (SSL *);
|
||||
int (*generate_master_secret) (SSL *, unsigned char *, unsigned char *,
|
||||
size_t, size_t *);
|
||||
int (*change_cipher_state) (SSL *, int);
|
||||
size_t (*final_finish_mac) (SSL *, const char *, size_t, unsigned char *);
|
||||
const char *client_finished_label;
|
||||
size_t client_finished_label_len;
|
||||
const char *server_finished_label;
|
||||
size_t server_finished_label_len;
|
||||
int (*alert_value) (int);
|
||||
int (*export_keying_material) (SSL *, unsigned char *, size_t,
|
||||
const char *, size_t,
|
||||
const unsigned char *, size_t,
|
||||
int use_context);
|
||||
/* Various flags indicating protocol version requirements */
|
||||
uint32_t enc_flags;
|
||||
/* Set the handshake header */
|
||||
int (*set_handshake_header) (SSL *s, WPACKET *pkt, int type);
|
||||
/* Close construction of the handshake message */
|
||||
int (*close_construct_packet) (SSL *s, WPACKET *pkt, int htype);
|
||||
/* Write out handshake message */
|
||||
int (*do_write) (SSL *s);
|
||||
} SSL3_ENC_METHOD;
|
||||
|
||||
# define ssl_set_handshake_header(s, pkt, htype) \
|
||||
s->method->ssl3_enc->set_handshake_header((s), (pkt), (htype))
|
||||
# define ssl_close_construct_packet(s, pkt, htype) \
|
||||
s->method->ssl3_enc->close_construct_packet((s), (pkt), (htype))
|
||||
# define ssl_do_write(s) s->method->ssl3_enc->do_write(s)
|
||||
|
||||
/* Values for enc_flags */
|
||||
|
||||
/* Uses explicit IV for CBC mode */
|
||||
# define SSL_ENC_FLAG_EXPLICIT_IV 0x1
|
||||
/* Uses signature algorithms extension */
|
||||
# define SSL_ENC_FLAG_SIGALGS 0x2
|
||||
/* Uses SHA256 default PRF */
|
||||
# define SSL_ENC_FLAG_SHA256_PRF 0x4
|
||||
/* Is DTLS */
|
||||
# define SSL_ENC_FLAG_DTLS 0x8
|
||||
/*
|
||||
* Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
|
||||
* apply to others in future.
|
||||
*/
|
||||
# define SSL_ENC_FLAG_TLS1_2_CIPHERS 0x10
|
||||
|
||||
# ifndef OPENSSL_NO_COMP
|
||||
/* Used for holding the relevant compression methods loaded into SSL_CTX */
|
||||
typedef struct ssl3_comp_st {
|
||||
int comp_id; /* The identifier byte for this compression
|
||||
* type */
|
||||
char *name; /* Text name used for the compression type */
|
||||
COMP_METHOD *method; /* The method :-) */
|
||||
} SSL3_COMP;
|
||||
# endif
|
||||
|
||||
typedef enum downgrade_en {
|
||||
DOWNGRADE_NONE,
|
||||
DOWNGRADE_TO_1_2,
|
||||
DOWNGRADE_TO_1_1
|
||||
} DOWNGRADE;
|
||||
|
||||
/*
|
||||
* Dummy status type for the status_type extension. Indicates no status type
|
||||
* set
|
||||
*/
|
||||
#define TLSEXT_STATUSTYPE_nothing -1
|
||||
|
||||
/* Sigalgs values */
|
||||
#define TLSEXT_SIGALG_ecdsa_secp256r1_sha256 0x0403
|
||||
#define TLSEXT_SIGALG_ecdsa_secp384r1_sha384 0x0503
|
||||
#define TLSEXT_SIGALG_ecdsa_secp521r1_sha512 0x0603
|
||||
#define TLSEXT_SIGALG_ecdsa_sha224 0x0303
|
||||
#define TLSEXT_SIGALG_ecdsa_sha1 0x0203
|
||||
#define TLSEXT_SIGALG_rsa_pss_rsae_sha256 0x0804
|
||||
#define TLSEXT_SIGALG_rsa_pss_rsae_sha384 0x0805
|
||||
#define TLSEXT_SIGALG_rsa_pss_rsae_sha512 0x0806
|
||||
#define TLSEXT_SIGALG_rsa_pss_pss_sha256 0x0809
|
||||
#define TLSEXT_SIGALG_rsa_pss_pss_sha384 0x080a
|
||||
#define TLSEXT_SIGALG_rsa_pss_pss_sha512 0x080b
|
||||
#define TLSEXT_SIGALG_rsa_pkcs1_sha256 0x0401
|
||||
#define TLSEXT_SIGALG_rsa_pkcs1_sha384 0x0501
|
||||
#define TLSEXT_SIGALG_rsa_pkcs1_sha512 0x0601
|
||||
#define TLSEXT_SIGALG_rsa_pkcs1_sha224 0x0301
|
||||
#define TLSEXT_SIGALG_rsa_pkcs1_sha1 0x0201
|
||||
#define TLSEXT_SIGALG_dsa_sha256 0x0402
|
||||
#define TLSEXT_SIGALG_dsa_sha384 0x0502
|
||||
#define TLSEXT_SIGALG_dsa_sha512 0x0602
|
||||
#define TLSEXT_SIGALG_dsa_sha224 0x0302
|
||||
#define TLSEXT_SIGALG_dsa_sha1 0x0202
|
||||
#define TLSEXT_SIGALG_gostr34102012_256_gostr34112012_256 0xeeee
|
||||
#define TLSEXT_SIGALG_gostr34102012_512_gostr34112012_512 0xefef
|
||||
#define TLSEXT_SIGALG_gostr34102001_gostr3411 0xeded
|
||||
|
||||
#define TLSEXT_SIGALG_ed25519 0x0807
|
||||
#define TLSEXT_SIGALG_ed448 0x0808
|
||||
|
||||
/* Known PSK key exchange modes */
|
||||
#define TLSEXT_KEX_MODE_KE 0x00
|
||||
#define TLSEXT_KEX_MODE_KE_DHE 0x01
|
||||
|
||||
/*
|
||||
* Internal representations of key exchange modes
|
||||
*/
|
||||
#define TLSEXT_KEX_MODE_FLAG_NONE 0
|
||||
#define TLSEXT_KEX_MODE_FLAG_KE 1
|
||||
#define TLSEXT_KEX_MODE_FLAG_KE_DHE 2
|
||||
|
||||
#define SSL_USE_PSS(s) (s->s3.tmp.peer_sigalg != NULL && \
|
||||
s->s3.tmp.peer_sigalg->sig == EVP_PKEY_RSA_PSS)
|
||||
|
||||
/* A dummy signature value not valid for TLSv1.2 signature algs */
|
||||
#define TLSEXT_signature_rsa_pss 0x0101
|
||||
|
||||
/* TLSv1.3 downgrade protection sentinel values */
|
||||
extern const unsigned char tls11downgrade[8];
|
||||
extern const unsigned char tls12downgrade[8];
|
||||
|
||||
extern SSL3_ENC_METHOD ssl3_undef_enc_method;
|
||||
|
||||
__owur const SSL_METHOD *ssl_bad_method(int ver);
|
||||
__owur const SSL_METHOD *sslv3_method(void);
|
||||
__owur const SSL_METHOD *sslv3_server_method(void);
|
||||
__owur const SSL_METHOD *sslv3_client_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_server_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_client_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_1_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_1_server_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_1_client_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_2_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_2_server_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_2_client_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_3_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_3_server_method(void);
|
||||
__owur const SSL_METHOD *tlsv1_3_client_method(void);
|
||||
__owur const SSL_METHOD *dtlsv1_method(void);
|
||||
__owur const SSL_METHOD *dtlsv1_server_method(void);
|
||||
__owur const SSL_METHOD *dtlsv1_client_method(void);
|
||||
__owur const SSL_METHOD *dtls_bad_ver_client_method(void);
|
||||
__owur const SSL_METHOD *dtlsv1_2_method(void);
|
||||
__owur const SSL_METHOD *dtlsv1_2_server_method(void);
|
||||
__owur const SSL_METHOD *dtlsv1_2_client_method(void);
|
||||
|
||||
extern const SSL3_ENC_METHOD TLSv1_enc_data;
|
||||
extern const SSL3_ENC_METHOD TLSv1_1_enc_data;
|
||||
extern const SSL3_ENC_METHOD TLSv1_2_enc_data;
|
||||
extern const SSL3_ENC_METHOD TLSv1_3_enc_data;
|
||||
extern const SSL3_ENC_METHOD SSLv3_enc_data;
|
||||
extern const SSL3_ENC_METHOD DTLSv1_enc_data;
|
||||
extern const SSL3_ENC_METHOD DTLSv1_2_enc_data;
|
||||
|
||||
/*
|
||||
* Flags for SSL methods
|
||||
*/
|
||||
# define SSL_METHOD_NO_FIPS (1U<<0)
|
||||
# define SSL_METHOD_NO_SUITEB (1U<<1)
|
||||
|
||||
# define IMPLEMENT_tls_meth_func(version, flags, mask, func_name, s_accept, \
|
||||
s_connect, enc_data) \
|
||||
const SSL_METHOD *func_name(void) \
|
||||
{ \
|
||||
static const SSL_METHOD func_name##_data= { \
|
||||
version, \
|
||||
flags, \
|
||||
mask, \
|
||||
tls1_new, \
|
||||
tls1_clear, \
|
||||
tls1_free, \
|
||||
s_accept, \
|
||||
s_connect, \
|
||||
ssl3_read, \
|
||||
ssl3_peek, \
|
||||
ssl3_write, \
|
||||
ssl3_shutdown, \
|
||||
ssl3_renegotiate, \
|
||||
ssl3_renegotiate_check, \
|
||||
ssl3_read_bytes, \
|
||||
ssl3_write_bytes, \
|
||||
ssl3_dispatch_alert, \
|
||||
ssl3_ctrl, \
|
||||
ssl3_ctx_ctrl, \
|
||||
ssl3_get_cipher_by_char, \
|
||||
ssl3_put_cipher_by_char, \
|
||||
ssl3_pending, \
|
||||
ssl3_num_ciphers, \
|
||||
ssl3_get_cipher, \
|
||||
tls1_default_timeout, \
|
||||
&enc_data, \
|
||||
ssl_undefined_void_function, \
|
||||
ssl3_callback_ctrl, \
|
||||
ssl3_ctx_callback_ctrl, \
|
||||
}; \
|
||||
return &func_name##_data; \
|
||||
}
|
||||
|
||||
# define IMPLEMENT_ssl3_meth_func(func_name, s_accept, s_connect) \
|
||||
const SSL_METHOD *func_name(void) \
|
||||
{ \
|
||||
static const SSL_METHOD func_name##_data= { \
|
||||
SSL3_VERSION, \
|
||||
SSL_METHOD_NO_FIPS | SSL_METHOD_NO_SUITEB, \
|
||||
SSL_OP_NO_SSLv3, \
|
||||
ssl3_new, \
|
||||
ssl3_clear, \
|
||||
ssl3_free, \
|
||||
s_accept, \
|
||||
s_connect, \
|
||||
ssl3_read, \
|
||||
ssl3_peek, \
|
||||
ssl3_write, \
|
||||
ssl3_shutdown, \
|
||||
ssl3_renegotiate, \
|
||||
ssl3_renegotiate_check, \
|
||||
ssl3_read_bytes, \
|
||||
ssl3_write_bytes, \
|
||||
ssl3_dispatch_alert, \
|
||||
ssl3_ctrl, \
|
||||
ssl3_ctx_ctrl, \
|
||||
ssl3_get_cipher_by_char, \
|
||||
ssl3_put_cipher_by_char, \
|
||||
ssl3_pending, \
|
||||
ssl3_num_ciphers, \
|
||||
ssl3_get_cipher, \
|
||||
ssl3_default_timeout, \
|
||||
&SSLv3_enc_data, \
|
||||
ssl_undefined_void_function, \
|
||||
ssl3_callback_ctrl, \
|
||||
ssl3_ctx_callback_ctrl, \
|
||||
}; \
|
||||
return &func_name##_data; \
|
||||
}
|
||||
|
||||
# define IMPLEMENT_dtls1_meth_func(version, flags, mask, func_name, s_accept, \
|
||||
s_connect, enc_data) \
|
||||
const SSL_METHOD *func_name(void) \
|
||||
{ \
|
||||
static const SSL_METHOD func_name##_data= { \
|
||||
version, \
|
||||
flags, \
|
||||
mask, \
|
||||
dtls1_new, \
|
||||
dtls1_clear, \
|
||||
dtls1_free, \
|
||||
s_accept, \
|
||||
s_connect, \
|
||||
ssl3_read, \
|
||||
ssl3_peek, \
|
||||
ssl3_write, \
|
||||
dtls1_shutdown, \
|
||||
ssl3_renegotiate, \
|
||||
ssl3_renegotiate_check, \
|
||||
dtls1_read_bytes, \
|
||||
dtls1_write_app_data_bytes, \
|
||||
dtls1_dispatch_alert, \
|
||||
dtls1_ctrl, \
|
||||
ssl3_ctx_ctrl, \
|
||||
ssl3_get_cipher_by_char, \
|
||||
ssl3_put_cipher_by_char, \
|
||||
ssl3_pending, \
|
||||
ssl3_num_ciphers, \
|
||||
ssl3_get_cipher, \
|
||||
dtls1_default_timeout, \
|
||||
&enc_data, \
|
||||
ssl_undefined_void_function, \
|
||||
ssl3_callback_ctrl, \
|
||||
ssl3_ctx_callback_ctrl, \
|
||||
}; \
|
||||
return &func_name##_data; \
|
||||
}
|
||||
|
||||
struct openssl_ssl_test_functions {
|
||||
int (*p_ssl_init_wbio_buffer) (SSL *s);
|
||||
int (*p_ssl3_setup_buffers) (SSL *s);
|
||||
};
|
||||
|
||||
const char *ssl_protocol_to_string(int version);
|
||||
|
||||
/* Returns true if certificate and private key for 'idx' are present */
|
||||
static ossl_inline int ssl_has_cert(const SSL *s, int idx)
|
||||
{
|
||||
if (idx < 0 || idx >= SSL_PKEY_NUM)
|
||||
return 0;
|
||||
return s->cert->pkeys[idx].x509 != NULL
|
||||
&& s->cert->pkeys[idx].privatekey != NULL;
|
||||
}
|
||||
|
||||
static ossl_inline void tls1_get_peer_groups(SSL *s, const uint16_t **pgroups,
|
||||
size_t *pgroupslen)
|
||||
{
|
||||
*pgroups = s->ext.peer_supportedgroups;
|
||||
*pgroupslen = s->ext.peer_supportedgroups_len;
|
||||
}
|
||||
|
||||
# ifndef OPENSSL_UNIT_TEST
|
||||
|
||||
__owur int ssl_read_internal(SSL *s, void *buf, size_t num, size_t *readbytes);
|
||||
__owur int ssl_write_internal(SSL *s, const void *buf, size_t num, size_t *written);
|
||||
void ssl_clear_cipher_ctx(SSL *s);
|
||||
int ssl_clear_bad_session(SSL *s);
|
||||
__owur CERT *ssl_cert_new(void);
|
||||
__owur CERT *ssl_cert_dup(CERT *cert);
|
||||
void ssl_cert_clear_certs(CERT *c);
|
||||
void ssl_cert_free(CERT *c);
|
||||
__owur int ssl_generate_session_id(SSL *s, SSL_SESSION *ss);
|
||||
__owur int ssl_get_new_session(SSL *s, int session);
|
||||
__owur SSL_SESSION *lookup_sess_in_cache(SSL *s, const unsigned char *sess_id,
|
||||
size_t sess_id_len);
|
||||
__owur int ssl_get_prev_session(SSL *s, CLIENTHELLO_MSG *hello);
|
||||
__owur SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket);
|
||||
__owur int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b);
|
||||
DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
|
||||
__owur int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
|
||||
const SSL_CIPHER *const *bp);
|
||||
__owur STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method,
|
||||
STACK_OF(SSL_CIPHER) *tls13_ciphersuites,
|
||||
STACK_OF(SSL_CIPHER) **cipher_list,
|
||||
STACK_OF(SSL_CIPHER) **cipher_list_by_id,
|
||||
const char *rule_str,
|
||||
CERT *c);
|
||||
__owur int ssl_cache_cipherlist(SSL *s, PACKET *cipher_suites, int sslv2format);
|
||||
__owur int bytes_to_cipher_list(SSL *s, PACKET *cipher_suites,
|
||||
STACK_OF(SSL_CIPHER) **skp,
|
||||
STACK_OF(SSL_CIPHER) **scsvs, int sslv2format,
|
||||
int fatal);
|
||||
void ssl_update_cache(SSL *s, int mode);
|
||||
__owur int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc,
|
||||
const EVP_MD **md, int *mac_pkey_type,
|
||||
size_t *mac_secret_size, SSL_COMP **comp,
|
||||
int use_etm);
|
||||
__owur int ssl_cipher_get_overhead(const SSL_CIPHER *c, size_t *mac_overhead,
|
||||
size_t *int_overhead, size_t *blocksize,
|
||||
size_t *ext_overhead);
|
||||
__owur int ssl_cert_is_disabled(size_t idx);
|
||||
__owur const SSL_CIPHER *ssl_get_cipher_by_char(SSL *ssl,
|
||||
const unsigned char *ptr,
|
||||
int all);
|
||||
__owur int ssl_cert_set0_chain(SSL *s, SSL_CTX *ctx, STACK_OF(X509) *chain);
|
||||
__owur int ssl_cert_set1_chain(SSL *s, SSL_CTX *ctx, STACK_OF(X509) *chain);
|
||||
__owur int ssl_cert_add0_chain_cert(SSL *s, SSL_CTX *ctx, X509 *x);
|
||||
__owur int ssl_cert_add1_chain_cert(SSL *s, SSL_CTX *ctx, X509 *x);
|
||||
__owur int ssl_cert_select_current(CERT *c, X509 *x);
|
||||
__owur int ssl_cert_set_current(CERT *c, long arg);
|
||||
void ssl_cert_set_cert_cb(CERT *c, int (*cb) (SSL *ssl, void *arg), void *arg);
|
||||
|
||||
__owur int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk);
|
||||
__owur int ssl_build_cert_chain(SSL *s, SSL_CTX *ctx, int flags);
|
||||
__owur int ssl_cert_set_cert_store(CERT *c, X509_STORE *store, int chain,
|
||||
int ref);
|
||||
|
||||
__owur int ssl_security(const SSL *s, int op, int bits, int nid, void *other);
|
||||
__owur int ssl_ctx_security(const SSL_CTX *ctx, int op, int bits, int nid,
|
||||
void *other);
|
||||
|
||||
__owur int ssl_cert_lookup_by_nid(int nid, size_t *pidx);
|
||||
__owur const SSL_CERT_LOOKUP *ssl_cert_lookup_by_pkey(const EVP_PKEY *pk,
|
||||
size_t *pidx);
|
||||
__owur const SSL_CERT_LOOKUP *ssl_cert_lookup_by_idx(size_t idx);
|
||||
|
||||
int ssl_undefined_function(SSL *s);
|
||||
__owur int ssl_undefined_void_function(void);
|
||||
__owur int ssl_undefined_const_function(const SSL *s);
|
||||
__owur int ssl_get_server_cert_serverinfo(SSL *s,
|
||||
const unsigned char **serverinfo,
|
||||
size_t *serverinfo_length);
|
||||
void ssl_set_masks(SSL *s);
|
||||
__owur STACK_OF(SSL_CIPHER) *ssl_get_ciphers_by_id(SSL *s);
|
||||
__owur int ssl_x509err2alert(int type);
|
||||
void ssl_sort_cipher_list(void);
|
||||
int ssl_load_ciphers(void);
|
||||
__owur int ssl_fill_hello_random(SSL *s, int server, unsigned char *field,
|
||||
size_t len, DOWNGRADE dgrd);
|
||||
__owur int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
|
||||
int free_pms);
|
||||
__owur EVP_PKEY *ssl_generate_pkey(EVP_PKEY *pm);
|
||||
__owur int ssl_derive(SSL *s, EVP_PKEY *privkey, EVP_PKEY *pubkey,
|
||||
int genmaster);
|
||||
__owur EVP_PKEY *ssl_dh_to_pkey(DH *dh);
|
||||
__owur unsigned int ssl_get_max_send_fragment(const SSL *ssl);
|
||||
__owur unsigned int ssl_get_split_send_fragment(const SSL *ssl);
|
||||
|
||||
__owur const SSL_CIPHER *ssl3_get_cipher_by_id(uint32_t id);
|
||||
__owur const SSL_CIPHER *ssl3_get_cipher_by_std_name(const char *stdname);
|
||||
__owur const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p);
|
||||
__owur int ssl3_put_cipher_by_char(const SSL_CIPHER *c, WPACKET *pkt,
|
||||
size_t *len);
|
||||
int ssl3_init_finished_mac(SSL *s);
|
||||
__owur int ssl3_setup_key_block(SSL *s);
|
||||
__owur int ssl3_change_cipher_state(SSL *s, int which);
|
||||
void ssl3_cleanup_key_block(SSL *s);
|
||||
__owur int ssl3_do_write(SSL *s, int type);
|
||||
int ssl3_send_alert(SSL *s, int level, int desc);
|
||||
__owur int ssl3_generate_master_secret(SSL *s, unsigned char *out,
|
||||
unsigned char *p, size_t len,
|
||||
size_t *secret_size);
|
||||
__owur int ssl3_get_req_cert_type(SSL *s, WPACKET *pkt);
|
||||
__owur int ssl3_num_ciphers(void);
|
||||
__owur const SSL_CIPHER *ssl3_get_cipher(unsigned int u);
|
||||
int ssl3_renegotiate(SSL *ssl);
|
||||
int ssl3_renegotiate_check(SSL *ssl, int initok);
|
||||
void ssl3_digest_master_key_set_params(const SSL_SESSION *session,
|
||||
OSSL_PARAM params[]);
|
||||
__owur int ssl3_dispatch_alert(SSL *s);
|
||||
__owur size_t ssl3_final_finish_mac(SSL *s, const char *sender, size_t slen,
|
||||
unsigned char *p);
|
||||
__owur int ssl3_finish_mac(SSL *s, const unsigned char *buf, size_t len);
|
||||
void ssl3_free_digest_list(SSL *s);
|
||||
__owur unsigned long ssl3_output_cert_chain(SSL *s, WPACKET *pkt,
|
||||
CERT_PKEY *cpk);
|
||||
__owur const SSL_CIPHER *ssl3_choose_cipher(SSL *ssl,
|
||||
STACK_OF(SSL_CIPHER) *clnt,
|
||||
STACK_OF(SSL_CIPHER) *srvr);
|
||||
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
||||
__owur int ssl3_new(SSL *s);
|
||||
void ssl3_free(SSL *s);
|
||||
__owur int ssl3_read(SSL *s, void *buf, size_t len, size_t *readbytes);
|
||||
__owur int ssl3_peek(SSL *s, void *buf, size_t len, size_t *readbytes);
|
||||
__owur int ssl3_write(SSL *s, const void *buf, size_t len, size_t *written);
|
||||
__owur int ssl3_shutdown(SSL *s);
|
||||
int ssl3_clear(SSL *s);
|
||||
__owur long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg);
|
||||
__owur long ssl3_ctx_ctrl(SSL_CTX *s, int cmd, long larg, void *parg);
|
||||
__owur long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp) (void));
|
||||
__owur long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp) (void));
|
||||
|
||||
__owur int ssl3_do_change_cipher_spec(SSL *ssl);
|
||||
__owur long ssl3_default_timeout(void);
|
||||
|
||||
__owur int ssl3_set_handshake_header(SSL *s, WPACKET *pkt, int htype);
|
||||
__owur int tls_close_construct_packet(SSL *s, WPACKET *pkt, int htype);
|
||||
__owur int tls_setup_handshake(SSL *s);
|
||||
__owur int dtls1_set_handshake_header(SSL *s, WPACKET *pkt, int htype);
|
||||
__owur int dtls1_close_construct_packet(SSL *s, WPACKET *pkt, int htype);
|
||||
__owur int ssl3_handshake_write(SSL *s);
|
||||
|
||||
__owur int ssl_allow_compression(SSL *s);
|
||||
|
||||
__owur int ssl_version_supported(const SSL *s, int version,
|
||||
const SSL_METHOD **meth);
|
||||
|
||||
__owur int ssl_set_client_hello_version(SSL *s);
|
||||
__owur int ssl_check_version_downgrade(SSL *s);
|
||||
__owur int ssl_set_version_bound(int method_version, int version, int *bound);
|
||||
__owur int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello,
|
||||
DOWNGRADE *dgrd);
|
||||
__owur int ssl_choose_client_version(SSL *s, int version,
|
||||
RAW_EXTENSION *extensions);
|
||||
__owur int ssl_get_min_max_version(const SSL *s, int *min_version,
|
||||
int *max_version, int *real_max);
|
||||
|
||||
__owur long tls1_default_timeout(void);
|
||||
__owur int dtls1_do_write(SSL *s, int type);
|
||||
void dtls1_set_message_header(SSL *s,
|
||||
unsigned char mt,
|
||||
size_t len,
|
||||
size_t frag_off, size_t frag_len);
|
||||
|
||||
int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf_, size_t len,
|
||||
size_t *written);
|
||||
|
||||
__owur int dtls1_read_failed(SSL *s, int code);
|
||||
__owur int dtls1_buffer_message(SSL *s, int ccs);
|
||||
__owur int dtls1_retransmit_message(SSL *s, unsigned short seq, int *found);
|
||||
__owur int dtls1_get_queue_priority(unsigned short seq, int is_ccs);
|
||||
int dtls1_retransmit_buffered_messages(SSL *s);
|
||||
void dtls1_clear_received_buffer(SSL *s);
|
||||
void dtls1_clear_sent_buffer(SSL *s);
|
||||
void dtls1_get_message_header(unsigned char *data,
|
||||
struct hm_header_st *msg_hdr);
|
||||
__owur long dtls1_default_timeout(void);
|
||||
__owur struct timeval *dtls1_get_timeout(SSL *s, struct timeval *timeleft);
|
||||
__owur int dtls1_check_timeout_num(SSL *s);
|
||||
__owur int dtls1_handle_timeout(SSL *s);
|
||||
void dtls1_start_timer(SSL *s);
|
||||
void dtls1_stop_timer(SSL *s);
|
||||
__owur int dtls1_is_timer_expired(SSL *s);
|
||||
void dtls1_double_timeout(SSL *s);
|
||||
__owur int dtls_raw_hello_verify_request(WPACKET *pkt, unsigned char *cookie,
|
||||
size_t cookie_len);
|
||||
__owur size_t dtls1_min_mtu(SSL *s);
|
||||
void dtls1_hm_fragment_free(hm_fragment *frag);
|
||||
__owur int dtls1_query_mtu(SSL *s);
|
||||
|
||||
__owur int tls1_new(SSL *s);
|
||||
void tls1_free(SSL *s);
|
||||
int tls1_clear(SSL *s);
|
||||
|
||||
__owur int dtls1_new(SSL *s);
|
||||
void dtls1_free(SSL *s);
|
||||
int dtls1_clear(SSL *s);
|
||||
long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg);
|
||||
__owur int dtls1_shutdown(SSL *s);
|
||||
|
||||
__owur int dtls1_dispatch_alert(SSL *s);
|
||||
|
||||
__owur int ssl_init_wbio_buffer(SSL *s);
|
||||
int ssl_free_wbio_buffer(SSL *s);
|
||||
|
||||
__owur int tls1_change_cipher_state(SSL *s, int which);
|
||||
__owur int tls1_setup_key_block(SSL *s);
|
||||
__owur size_t tls1_final_finish_mac(SSL *s, const char *str, size_t slen,
|
||||
unsigned char *p);
|
||||
__owur int tls1_generate_master_secret(SSL *s, unsigned char *out,
|
||||
unsigned char *p, size_t len,
|
||||
size_t *secret_size);
|
||||
__owur int tls13_setup_key_block(SSL *s);
|
||||
__owur size_t tls13_final_finish_mac(SSL *s, const char *str, size_t slen,
|
||||
unsigned char *p);
|
||||
__owur int tls13_change_cipher_state(SSL *s, int which);
|
||||
__owur int tls13_update_key(SSL *s, int send);
|
||||
__owur int tls13_hkdf_expand(SSL *s, const EVP_MD *md,
|
||||
const unsigned char *secret,
|
||||
const unsigned char *label, size_t labellen,
|
||||
const unsigned char *data, size_t datalen,
|
||||
unsigned char *out, size_t outlen, int fatal);
|
||||
__owur int tls13_derive_key(SSL *s, const EVP_MD *md,
|
||||
const unsigned char *secret, unsigned char *key,
|
||||
size_t keylen);
|
||||
__owur int tls13_derive_iv(SSL *s, const EVP_MD *md,
|
||||
const unsigned char *secret, unsigned char *iv,
|
||||
size_t ivlen);
|
||||
__owur int tls13_derive_finishedkey(SSL *s, const EVP_MD *md,
|
||||
const unsigned char *secret,
|
||||
unsigned char *fin, size_t finlen);
|
||||
int tls13_generate_secret(SSL *s, const EVP_MD *md,
|
||||
const unsigned char *prevsecret,
|
||||
const unsigned char *insecret,
|
||||
size_t insecretlen,
|
||||
unsigned char *outsecret);
|
||||
__owur int tls13_generate_handshake_secret(SSL *s,
|
||||
const unsigned char *insecret,
|
||||
size_t insecretlen);
|
||||
__owur int tls13_generate_master_secret(SSL *s, unsigned char *out,
|
||||
unsigned char *prev, size_t prevlen,
|
||||
size_t *secret_size);
|
||||
__owur int tls1_export_keying_material(SSL *s, unsigned char *out, size_t olen,
|
||||
const char *label, size_t llen,
|
||||
const unsigned char *p, size_t plen,
|
||||
int use_context);
|
||||
__owur int tls13_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);
|
||||
__owur int tls13_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);
|
||||
__owur int tls1_alert_code(int code);
|
||||
__owur int tls13_alert_code(int code);
|
||||
__owur int ssl3_alert_code(int code);
|
||||
|
||||
# ifndef OPENSSL_NO_EC
|
||||
__owur int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s);
|
||||
# endif
|
||||
|
||||
SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n);
|
||||
|
||||
__owur const TLS_GROUP_INFO *tls1_group_id_lookup(uint16_t curve_id);
|
||||
__owur int tls1_check_group_id(SSL *s, uint16_t group_id, int check_own_curves);
|
||||
__owur uint16_t tls1_shared_group(SSL *s, int nmatch);
|
||||
__owur int tls1_set_groups(uint16_t **pext, size_t *pextlen,
|
||||
int *curves, size_t ncurves);
|
||||
__owur int tls1_set_groups_list(uint16_t **pext, size_t *pextlen,
|
||||
const char *str);
|
||||
__owur EVP_PKEY *ssl_generate_pkey_group(SSL *s, uint16_t id);
|
||||
__owur int tls_valid_group(SSL *s, uint16_t group_id, int version);
|
||||
__owur EVP_PKEY *ssl_generate_param_group(uint16_t id);
|
||||
# ifndef OPENSSL_NO_EC
|
||||
void tls1_get_formatlist(SSL *s, const unsigned char **pformats,
|
||||
size_t *num_formats);
|
||||
__owur int tls1_check_ec_tmp_key(SSL *s, unsigned long id);
|
||||
# endif /* OPENSSL_NO_EC */
|
||||
|
||||
__owur int tls_group_allowed(SSL *s, uint16_t curve, int op);
|
||||
void tls1_get_supported_groups(SSL *s, const uint16_t **pgroups,
|
||||
size_t *pgroupslen);
|
||||
|
||||
__owur int tls1_set_server_sigalgs(SSL *s);
|
||||
|
||||
__owur SSL_TICKET_STATUS tls_get_ticket_from_client(SSL *s, CLIENTHELLO_MSG *hello,
|
||||
SSL_SESSION **ret);
|
||||
__owur SSL_TICKET_STATUS tls_decrypt_ticket(SSL *s, const unsigned char *etick,
|
||||
size_t eticklen,
|
||||
const unsigned char *sess_id,
|
||||
size_t sesslen, SSL_SESSION **psess);
|
||||
|
||||
__owur int tls_use_ticket(SSL *s);
|
||||
|
||||
void ssl_set_sig_mask(uint32_t *pmask_a, SSL *s, int op);
|
||||
|
||||
__owur int tls1_set_sigalgs_list(CERT *c, const char *str, int client);
|
||||
__owur int tls1_set_raw_sigalgs(CERT *c, const uint16_t *psigs, size_t salglen,
|
||||
int client);
|
||||
__owur int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen,
|
||||
int client);
|
||||
int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
|
||||
int idx);
|
||||
void tls1_set_cert_validity(SSL *s);
|
||||
|
||||
# ifndef OPENSSL_NO_CT
|
||||
__owur int ssl_validate_ct(SSL *s);
|
||||
# endif
|
||||
|
||||
# ifndef OPENSSL_NO_DH
|
||||
__owur DH *ssl_get_auto_dh(SSL *s);
|
||||
# endif
|
||||
|
||||
__owur int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee);
|
||||
__owur int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *ex,
|
||||
int vfy);
|
||||
|
||||
int tls_choose_sigalg(SSL *s, int fatalerrs);
|
||||
|
||||
__owur EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md);
|
||||
void ssl_clear_hash_ctx(EVP_MD_CTX **hash);
|
||||
__owur long ssl_get_algorithm2(SSL *s);
|
||||
__owur int tls12_copy_sigalgs(SSL *s, WPACKET *pkt,
|
||||
const uint16_t *psig, size_t psiglen);
|
||||
__owur int tls1_save_u16(PACKET *pkt, uint16_t **pdest, size_t *pdestlen);
|
||||
__owur int tls1_save_sigalgs(SSL *s, PACKET *pkt, int cert);
|
||||
__owur int tls1_process_sigalgs(SSL *s);
|
||||
__owur int tls1_set_peer_legacy_sigalg(SSL *s, const EVP_PKEY *pkey);
|
||||
__owur int tls1_lookup_md(const SIGALG_LOOKUP *lu, const EVP_MD **pmd);
|
||||
__owur size_t tls12_get_psigalgs(SSL *s, int sent, const uint16_t **psigs);
|
||||
# ifndef OPENSSL_NO_EC
|
||||
__owur int tls_check_sigalg_curve(const SSL *s, int curve);
|
||||
# endif
|
||||
__owur int tls12_check_peer_sigalg(SSL *s, uint16_t, EVP_PKEY *pkey);
|
||||
__owur int ssl_set_client_disabled(SSL *s);
|
||||
__owur int ssl_cipher_disabled(SSL *s, const SSL_CIPHER *c, int op, int echde);
|
||||
|
||||
__owur int ssl_handshake_hash(SSL *s, unsigned char *out, size_t outlen,
|
||||
size_t *hashlen);
|
||||
__owur const EVP_MD *ssl_md(int idx);
|
||||
__owur const EVP_MD *ssl_handshake_md(SSL *s);
|
||||
__owur const EVP_MD *ssl_prf_md(SSL *s);
|
||||
|
||||
/*
|
||||
* ssl_log_rsa_client_key_exchange logs |premaster| to the SSL_CTX associated
|
||||
* with |ssl|, if logging is enabled. It returns one on success and zero on
|
||||
* failure. The entry is identified by the first 8 bytes of
|
||||
* |encrypted_premaster|.
|
||||
*/
|
||||
__owur int ssl_log_rsa_client_key_exchange(SSL *ssl,
|
||||
const uint8_t *encrypted_premaster,
|
||||
size_t encrypted_premaster_len,
|
||||
const uint8_t *premaster,
|
||||
size_t premaster_len);
|
||||
|
||||
/*
|
||||
* ssl_log_secret logs |secret| to the SSL_CTX associated with |ssl|, if
|
||||
* logging is available. It returns one on success and zero on failure. It tags
|
||||
* the entry with |label|.
|
||||
*/
|
||||
__owur int ssl_log_secret(SSL *ssl, const char *label,
|
||||
const uint8_t *secret, size_t secret_len);
|
||||
|
||||
#define MASTER_SECRET_LABEL "CLIENT_RANDOM"
|
||||
#define CLIENT_EARLY_LABEL "CLIENT_EARLY_TRAFFIC_SECRET"
|
||||
#define CLIENT_HANDSHAKE_LABEL "CLIENT_HANDSHAKE_TRAFFIC_SECRET"
|
||||
#define SERVER_HANDSHAKE_LABEL "SERVER_HANDSHAKE_TRAFFIC_SECRET"
|
||||
#define CLIENT_APPLICATION_LABEL "CLIENT_TRAFFIC_SECRET_0"
|
||||
#define SERVER_APPLICATION_LABEL "SERVER_TRAFFIC_SECRET_0"
|
||||
#define EARLY_EXPORTER_SECRET_LABEL "EARLY_EXPORTER_SECRET"
|
||||
#define EXPORTER_SECRET_LABEL "EXPORTER_SECRET"
|
||||
|
||||
/* s3_cbc.c */
|
||||
__owur char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx);
|
||||
__owur int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx,
|
||||
unsigned char *md_out,
|
||||
size_t *md_out_size,
|
||||
const unsigned char header[13],
|
||||
const unsigned char *data,
|
||||
size_t data_plus_mac_size,
|
||||
size_t data_plus_mac_plus_padding_size,
|
||||
const unsigned char *mac_secret,
|
||||
size_t mac_secret_length, char is_sslv3);
|
||||
|
||||
__owur int srp_generate_server_master_secret(SSL *s);
|
||||
__owur int srp_generate_client_master_secret(SSL *s);
|
||||
__owur int srp_verify_server_param(SSL *s);
|
||||
|
||||
/* statem/statem_srvr.c */
|
||||
|
||||
__owur int send_certificate_request(SSL *s);
|
||||
|
||||
/* statem/extensions_cust.c */
|
||||
|
||||
custom_ext_method *custom_ext_find(const custom_ext_methods *exts,
|
||||
ENDPOINT role, unsigned int ext_type,
|
||||
size_t *idx);
|
||||
|
||||
void custom_ext_init(custom_ext_methods *meths);
|
||||
|
||||
__owur int custom_ext_parse(SSL *s, unsigned int context, unsigned int ext_type,
|
||||
const unsigned char *ext_data, size_t ext_size,
|
||||
X509 *x, size_t chainidx);
|
||||
__owur int custom_ext_add(SSL *s, int context, WPACKET *pkt, X509 *x,
|
||||
size_t chainidx, int maxversion);
|
||||
|
||||
__owur int custom_exts_copy(custom_ext_methods *dst,
|
||||
const custom_ext_methods *src);
|
||||
__owur int custom_exts_copy_flags(custom_ext_methods *dst,
|
||||
const custom_ext_methods *src);
|
||||
void custom_exts_free(custom_ext_methods *exts);
|
||||
|
||||
void ssl_comp_free_compression_methods_int(void);
|
||||
|
||||
/* ssl_mcnf.c */
|
||||
void ssl_ctx_system_config(SSL_CTX *ctx);
|
||||
|
||||
# else /* OPENSSL_UNIT_TEST */
|
||||
|
||||
# define ssl_init_wbio_buffer SSL_test_functions()->p_ssl_init_wbio_buffer
|
||||
# define ssl3_setup_buffers SSL_test_functions()->p_ssl3_setup_buffers
|
||||
|
||||
# endif
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
--- ssl/ssl_locl.h
|
||||
+++ ssl/ssl_locl.h
|
||||
@@ -1358,7 +1397,7 @@
|
||||
/* Per connection DANE state */
|
||||
SSL_DANE dane;
|
||||
/* crypto */
|
||||
- STACK_OF(SSL_CIPHER) *cipher_list;
|
||||
+ struct ssl_cipher_preference_list_st *cipher_list;
|
||||
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
||||
/* TLSv1.3 specific ciphersuites */
|
||||
STACK_OF(SSL_CIPHER) *tls13_ciphersuites;
|
||||
+1280
@@ -0,0 +1,1280 @@
|
||||
/*
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 2005 Nokia. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/engine.h>
|
||||
#include "internal/refcount.h"
|
||||
#include "internal/cryptlib.h"
|
||||
#include "ssl_locl.h"
|
||||
#include "statem/statem_locl.h"
|
||||
|
||||
static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s);
|
||||
static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s);
|
||||
static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck);
|
||||
|
||||
/*
|
||||
* SSL_get_session() and SSL_get1_session() are problematic in TLS1.3 because,
|
||||
* unlike in earlier protocol versions, the session ticket may not have been
|
||||
* sent yet even though a handshake has finished. The session ticket data could
|
||||
* come in sometime later...or even change if multiple session ticket messages
|
||||
* are sent from the server. The preferred way for applications to obtain
|
||||
* a resumable session is to use SSL_CTX_sess_set_new_cb().
|
||||
*/
|
||||
|
||||
SSL_SESSION *SSL_get_session(const SSL *ssl)
|
||||
/* aka SSL_get0_session; gets 0 objects, just returns a copy of the pointer */
|
||||
{
|
||||
return ssl->session;
|
||||
}
|
||||
|
||||
SSL_SESSION *SSL_get1_session(SSL *ssl)
|
||||
/* variant of SSL_get_session: caller really gets something */
|
||||
{
|
||||
SSL_SESSION *sess;
|
||||
/*
|
||||
* Need to lock this all up rather than just use CRYPTO_add so that
|
||||
* somebody doesn't free ssl->session between when we check it's non-null
|
||||
* and when we up the reference count.
|
||||
*/
|
||||
CRYPTO_THREAD_read_lock(ssl->lock);
|
||||
sess = ssl->session;
|
||||
if (sess)
|
||||
SSL_SESSION_up_ref(sess);
|
||||
CRYPTO_THREAD_unlock(ssl->lock);
|
||||
return sess;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set_ex_data(SSL_SESSION *s, int idx, void *arg)
|
||||
{
|
||||
return CRYPTO_set_ex_data(&s->ex_data, idx, arg);
|
||||
}
|
||||
|
||||
void *SSL_SESSION_get_ex_data(const SSL_SESSION *s, int idx)
|
||||
{
|
||||
return CRYPTO_get_ex_data(&s->ex_data, idx);
|
||||
}
|
||||
|
||||
SSL_SESSION *SSL_SESSION_new(void)
|
||||
{
|
||||
SSL_SESSION *ss;
|
||||
|
||||
if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL))
|
||||
return NULL;
|
||||
|
||||
ss = OPENSSL_zalloc(sizeof(*ss));
|
||||
if (ss == NULL) {
|
||||
SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ss->verify_result = 1; /* avoid 0 (= X509_V_OK) just in case */
|
||||
ss->references = 1;
|
||||
ss->timeout = 60 * 5 + 4; /* 5 minute timeout by default */
|
||||
ss->time = (unsigned long)time(NULL);
|
||||
ss->lock = CRYPTO_THREAD_lock_new();
|
||||
if (ss->lock == NULL) {
|
||||
SSLerr(SSL_F_SSL_SESSION_NEW, ERR_R_MALLOC_FAILURE);
|
||||
OPENSSL_free(ss);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data)) {
|
||||
CRYPTO_THREAD_lock_free(ss->lock);
|
||||
OPENSSL_free(ss);
|
||||
return NULL;
|
||||
}
|
||||
return ss;
|
||||
}
|
||||
|
||||
SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src)
|
||||
{
|
||||
return ssl_session_dup(src, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a new SSL_SESSION and duplicate the contents of |src| into it. If
|
||||
* ticket == 0 then no ticket information is duplicated, otherwise it is.
|
||||
*/
|
||||
SSL_SESSION *ssl_session_dup(const SSL_SESSION *src, int ticket)
|
||||
{
|
||||
SSL_SESSION *dest;
|
||||
|
||||
dest = OPENSSL_malloc(sizeof(*src));
|
||||
if (dest == NULL) {
|
||||
goto err;
|
||||
}
|
||||
memcpy(dest, src, sizeof(*dest));
|
||||
|
||||
/*
|
||||
* Set the various pointers to NULL so that we can call SSL_SESSION_free in
|
||||
* the case of an error whilst halfway through constructing dest
|
||||
*/
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
dest->psk_identity_hint = NULL;
|
||||
dest->psk_identity = NULL;
|
||||
#endif
|
||||
dest->ext.hostname = NULL;
|
||||
dest->ext.tick = NULL;
|
||||
dest->ext.alpn_selected = NULL;
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
dest->srp_username = NULL;
|
||||
#endif
|
||||
dest->peer_chain = NULL;
|
||||
dest->peer = NULL;
|
||||
dest->ticket_appdata = NULL;
|
||||
memset(&dest->ex_data, 0, sizeof(dest->ex_data));
|
||||
|
||||
/* We deliberately don't copy the prev and next pointers */
|
||||
dest->prev = NULL;
|
||||
dest->next = NULL;
|
||||
|
||||
dest->references = 1;
|
||||
|
||||
dest->lock = CRYPTO_THREAD_lock_new();
|
||||
if (dest->lock == NULL)
|
||||
goto err;
|
||||
|
||||
if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, dest, &dest->ex_data))
|
||||
goto err;
|
||||
|
||||
if (src->peer != NULL) {
|
||||
if (!X509_up_ref(src->peer))
|
||||
goto err;
|
||||
dest->peer = src->peer;
|
||||
}
|
||||
|
||||
if (src->peer_chain != NULL) {
|
||||
dest->peer_chain = X509_chain_up_ref(src->peer_chain);
|
||||
if (dest->peer_chain == NULL)
|
||||
goto err;
|
||||
}
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
if (src->psk_identity_hint) {
|
||||
dest->psk_identity_hint = OPENSSL_strdup(src->psk_identity_hint);
|
||||
if (dest->psk_identity_hint == NULL) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (src->psk_identity) {
|
||||
dest->psk_identity = OPENSSL_strdup(src->psk_identity);
|
||||
if (dest->psk_identity == NULL) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL_SESSION,
|
||||
&dest->ex_data, &src->ex_data)) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (src->ext.hostname) {
|
||||
dest->ext.hostname = OPENSSL_strdup(src->ext.hostname);
|
||||
if (dest->ext.hostname == NULL) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (ticket != 0 && src->ext.tick != NULL) {
|
||||
dest->ext.tick =
|
||||
OPENSSL_memdup(src->ext.tick, src->ext.ticklen);
|
||||
if (dest->ext.tick == NULL)
|
||||
goto err;
|
||||
} else {
|
||||
dest->ext.tick_lifetime_hint = 0;
|
||||
dest->ext.ticklen = 0;
|
||||
}
|
||||
|
||||
if (src->ext.alpn_selected != NULL) {
|
||||
dest->ext.alpn_selected = OPENSSL_memdup(src->ext.alpn_selected,
|
||||
src->ext.alpn_selected_len);
|
||||
if (dest->ext.alpn_selected == NULL)
|
||||
goto err;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
if (src->srp_username) {
|
||||
dest->srp_username = OPENSSL_strdup(src->srp_username);
|
||||
if (dest->srp_username == NULL) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (src->ticket_appdata != NULL) {
|
||||
dest->ticket_appdata =
|
||||
OPENSSL_memdup(src->ticket_appdata, src->ticket_appdata_len);
|
||||
if (dest->ticket_appdata == NULL)
|
||||
goto err;
|
||||
}
|
||||
|
||||
return dest;
|
||||
err:
|
||||
SSLerr(SSL_F_SSL_SESSION_DUP, ERR_R_MALLOC_FAILURE);
|
||||
SSL_SESSION_free(dest);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len)
|
||||
{
|
||||
if (len)
|
||||
*len = (unsigned int)s->session_id_length;
|
||||
return s->session_id;
|
||||
}
|
||||
const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s,
|
||||
unsigned int *len)
|
||||
{
|
||||
if (len != NULL)
|
||||
*len = (unsigned int)s->sid_ctx_length;
|
||||
return s->sid_ctx;
|
||||
}
|
||||
|
||||
unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s)
|
||||
{
|
||||
return s->compress_meth;
|
||||
}
|
||||
|
||||
/*
|
||||
* SSLv3/TLSv1 has 32 bytes (256 bits) of session ID space. As such, filling
|
||||
* the ID with random junk repeatedly until we have no conflict is going to
|
||||
* complete in one iteration pretty much "most" of the time (btw:
|
||||
* understatement). So, if it takes us 10 iterations and we still can't avoid
|
||||
* a conflict - well that's a reasonable point to call it quits. Either the
|
||||
* RAND code is broken or someone is trying to open roughly very close to
|
||||
* 2^256 SSL sessions to our server. How you might store that many sessions
|
||||
* is perhaps a more interesting question ...
|
||||
*/
|
||||
|
||||
#define MAX_SESS_ID_ATTEMPTS 10
|
||||
static int def_generate_session_id(SSL *ssl, unsigned char *id,
|
||||
unsigned int *id_len)
|
||||
{
|
||||
unsigned int retry = 0;
|
||||
do
|
||||
if (RAND_bytes(id, *id_len) <= 0)
|
||||
return 0;
|
||||
while (SSL_has_matching_session_id(ssl, id, *id_len) &&
|
||||
(++retry < MAX_SESS_ID_ATTEMPTS)) ;
|
||||
if (retry < MAX_SESS_ID_ATTEMPTS)
|
||||
return 1;
|
||||
/* else - woops a session_id match */
|
||||
/*
|
||||
* XXX We should also check the external cache -- but the probability of
|
||||
* a collision is negligible, and we could not prevent the concurrent
|
||||
* creation of sessions with identical IDs since we currently don't have
|
||||
* means to atomically check whether a session ID already exists and make
|
||||
* a reservation for it if it does not (this problem applies to the
|
||||
* internal cache as well).
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ssl_generate_session_id(SSL *s, SSL_SESSION *ss)
|
||||
{
|
||||
unsigned int tmp;
|
||||
GEN_SESSION_CB cb = def_generate_session_id;
|
||||
|
||||
switch (s->version) {
|
||||
case SSL3_VERSION:
|
||||
case TLS1_VERSION:
|
||||
case TLS1_1_VERSION:
|
||||
case TLS1_2_VERSION:
|
||||
case TLS1_3_VERSION:
|
||||
case DTLS1_BAD_VER:
|
||||
case DTLS1_VERSION:
|
||||
case DTLS1_2_VERSION:
|
||||
ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
|
||||
break;
|
||||
default:
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID,
|
||||
SSL_R_UNSUPPORTED_SSL_VERSION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-
|
||||
* If RFC5077 ticket, use empty session ID (as server).
|
||||
* Note that:
|
||||
* (a) ssl_get_prev_session() does lookahead into the
|
||||
* ClientHello extensions to find the session ticket.
|
||||
* When ssl_get_prev_session() fails, statem_srvr.c calls
|
||||
* ssl_get_new_session() in tls_process_client_hello().
|
||||
* At that point, it has not yet parsed the extensions,
|
||||
* however, because of the lookahead, it already knows
|
||||
* whether a ticket is expected or not.
|
||||
*
|
||||
* (b) statem_clnt.c calls ssl_get_new_session() before parsing
|
||||
* ServerHello extensions, and before recording the session
|
||||
* ID received from the server, so this block is a noop.
|
||||
*/
|
||||
if (s->ext.ticket_expected) {
|
||||
ss->session_id_length = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Choose which callback will set the session ID */
|
||||
CRYPTO_THREAD_read_lock(s->lock);
|
||||
CRYPTO_THREAD_read_lock(s->session_ctx->lock);
|
||||
if (s->generate_session_id)
|
||||
cb = s->generate_session_id;
|
||||
else if (s->session_ctx->generate_session_id)
|
||||
cb = s->session_ctx->generate_session_id;
|
||||
CRYPTO_THREAD_unlock(s->session_ctx->lock);
|
||||
CRYPTO_THREAD_unlock(s->lock);
|
||||
/* Choose a session ID */
|
||||
memset(ss->session_id, 0, ss->session_id_length);
|
||||
tmp = (int)ss->session_id_length;
|
||||
if (!cb(s, ss->session_id, &tmp)) {
|
||||
/* The callback failed */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID,
|
||||
SSL_R_SSL_SESSION_ID_CALLBACK_FAILED);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Don't allow the callback to set the session length to zero. nor
|
||||
* set it higher than it was.
|
||||
*/
|
||||
if (tmp == 0 || tmp > ss->session_id_length) {
|
||||
/* The callback set an illegal length */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID,
|
||||
SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
ss->session_id_length = tmp;
|
||||
/* Finally, check for a conflict */
|
||||
if (SSL_has_matching_session_id(s, ss->session_id,
|
||||
(unsigned int)ss->session_id_length)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GENERATE_SESSION_ID,
|
||||
SSL_R_SSL_SESSION_ID_CONFLICT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ssl_get_new_session(SSL *s, int session)
|
||||
{
|
||||
/* This gets used by clients and servers. */
|
||||
|
||||
SSL_SESSION *ss = NULL;
|
||||
|
||||
if ((ss = SSL_SESSION_new()) == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_NEW_SESSION,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* If the context has a default timeout, use it */
|
||||
if (s->session_ctx->session_timeout == 0)
|
||||
ss->timeout = SSL_get_default_timeout(s);
|
||||
else
|
||||
ss->timeout = s->session_ctx->session_timeout;
|
||||
|
||||
SSL_SESSION_free(s->session);
|
||||
s->session = NULL;
|
||||
|
||||
if (session) {
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
/*
|
||||
* We generate the session id while constructing the
|
||||
* NewSessionTicket in TLSv1.3.
|
||||
*/
|
||||
ss->session_id_length = 0;
|
||||
} else if (!ssl_generate_session_id(s, ss)) {
|
||||
/* SSLfatal() already called */
|
||||
SSL_SESSION_free(ss);
|
||||
return 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
ss->session_id_length = 0;
|
||||
}
|
||||
|
||||
if (s->sid_ctx_length > sizeof(ss->sid_ctx)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_NEW_SESSION,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
SSL_SESSION_free(ss);
|
||||
return 0;
|
||||
}
|
||||
memcpy(ss->sid_ctx, s->sid_ctx, s->sid_ctx_length);
|
||||
ss->sid_ctx_length = s->sid_ctx_length;
|
||||
s->session = ss;
|
||||
ss->ssl_version = s->version;
|
||||
ss->verify_result = X509_V_OK;
|
||||
|
||||
/* If client supports extended master secret set it in session */
|
||||
if (s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS)
|
||||
ss->flags |= SSL_SESS_FLAG_EXTMS;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
SSL_SESSION *lookup_sess_in_cache(SSL *s, const unsigned char *sess_id,
|
||||
size_t sess_id_len)
|
||||
{
|
||||
SSL_SESSION *ret = NULL;
|
||||
|
||||
if ((s->session_ctx->session_cache_mode
|
||||
& SSL_SESS_CACHE_NO_INTERNAL_LOOKUP) == 0) {
|
||||
SSL_SESSION data;
|
||||
|
||||
data.ssl_version = s->version;
|
||||
if (!ossl_assert(sess_id_len <= SSL_MAX_SSL_SESSION_ID_LENGTH))
|
||||
return NULL;
|
||||
|
||||
memcpy(data.session_id, sess_id, sess_id_len);
|
||||
data.session_id_length = sess_id_len;
|
||||
|
||||
CRYPTO_THREAD_read_lock(s->session_ctx->lock);
|
||||
ret = lh_SSL_SESSION_retrieve(s->session_ctx->sessions, &data);
|
||||
if (ret != NULL) {
|
||||
/* don't allow other threads to steal it: */
|
||||
SSL_SESSION_up_ref(ret);
|
||||
}
|
||||
CRYPTO_THREAD_unlock(s->session_ctx->lock);
|
||||
if (ret == NULL)
|
||||
tsan_counter(&s->session_ctx->stats.sess_miss);
|
||||
}
|
||||
|
||||
if (ret == NULL && s->session_ctx->get_session_cb != NULL) {
|
||||
int copy = 1;
|
||||
|
||||
ret = s->session_ctx->get_session_cb(s, sess_id, sess_id_len, ©);
|
||||
|
||||
if (ret != NULL) {
|
||||
tsan_counter(&s->session_ctx->stats.sess_cb_hit);
|
||||
|
||||
/*
|
||||
* Increment reference count now if the session callback asks us
|
||||
* to do so (note that if the session structures returned by the
|
||||
* callback are shared between threads, it must handle the
|
||||
* reference count itself [i.e. copy == 0], or things won't be
|
||||
* thread-safe).
|
||||
*/
|
||||
if (copy)
|
||||
SSL_SESSION_up_ref(ret);
|
||||
|
||||
/*
|
||||
* Add the externally cached session to the internal cache as
|
||||
* well if and only if we are supposed to.
|
||||
*/
|
||||
if ((s->session_ctx->session_cache_mode &
|
||||
SSL_SESS_CACHE_NO_INTERNAL_STORE) == 0) {
|
||||
/*
|
||||
* Either return value of SSL_CTX_add_session should not
|
||||
* interrupt the session resumption process. The return
|
||||
* value is intentionally ignored.
|
||||
*/
|
||||
(void)SSL_CTX_add_session(s->session_ctx, ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*-
|
||||
* ssl_get_prev attempts to find an SSL_SESSION to be used to resume this
|
||||
* connection. It is only called by servers.
|
||||
*
|
||||
* hello: The parsed ClientHello data
|
||||
*
|
||||
* Returns:
|
||||
* -1: fatal error
|
||||
* 0: no session found
|
||||
* 1: a session may have been found.
|
||||
*
|
||||
* Side effects:
|
||||
* - If a session is found then s->session is pointed at it (after freeing an
|
||||
* existing session if need be) and s->verify_result is set from the session.
|
||||
* - Both for new and resumed sessions, s->ext.ticket_expected is set to 1
|
||||
* if the server should issue a new session ticket (to 0 otherwise).
|
||||
*/
|
||||
int ssl_get_prev_session(SSL *s, CLIENTHELLO_MSG *hello)
|
||||
{
|
||||
/* This is used only by servers. */
|
||||
|
||||
SSL_SESSION *ret = NULL;
|
||||
int fatal = 0;
|
||||
int try_session_cache = 0;
|
||||
SSL_TICKET_STATUS r;
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
/*
|
||||
* By default we will send a new ticket. This can be overridden in the
|
||||
* ticket processing.
|
||||
*/
|
||||
s->ext.ticket_expected = 1;
|
||||
if (!tls_parse_extension(s, TLSEXT_IDX_psk_kex_modes,
|
||||
SSL_EXT_CLIENT_HELLO, hello->pre_proc_exts,
|
||||
NULL, 0)
|
||||
|| !tls_parse_extension(s, TLSEXT_IDX_psk, SSL_EXT_CLIENT_HELLO,
|
||||
hello->pre_proc_exts, NULL, 0))
|
||||
return -1;
|
||||
|
||||
ret = s->session;
|
||||
} else {
|
||||
/* sets s->ext.ticket_expected */
|
||||
r = tls_get_ticket_from_client(s, hello, &ret);
|
||||
switch (r) {
|
||||
case SSL_TICKET_FATAL_ERR_MALLOC:
|
||||
case SSL_TICKET_FATAL_ERR_OTHER:
|
||||
fatal = 1;
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_PREV_SESSION,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
case SSL_TICKET_NONE:
|
||||
case SSL_TICKET_EMPTY:
|
||||
if (hello->session_id_len > 0) {
|
||||
try_session_cache = 1;
|
||||
ret = lookup_sess_in_cache(s, hello->session_id,
|
||||
hello->session_id_len);
|
||||
}
|
||||
break;
|
||||
case SSL_TICKET_NO_DECRYPT:
|
||||
case SSL_TICKET_SUCCESS:
|
||||
case SSL_TICKET_SUCCESS_RENEW:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == NULL)
|
||||
goto err;
|
||||
|
||||
/* Now ret is non-NULL and we own one of its reference counts. */
|
||||
|
||||
/* Check TLS version consistency */
|
||||
if (ret->ssl_version != s->version)
|
||||
goto err;
|
||||
|
||||
if (ret->sid_ctx_length != s->sid_ctx_length
|
||||
|| memcmp(ret->sid_ctx, s->sid_ctx, ret->sid_ctx_length)) {
|
||||
/*
|
||||
* We have the session requested by the client, but we don't want to
|
||||
* use it in this context.
|
||||
*/
|
||||
goto err; /* treat like cache miss */
|
||||
}
|
||||
|
||||
if ((s->verify_mode & SSL_VERIFY_PEER) && s->sid_ctx_length == 0) {
|
||||
/*
|
||||
* We can't be sure if this session is being used out of context,
|
||||
* which is especially important for SSL_VERIFY_PEER. The application
|
||||
* should have used SSL[_CTX]_set_session_id_context. For this error
|
||||
* case, we generate an error instead of treating the event like a
|
||||
* cache miss (otherwise it would be easy for applications to
|
||||
* effectively disable the session cache by accident without anyone
|
||||
* noticing).
|
||||
*/
|
||||
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_GET_PREV_SESSION,
|
||||
SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED);
|
||||
fatal = 1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (ret->timeout < (long)(time(NULL) - ret->time)) { /* timeout */
|
||||
tsan_counter(&s->session_ctx->stats.sess_timeout);
|
||||
if (try_session_cache) {
|
||||
/* session was from the cache, so remove it */
|
||||
SSL_CTX_remove_session(s->session_ctx, ret);
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Check extended master secret extension consistency */
|
||||
if (ret->flags & SSL_SESS_FLAG_EXTMS) {
|
||||
/* If old session includes extms, but new does not: abort handshake */
|
||||
if (!(s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS)) {
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL_GET_PREV_SESSION,
|
||||
SSL_R_INCONSISTENT_EXTMS);
|
||||
fatal = 1;
|
||||
goto err;
|
||||
}
|
||||
} else if (s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) {
|
||||
/* If new session includes extms, but old does not: do not resume */
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!SSL_IS_TLS13(s)) {
|
||||
/* We already did this for TLS1.3 */
|
||||
SSL_SESSION_free(s->session);
|
||||
s->session = ret;
|
||||
}
|
||||
|
||||
tsan_counter(&s->session_ctx->stats.sess_hit);
|
||||
s->verify_result = s->session->verify_result;
|
||||
return 1;
|
||||
|
||||
err:
|
||||
if (ret != NULL) {
|
||||
SSL_SESSION_free(ret);
|
||||
/* In TLSv1.3 s->session was already set to ret, so we NULL it out */
|
||||
if (SSL_IS_TLS13(s))
|
||||
s->session = NULL;
|
||||
|
||||
if (!try_session_cache) {
|
||||
/*
|
||||
* The session was from a ticket, so we should issue a ticket for
|
||||
* the new session
|
||||
*/
|
||||
s->ext.ticket_expected = 1;
|
||||
}
|
||||
}
|
||||
if (fatal)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c)
|
||||
{
|
||||
int ret = 0;
|
||||
SSL_SESSION *s;
|
||||
|
||||
/*
|
||||
* add just 1 reference count for the SSL_CTX's session cache even though
|
||||
* it has two ways of access: each session is in a doubly linked list and
|
||||
* an lhash
|
||||
*/
|
||||
SSL_SESSION_up_ref(c);
|
||||
/*
|
||||
* if session c is in already in cache, we take back the increment later
|
||||
*/
|
||||
|
||||
CRYPTO_THREAD_write_lock(ctx->lock);
|
||||
s = lh_SSL_SESSION_insert(ctx->sessions, c);
|
||||
|
||||
/*
|
||||
* s != NULL iff we already had a session with the given PID. In this
|
||||
* case, s == c should hold (then we did not really modify
|
||||
* ctx->sessions), or we're in trouble.
|
||||
*/
|
||||
if (s != NULL && s != c) {
|
||||
/* We *are* in trouble ... */
|
||||
SSL_SESSION_list_remove(ctx, s);
|
||||
SSL_SESSION_free(s);
|
||||
/*
|
||||
* ... so pretend the other session did not exist in cache (we cannot
|
||||
* handle two SSL_SESSION structures with identical session ID in the
|
||||
* same cache, which could happen e.g. when two threads concurrently
|
||||
* obtain the same session from an external cache)
|
||||
*/
|
||||
s = NULL;
|
||||
} else if (s == NULL &&
|
||||
lh_SSL_SESSION_retrieve(ctx->sessions, c) == NULL) {
|
||||
/* s == NULL can also mean OOM error in lh_SSL_SESSION_insert ... */
|
||||
|
||||
/*
|
||||
* ... so take back the extra reference and also don't add
|
||||
* the session to the SSL_SESSION_list at this time
|
||||
*/
|
||||
s = c;
|
||||
}
|
||||
|
||||
/* Put at the head of the queue unless it is already in the cache */
|
||||
if (s == NULL)
|
||||
SSL_SESSION_list_add(ctx, c);
|
||||
|
||||
if (s != NULL) {
|
||||
/*
|
||||
* existing cache entry -- decrement previously incremented reference
|
||||
* count because it already takes into account the cache
|
||||
*/
|
||||
|
||||
SSL_SESSION_free(s); /* s == c */
|
||||
ret = 0;
|
||||
} else {
|
||||
/*
|
||||
* new cache entry -- remove old ones if cache has become too large
|
||||
*/
|
||||
|
||||
ret = 1;
|
||||
|
||||
if (SSL_CTX_sess_get_cache_size(ctx) > 0) {
|
||||
while (SSL_CTX_sess_number(ctx) > SSL_CTX_sess_get_cache_size(ctx)) {
|
||||
if (!remove_session_lock(ctx, ctx->session_cache_tail, 0))
|
||||
break;
|
||||
else
|
||||
tsan_counter(&ctx->stats.sess_cache_full);
|
||||
}
|
||||
}
|
||||
}
|
||||
CRYPTO_THREAD_unlock(ctx->lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c)
|
||||
{
|
||||
return remove_session_lock(ctx, c, 1);
|
||||
}
|
||||
|
||||
static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck)
|
||||
{
|
||||
SSL_SESSION *r;
|
||||
int ret = 0;
|
||||
|
||||
if ((c != NULL) && (c->session_id_length != 0)) {
|
||||
if (lck)
|
||||
CRYPTO_THREAD_write_lock(ctx->lock);
|
||||
if ((r = lh_SSL_SESSION_retrieve(ctx->sessions, c)) != NULL) {
|
||||
ret = 1;
|
||||
r = lh_SSL_SESSION_delete(ctx->sessions, r);
|
||||
SSL_SESSION_list_remove(ctx, r);
|
||||
}
|
||||
c->not_resumable = 1;
|
||||
|
||||
if (lck)
|
||||
CRYPTO_THREAD_unlock(ctx->lock);
|
||||
|
||||
if (ctx->remove_session_cb != NULL)
|
||||
ctx->remove_session_cb(ctx, c);
|
||||
|
||||
if (ret)
|
||||
SSL_SESSION_free(r);
|
||||
} else
|
||||
ret = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void SSL_SESSION_free(SSL_SESSION *ss)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (ss == NULL)
|
||||
return;
|
||||
CRYPTO_DOWN_REF(&ss->references, &i, ss->lock);
|
||||
REF_PRINT_COUNT("SSL_SESSION", ss);
|
||||
if (i > 0)
|
||||
return;
|
||||
REF_ASSERT_ISNT(i < 0);
|
||||
|
||||
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, ss, &ss->ex_data);
|
||||
|
||||
OPENSSL_cleanse(ss->master_key, sizeof(ss->master_key));
|
||||
OPENSSL_cleanse(ss->session_id, sizeof(ss->session_id));
|
||||
X509_free(ss->peer);
|
||||
sk_X509_pop_free(ss->peer_chain, X509_free);
|
||||
OPENSSL_free(ss->ext.hostname);
|
||||
OPENSSL_free(ss->ext.tick);
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
OPENSSL_free(ss->psk_identity_hint);
|
||||
OPENSSL_free(ss->psk_identity);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
OPENSSL_free(ss->srp_username);
|
||||
#endif
|
||||
OPENSSL_free(ss->ext.alpn_selected);
|
||||
OPENSSL_free(ss->ticket_appdata);
|
||||
CRYPTO_THREAD_lock_free(ss->lock);
|
||||
OPENSSL_clear_free(ss, sizeof(*ss));
|
||||
}
|
||||
|
||||
int SSL_SESSION_up_ref(SSL_SESSION *ss)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (CRYPTO_UP_REF(&ss->references, &i, ss->lock) <= 0)
|
||||
return 0;
|
||||
|
||||
REF_PRINT_COUNT("SSL_SESSION", ss);
|
||||
REF_ASSERT_ISNT(i < 2);
|
||||
return ((i > 1) ? 1 : 0);
|
||||
}
|
||||
|
||||
int SSL_set_session(SSL *s, SSL_SESSION *session)
|
||||
{
|
||||
ssl_clear_bad_session(s);
|
||||
if (s->ctx->method != s->method) {
|
||||
if (!SSL_set_ssl_method(s, s->ctx->method))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (session != NULL) {
|
||||
SSL_SESSION_up_ref(session);
|
||||
s->verify_result = session->verify_result;
|
||||
}
|
||||
SSL_SESSION_free(s->session);
|
||||
s->session = session;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid,
|
||||
unsigned int sid_len)
|
||||
{
|
||||
if (sid_len > SSL_MAX_SSL_SESSION_ID_LENGTH) {
|
||||
SSLerr(SSL_F_SSL_SESSION_SET1_ID,
|
||||
SSL_R_SSL_SESSION_ID_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
s->session_id_length = sid_len;
|
||||
if (sid != s->session_id)
|
||||
memcpy(s->session_id, sid, sid_len);
|
||||
return 1;
|
||||
}
|
||||
|
||||
long SSL_SESSION_set_timeout(SSL_SESSION *s, long t)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
s->timeout = t;
|
||||
return 1;
|
||||
}
|
||||
|
||||
long SSL_SESSION_get_timeout(const SSL_SESSION *s)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
return s->timeout;
|
||||
}
|
||||
|
||||
long SSL_SESSION_get_time(const SSL_SESSION *s)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
return s->time;
|
||||
}
|
||||
|
||||
long SSL_SESSION_set_time(SSL_SESSION *s, long t)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
s->time = t;
|
||||
return t;
|
||||
}
|
||||
|
||||
int SSL_SESSION_get_protocol_version(const SSL_SESSION *s)
|
||||
{
|
||||
return s->ssl_version;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version)
|
||||
{
|
||||
s->ssl_version = version;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s)
|
||||
{
|
||||
return s->cipher;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher)
|
||||
{
|
||||
s->cipher = cipher;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s)
|
||||
{
|
||||
return s->ext.hostname;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname)
|
||||
{
|
||||
OPENSSL_free(s->ext.hostname);
|
||||
if (hostname == NULL) {
|
||||
s->ext.hostname = NULL;
|
||||
return 1;
|
||||
}
|
||||
s->ext.hostname = OPENSSL_strdup(hostname);
|
||||
|
||||
return s->ext.hostname != NULL;
|
||||
}
|
||||
|
||||
int SSL_SESSION_has_ticket(const SSL_SESSION *s)
|
||||
{
|
||||
return (s->ext.ticklen > 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s)
|
||||
{
|
||||
return s->ext.tick_lifetime_hint;
|
||||
}
|
||||
|
||||
void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick,
|
||||
size_t *len)
|
||||
{
|
||||
*len = s->ext.ticklen;
|
||||
if (tick != NULL)
|
||||
*tick = s->ext.tick;
|
||||
}
|
||||
|
||||
uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s)
|
||||
{
|
||||
return s->ext.max_early_data;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set_max_early_data(SSL_SESSION *s, uint32_t max_early_data)
|
||||
{
|
||||
s->ext.max_early_data = max_early_data;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s,
|
||||
const unsigned char **alpn,
|
||||
size_t *len)
|
||||
{
|
||||
*alpn = s->ext.alpn_selected;
|
||||
*len = s->ext.alpn_selected_len;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, const unsigned char *alpn,
|
||||
size_t len)
|
||||
{
|
||||
OPENSSL_free(s->ext.alpn_selected);
|
||||
if (alpn == NULL || len == 0) {
|
||||
s->ext.alpn_selected = NULL;
|
||||
s->ext.alpn_selected_len = 0;
|
||||
return 1;
|
||||
}
|
||||
s->ext.alpn_selected = OPENSSL_memdup(alpn, len);
|
||||
if (s->ext.alpn_selected == NULL) {
|
||||
s->ext.alpn_selected_len = 0;
|
||||
return 0;
|
||||
}
|
||||
s->ext.alpn_selected_len = len;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
X509 *SSL_SESSION_get0_peer(SSL_SESSION *s)
|
||||
{
|
||||
return s->peer;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx,
|
||||
unsigned int sid_ctx_len)
|
||||
{
|
||||
if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
|
||||
SSLerr(SSL_F_SSL_SESSION_SET1_ID_CONTEXT,
|
||||
SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
s->sid_ctx_length = sid_ctx_len;
|
||||
if (sid_ctx != s->sid_ctx)
|
||||
memcpy(s->sid_ctx, sid_ctx, sid_ctx_len);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_SESSION_is_resumable(const SSL_SESSION *s)
|
||||
{
|
||||
/*
|
||||
* In the case of EAP-FAST, we can have a pre-shared "ticket" without a
|
||||
* session ID.
|
||||
*/
|
||||
return !s->not_resumable
|
||||
&& (s->session_id_length > 0 || s->ext.ticklen > 0);
|
||||
}
|
||||
|
||||
long SSL_CTX_set_timeout(SSL_CTX *s, long t)
|
||||
{
|
||||
long l;
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
l = s->session_timeout;
|
||||
s->session_timeout = t;
|
||||
return l;
|
||||
}
|
||||
|
||||
long SSL_CTX_get_timeout(const SSL_CTX *s)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
return s->session_timeout;
|
||||
}
|
||||
|
||||
int SSL_set_session_secret_cb(SSL *s,
|
||||
tls_session_secret_cb_fn tls_session_secret_cb,
|
||||
void *arg)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
s->ext.session_secret_cb = tls_session_secret_cb;
|
||||
s->ext.session_secret_cb_arg = arg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb,
|
||||
void *arg)
|
||||
{
|
||||
if (s == NULL)
|
||||
return 0;
|
||||
s->ext.session_ticket_cb = cb;
|
||||
s->ext.session_ticket_cb_arg = arg;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len)
|
||||
{
|
||||
if (s->version >= TLS1_VERSION) {
|
||||
OPENSSL_free(s->ext.session_ticket);
|
||||
s->ext.session_ticket = NULL;
|
||||
s->ext.session_ticket =
|
||||
OPENSSL_malloc(sizeof(TLS_SESSION_TICKET_EXT) + ext_len);
|
||||
if (s->ext.session_ticket == NULL) {
|
||||
SSLerr(SSL_F_SSL_SET_SESSION_TICKET_EXT, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ext_data != NULL) {
|
||||
s->ext.session_ticket->length = ext_len;
|
||||
s->ext.session_ticket->data = s->ext.session_ticket + 1;
|
||||
memcpy(s->ext.session_ticket->data, ext_data, ext_len);
|
||||
} else {
|
||||
s->ext.session_ticket->length = 0;
|
||||
s->ext.session_ticket->data = NULL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef struct timeout_param_st {
|
||||
SSL_CTX *ctx;
|
||||
long time;
|
||||
LHASH_OF(SSL_SESSION) *cache;
|
||||
} TIMEOUT_PARAM;
|
||||
|
||||
static void timeout_cb(SSL_SESSION *s, TIMEOUT_PARAM *p)
|
||||
{
|
||||
if ((p->time == 0) || (p->time > (s->time + s->timeout))) { /* timeout */
|
||||
/*
|
||||
* The reason we don't call SSL_CTX_remove_session() is to save on
|
||||
* locking overhead
|
||||
*/
|
||||
(void)lh_SSL_SESSION_delete(p->cache, s);
|
||||
SSL_SESSION_list_remove(p->ctx, s);
|
||||
s->not_resumable = 1;
|
||||
if (p->ctx->remove_session_cb != NULL)
|
||||
p->ctx->remove_session_cb(p->ctx, s);
|
||||
SSL_SESSION_free(s);
|
||||
}
|
||||
}
|
||||
|
||||
IMPLEMENT_LHASH_DOALL_ARG(SSL_SESSION, TIMEOUT_PARAM);
|
||||
|
||||
void SSL_CTX_flush_sessions(SSL_CTX *s, long t)
|
||||
{
|
||||
unsigned long i;
|
||||
TIMEOUT_PARAM tp;
|
||||
|
||||
tp.ctx = s;
|
||||
tp.cache = s->sessions;
|
||||
if (tp.cache == NULL)
|
||||
return;
|
||||
tp.time = t;
|
||||
CRYPTO_THREAD_write_lock(s->lock);
|
||||
i = lh_SSL_SESSION_get_down_load(s->sessions);
|
||||
lh_SSL_SESSION_set_down_load(s->sessions, 0);
|
||||
lh_SSL_SESSION_doall_TIMEOUT_PARAM(tp.cache, timeout_cb, &tp);
|
||||
lh_SSL_SESSION_set_down_load(s->sessions, i);
|
||||
CRYPTO_THREAD_unlock(s->lock);
|
||||
}
|
||||
|
||||
int ssl_clear_bad_session(SSL *s)
|
||||
{
|
||||
if ((s->session != NULL) &&
|
||||
!(s->shutdown & SSL_SENT_SHUTDOWN) &&
|
||||
!(SSL_in_init(s) || SSL_in_before(s))) {
|
||||
SSL_CTX_remove_session(s->session_ctx, s->session);
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* locked by SSL_CTX in the calling function */
|
||||
static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *s)
|
||||
{
|
||||
if ((s->next == NULL) || (s->prev == NULL))
|
||||
return;
|
||||
|
||||
if (s->next == (SSL_SESSION *)&(ctx->session_cache_tail)) {
|
||||
/* last element in list */
|
||||
if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) {
|
||||
/* only one element in list */
|
||||
ctx->session_cache_head = NULL;
|
||||
ctx->session_cache_tail = NULL;
|
||||
} else {
|
||||
ctx->session_cache_tail = s->prev;
|
||||
s->prev->next = (SSL_SESSION *)&(ctx->session_cache_tail);
|
||||
}
|
||||
} else {
|
||||
if (s->prev == (SSL_SESSION *)&(ctx->session_cache_head)) {
|
||||
/* first element in list */
|
||||
ctx->session_cache_head = s->next;
|
||||
s->next->prev = (SSL_SESSION *)&(ctx->session_cache_head);
|
||||
} else {
|
||||
/* middle of list */
|
||||
s->next->prev = s->prev;
|
||||
s->prev->next = s->next;
|
||||
}
|
||||
}
|
||||
s->prev = s->next = NULL;
|
||||
}
|
||||
|
||||
static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *s)
|
||||
{
|
||||
if ((s->next != NULL) && (s->prev != NULL))
|
||||
SSL_SESSION_list_remove(ctx, s);
|
||||
|
||||
if (ctx->session_cache_head == NULL) {
|
||||
ctx->session_cache_head = s;
|
||||
ctx->session_cache_tail = s;
|
||||
s->prev = (SSL_SESSION *)&(ctx->session_cache_head);
|
||||
s->next = (SSL_SESSION *)&(ctx->session_cache_tail);
|
||||
} else {
|
||||
s->next = ctx->session_cache_head;
|
||||
s->next->prev = s;
|
||||
s->prev = (SSL_SESSION *)&(ctx->session_cache_head);
|
||||
ctx->session_cache_head = s;
|
||||
}
|
||||
}
|
||||
|
||||
void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,
|
||||
int (*cb) (struct ssl_st *ssl, SSL_SESSION *sess))
|
||||
{
|
||||
ctx->new_session_cb = cb;
|
||||
}
|
||||
|
||||
int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (SSL *ssl, SSL_SESSION *sess) {
|
||||
return ctx->new_session_cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,
|
||||
void (*cb) (SSL_CTX *ctx, SSL_SESSION *sess))
|
||||
{
|
||||
ctx->remove_session_cb = cb;
|
||||
}
|
||||
|
||||
void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (SSL_CTX *ctx,
|
||||
SSL_SESSION *sess) {
|
||||
return ctx->remove_session_cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
|
||||
SSL_SESSION *(*cb) (struct ssl_st *ssl,
|
||||
const unsigned char *data,
|
||||
int len, int *copy))
|
||||
{
|
||||
ctx->get_session_cb = cb;
|
||||
}
|
||||
|
||||
SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (SSL *ssl,
|
||||
const unsigned char
|
||||
*data, int len,
|
||||
int *copy) {
|
||||
return ctx->get_session_cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_info_callback(SSL_CTX *ctx,
|
||||
void (*cb) (const SSL *ssl, int type, int val))
|
||||
{
|
||||
ctx->info_callback = cb;
|
||||
}
|
||||
|
||||
void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type,
|
||||
int val) {
|
||||
return ctx->info_callback;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,
|
||||
int (*cb) (SSL *ssl, X509 **x509,
|
||||
EVP_PKEY **pkey))
|
||||
{
|
||||
ctx->client_cert_cb = cb;
|
||||
}
|
||||
|
||||
int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509,
|
||||
EVP_PKEY **pkey) {
|
||||
return ctx->client_cert_cb;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e)
|
||||
{
|
||||
if (!ENGINE_init(e)) {
|
||||
SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE, ERR_R_ENGINE_LIB);
|
||||
return 0;
|
||||
}
|
||||
if (!ENGINE_get_ssl_client_cert_function(e)) {
|
||||
SSLerr(SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE,
|
||||
SSL_R_NO_CLIENT_CERT_METHOD);
|
||||
ENGINE_finish(e);
|
||||
return 0;
|
||||
}
|
||||
ctx->client_cert_engine = e;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,
|
||||
int (*cb) (SSL *ssl,
|
||||
unsigned char *cookie,
|
||||
unsigned int *cookie_len))
|
||||
{
|
||||
ctx->app_gen_cookie_cb = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,
|
||||
int (*cb) (SSL *ssl,
|
||||
const unsigned char *cookie,
|
||||
unsigned int cookie_len))
|
||||
{
|
||||
ctx->app_verify_cookie_cb = cb;
|
||||
}
|
||||
|
||||
int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len)
|
||||
{
|
||||
OPENSSL_free(ss->ticket_appdata);
|
||||
ss->ticket_appdata_len = 0;
|
||||
if (data == NULL || len == 0) {
|
||||
ss->ticket_appdata = NULL;
|
||||
return 1;
|
||||
}
|
||||
ss->ticket_appdata = OPENSSL_memdup(data, len);
|
||||
if (ss->ticket_appdata != NULL) {
|
||||
ss->ticket_appdata_len = len;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len)
|
||||
{
|
||||
*data = ss->ticket_appdata;
|
||||
*len = ss->ticket_appdata_len;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_stateless_cookie_generate_cb(
|
||||
SSL_CTX *ctx,
|
||||
int (*cb) (SSL *ssl,
|
||||
unsigned char *cookie,
|
||||
size_t *cookie_len))
|
||||
{
|
||||
ctx->gen_stateless_cookie_cb = cb;
|
||||
}
|
||||
|
||||
void SSL_CTX_set_stateless_cookie_verify_cb(
|
||||
SSL_CTX *ctx,
|
||||
int (*cb) (SSL *ssl,
|
||||
const unsigned char *cookie,
|
||||
size_t cookie_len))
|
||||
{
|
||||
ctx->verify_stateless_cookie_cb = cb;
|
||||
}
|
||||
|
||||
IMPLEMENT_PEM_rw(SSL_SESSION, SSL_SESSION, PEM_STRING_SSL_SESSION, SSL_SESSION)
|
||||
@@ -0,0 +1,4271 @@
|
||||
/*
|
||||
* Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
|
||||
* Copyright 2005 Nokia. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "../ssl_locl.h"
|
||||
#include "statem_locl.h"
|
||||
#include "internal/constant_time_locl.h"
|
||||
#include "internal/cryptlib.h"
|
||||
#include <openssl/buffer.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/objects.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/dh.h>
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/md5.h>
|
||||
#include <openssl/trace.h>
|
||||
|
||||
#define TICKET_NONCE_SIZE 8
|
||||
|
||||
static int tls_construct_encrypted_extensions(SSL *s, WPACKET *pkt);
|
||||
|
||||
/*
|
||||
* ossl_statem_server13_read_transition() encapsulates the logic for the allowed
|
||||
* handshake state transitions when a TLSv1.3 server is reading messages from
|
||||
* the client. The message type that the client has sent is provided in |mt|.
|
||||
* The current state is in |s->statem.hand_state|.
|
||||
*
|
||||
* Return values are 1 for success (transition allowed) and 0 on error
|
||||
* (transition not allowed)
|
||||
*/
|
||||
static int ossl_statem_server13_read_transition(SSL *s, int mt)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
/*
|
||||
* Note: There is no case for TLS_ST_BEFORE because at that stage we have
|
||||
* not negotiated TLSv1.3 yet, so that case is handled by
|
||||
* ossl_statem_server_read_transition()
|
||||
*/
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case TLS_ST_EARLY_DATA:
|
||||
if (s->hello_retry_request == SSL_HRR_PENDING) {
|
||||
if (mt == SSL3_MT_CLIENT_HELLO) {
|
||||
st->hand_state = TLS_ST_SR_CLNT_HELLO;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
} else if (s->ext.early_data == SSL_EARLY_DATA_ACCEPTED) {
|
||||
if (mt == SSL3_MT_END_OF_EARLY_DATA) {
|
||||
st->hand_state = TLS_ST_SR_END_OF_EARLY_DATA;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* Fall through */
|
||||
|
||||
case TLS_ST_SR_END_OF_EARLY_DATA:
|
||||
case TLS_ST_SW_FINISHED:
|
||||
if (s->s3.tmp.cert_request) {
|
||||
if (mt == SSL3_MT_CERTIFICATE) {
|
||||
st->hand_state = TLS_ST_SR_CERT;
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
if (mt == SSL3_MT_FINISHED) {
|
||||
st->hand_state = TLS_ST_SR_FINISHED;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SR_CERT:
|
||||
if (s->session->peer == NULL) {
|
||||
if (mt == SSL3_MT_FINISHED) {
|
||||
st->hand_state = TLS_ST_SR_FINISHED;
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
if (mt == SSL3_MT_CERTIFICATE_VERIFY) {
|
||||
st->hand_state = TLS_ST_SR_CERT_VRFY;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SR_CERT_VRFY:
|
||||
if (mt == SSL3_MT_FINISHED) {
|
||||
st->hand_state = TLS_ST_SR_FINISHED;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_OK:
|
||||
/*
|
||||
* Its never ok to start processing handshake messages in the middle of
|
||||
* early data (i.e. before we've received the end of early data alert)
|
||||
*/
|
||||
if (s->early_data_state == SSL_EARLY_DATA_READING)
|
||||
break;
|
||||
|
||||
if (mt == SSL3_MT_CERTIFICATE
|
||||
&& s->post_handshake_auth == SSL_PHA_REQUESTED) {
|
||||
st->hand_state = TLS_ST_SR_CERT;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mt == SSL3_MT_KEY_UPDATE) {
|
||||
st->hand_state = TLS_ST_SR_KEY_UPDATE;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* No valid transition found */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* ossl_statem_server_read_transition() encapsulates the logic for the allowed
|
||||
* handshake state transitions when the server is reading messages from the
|
||||
* client. The message type that the client has sent is provided in |mt|. The
|
||||
* current state is in |s->statem.hand_state|.
|
||||
*
|
||||
* Return values are 1 for success (transition allowed) and 0 on error
|
||||
* (transition not allowed)
|
||||
*/
|
||||
int ossl_statem_server_read_transition(SSL *s, int mt)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
if (!ossl_statem_server13_read_transition(s, mt))
|
||||
goto err;
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
break;
|
||||
|
||||
case TLS_ST_BEFORE:
|
||||
case TLS_ST_OK:
|
||||
case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
|
||||
if (mt == SSL3_MT_CLIENT_HELLO) {
|
||||
st->hand_state = TLS_ST_SR_CLNT_HELLO;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SRVR_DONE:
|
||||
/*
|
||||
* If we get a CKE message after a ServerDone then either
|
||||
* 1) We didn't request a Certificate
|
||||
* OR
|
||||
* 2) If we did request one then
|
||||
* a) We allow no Certificate to be returned
|
||||
* AND
|
||||
* b) We are running SSL3 (in TLS1.0+ the client must return a 0
|
||||
* list if we requested a certificate)
|
||||
*/
|
||||
if (mt == SSL3_MT_CLIENT_KEY_EXCHANGE) {
|
||||
if (s->s3.tmp.cert_request) {
|
||||
if (s->version == SSL3_VERSION) {
|
||||
if ((s->verify_mode & SSL_VERIFY_PEER)
|
||||
&& (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) {
|
||||
/*
|
||||
* This isn't an unexpected message as such - we're just
|
||||
* not going to accept it because we require a client
|
||||
* cert.
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION,
|
||||
SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
|
||||
return 0;
|
||||
}
|
||||
st->hand_state = TLS_ST_SR_KEY_EXCH;
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
st->hand_state = TLS_ST_SR_KEY_EXCH;
|
||||
return 1;
|
||||
}
|
||||
} else if (s->s3.tmp.cert_request) {
|
||||
if (mt == SSL3_MT_CERTIFICATE) {
|
||||
st->hand_state = TLS_ST_SR_CERT;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SR_CERT:
|
||||
if (mt == SSL3_MT_CLIENT_KEY_EXCHANGE) {
|
||||
st->hand_state = TLS_ST_SR_KEY_EXCH;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SR_KEY_EXCH:
|
||||
/*
|
||||
* We should only process a CertificateVerify message if we have
|
||||
* received a Certificate from the client. If so then |s->session->peer|
|
||||
* will be non NULL. In some instances a CertificateVerify message is
|
||||
* not required even if the peer has sent a Certificate (e.g. such as in
|
||||
* the case of static DH). In that case |st->no_cert_verify| should be
|
||||
* set.
|
||||
*/
|
||||
if (s->session->peer == NULL || st->no_cert_verify) {
|
||||
if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
|
||||
/*
|
||||
* For the ECDH ciphersuites when the client sends its ECDH
|
||||
* pub key in a certificate, the CertificateVerify message is
|
||||
* not sent. Also for GOST ciphersuites when the client uses
|
||||
* its key from the certificate for key exchange.
|
||||
*/
|
||||
st->hand_state = TLS_ST_SR_CHANGE;
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
if (mt == SSL3_MT_CERTIFICATE_VERIFY) {
|
||||
st->hand_state = TLS_ST_SR_CERT_VRFY;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SR_CERT_VRFY:
|
||||
if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
|
||||
st->hand_state = TLS_ST_SR_CHANGE;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SR_CHANGE:
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
if (s->s3.npn_seen) {
|
||||
if (mt == SSL3_MT_NEXT_PROTO) {
|
||||
st->hand_state = TLS_ST_SR_NEXT_PROTO;
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
if (mt == SSL3_MT_FINISHED) {
|
||||
st->hand_state = TLS_ST_SR_FINISHED;
|
||||
return 1;
|
||||
}
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
case TLS_ST_SR_NEXT_PROTO:
|
||||
if (mt == SSL3_MT_FINISHED) {
|
||||
st->hand_state = TLS_ST_SR_FINISHED;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TLS_ST_SW_FINISHED:
|
||||
if (mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
|
||||
st->hand_state = TLS_ST_SR_CHANGE;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
err:
|
||||
/* No valid transition found */
|
||||
if (SSL_IS_DTLS(s) && mt == SSL3_MT_CHANGE_CIPHER_SPEC) {
|
||||
BIO *rbio;
|
||||
|
||||
/*
|
||||
* CCS messages don't have a message sequence number so this is probably
|
||||
* because of an out-of-order CCS. We'll just drop it.
|
||||
*/
|
||||
s->init_num = 0;
|
||||
s->rwstate = SSL_READING;
|
||||
rbio = SSL_get_rbio(s);
|
||||
BIO_clear_retry_flags(rbio);
|
||||
BIO_set_retry_read(rbio);
|
||||
return 0;
|
||||
}
|
||||
SSLfatal(s, SSL3_AD_UNEXPECTED_MESSAGE,
|
||||
SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION,
|
||||
SSL_R_UNEXPECTED_MESSAGE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Should we send a ServerKeyExchange message?
|
||||
*
|
||||
* Valid return values are:
|
||||
* 1: Yes
|
||||
* 0: No
|
||||
*/
|
||||
static int send_server_key_exchange(SSL *s)
|
||||
{
|
||||
unsigned long alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
|
||||
|
||||
/*
|
||||
* only send a ServerKeyExchange if DH or fortezza but we have a
|
||||
* sign only certificate PSK: may send PSK identity hints For
|
||||
* ECC ciphersuites, we send a serverKeyExchange message only if
|
||||
* the cipher suite is either ECDH-anon or ECDHE. In other cases,
|
||||
* the server certificate contains the server's public key for
|
||||
* key exchange.
|
||||
*/
|
||||
if (alg_k & (SSL_kDHE | SSL_kECDHE)
|
||||
/*
|
||||
* PSK: send ServerKeyExchange if PSK identity hint if
|
||||
* provided
|
||||
*/
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
/* Only send SKE if we have identity hint for plain PSK */
|
||||
|| ((alg_k & (SSL_kPSK | SSL_kRSAPSK))
|
||||
&& s->cert->psk_identity_hint)
|
||||
/* For other PSK always send SKE */
|
||||
|| (alg_k & (SSL_PSK & (SSL_kDHEPSK | SSL_kECDHEPSK)))
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
/* SRP: send ServerKeyExchange */
|
||||
|| (alg_k & SSL_kSRP)
|
||||
#endif
|
||||
) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Should we send a CertificateRequest message?
|
||||
*
|
||||
* Valid return values are:
|
||||
* 1: Yes
|
||||
* 0: No
|
||||
*/
|
||||
int send_certificate_request(SSL *s)
|
||||
{
|
||||
if (
|
||||
/* don't request cert unless asked for it: */
|
||||
s->verify_mode & SSL_VERIFY_PEER
|
||||
/*
|
||||
* don't request if post-handshake-only unless doing
|
||||
* post-handshake in TLSv1.3:
|
||||
*/
|
||||
&& (!SSL_IS_TLS13(s) || !(s->verify_mode & SSL_VERIFY_POST_HANDSHAKE)
|
||||
|| s->post_handshake_auth == SSL_PHA_REQUEST_PENDING)
|
||||
/*
|
||||
* if SSL_VERIFY_CLIENT_ONCE is set, don't request cert
|
||||
* a second time:
|
||||
*/
|
||||
&& (s->certreqs_sent < 1 ||
|
||||
!(s->verify_mode & SSL_VERIFY_CLIENT_ONCE))
|
||||
/*
|
||||
* never request cert in anonymous ciphersuites (see
|
||||
* section "Certificate request" in SSL 3 drafts and in
|
||||
* RFC 2246):
|
||||
*/
|
||||
&& (!(s->s3.tmp.new_cipher->algorithm_auth & SSL_aNULL)
|
||||
/*
|
||||
* ... except when the application insists on
|
||||
* verification (against the specs, but statem_clnt.c accepts
|
||||
* this for SSL 3)
|
||||
*/
|
||||
|| (s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))
|
||||
/* don't request certificate for SRP auth */
|
||||
&& !(s->s3.tmp.new_cipher->algorithm_auth & SSL_aSRP)
|
||||
/*
|
||||
* With normal PSK Certificates and Certificate Requests
|
||||
* are omitted
|
||||
*/
|
||||
&& !(s->s3.tmp.new_cipher->algorithm_auth & SSL_aPSK)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* ossl_statem_server13_write_transition() works out what handshake state to
|
||||
* move to next when a TLSv1.3 server is writing messages to be sent to the
|
||||
* client.
|
||||
*/
|
||||
static WRITE_TRAN ossl_statem_server13_write_transition(SSL *s)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
/*
|
||||
* No case for TLS_ST_BEFORE, because at that stage we have not negotiated
|
||||
* TLSv1.3 yet, so that is handled by ossl_statem_server_write_transition()
|
||||
*/
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* Shouldn't happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return WRITE_TRAN_ERROR;
|
||||
|
||||
case TLS_ST_OK:
|
||||
if (s->key_update != SSL_KEY_UPDATE_NONE) {
|
||||
st->hand_state = TLS_ST_SW_KEY_UPDATE;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
if (s->post_handshake_auth == SSL_PHA_REQUEST_PENDING) {
|
||||
st->hand_state = TLS_ST_SW_CERT_REQ;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
/* Try to read from the client instead */
|
||||
return WRITE_TRAN_FINISHED;
|
||||
|
||||
case TLS_ST_SR_CLNT_HELLO:
|
||||
st->hand_state = TLS_ST_SW_SRVR_HELLO;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_SRVR_HELLO:
|
||||
if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0
|
||||
&& s->hello_retry_request != SSL_HRR_COMPLETE)
|
||||
st->hand_state = TLS_ST_SW_CHANGE;
|
||||
else if (s->hello_retry_request == SSL_HRR_PENDING)
|
||||
st->hand_state = TLS_ST_EARLY_DATA;
|
||||
else
|
||||
st->hand_state = TLS_ST_SW_ENCRYPTED_EXTENSIONS;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_CHANGE:
|
||||
if (s->hello_retry_request == SSL_HRR_PENDING)
|
||||
st->hand_state = TLS_ST_EARLY_DATA;
|
||||
else
|
||||
st->hand_state = TLS_ST_SW_ENCRYPTED_EXTENSIONS;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
|
||||
if (s->hit)
|
||||
st->hand_state = TLS_ST_SW_FINISHED;
|
||||
else if (send_certificate_request(s))
|
||||
st->hand_state = TLS_ST_SW_CERT_REQ;
|
||||
else
|
||||
st->hand_state = TLS_ST_SW_CERT;
|
||||
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_CERT_REQ:
|
||||
if (s->post_handshake_auth == SSL_PHA_REQUEST_PENDING) {
|
||||
s->post_handshake_auth = SSL_PHA_REQUESTED;
|
||||
st->hand_state = TLS_ST_OK;
|
||||
} else {
|
||||
st->hand_state = TLS_ST_SW_CERT;
|
||||
}
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_CERT:
|
||||
st->hand_state = TLS_ST_SW_CERT_VRFY;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_CERT_VRFY:
|
||||
st->hand_state = TLS_ST_SW_FINISHED;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_FINISHED:
|
||||
st->hand_state = TLS_ST_EARLY_DATA;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_EARLY_DATA:
|
||||
return WRITE_TRAN_FINISHED;
|
||||
|
||||
case TLS_ST_SR_FINISHED:
|
||||
/*
|
||||
* Technically we have finished the handshake at this point, but we're
|
||||
* going to remain "in_init" for now and write out any session tickets
|
||||
* immediately.
|
||||
*/
|
||||
if (s->post_handshake_auth == SSL_PHA_REQUESTED) {
|
||||
s->post_handshake_auth = SSL_PHA_EXT_RECEIVED;
|
||||
} else if (!s->ext.ticket_expected) {
|
||||
/*
|
||||
* If we're not going to renew the ticket then we just finish the
|
||||
* handshake at this point.
|
||||
*/
|
||||
st->hand_state = TLS_ST_OK;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
if (s->num_tickets > s->sent_tickets)
|
||||
st->hand_state = TLS_ST_SW_SESSION_TICKET;
|
||||
else
|
||||
st->hand_state = TLS_ST_OK;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SR_KEY_UPDATE:
|
||||
case TLS_ST_SW_KEY_UPDATE:
|
||||
st->hand_state = TLS_ST_OK;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_SESSION_TICKET:
|
||||
/* In a resumption we only ever send a maximum of one new ticket.
|
||||
* Following an initial handshake we send the number of tickets we have
|
||||
* been configured for.
|
||||
*/
|
||||
if (s->hit || s->num_tickets <= s->sent_tickets) {
|
||||
/* We've written enough tickets out. */
|
||||
st->hand_state = TLS_ST_OK;
|
||||
}
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* ossl_statem_server_write_transition() works out what handshake state to move
|
||||
* to next when the server is writing messages to be sent to the client.
|
||||
*/
|
||||
WRITE_TRAN ossl_statem_server_write_transition(SSL *s)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
/*
|
||||
* Note that before the ClientHello we don't know what version we are going
|
||||
* to negotiate yet, so we don't take this branch until later
|
||||
*/
|
||||
|
||||
if (SSL_IS_TLS13(s))
|
||||
return ossl_statem_server13_write_transition(s);
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* Shouldn't happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return WRITE_TRAN_ERROR;
|
||||
|
||||
case TLS_ST_OK:
|
||||
if (st->request_state == TLS_ST_SW_HELLO_REQ) {
|
||||
/* We must be trying to renegotiate */
|
||||
st->hand_state = TLS_ST_SW_HELLO_REQ;
|
||||
st->request_state = TLS_ST_BEFORE;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
/* Must be an incoming ClientHello */
|
||||
if (!tls_setup_handshake(s)) {
|
||||
/* SSLfatal() already called */
|
||||
return WRITE_TRAN_ERROR;
|
||||
}
|
||||
/* Fall through */
|
||||
|
||||
case TLS_ST_BEFORE:
|
||||
/* Just go straight to trying to read from the client */
|
||||
return WRITE_TRAN_FINISHED;
|
||||
|
||||
case TLS_ST_SW_HELLO_REQ:
|
||||
st->hand_state = TLS_ST_OK;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SR_CLNT_HELLO:
|
||||
if (SSL_IS_DTLS(s) && !s->d1->cookie_verified
|
||||
&& (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE)) {
|
||||
st->hand_state = DTLS_ST_SW_HELLO_VERIFY_REQUEST;
|
||||
} else if (s->renegotiate == 0 && !SSL_IS_FIRST_HANDSHAKE(s)) {
|
||||
/* We must have rejected the renegotiation */
|
||||
st->hand_state = TLS_ST_OK;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
} else {
|
||||
st->hand_state = TLS_ST_SW_SRVR_HELLO;
|
||||
}
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
|
||||
return WRITE_TRAN_FINISHED;
|
||||
|
||||
case TLS_ST_SW_SRVR_HELLO:
|
||||
if (s->hit) {
|
||||
if (s->ext.ticket_expected)
|
||||
st->hand_state = TLS_ST_SW_SESSION_TICKET;
|
||||
else
|
||||
st->hand_state = TLS_ST_SW_CHANGE;
|
||||
} else {
|
||||
/* Check if it is anon DH or anon ECDH, */
|
||||
/* normal PSK or SRP */
|
||||
if (!(s->s3.tmp.new_cipher->algorithm_auth &
|
||||
(SSL_aNULL | SSL_aSRP | SSL_aPSK))) {
|
||||
st->hand_state = TLS_ST_SW_CERT;
|
||||
} else if (send_server_key_exchange(s)) {
|
||||
st->hand_state = TLS_ST_SW_KEY_EXCH;
|
||||
} else if (send_certificate_request(s)) {
|
||||
st->hand_state = TLS_ST_SW_CERT_REQ;
|
||||
} else {
|
||||
st->hand_state = TLS_ST_SW_SRVR_DONE;
|
||||
}
|
||||
}
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_CERT:
|
||||
if (s->ext.status_expected) {
|
||||
st->hand_state = TLS_ST_SW_CERT_STATUS;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
/* Fall through */
|
||||
|
||||
case TLS_ST_SW_CERT_STATUS:
|
||||
if (send_server_key_exchange(s)) {
|
||||
st->hand_state = TLS_ST_SW_KEY_EXCH;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
/* Fall through */
|
||||
|
||||
case TLS_ST_SW_KEY_EXCH:
|
||||
if (send_certificate_request(s)) {
|
||||
st->hand_state = TLS_ST_SW_CERT_REQ;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
/* Fall through */
|
||||
|
||||
case TLS_ST_SW_CERT_REQ:
|
||||
st->hand_state = TLS_ST_SW_SRVR_DONE;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_SRVR_DONE:
|
||||
return WRITE_TRAN_FINISHED;
|
||||
|
||||
case TLS_ST_SR_FINISHED:
|
||||
if (s->hit) {
|
||||
st->hand_state = TLS_ST_OK;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
} else if (s->ext.ticket_expected) {
|
||||
st->hand_state = TLS_ST_SW_SESSION_TICKET;
|
||||
} else {
|
||||
st->hand_state = TLS_ST_SW_CHANGE;
|
||||
}
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_SESSION_TICKET:
|
||||
st->hand_state = TLS_ST_SW_CHANGE;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_CHANGE:
|
||||
st->hand_state = TLS_ST_SW_FINISHED;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_FINISHED:
|
||||
if (s->hit) {
|
||||
return WRITE_TRAN_FINISHED;
|
||||
}
|
||||
st->hand_state = TLS_ST_OK;
|
||||
return WRITE_TRAN_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform any pre work that needs to be done prior to sending a message from
|
||||
* the server to the client.
|
||||
*/
|
||||
WORK_STATE ossl_statem_server_pre_work(SSL *s, WORK_STATE wst)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* No pre work to be done */
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_HELLO_REQ:
|
||||
s->shutdown = 0;
|
||||
if (SSL_IS_DTLS(s))
|
||||
dtls1_clear_sent_buffer(s);
|
||||
break;
|
||||
|
||||
case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
|
||||
s->shutdown = 0;
|
||||
if (SSL_IS_DTLS(s)) {
|
||||
dtls1_clear_sent_buffer(s);
|
||||
/* We don't buffer this message so don't use the timer */
|
||||
st->use_timer = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SRVR_HELLO:
|
||||
if (SSL_IS_DTLS(s)) {
|
||||
/*
|
||||
* Messages we write from now on should be buffered and
|
||||
* retransmitted if necessary, so we need to use the timer now
|
||||
*/
|
||||
st->use_timer = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SRVR_DONE:
|
||||
#ifndef OPENSSL_NO_SCTP
|
||||
if (SSL_IS_DTLS(s) && BIO_dgram_is_sctp(SSL_get_wbio(s))) {
|
||||
/* Calls SSLfatal() as required */
|
||||
return dtls_wait_for_dry(s);
|
||||
}
|
||||
#endif
|
||||
return WORK_FINISHED_CONTINUE;
|
||||
|
||||
case TLS_ST_SW_SESSION_TICKET:
|
||||
if (SSL_IS_TLS13(s) && s->sent_tickets == 0) {
|
||||
/*
|
||||
* Actually this is the end of the handshake, but we're going
|
||||
* straight into writing the session ticket out. So we finish off
|
||||
* the handshake, but keep the various buffers active.
|
||||
*
|
||||
* Calls SSLfatal as required.
|
||||
*/
|
||||
return tls_finish_handshake(s, wst, 0, 0);
|
||||
} if (SSL_IS_DTLS(s)) {
|
||||
/*
|
||||
* We're into the last flight. We don't retransmit the last flight
|
||||
* unless we need to, so we don't use the timer
|
||||
*/
|
||||
st->use_timer = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_CHANGE:
|
||||
if (SSL_IS_TLS13(s))
|
||||
break;
|
||||
s->session->cipher = s->s3.tmp.new_cipher;
|
||||
if (!s->method->ssl3_enc->setup_key_block(s)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
if (SSL_IS_DTLS(s)) {
|
||||
/*
|
||||
* We're into the last flight. We don't retransmit the last flight
|
||||
* unless we need to, so we don't use the timer. This might have
|
||||
* already been set to 0 if we sent a NewSessionTicket message,
|
||||
* but we'll set it again here in case we didn't.
|
||||
*/
|
||||
st->use_timer = 0;
|
||||
}
|
||||
return WORK_FINISHED_CONTINUE;
|
||||
|
||||
case TLS_ST_EARLY_DATA:
|
||||
if (s->early_data_state != SSL_EARLY_DATA_ACCEPTING
|
||||
&& (s->s3.flags & TLS1_FLAGS_STATELESS) == 0)
|
||||
return WORK_FINISHED_CONTINUE;
|
||||
/* Fall through */
|
||||
|
||||
case TLS_ST_OK:
|
||||
/* Calls SSLfatal() as required */
|
||||
return tls_finish_handshake(s, wst, 1, 1);
|
||||
}
|
||||
|
||||
return WORK_FINISHED_CONTINUE;
|
||||
}
|
||||
|
||||
static ossl_inline int conn_is_closed(void)
|
||||
{
|
||||
switch (get_last_sys_error()) {
|
||||
#if defined(EPIPE)
|
||||
case EPIPE:
|
||||
return 1;
|
||||
#endif
|
||||
#if defined(ECONNRESET)
|
||||
case ECONNRESET:
|
||||
return 1;
|
||||
#endif
|
||||
#if defined(WSAECONNRESET)
|
||||
case WSAECONNRESET:
|
||||
return 1;
|
||||
#endif
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform any work that needs to be done after sending a message from the
|
||||
* server to the client.
|
||||
*/
|
||||
WORK_STATE ossl_statem_server_post_work(SSL *s, WORK_STATE wst)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
s->init_num = 0;
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* No post work to be done */
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_HELLO_REQ:
|
||||
if (statem_flush(s) != 1)
|
||||
return WORK_MORE_A;
|
||||
if (!ssl3_init_finished_mac(s)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
|
||||
if (statem_flush(s) != 1)
|
||||
return WORK_MORE_A;
|
||||
/* HelloVerifyRequest resets Finished MAC */
|
||||
if (s->version != DTLS1_BAD_VER && !ssl3_init_finished_mac(s)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
/*
|
||||
* The next message should be another ClientHello which we need to
|
||||
* treat like it was the first packet
|
||||
*/
|
||||
s->first_packet = 1;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SRVR_HELLO:
|
||||
if (SSL_IS_TLS13(s) && s->hello_retry_request == SSL_HRR_PENDING) {
|
||||
if ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) == 0
|
||||
&& statem_flush(s) != 1)
|
||||
return WORK_MORE_A;
|
||||
break;
|
||||
}
|
||||
#ifndef OPENSSL_NO_SCTP
|
||||
if (SSL_IS_DTLS(s) && s->hit) {
|
||||
unsigned char sctpauthkey[64];
|
||||
char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
|
||||
size_t labellen;
|
||||
|
||||
/*
|
||||
* Add new shared key for SCTP-Auth, will be ignored if no
|
||||
* SCTP used.
|
||||
*/
|
||||
memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
|
||||
sizeof(DTLS1_SCTP_AUTH_LABEL));
|
||||
|
||||
/* Don't include the terminating zero. */
|
||||
labellen = sizeof(labelbuffer) - 1;
|
||||
if (s->mode & SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG)
|
||||
labellen += 1;
|
||||
|
||||
if (SSL_export_keying_material(s, sctpauthkey,
|
||||
sizeof(sctpauthkey), labelbuffer,
|
||||
labellen, NULL, 0,
|
||||
0) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_OSSL_STATEM_SERVER_POST_WORK,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return WORK_ERROR;
|
||||
}
|
||||
|
||||
BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
|
||||
sizeof(sctpauthkey), sctpauthkey);
|
||||
}
|
||||
#endif
|
||||
if (!SSL_IS_TLS13(s)
|
||||
|| ((s->options & SSL_OP_ENABLE_MIDDLEBOX_COMPAT) != 0
|
||||
&& s->hello_retry_request != SSL_HRR_COMPLETE))
|
||||
break;
|
||||
/* Fall through */
|
||||
|
||||
case TLS_ST_SW_CHANGE:
|
||||
if (s->hello_retry_request == SSL_HRR_PENDING) {
|
||||
if (!statem_flush(s))
|
||||
return WORK_MORE_A;
|
||||
break;
|
||||
}
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
if (!s->method->ssl3_enc->setup_key_block(s)
|
||||
|| !s->method->ssl3_enc->change_cipher_state(s,
|
||||
SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_SERVER_WRITE)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
|
||||
if (s->ext.early_data != SSL_EARLY_DATA_ACCEPTED
|
||||
&& !s->method->ssl3_enc->change_cipher_state(s,
|
||||
SSL3_CC_HANDSHAKE |SSL3_CHANGE_CIPHER_SERVER_READ)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
/*
|
||||
* We don't yet know whether the next record we are going to receive
|
||||
* is an unencrypted alert, an encrypted alert, or an encrypted
|
||||
* handshake message. We temporarily tolerate unencrypted alerts.
|
||||
*/
|
||||
s->statem.enc_read_state = ENC_READ_STATE_ALLOW_PLAIN_ALERTS;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_SCTP
|
||||
if (SSL_IS_DTLS(s) && !s->hit) {
|
||||
/*
|
||||
* Change to new shared key of SCTP-Auth, will be ignored if
|
||||
* no SCTP used.
|
||||
*/
|
||||
BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
|
||||
0, NULL);
|
||||
}
|
||||
#endif
|
||||
if (!s->method->ssl3_enc->change_cipher_state(s,
|
||||
SSL3_CHANGE_CIPHER_SERVER_WRITE))
|
||||
{
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
|
||||
if (SSL_IS_DTLS(s))
|
||||
dtls1_reset_seq_numbers(s, SSL3_CC_WRITE);
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SRVR_DONE:
|
||||
if (statem_flush(s) != 1)
|
||||
return WORK_MORE_A;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_FINISHED:
|
||||
if (statem_flush(s) != 1)
|
||||
return WORK_MORE_A;
|
||||
#ifndef OPENSSL_NO_SCTP
|
||||
if (SSL_IS_DTLS(s) && s->hit) {
|
||||
/*
|
||||
* Change to new shared key of SCTP-Auth, will be ignored if
|
||||
* no SCTP used.
|
||||
*/
|
||||
BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY,
|
||||
0, NULL);
|
||||
}
|
||||
#endif
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
if (!s->method->ssl3_enc->generate_master_secret(s,
|
||||
s->master_secret, s->handshake_secret, 0,
|
||||
&s->session->master_key_length)
|
||||
|| !s->method->ssl3_enc->change_cipher_state(s,
|
||||
SSL3_CC_APPLICATION | SSL3_CHANGE_CIPHER_SERVER_WRITE))
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_CERT_REQ:
|
||||
if (s->post_handshake_auth == SSL_PHA_REQUEST_PENDING) {
|
||||
if (statem_flush(s) != 1)
|
||||
return WORK_MORE_A;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_KEY_UPDATE:
|
||||
if (statem_flush(s) != 1)
|
||||
return WORK_MORE_A;
|
||||
if (!tls13_update_key(s, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SESSION_TICKET:
|
||||
clear_sys_error();
|
||||
if (SSL_IS_TLS13(s) && statem_flush(s) != 1) {
|
||||
if (SSL_get_error(s, 0) == SSL_ERROR_SYSCALL
|
||||
&& conn_is_closed()) {
|
||||
/*
|
||||
* We ignore connection closed errors in TLSv1.3 when sending a
|
||||
* NewSessionTicket and behave as if we were successful. This is
|
||||
* so that we are still able to read data sent to us by a client
|
||||
* that closes soon after the end of the handshake without
|
||||
* waiting to read our post-handshake NewSessionTickets.
|
||||
*/
|
||||
s->rwstate = SSL_NOTHING;
|
||||
break;
|
||||
}
|
||||
|
||||
return WORK_MORE_A;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return WORK_FINISHED_CONTINUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the message construction function and message type for sending from the
|
||||
* server
|
||||
*
|
||||
* Valid return values are:
|
||||
* 1: Success
|
||||
* 0: Error
|
||||
*/
|
||||
int ossl_statem_server_construct_message(SSL *s, WPACKET *pkt,
|
||||
confunc_f *confunc, int *mt)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* Shouldn't happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE,
|
||||
SSL_R_BAD_HANDSHAKE_STATE);
|
||||
return 0;
|
||||
|
||||
case TLS_ST_SW_CHANGE:
|
||||
if (SSL_IS_DTLS(s))
|
||||
*confunc = dtls_construct_change_cipher_spec;
|
||||
else
|
||||
*confunc = tls_construct_change_cipher_spec;
|
||||
*mt = SSL3_MT_CHANGE_CIPHER_SPEC;
|
||||
break;
|
||||
|
||||
case DTLS_ST_SW_HELLO_VERIFY_REQUEST:
|
||||
*confunc = dtls_construct_hello_verify_request;
|
||||
*mt = DTLS1_MT_HELLO_VERIFY_REQUEST;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_HELLO_REQ:
|
||||
/* No construction function needed */
|
||||
*confunc = NULL;
|
||||
*mt = SSL3_MT_HELLO_REQUEST;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SRVR_HELLO:
|
||||
*confunc = tls_construct_server_hello;
|
||||
*mt = SSL3_MT_SERVER_HELLO;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_CERT:
|
||||
*confunc = tls_construct_server_certificate;
|
||||
*mt = SSL3_MT_CERTIFICATE;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_CERT_VRFY:
|
||||
*confunc = tls_construct_cert_verify;
|
||||
*mt = SSL3_MT_CERTIFICATE_VERIFY;
|
||||
break;
|
||||
|
||||
|
||||
case TLS_ST_SW_KEY_EXCH:
|
||||
*confunc = tls_construct_server_key_exchange;
|
||||
*mt = SSL3_MT_SERVER_KEY_EXCHANGE;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_CERT_REQ:
|
||||
*confunc = tls_construct_certificate_request;
|
||||
*mt = SSL3_MT_CERTIFICATE_REQUEST;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SRVR_DONE:
|
||||
*confunc = tls_construct_server_done;
|
||||
*mt = SSL3_MT_SERVER_DONE;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_SESSION_TICKET:
|
||||
*confunc = tls_construct_new_session_ticket;
|
||||
*mt = SSL3_MT_NEWSESSION_TICKET;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_CERT_STATUS:
|
||||
*confunc = tls_construct_cert_status;
|
||||
*mt = SSL3_MT_CERTIFICATE_STATUS;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_FINISHED:
|
||||
*confunc = tls_construct_finished;
|
||||
*mt = SSL3_MT_FINISHED;
|
||||
break;
|
||||
|
||||
case TLS_ST_EARLY_DATA:
|
||||
*confunc = NULL;
|
||||
*mt = SSL3_MT_DUMMY;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_ENCRYPTED_EXTENSIONS:
|
||||
*confunc = tls_construct_encrypted_extensions;
|
||||
*mt = SSL3_MT_ENCRYPTED_EXTENSIONS;
|
||||
break;
|
||||
|
||||
case TLS_ST_SW_KEY_UPDATE:
|
||||
*confunc = tls_construct_key_update;
|
||||
*mt = SSL3_MT_KEY_UPDATE;
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Maximum size (excluding the Handshake header) of a ClientHello message,
|
||||
* calculated as follows:
|
||||
*
|
||||
* 2 + # client_version
|
||||
* 32 + # only valid length for random
|
||||
* 1 + # length of session_id
|
||||
* 32 + # maximum size for session_id
|
||||
* 2 + # length of cipher suites
|
||||
* 2^16-2 + # maximum length of cipher suites array
|
||||
* 1 + # length of compression_methods
|
||||
* 2^8-1 + # maximum length of compression methods
|
||||
* 2 + # length of extensions
|
||||
* 2^16-1 # maximum length of extensions
|
||||
*/
|
||||
#define CLIENT_HELLO_MAX_LENGTH 131396
|
||||
|
||||
#define CLIENT_KEY_EXCH_MAX_LENGTH 2048
|
||||
#define NEXT_PROTO_MAX_LENGTH 514
|
||||
|
||||
/*
|
||||
* Returns the maximum allowed length for the current message that we are
|
||||
* reading. Excludes the message header.
|
||||
*/
|
||||
size_t ossl_statem_server_max_message_size(SSL *s)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* Shouldn't happen */
|
||||
return 0;
|
||||
|
||||
case TLS_ST_SR_CLNT_HELLO:
|
||||
return CLIENT_HELLO_MAX_LENGTH;
|
||||
|
||||
case TLS_ST_SR_END_OF_EARLY_DATA:
|
||||
return END_OF_EARLY_DATA_MAX_LENGTH;
|
||||
|
||||
case TLS_ST_SR_CERT:
|
||||
return s->max_cert_list;
|
||||
|
||||
case TLS_ST_SR_KEY_EXCH:
|
||||
return CLIENT_KEY_EXCH_MAX_LENGTH;
|
||||
|
||||
case TLS_ST_SR_CERT_VRFY:
|
||||
return SSL3_RT_MAX_PLAIN_LENGTH;
|
||||
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
case TLS_ST_SR_NEXT_PROTO:
|
||||
return NEXT_PROTO_MAX_LENGTH;
|
||||
#endif
|
||||
|
||||
case TLS_ST_SR_CHANGE:
|
||||
return CCS_MAX_LENGTH;
|
||||
|
||||
case TLS_ST_SR_FINISHED:
|
||||
return FINISHED_MAX_LENGTH;
|
||||
|
||||
case TLS_ST_SR_KEY_UPDATE:
|
||||
return KEY_UPDATE_MAX_LENGTH;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Process a message that the server has received from the client.
|
||||
*/
|
||||
MSG_PROCESS_RETURN ossl_statem_server_process_message(SSL *s, PACKET *pkt)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* Shouldn't happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return MSG_PROCESS_ERROR;
|
||||
|
||||
case TLS_ST_SR_CLNT_HELLO:
|
||||
return tls_process_client_hello(s, pkt);
|
||||
|
||||
case TLS_ST_SR_END_OF_EARLY_DATA:
|
||||
return tls_process_end_of_early_data(s, pkt);
|
||||
|
||||
case TLS_ST_SR_CERT:
|
||||
return tls_process_client_certificate(s, pkt);
|
||||
|
||||
case TLS_ST_SR_KEY_EXCH:
|
||||
return tls_process_client_key_exchange(s, pkt);
|
||||
|
||||
case TLS_ST_SR_CERT_VRFY:
|
||||
return tls_process_cert_verify(s, pkt);
|
||||
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
case TLS_ST_SR_NEXT_PROTO:
|
||||
return tls_process_next_proto(s, pkt);
|
||||
#endif
|
||||
|
||||
case TLS_ST_SR_CHANGE:
|
||||
return tls_process_change_cipher_spec(s, pkt);
|
||||
|
||||
case TLS_ST_SR_FINISHED:
|
||||
return tls_process_finished(s, pkt);
|
||||
|
||||
case TLS_ST_SR_KEY_UPDATE:
|
||||
return tls_process_key_update(s, pkt);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform any further processing required following the receipt of a message
|
||||
* from the client
|
||||
*/
|
||||
WORK_STATE ossl_statem_server_post_process_message(SSL *s, WORK_STATE wst)
|
||||
{
|
||||
OSSL_STATEM *st = &s->statem;
|
||||
|
||||
switch (st->hand_state) {
|
||||
default:
|
||||
/* Shouldn't happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return WORK_ERROR;
|
||||
|
||||
case TLS_ST_SR_CLNT_HELLO:
|
||||
return tls_post_process_client_hello(s, wst);
|
||||
|
||||
case TLS_ST_SR_KEY_EXCH:
|
||||
return tls_post_process_client_key_exchange(s, wst);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
/* Returns 1 on success, 0 for retryable error, -1 for fatal error */
|
||||
static int ssl_check_srp_ext_ClientHello(SSL *s)
|
||||
{
|
||||
int ret;
|
||||
int al = SSL_AD_UNRECOGNIZED_NAME;
|
||||
|
||||
if ((s->s3.tmp.new_cipher->algorithm_mkey & SSL_kSRP) &&
|
||||
(s->srp_ctx.TLS_ext_srp_username_callback != NULL)) {
|
||||
if (s->srp_ctx.login == NULL) {
|
||||
/*
|
||||
* RFC 5054 says SHOULD reject, we do so if There is no srp
|
||||
* login name
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_UNKNOWN_PSK_IDENTITY,
|
||||
SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO,
|
||||
SSL_R_PSK_IDENTITY_NOT_FOUND);
|
||||
return -1;
|
||||
} else {
|
||||
ret = SSL_srp_server_param_with_username(s, &al);
|
||||
if (ret < 0)
|
||||
return 0;
|
||||
if (ret == SSL3_AL_FATAL) {
|
||||
SSLfatal(s, al, SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO,
|
||||
al == SSL_AD_UNKNOWN_PSK_IDENTITY
|
||||
? SSL_R_PSK_IDENTITY_NOT_FOUND
|
||||
: SSL_R_CLIENTHELLO_TLSEXT);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
int dtls_raw_hello_verify_request(WPACKET *pkt, unsigned char *cookie,
|
||||
size_t cookie_len)
|
||||
{
|
||||
/* Always use DTLS 1.0 version: see RFC 6347 */
|
||||
if (!WPACKET_put_bytes_u16(pkt, DTLS1_VERSION)
|
||||
|| !WPACKET_sub_memcpy_u8(pkt, cookie, cookie_len))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int dtls_construct_hello_verify_request(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
unsigned int cookie_leni;
|
||||
if (s->ctx->app_gen_cookie_cb == NULL ||
|
||||
s->ctx->app_gen_cookie_cb(s, s->d1->cookie,
|
||||
&cookie_leni) == 0 ||
|
||||
cookie_leni > 255) {
|
||||
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST,
|
||||
SSL_R_COOKIE_GEN_CALLBACK_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
s->d1->cookie_len = cookie_leni;
|
||||
|
||||
if (!dtls_raw_hello_verify_request(pkt, s->d1->cookie,
|
||||
s->d1->cookie_len)) {
|
||||
SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
/*-
|
||||
* ssl_check_for_safari attempts to fingerprint Safari using OS X
|
||||
* SecureTransport using the TLS extension block in |hello|.
|
||||
* Safari, since 10.6, sends exactly these extensions, in this order:
|
||||
* SNI,
|
||||
* elliptic_curves
|
||||
* ec_point_formats
|
||||
* signature_algorithms (for TLSv1.2 only)
|
||||
*
|
||||
* We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
|
||||
* but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
|
||||
* Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
|
||||
* 10.8..10.8.3 (which don't work).
|
||||
*/
|
||||
static void ssl_check_for_safari(SSL *s, const CLIENTHELLO_MSG *hello)
|
||||
{
|
||||
static const unsigned char kSafariExtensionsBlock[] = {
|
||||
0x00, 0x0a, /* elliptic_curves extension */
|
||||
0x00, 0x08, /* 8 bytes */
|
||||
0x00, 0x06, /* 6 bytes of curve ids */
|
||||
0x00, 0x17, /* P-256 */
|
||||
0x00, 0x18, /* P-384 */
|
||||
0x00, 0x19, /* P-521 */
|
||||
|
||||
0x00, 0x0b, /* ec_point_formats */
|
||||
0x00, 0x02, /* 2 bytes */
|
||||
0x01, /* 1 point format */
|
||||
0x00, /* uncompressed */
|
||||
/* The following is only present in TLS 1.2 */
|
||||
0x00, 0x0d, /* signature_algorithms */
|
||||
0x00, 0x0c, /* 12 bytes */
|
||||
0x00, 0x0a, /* 10 bytes */
|
||||
0x05, 0x01, /* SHA-384/RSA */
|
||||
0x04, 0x01, /* SHA-256/RSA */
|
||||
0x02, 0x01, /* SHA-1/RSA */
|
||||
0x04, 0x03, /* SHA-256/ECDSA */
|
||||
0x02, 0x03, /* SHA-1/ECDSA */
|
||||
};
|
||||
/* Length of the common prefix (first two extensions). */
|
||||
static const size_t kSafariCommonExtensionsLength = 18;
|
||||
unsigned int type;
|
||||
PACKET sni, tmppkt;
|
||||
size_t ext_len;
|
||||
|
||||
tmppkt = hello->extensions;
|
||||
|
||||
if (!PACKET_forward(&tmppkt, 2)
|
||||
|| !PACKET_get_net_2(&tmppkt, &type)
|
||||
|| !PACKET_get_length_prefixed_2(&tmppkt, &sni)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (type != TLSEXT_TYPE_server_name)
|
||||
return;
|
||||
|
||||
ext_len = TLS1_get_client_version(s) >= TLS1_2_VERSION ?
|
||||
sizeof(kSafariExtensionsBlock) : kSafariCommonExtensionsLength;
|
||||
|
||||
s->s3.is_probably_safari = PACKET_equal(&tmppkt, kSafariExtensionsBlock,
|
||||
ext_len);
|
||||
}
|
||||
#endif /* !OPENSSL_NO_EC */
|
||||
|
||||
MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt)
|
||||
{
|
||||
/* |cookie| will only be initialized for DTLS. */
|
||||
PACKET session_id, compression, extensions, cookie;
|
||||
static const unsigned char null_compression = 0;
|
||||
CLIENTHELLO_MSG *clienthello = NULL;
|
||||
|
||||
/* Check if this is actually an unexpected renegotiation ClientHello */
|
||||
if (s->renegotiate == 0 && !SSL_IS_FIRST_HANDSHAKE(s)) {
|
||||
if (!ossl_assert(!SSL_IS_TLS13(s))) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
if ((s->options & SSL_OP_NO_RENEGOTIATION) != 0
|
||||
|| (!s->s3.send_connection_binding
|
||||
&& (s->options
|
||||
& SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION) == 0)) {
|
||||
ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION);
|
||||
return MSG_PROCESS_FINISHED_READING;
|
||||
}
|
||||
s->renegotiate = 1;
|
||||
s->new_session = 1;
|
||||
}
|
||||
|
||||
clienthello = OPENSSL_zalloc(sizeof(*clienthello));
|
||||
if (clienthello == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* First, parse the raw ClientHello data into the CLIENTHELLO_MSG structure.
|
||||
*/
|
||||
clienthello->isv2 = RECORD_LAYER_is_sslv2_record(&s->rlayer);
|
||||
PACKET_null_init(&cookie);
|
||||
|
||||
if (clienthello->isv2) {
|
||||
unsigned int mt;
|
||||
|
||||
if (!SSL_IS_FIRST_HANDSHAKE(s)
|
||||
|| s->hello_retry_request != SSL_HRR_NONE) {
|
||||
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
|
||||
SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_UNEXPECTED_MESSAGE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*-
|
||||
* An SSLv3/TLSv1 backwards-compatible CLIENT-HELLO in an SSLv2
|
||||
* header is sent directly on the wire, not wrapped as a TLS
|
||||
* record. Our record layer just processes the message length and passes
|
||||
* the rest right through. Its format is:
|
||||
* Byte Content
|
||||
* 0-1 msg_length - decoded by the record layer
|
||||
* 2 msg_type - s->init_msg points here
|
||||
* 3-4 version
|
||||
* 5-6 cipher_spec_length
|
||||
* 7-8 session_id_length
|
||||
* 9-10 challenge_length
|
||||
* ... ...
|
||||
*/
|
||||
|
||||
if (!PACKET_get_1(pkt, &mt)
|
||||
|| mt != SSL2_MT_CLIENT_HELLO) {
|
||||
/*
|
||||
* Should never happen. We should have tested this in the record
|
||||
* layer in order to have determined that this is a SSLv2 record
|
||||
* in the first place
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (!PACKET_get_net_2(pkt, &clienthello->legacy_version)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_LENGTH_TOO_SHORT);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Parse the message and load client random. */
|
||||
if (clienthello->isv2) {
|
||||
/*
|
||||
* Handle an SSLv2 backwards compatible ClientHello
|
||||
* Note, this is only for SSLv3+ using the backward compatible format.
|
||||
* Real SSLv2 is not supported, and is rejected below.
|
||||
*/
|
||||
unsigned int ciphersuite_len, session_id_len, challenge_len;
|
||||
PACKET challenge;
|
||||
|
||||
if (!PACKET_get_net_2(pkt, &ciphersuite_len)
|
||||
|| !PACKET_get_net_2(pkt, &session_id_len)
|
||||
|| !PACKET_get_net_2(pkt, &challenge_len)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_RECORD_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (session_id_len > SSL_MAX_SSL_SESSION_ID_LENGTH) {
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
|
||||
SSL_F_TLS_PROCESS_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!PACKET_get_sub_packet(pkt, &clienthello->ciphersuites,
|
||||
ciphersuite_len)
|
||||
|| !PACKET_copy_bytes(pkt, clienthello->session_id, session_id_len)
|
||||
|| !PACKET_get_sub_packet(pkt, &challenge, challenge_len)
|
||||
/* No extensions. */
|
||||
|| PACKET_remaining(pkt) != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_RECORD_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
clienthello->session_id_len = session_id_len;
|
||||
|
||||
/* Load the client random and compression list. We use SSL3_RANDOM_SIZE
|
||||
* here rather than sizeof(clienthello->random) because that is the limit
|
||||
* for SSLv3 and it is fixed. It won't change even if
|
||||
* sizeof(clienthello->random) does.
|
||||
*/
|
||||
challenge_len = challenge_len > SSL3_RANDOM_SIZE
|
||||
? SSL3_RANDOM_SIZE : challenge_len;
|
||||
memset(clienthello->random, 0, SSL3_RANDOM_SIZE);
|
||||
if (!PACKET_copy_bytes(&challenge,
|
||||
clienthello->random + SSL3_RANDOM_SIZE -
|
||||
challenge_len, challenge_len)
|
||||
/* Advertise only null compression. */
|
||||
|| !PACKET_buf_init(&compression, &null_compression, 1)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
PACKET_null_init(&clienthello->extensions);
|
||||
} else {
|
||||
/* Regular ClientHello. */
|
||||
if (!PACKET_copy_bytes(pkt, clienthello->random, SSL3_RANDOM_SIZE)
|
||||
|| !PACKET_get_length_prefixed_1(pkt, &session_id)
|
||||
|| !PACKET_copy_all(&session_id, clienthello->session_id,
|
||||
SSL_MAX_SSL_SESSION_ID_LENGTH,
|
||||
&clienthello->session_id_len)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (SSL_IS_DTLS(s)) {
|
||||
if (!PACKET_get_length_prefixed_1(pkt, &cookie)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
if (!PACKET_copy_all(&cookie, clienthello->dtls_cookie,
|
||||
DTLS1_COOKIE_LENGTH,
|
||||
&clienthello->dtls_cookie_len)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
* If we require cookies and this ClientHello doesn't contain one,
|
||||
* just return since we do not want to allocate any memory yet.
|
||||
* So check cookie length...
|
||||
*/
|
||||
if (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE) {
|
||||
if (clienthello->dtls_cookie_len == 0) {
|
||||
OPENSSL_free(clienthello);
|
||||
return MSG_PROCESS_FINISHED_READING;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!PACKET_get_length_prefixed_2(pkt, &clienthello->ciphersuites)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!PACKET_get_length_prefixed_1(pkt, &compression)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Could be empty. */
|
||||
if (PACKET_remaining(pkt) == 0) {
|
||||
PACKET_null_init(&clienthello->extensions);
|
||||
} else {
|
||||
if (!PACKET_get_length_prefixed_2(pkt, &clienthello->extensions)
|
||||
|| PACKET_remaining(pkt) != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!PACKET_copy_all(&compression, clienthello->compressions,
|
||||
MAX_COMPRESSIONS_SIZE,
|
||||
&clienthello->compressions_len)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CLIENT_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Preserve the raw extensions PACKET for later use */
|
||||
extensions = clienthello->extensions;
|
||||
if (!tls_collect_extensions(s, &extensions, SSL_EXT_CLIENT_HELLO,
|
||||
&clienthello->pre_proc_exts,
|
||||
&clienthello->pre_proc_exts_len, 1)) {
|
||||
/* SSLfatal already been called */
|
||||
goto err;
|
||||
}
|
||||
s->clienthello = clienthello;
|
||||
|
||||
return MSG_PROCESS_CONTINUE_PROCESSING;
|
||||
|
||||
err:
|
||||
if (clienthello != NULL)
|
||||
OPENSSL_free(clienthello->pre_proc_exts);
|
||||
OPENSSL_free(clienthello);
|
||||
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
static int tls_early_post_process_client_hello(SSL *s)
|
||||
{
|
||||
unsigned int j;
|
||||
int i, al = SSL_AD_INTERNAL_ERROR;
|
||||
int protverr;
|
||||
size_t loop;
|
||||
unsigned long id;
|
||||
#ifndef OPENSSL_NO_COMP
|
||||
SSL_COMP *comp = NULL;
|
||||
#endif
|
||||
const SSL_CIPHER *c;
|
||||
STACK_OF(SSL_CIPHER) *ciphers = NULL;
|
||||
STACK_OF(SSL_CIPHER) *scsvs = NULL;
|
||||
CLIENTHELLO_MSG *clienthello = s->clienthello;
|
||||
DOWNGRADE dgrd = DOWNGRADE_NONE;
|
||||
|
||||
/* Finished parsing the ClientHello, now we can start processing it */
|
||||
/* Give the ClientHello callback a crack at things */
|
||||
if (s->ctx->client_hello_cb != NULL) {
|
||||
/* A failure in the ClientHello callback terminates the connection. */
|
||||
switch (s->ctx->client_hello_cb(s, &al, s->ctx->client_hello_cb_arg)) {
|
||||
case SSL_CLIENT_HELLO_SUCCESS:
|
||||
break;
|
||||
case SSL_CLIENT_HELLO_RETRY:
|
||||
s->rwstate = SSL_CLIENT_HELLO_CB;
|
||||
return -1;
|
||||
case SSL_CLIENT_HELLO_ERROR:
|
||||
default:
|
||||
SSLfatal(s, al,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_CALLBACK_FAILED);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up the client_random */
|
||||
memcpy(s->s3.client_random, clienthello->random, SSL3_RANDOM_SIZE);
|
||||
|
||||
/* Choose the version */
|
||||
|
||||
if (clienthello->isv2) {
|
||||
if (clienthello->legacy_version == SSL2_VERSION
|
||||
|| (clienthello->legacy_version & 0xff00)
|
||||
!= (SSL3_VERSION_MAJOR << 8)) {
|
||||
/*
|
||||
* This is real SSLv2 or something completely unknown. We don't
|
||||
* support it.
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_UNKNOWN_PROTOCOL);
|
||||
goto err;
|
||||
}
|
||||
/* SSLv3/TLS */
|
||||
s->client_version = clienthello->legacy_version;
|
||||
}
|
||||
/*
|
||||
* Do SSL/TLS version negotiation if applicable. For DTLS we just check
|
||||
* versions are potentially compatible. Version negotiation comes later.
|
||||
*/
|
||||
if (!SSL_IS_DTLS(s)) {
|
||||
protverr = ssl_choose_server_version(s, clienthello, &dgrd);
|
||||
} else if (s->method->version != DTLS_ANY_VERSION &&
|
||||
DTLS_VERSION_LT((int)clienthello->legacy_version, s->version)) {
|
||||
protverr = SSL_R_VERSION_TOO_LOW;
|
||||
} else {
|
||||
protverr = 0;
|
||||
}
|
||||
|
||||
if (protverr) {
|
||||
if (SSL_IS_FIRST_HANDSHAKE(s)) {
|
||||
/* like ssl3_get_record, send alert using remote version number */
|
||||
s->version = s->client_version = clienthello->legacy_version;
|
||||
}
|
||||
SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, protverr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* TLSv1.3 specifies that a ClientHello must end on a record boundary */
|
||||
if (SSL_IS_TLS13(s) && RECORD_LAYER_processed_read_pending(&s->rlayer)) {
|
||||
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_NOT_ON_RECORD_BOUNDARY);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (SSL_IS_DTLS(s)) {
|
||||
/* Empty cookie was already handled above by returning early. */
|
||||
if (SSL_get_options(s) & SSL_OP_COOKIE_EXCHANGE) {
|
||||
if (s->ctx->app_verify_cookie_cb != NULL) {
|
||||
if (s->ctx->app_verify_cookie_cb(s, clienthello->dtls_cookie,
|
||||
clienthello->dtls_cookie_len) == 0) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_COOKIE_MISMATCH);
|
||||
goto err;
|
||||
/* else cookie verification succeeded */
|
||||
}
|
||||
/* default verification */
|
||||
} else if (s->d1->cookie_len != clienthello->dtls_cookie_len
|
||||
|| memcmp(clienthello->dtls_cookie, s->d1->cookie,
|
||||
s->d1->cookie_len) != 0) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_COOKIE_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
s->d1->cookie_verified = 1;
|
||||
}
|
||||
if (s->method->version == DTLS_ANY_VERSION) {
|
||||
protverr = ssl_choose_server_version(s, clienthello, &dgrd);
|
||||
if (protverr != 0) {
|
||||
s->version = s->client_version;
|
||||
SSLfatal(s, SSL_AD_PROTOCOL_VERSION,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO, protverr);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s->hit = 0;
|
||||
|
||||
if (!ssl_cache_cipherlist(s, &clienthello->ciphersuites,
|
||||
clienthello->isv2) ||
|
||||
!bytes_to_cipher_list(s, &clienthello->ciphersuites, &ciphers, &scsvs,
|
||||
clienthello->isv2, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
s->s3.send_connection_binding = 0;
|
||||
/* Check what signalling cipher-suite values were received. */
|
||||
if (scsvs != NULL) {
|
||||
for(i = 0; i < sk_SSL_CIPHER_num(scsvs); i++) {
|
||||
c = sk_SSL_CIPHER_value(scsvs, i);
|
||||
if (SSL_CIPHER_get_id(c) == SSL3_CK_SCSV) {
|
||||
if (s->renegotiate) {
|
||||
/* SCSV is fatal if renegotiating */
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING);
|
||||
goto err;
|
||||
}
|
||||
s->s3.send_connection_binding = 1;
|
||||
} else if (SSL_CIPHER_get_id(c) == SSL3_CK_FALLBACK_SCSV &&
|
||||
!ssl_check_version_downgrade(s)) {
|
||||
/*
|
||||
* This SCSV indicates that the client previously tried
|
||||
* a higher version. We should fail if the current version
|
||||
* is an unexpected downgrade, as that indicates that the first
|
||||
* connection may have been tampered with in order to trigger
|
||||
* an insecure downgrade.
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_INAPPROPRIATE_FALLBACK,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_INAPPROPRIATE_FALLBACK);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* For TLSv1.3 we must select the ciphersuite *before* session resumption */
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
const SSL_CIPHER *cipher =
|
||||
ssl3_choose_cipher(s, ciphers, SSL_get_ciphers(s));
|
||||
|
||||
if (cipher == NULL) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_NO_SHARED_CIPHER);
|
||||
goto err;
|
||||
}
|
||||
if (s->hello_retry_request == SSL_HRR_PENDING
|
||||
&& (s->s3.tmp.new_cipher == NULL
|
||||
|| s->s3.tmp.new_cipher->id != cipher->id)) {
|
||||
/*
|
||||
* A previous HRR picked a different ciphersuite to the one we
|
||||
* just selected. Something must have changed.
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_BAD_CIPHER);
|
||||
goto err;
|
||||
}
|
||||
s->s3.tmp.new_cipher = cipher;
|
||||
}
|
||||
|
||||
/* We need to do this before getting the session */
|
||||
if (!tls_parse_extension(s, TLSEXT_IDX_extended_master_secret,
|
||||
SSL_EXT_CLIENT_HELLO,
|
||||
clienthello->pre_proc_exts, NULL, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* We don't allow resumption in a backwards compatible ClientHello.
|
||||
* TODO(openssl-team): in TLS1.1+, session_id MUST be empty.
|
||||
*
|
||||
* Versions before 0.9.7 always allow clients to resume sessions in
|
||||
* renegotiation. 0.9.7 and later allow this by default, but optionally
|
||||
* ignore resumption requests with flag
|
||||
* SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION (it's a new flag rather
|
||||
* than a change to default behavior so that applications relying on
|
||||
* this for security won't even compile against older library versions).
|
||||
* 1.0.1 and later also have a function SSL_renegotiate_abbreviated() to
|
||||
* request renegotiation but not a new session (s->new_session remains
|
||||
* unset): for servers, this essentially just means that the
|
||||
* SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION setting will be
|
||||
* ignored.
|
||||
*/
|
||||
if (clienthello->isv2 ||
|
||||
(s->new_session &&
|
||||
(s->options & SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION))) {
|
||||
if (!ssl_get_new_session(s, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else {
|
||||
i = ssl_get_prev_session(s, clienthello);
|
||||
if (i == 1) {
|
||||
/* previous session */
|
||||
s->hit = 1;
|
||||
} else if (i == -1) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
} else {
|
||||
/* i == 0 */
|
||||
if (!ssl_get_new_session(s, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
memcpy(s->tmp_session_id, s->clienthello->session_id,
|
||||
s->clienthello->session_id_len);
|
||||
s->tmp_session_id_len = s->clienthello->session_id_len;
|
||||
}
|
||||
|
||||
/*
|
||||
* If it is a hit, check that the cipher is in the list. In TLSv1.3 we check
|
||||
* ciphersuite compatibility with the session as part of resumption.
|
||||
*/
|
||||
if (!SSL_IS_TLS13(s) && s->hit) {
|
||||
j = 0;
|
||||
id = s->session->cipher->id;
|
||||
|
||||
OSSL_TRACE_BEGIN(TLS_CIPHER) {
|
||||
BIO_printf(trc_out, "client sent %d ciphers\n",
|
||||
sk_SSL_CIPHER_num(ciphers));
|
||||
}
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(ciphers); i++) {
|
||||
c = sk_SSL_CIPHER_value(ciphers, i);
|
||||
if (trc_out != NULL)
|
||||
BIO_printf(trc_out, "client [%2d of %2d]:%s\n", i,
|
||||
sk_SSL_CIPHER_num(ciphers), SSL_CIPHER_get_name(c));
|
||||
if (c->id == id) {
|
||||
j = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j == 0) {
|
||||
/*
|
||||
* we need to have the cipher in the cipher list if we are asked
|
||||
* to reuse it
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_REQUIRED_CIPHER_MISSING);
|
||||
OSSL_TRACE_CANCEL(TLS_CIPHER);
|
||||
goto err;
|
||||
}
|
||||
OSSL_TRACE_END(TLS_CIPHER);
|
||||
}
|
||||
|
||||
for (loop = 0; loop < clienthello->compressions_len; loop++) {
|
||||
if (clienthello->compressions[loop] == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (loop >= clienthello->compressions_len) {
|
||||
/* no compress */
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_NO_COMPRESSION_SPECIFIED);
|
||||
goto err;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
|
||||
ssl_check_for_safari(s, clienthello);
|
||||
#endif /* !OPENSSL_NO_EC */
|
||||
|
||||
/* TLS extensions */
|
||||
if (!tls_parse_all_extensions(s, SSL_EXT_CLIENT_HELLO,
|
||||
clienthello->pre_proc_exts, NULL, 0, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if we want to use external pre-shared secret for this handshake
|
||||
* for not reused session only. We need to generate server_random before
|
||||
* calling tls_session_secret_cb in order to allow SessionTicket
|
||||
* processing to use it in key derivation.
|
||||
*/
|
||||
{
|
||||
unsigned char *pos;
|
||||
pos = s->s3.server_random;
|
||||
if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE, dgrd) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (!s->hit
|
||||
&& s->version >= TLS1_VERSION
|
||||
&& !SSL_IS_TLS13(s)
|
||||
&& !SSL_IS_DTLS(s)
|
||||
&& s->ext.session_secret_cb) {
|
||||
const SSL_CIPHER *pref_cipher = NULL;
|
||||
/*
|
||||
* s->session->master_key_length is a size_t, but this is an int for
|
||||
* backwards compat reasons
|
||||
*/
|
||||
int master_key_length;
|
||||
|
||||
master_key_length = sizeof(s->session->master_key);
|
||||
if (s->ext.session_secret_cb(s, s->session->master_key,
|
||||
&master_key_length, ciphers,
|
||||
&pref_cipher,
|
||||
s->ext.session_secret_cb_arg)
|
||||
&& master_key_length > 0) {
|
||||
s->session->master_key_length = master_key_length;
|
||||
s->hit = 1;
|
||||
s->peer_ciphers = ciphers;
|
||||
s->session->verify_result = X509_V_OK;
|
||||
|
||||
ciphers = NULL;
|
||||
|
||||
/* check if some cipher was preferred by call back */
|
||||
if (pref_cipher == NULL)
|
||||
pref_cipher = ssl3_choose_cipher(s, s->peer_ciphers,
|
||||
SSL_get_ciphers(s));
|
||||
if (pref_cipher == NULL) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_NO_SHARED_CIPHER);
|
||||
goto err;
|
||||
}
|
||||
|
||||
s->session->cipher = pref_cipher;
|
||||
sk_SSL_CIPHER_free(s->cipher_list);
|
||||
s->cipher_list = sk_SSL_CIPHER_dup(s->peer_ciphers);
|
||||
sk_SSL_CIPHER_free(s->cipher_list_by_id);
|
||||
s->cipher_list_by_id = sk_SSL_CIPHER_dup(s->peer_ciphers);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Worst case, we will use the NULL compression, but if we have other
|
||||
* options, we will now look for them. We have complen-1 compression
|
||||
* algorithms from the client, starting at q.
|
||||
*/
|
||||
s->s3.tmp.new_compression = NULL;
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
/*
|
||||
* We already checked above that the NULL compression method appears in
|
||||
* the list. Now we check there aren't any others (which is illegal in
|
||||
* a TLSv1.3 ClientHello.
|
||||
*/
|
||||
if (clienthello->compressions_len != 1) {
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_INVALID_COMPRESSION_ALGORITHM);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
#ifndef OPENSSL_NO_COMP
|
||||
/* This only happens if we have a cache hit */
|
||||
else if (s->session->compress_meth != 0) {
|
||||
int m, comp_id = s->session->compress_meth;
|
||||
unsigned int k;
|
||||
/* Perform sanity checks on resumed compression algorithm */
|
||||
/* Can't disable compression */
|
||||
if (!ssl_allow_compression(s)) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_INCONSISTENT_COMPRESSION);
|
||||
goto err;
|
||||
}
|
||||
/* Look for resumed compression method */
|
||||
for (m = 0; m < sk_SSL_COMP_num(s->ctx->comp_methods); m++) {
|
||||
comp = sk_SSL_COMP_value(s->ctx->comp_methods, m);
|
||||
if (comp_id == comp->id) {
|
||||
s->s3.tmp.new_compression = comp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (s->s3.tmp.new_compression == NULL) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_INVALID_COMPRESSION_ALGORITHM);
|
||||
goto err;
|
||||
}
|
||||
/* Look for resumed method in compression list */
|
||||
for (k = 0; k < clienthello->compressions_len; k++) {
|
||||
if (clienthello->compressions[k] == comp_id)
|
||||
break;
|
||||
}
|
||||
if (k >= clienthello->compressions_len) {
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING);
|
||||
goto err;
|
||||
}
|
||||
} else if (s->hit) {
|
||||
comp = NULL;
|
||||
} else if (ssl_allow_compression(s) && s->ctx->comp_methods) {
|
||||
/* See if we have a match */
|
||||
int m, nn, v, done = 0;
|
||||
unsigned int o;
|
||||
|
||||
nn = sk_SSL_COMP_num(s->ctx->comp_methods);
|
||||
for (m = 0; m < nn; m++) {
|
||||
comp = sk_SSL_COMP_value(s->ctx->comp_methods, m);
|
||||
v = comp->id;
|
||||
for (o = 0; o < clienthello->compressions_len; o++) {
|
||||
if (v == clienthello->compressions[o]) {
|
||||
done = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (done)
|
||||
break;
|
||||
}
|
||||
if (done)
|
||||
s->s3.tmp.new_compression = comp;
|
||||
else
|
||||
comp = NULL;
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* If compression is disabled we'd better not try to resume a session
|
||||
* using compression.
|
||||
*/
|
||||
if (s->session->compress_meth != 0) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_INCONSISTENT_COMPRESSION);
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Given s->peer_ciphers and SSL_get_ciphers, we must pick a cipher
|
||||
*/
|
||||
|
||||
if (!s->hit || SSL_IS_TLS13(s)) {
|
||||
sk_SSL_CIPHER_free(s->peer_ciphers);
|
||||
s->peer_ciphers = ciphers;
|
||||
if (ciphers == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
ciphers = NULL;
|
||||
}
|
||||
|
||||
if (!s->hit) {
|
||||
#ifdef OPENSSL_NO_COMP
|
||||
s->session->compress_meth = 0;
|
||||
#else
|
||||
s->session->compress_meth = (comp == NULL) ? 0 : comp->id;
|
||||
#endif
|
||||
if (!tls1_set_server_sigalgs(s)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
sk_SSL_CIPHER_free(ciphers);
|
||||
sk_SSL_CIPHER_free(scsvs);
|
||||
OPENSSL_free(clienthello->pre_proc_exts);
|
||||
OPENSSL_free(s->clienthello);
|
||||
s->clienthello = NULL;
|
||||
return 1;
|
||||
err:
|
||||
sk_SSL_CIPHER_free(ciphers);
|
||||
sk_SSL_CIPHER_free(scsvs);
|
||||
OPENSSL_free(clienthello->pre_proc_exts);
|
||||
OPENSSL_free(s->clienthello);
|
||||
s->clienthello = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Call the status request callback if needed. Upon success, returns 1.
|
||||
* Upon failure, returns 0.
|
||||
*/
|
||||
static int tls_handle_status_request(SSL *s)
|
||||
{
|
||||
s->ext.status_expected = 0;
|
||||
|
||||
/*
|
||||
* If status request then ask callback what to do. Note: this must be
|
||||
* called after servername callbacks in case the certificate has changed,
|
||||
* and must be called after the cipher has been chosen because this may
|
||||
* influence which certificate is sent
|
||||
*/
|
||||
if (s->ext.status_type != TLSEXT_STATUSTYPE_nothing && s->ctx != NULL
|
||||
&& s->ctx->ext.status_cb != NULL) {
|
||||
int ret;
|
||||
|
||||
/* If no certificate can't return certificate status */
|
||||
if (s->s3.tmp.cert != NULL) {
|
||||
/*
|
||||
* Set current certificate to one we will use so SSL_get_certificate
|
||||
* et al can pick it up.
|
||||
*/
|
||||
s->cert->key = s->s3.tmp.cert;
|
||||
ret = s->ctx->ext.status_cb(s, s->ctx->ext.status_arg);
|
||||
switch (ret) {
|
||||
/* We don't want to send a status request response */
|
||||
case SSL_TLSEXT_ERR_NOACK:
|
||||
s->ext.status_expected = 0;
|
||||
break;
|
||||
/* status request response should be sent */
|
||||
case SSL_TLSEXT_ERR_OK:
|
||||
if (s->ext.ocsp.resp)
|
||||
s->ext.status_expected = 1;
|
||||
break;
|
||||
/* something bad happened */
|
||||
case SSL_TLSEXT_ERR_ALERT_FATAL:
|
||||
default:
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_HANDLE_STATUS_REQUEST,
|
||||
SSL_R_CLIENTHELLO_TLSEXT);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Call the alpn_select callback if needed. Upon success, returns 1.
|
||||
* Upon failure, returns 0.
|
||||
*/
|
||||
int tls_handle_alpn(SSL *s)
|
||||
{
|
||||
const unsigned char *selected = NULL;
|
||||
unsigned char selected_len = 0;
|
||||
|
||||
if (s->ctx->ext.alpn_select_cb != NULL && s->s3.alpn_proposed != NULL) {
|
||||
int r = s->ctx->ext.alpn_select_cb(s, &selected, &selected_len,
|
||||
s->s3.alpn_proposed,
|
||||
(unsigned int)s->s3.alpn_proposed_len,
|
||||
s->ctx->ext.alpn_select_cb_arg);
|
||||
|
||||
if (r == SSL_TLSEXT_ERR_OK) {
|
||||
OPENSSL_free(s->s3.alpn_selected);
|
||||
s->s3.alpn_selected = OPENSSL_memdup(selected, selected_len);
|
||||
if (s->s3.alpn_selected == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_HANDLE_ALPN,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
s->s3.alpn_selected_len = selected_len;
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
/* ALPN takes precedence over NPN. */
|
||||
s->s3.npn_seen = 0;
|
||||
#endif
|
||||
|
||||
/* Check ALPN is consistent with session */
|
||||
if (s->session->ext.alpn_selected == NULL
|
||||
|| selected_len != s->session->ext.alpn_selected_len
|
||||
|| memcmp(selected, s->session->ext.alpn_selected,
|
||||
selected_len) != 0) {
|
||||
/* Not consistent so can't be used for early_data */
|
||||
s->ext.early_data_ok = 0;
|
||||
|
||||
if (!s->hit) {
|
||||
/*
|
||||
* This is a new session and so alpn_selected should have
|
||||
* been initialised to NULL. We should update it with the
|
||||
* selected ALPN.
|
||||
*/
|
||||
if (!ossl_assert(s->session->ext.alpn_selected == NULL)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_HANDLE_ALPN,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
s->session->ext.alpn_selected = OPENSSL_memdup(selected,
|
||||
selected_len);
|
||||
if (s->session->ext.alpn_selected == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_HANDLE_ALPN,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
s->session->ext.alpn_selected_len = selected_len;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
} else if (r != SSL_TLSEXT_ERR_NOACK) {
|
||||
SSLfatal(s, SSL_AD_NO_APPLICATION_PROTOCOL, SSL_F_TLS_HANDLE_ALPN,
|
||||
SSL_R_NO_APPLICATION_PROTOCOL);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* If r == SSL_TLSEXT_ERR_NOACK then behave as if no callback was
|
||||
* present.
|
||||
*/
|
||||
}
|
||||
|
||||
/* Check ALPN is consistent with session */
|
||||
if (s->session->ext.alpn_selected != NULL) {
|
||||
/* Not consistent so can't be used for early_data */
|
||||
s->ext.early_data_ok = 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
WORK_STATE tls_post_process_client_hello(SSL *s, WORK_STATE wst)
|
||||
{
|
||||
const SSL_CIPHER *cipher;
|
||||
|
||||
if (wst == WORK_MORE_A) {
|
||||
int rv = tls_early_post_process_client_hello(s);
|
||||
if (rv == 0) {
|
||||
/* SSLfatal() was already called */
|
||||
goto err;
|
||||
}
|
||||
if (rv < 0)
|
||||
return WORK_MORE_A;
|
||||
wst = WORK_MORE_B;
|
||||
}
|
||||
if (wst == WORK_MORE_B) {
|
||||
if (!s->hit || SSL_IS_TLS13(s)) {
|
||||
/* Let cert callback update server certificates if required */
|
||||
if (!s->hit && s->cert->cert_cb != NULL) {
|
||||
int rv = s->cert->cert_cb(s, s->cert->cert_cb_arg);
|
||||
if (rv == 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_CERT_CB_ERROR);
|
||||
goto err;
|
||||
}
|
||||
if (rv < 0) {
|
||||
s->rwstate = SSL_X509_LOOKUP;
|
||||
return WORK_MORE_B;
|
||||
}
|
||||
s->rwstate = SSL_NOTHING;
|
||||
}
|
||||
|
||||
/* In TLSv1.3 we selected the ciphersuite before resumption */
|
||||
if (!SSL_IS_TLS13(s)) {
|
||||
cipher =
|
||||
ssl3_choose_cipher(s, s->peer_ciphers, SSL_get_ciphers(s));
|
||||
|
||||
if (cipher == NULL) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_POST_PROCESS_CLIENT_HELLO,
|
||||
SSL_R_NO_SHARED_CIPHER);
|
||||
goto err;
|
||||
}
|
||||
s->s3.tmp.new_cipher = cipher;
|
||||
}
|
||||
if (!s->hit) {
|
||||
if (!tls_choose_sigalg(s, 1)) {
|
||||
/* SSLfatal already called */
|
||||
goto err;
|
||||
}
|
||||
/* check whether we should disable session resumption */
|
||||
if (s->not_resumable_session_cb != NULL)
|
||||
s->session->not_resumable =
|
||||
s->not_resumable_session_cb(s,
|
||||
((s->s3.tmp.new_cipher->algorithm_mkey
|
||||
& (SSL_kDHE | SSL_kECDHE)) != 0));
|
||||
if (s->session->not_resumable)
|
||||
/* do not send a session ticket */
|
||||
s->ext.ticket_expected = 0;
|
||||
}
|
||||
} else {
|
||||
/* Session-id reuse */
|
||||
s->s3.tmp.new_cipher = s->session->cipher;
|
||||
}
|
||||
|
||||
/*-
|
||||
* we now have the following setup.
|
||||
* client_random
|
||||
* cipher_list - our preferred list of ciphers
|
||||
* ciphers - the clients preferred list of ciphers
|
||||
* compression - basically ignored right now
|
||||
* ssl version is set - sslv3
|
||||
* s->session - The ssl session has been setup.
|
||||
* s->hit - session reuse flag
|
||||
* s->s3.tmp.new_cipher - the new cipher to use.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Call status_request callback if needed. Has to be done after the
|
||||
* certificate callbacks etc above.
|
||||
*/
|
||||
if (!tls_handle_status_request(s)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
* Call alpn_select callback if needed. Has to be done after SNI and
|
||||
* cipher negotiation (HTTP/2 restricts permitted ciphers). In TLSv1.3
|
||||
* we already did this because cipher negotiation happens earlier, and
|
||||
* we must handle ALPN before we decide whether to accept early_data.
|
||||
*/
|
||||
if (!SSL_IS_TLS13(s) && !tls_handle_alpn(s)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
wst = WORK_MORE_C;
|
||||
}
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
if (wst == WORK_MORE_C) {
|
||||
int ret;
|
||||
if ((ret = ssl_check_srp_ext_ClientHello(s)) == 0) {
|
||||
/*
|
||||
* callback indicates further work to be done
|
||||
*/
|
||||
s->rwstate = SSL_X509_LOOKUP;
|
||||
return WORK_MORE_C;
|
||||
}
|
||||
if (ret < 0) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return WORK_FINISHED_STOP;
|
||||
err:
|
||||
return WORK_ERROR;
|
||||
}
|
||||
|
||||
int tls_construct_server_hello(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
int compm;
|
||||
size_t sl, len;
|
||||
int version;
|
||||
unsigned char *session_id;
|
||||
int usetls13 = SSL_IS_TLS13(s) || s->hello_retry_request == SSL_HRR_PENDING;
|
||||
|
||||
version = usetls13 ? TLS1_2_VERSION : s->version;
|
||||
if (!WPACKET_put_bytes_u16(pkt, version)
|
||||
/*
|
||||
* Random stuff. Filling of the server_random takes place in
|
||||
* tls_process_client_hello()
|
||||
*/
|
||||
|| !WPACKET_memcpy(pkt,
|
||||
s->hello_retry_request == SSL_HRR_PENDING
|
||||
? hrrrandom : s->s3.server_random,
|
||||
SSL3_RANDOM_SIZE)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_SERVER_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*-
|
||||
* There are several cases for the session ID to send
|
||||
* back in the server hello:
|
||||
* - For session reuse from the session cache,
|
||||
* we send back the old session ID.
|
||||
* - If stateless session reuse (using a session ticket)
|
||||
* is successful, we send back the client's "session ID"
|
||||
* (which doesn't actually identify the session).
|
||||
* - If it is a new session, we send back the new
|
||||
* session ID.
|
||||
* - However, if we want the new session to be single-use,
|
||||
* we send back a 0-length session ID.
|
||||
* - In TLSv1.3 we echo back the session id sent to us by the client
|
||||
* regardless
|
||||
* s->hit is non-zero in either case of session reuse,
|
||||
* so the following won't overwrite an ID that we're supposed
|
||||
* to send back.
|
||||
*/
|
||||
if (s->session->not_resumable ||
|
||||
(!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER)
|
||||
&& !s->hit))
|
||||
s->session->session_id_length = 0;
|
||||
|
||||
if (usetls13) {
|
||||
sl = s->tmp_session_id_len;
|
||||
session_id = s->tmp_session_id;
|
||||
} else {
|
||||
sl = s->session->session_id_length;
|
||||
session_id = s->session->session_id;
|
||||
}
|
||||
|
||||
if (sl > sizeof(s->session->session_id)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_SERVER_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* set up the compression method */
|
||||
#ifdef OPENSSL_NO_COMP
|
||||
compm = 0;
|
||||
#else
|
||||
if (usetls13 || s->s3.tmp.new_compression == NULL)
|
||||
compm = 0;
|
||||
else
|
||||
compm = s->s3.tmp.new_compression->id;
|
||||
#endif
|
||||
|
||||
if (!WPACKET_sub_memcpy_u8(pkt, session_id, sl)
|
||||
|| !s->method->put_cipher_by_char(s->s3.tmp.new_cipher, pkt, &len)
|
||||
|| !WPACKET_put_bytes_u8(pkt, compm)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_SERVER_HELLO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!tls_construct_extensions(s, pkt,
|
||||
s->hello_retry_request == SSL_HRR_PENDING
|
||||
? SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST
|
||||
: (SSL_IS_TLS13(s)
|
||||
? SSL_EXT_TLS1_3_SERVER_HELLO
|
||||
: SSL_EXT_TLS1_2_SERVER_HELLO),
|
||||
NULL, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (s->hello_retry_request == SSL_HRR_PENDING) {
|
||||
/* Ditch the session. We'll create a new one next time around */
|
||||
SSL_SESSION_free(s->session);
|
||||
s->session = NULL;
|
||||
s->hit = 0;
|
||||
|
||||
/*
|
||||
* Re-initialise the Transcript Hash. We're going to prepopulate it with
|
||||
* a synthetic message_hash in place of ClientHello1.
|
||||
*/
|
||||
if (!create_synthetic_message_hash(s, NULL, 0, NULL, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
} else if (!(s->verify_mode & SSL_VERIFY_PEER)
|
||||
&& !ssl3_digest_cached_records(s, 0)) {
|
||||
/* SSLfatal() already called */;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tls_construct_server_done(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
if (!s->s3.tmp.cert_request) {
|
||||
if (!ssl3_digest_cached_records(s, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tls_construct_server_key_exchange(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
#ifndef OPENSSL_NO_DH
|
||||
EVP_PKEY *pkdh = NULL;
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_EC
|
||||
unsigned char *encodedPoint = NULL;
|
||||
size_t encodedlen = 0;
|
||||
int curve_id = 0;
|
||||
#endif
|
||||
const SIGALG_LOOKUP *lu = s->s3.tmp.sigalg;
|
||||
int i;
|
||||
unsigned long type;
|
||||
const BIGNUM *r[4];
|
||||
EVP_MD_CTX *md_ctx = EVP_MD_CTX_new();
|
||||
EVP_PKEY_CTX *pctx = NULL;
|
||||
size_t paramlen, paramoffset;
|
||||
|
||||
if (!WPACKET_get_total_written(pkt, ¶moffset)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (md_ctx == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
type = s->s3.tmp.new_cipher->algorithm_mkey;
|
||||
|
||||
r[0] = r[1] = r[2] = r[3] = NULL;
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
/* Plain PSK or RSAPSK nothing to do */
|
||||
if (type & (SSL_kPSK | SSL_kRSAPSK)) {
|
||||
} else
|
||||
#endif /* !OPENSSL_NO_PSK */
|
||||
#ifndef OPENSSL_NO_DH
|
||||
if (type & (SSL_kDHE | SSL_kDHEPSK)) {
|
||||
CERT *cert = s->cert;
|
||||
|
||||
EVP_PKEY *pkdhp = NULL;
|
||||
DH *dh;
|
||||
|
||||
if (s->cert->dh_tmp_auto) {
|
||||
DH *dhp = ssl_get_auto_dh(s);
|
||||
pkdh = EVP_PKEY_new();
|
||||
if (pkdh == NULL || dhp == NULL) {
|
||||
DH_free(dhp);
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
EVP_PKEY_assign_DH(pkdh, dhp);
|
||||
pkdhp = pkdh;
|
||||
} else {
|
||||
pkdhp = cert->dh_tmp;
|
||||
}
|
||||
if ((pkdhp == NULL) && (s->cert->dh_tmp_cb != NULL)) {
|
||||
DH *dhp = s->cert->dh_tmp_cb(s, 0, 1024);
|
||||
pkdh = ssl_dh_to_pkey(dhp);
|
||||
if (pkdh == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
pkdhp = pkdh;
|
||||
}
|
||||
if (pkdhp == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
SSL_R_MISSING_TMP_DH_KEY);
|
||||
goto err;
|
||||
}
|
||||
if (!ssl_security(s, SSL_SECOP_TMP_DH,
|
||||
EVP_PKEY_security_bits(pkdhp), 0, pkdhp)) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
SSL_R_DH_KEY_TOO_SMALL);
|
||||
goto err;
|
||||
}
|
||||
if (s->s3.tmp.pkey != NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
s->s3.tmp.pkey = ssl_generate_pkey(pkdhp);
|
||||
if (s->s3.tmp.pkey == NULL) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
dh = EVP_PKEY_get0_DH(s->s3.tmp.pkey);
|
||||
if (dh == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
EVP_PKEY_free(pkdh);
|
||||
pkdh = NULL;
|
||||
|
||||
DH_get0_pqg(dh, &r[0], NULL, &r[1]);
|
||||
DH_get0_key(dh, &r[2], NULL);
|
||||
} else
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_EC
|
||||
if (type & (SSL_kECDHE | SSL_kECDHEPSK)) {
|
||||
|
||||
if (s->s3.tmp.pkey != NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Get NID of appropriate shared curve */
|
||||
curve_id = tls1_shared_group(s, -2);
|
||||
if (curve_id == 0) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
|
||||
goto err;
|
||||
}
|
||||
s->s3.tmp.pkey = ssl_generate_pkey_group(s, curve_id);
|
||||
/* Generate a new key for this curve */
|
||||
if (s->s3.tmp.pkey == NULL) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Encode the public key. */
|
||||
encodedlen = EVP_PKEY_get1_tls_encodedpoint(s->s3.tmp.pkey,
|
||||
&encodedPoint);
|
||||
if (encodedlen == 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_EC_LIB);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* We'll generate the serverKeyExchange message explicitly so we
|
||||
* can set these to NULLs
|
||||
*/
|
||||
r[0] = NULL;
|
||||
r[1] = NULL;
|
||||
r[2] = NULL;
|
||||
r[3] = NULL;
|
||||
} else
|
||||
#endif /* !OPENSSL_NO_EC */
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
if (type & SSL_kSRP) {
|
||||
if ((s->srp_ctx.N == NULL) ||
|
||||
(s->srp_ctx.g == NULL) ||
|
||||
(s->srp_ctx.s == NULL) || (s->srp_ctx.B == NULL)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
SSL_R_MISSING_SRP_PARAM);
|
||||
goto err;
|
||||
}
|
||||
r[0] = s->srp_ctx.N;
|
||||
r[1] = s->srp_ctx.g;
|
||||
r[2] = s->srp_ctx.s;
|
||||
r[3] = s->srp_ctx.B;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (((s->s3.tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP)) != 0)
|
||||
|| ((s->s3.tmp.new_cipher->algorithm_mkey & SSL_PSK)) != 0) {
|
||||
lu = NULL;
|
||||
} else if (lu == NULL) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
if (type & SSL_PSK) {
|
||||
size_t len = (s->cert->psk_identity_hint == NULL)
|
||||
? 0 : strlen(s->cert->psk_identity_hint);
|
||||
|
||||
/*
|
||||
* It should not happen that len > PSK_MAX_IDENTITY_LEN - we already
|
||||
* checked this when we set the identity hint - but just in case
|
||||
*/
|
||||
if (len > PSK_MAX_IDENTITY_LEN
|
||||
|| !WPACKET_sub_memcpy_u16(pkt, s->cert->psk_identity_hint,
|
||||
len)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < 4 && r[i] != NULL; i++) {
|
||||
unsigned char *binval;
|
||||
int res;
|
||||
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
if ((i == 2) && (type & SSL_kSRP)) {
|
||||
res = WPACKET_start_sub_packet_u8(pkt);
|
||||
} else
|
||||
#endif
|
||||
res = WPACKET_start_sub_packet_u16(pkt);
|
||||
|
||||
if (!res) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_DH
|
||||
/*-
|
||||
* for interoperability with some versions of the Microsoft TLS
|
||||
* stack, we need to zero pad the DHE pub key to the same length
|
||||
* as the prime
|
||||
*/
|
||||
if ((i == 2) && (type & (SSL_kDHE | SSL_kDHEPSK))) {
|
||||
size_t len = BN_num_bytes(r[0]) - BN_num_bytes(r[2]);
|
||||
|
||||
if (len > 0) {
|
||||
if (!WPACKET_allocate_bytes(pkt, len, &binval)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
memset(binval, 0, len);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (!WPACKET_allocate_bytes(pkt, BN_num_bytes(r[i]), &binval)
|
||||
|| !WPACKET_close(pkt)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
BN_bn2bin(r[i], binval);
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
if (type & (SSL_kECDHE | SSL_kECDHEPSK)) {
|
||||
/*
|
||||
* We only support named (not generic) curves. In this situation, the
|
||||
* ServerKeyExchange message has: [1 byte CurveType], [2 byte CurveName]
|
||||
* [1 byte length of encoded point], followed by the actual encoded
|
||||
* point itself
|
||||
*/
|
||||
if (!WPACKET_put_bytes_u8(pkt, NAMED_CURVE_TYPE)
|
||||
|| !WPACKET_put_bytes_u8(pkt, 0)
|
||||
|| !WPACKET_put_bytes_u8(pkt, curve_id)
|
||||
|| !WPACKET_sub_memcpy_u8(pkt, encodedPoint, encodedlen)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
OPENSSL_free(encodedPoint);
|
||||
encodedPoint = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* not anonymous */
|
||||
if (lu != NULL) {
|
||||
EVP_PKEY *pkey = s->s3.tmp.cert->privatekey;
|
||||
const EVP_MD *md;
|
||||
unsigned char *sigbytes1, *sigbytes2, *tbs;
|
||||
size_t siglen, tbslen;
|
||||
int rv;
|
||||
|
||||
if (pkey == NULL || !tls1_lookup_md(lu, &md)) {
|
||||
/* Should never happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
/* Get length of the parameters we have written above */
|
||||
if (!WPACKET_get_length(pkt, ¶mlen)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
/* send signature algorithm */
|
||||
if (SSL_USE_SIGALGS(s) && !WPACKET_put_bytes_u16(pkt, lu->sigalg)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
* Create the signature. We don't know the actual length of the sig
|
||||
* until after we've created it, so we reserve enough bytes for it
|
||||
* up front, and then properly allocate them in the WPACKET
|
||||
* afterwards.
|
||||
*/
|
||||
siglen = EVP_PKEY_size(pkey);
|
||||
if (!WPACKET_sub_reserve_bytes_u16(pkt, siglen, &sigbytes1)
|
||||
|| EVP_DigestSignInit(md_ctx, &pctx, md, NULL, pkey) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
if (lu->sig == EVP_PKEY_RSA_PSS) {
|
||||
if (EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) <= 0
|
||||
|| EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, RSA_PSS_SALTLEN_DIGEST) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_EVP_LIB);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
tbslen = construct_key_exchange_tbs(s, &tbs,
|
||||
s->init_buf->data + paramoffset,
|
||||
paramlen);
|
||||
if (tbslen == 0) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
rv = EVP_DigestSign(md_ctx, sigbytes1, &siglen, tbs, tbslen);
|
||||
OPENSSL_free(tbs);
|
||||
if (rv <= 0 || !WPACKET_sub_allocate_bytes_u16(pkt, siglen, &sigbytes2)
|
||||
|| sigbytes1 != sigbytes2) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
EVP_MD_CTX_free(md_ctx);
|
||||
return 1;
|
||||
err:
|
||||
#ifndef OPENSSL_NO_DH
|
||||
EVP_PKEY_free(pkdh);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_EC
|
||||
OPENSSL_free(encodedPoint);
|
||||
#endif
|
||||
EVP_MD_CTX_free(md_ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tls_construct_certificate_request(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
/* Send random context when doing post-handshake auth */
|
||||
if (s->post_handshake_auth == SSL_PHA_REQUEST_PENDING) {
|
||||
OPENSSL_free(s->pha_context);
|
||||
s->pha_context_len = 32;
|
||||
if ((s->pha_context = OPENSSL_malloc(s->pha_context_len)) == NULL
|
||||
|| RAND_bytes(s->pha_context, s->pha_context_len) <= 0
|
||||
|| !WPACKET_sub_memcpy_u8(pkt, s->pha_context, s->pha_context_len)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
/* reset the handshake hash back to just after the ClientFinished */
|
||||
if (!tls13_restore_handshake_digest_for_pha(s)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
if (!WPACKET_put_bytes_u8(pkt, 0)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!tls_construct_extensions(s, pkt,
|
||||
SSL_EXT_TLS1_3_CERTIFICATE_REQUEST, NULL,
|
||||
0)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* get the list of acceptable cert types */
|
||||
if (!WPACKET_start_sub_packet_u8(pkt)
|
||||
|| !ssl3_get_req_cert_type(s, pkt) || !WPACKET_close(pkt)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (SSL_USE_SIGALGS(s)) {
|
||||
const uint16_t *psigs;
|
||||
size_t nl = tls12_get_psigalgs(s, 1, &psigs);
|
||||
|
||||
if (!WPACKET_start_sub_packet_u16(pkt)
|
||||
|| !WPACKET_set_flags(pkt, WPACKET_FLAGS_NON_ZERO_LENGTH)
|
||||
|| !tls12_copy_sigalgs(s, pkt, psigs, nl)
|
||||
|| !WPACKET_close(pkt)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!construct_ca_names(s, get_ca_names(s), pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
done:
|
||||
s->certreqs_sent++;
|
||||
s->s3.tmp.cert_request = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tls_process_cke_psk_preamble(SSL *s, PACKET *pkt)
|
||||
{
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
unsigned char psk[PSK_MAX_PSK_LEN];
|
||||
size_t psklen;
|
||||
PACKET psk_identity;
|
||||
|
||||
if (!PACKET_get_length_prefixed_2(pkt, &psk_identity)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
return 0;
|
||||
}
|
||||
if (PACKET_remaining(&psk_identity) > PSK_MAX_IDENTITY_LEN) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
|
||||
SSL_R_DATA_LENGTH_TOO_LONG);
|
||||
return 0;
|
||||
}
|
||||
if (s->psk_server_callback == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
|
||||
SSL_R_PSK_NO_SERVER_CB);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!PACKET_strndup(&psk_identity, &s->session->psk_identity)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
psklen = s->psk_server_callback(s, s->session->psk_identity,
|
||||
psk, sizeof(psk));
|
||||
|
||||
if (psklen > PSK_MAX_PSK_LEN) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
} else if (psklen == 0) {
|
||||
/*
|
||||
* PSK related to the given identity not found
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_UNKNOWN_PSK_IDENTITY,
|
||||
SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
|
||||
SSL_R_PSK_IDENTITY_NOT_FOUND);
|
||||
return 0;
|
||||
}
|
||||
|
||||
OPENSSL_free(s->s3.tmp.psk);
|
||||
s->s3.tmp.psk = OPENSSL_memdup(psk, psklen);
|
||||
OPENSSL_cleanse(psk, psklen);
|
||||
|
||||
if (s->s3.tmp.psk == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s->s3.tmp.psklen = psklen;
|
||||
|
||||
return 1;
|
||||
#else
|
||||
/* Should never happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int tls_process_cke_rsa(SSL *s, PACKET *pkt)
|
||||
{
|
||||
#ifndef OPENSSL_NO_RSA
|
||||
unsigned char rand_premaster_secret[SSL_MAX_MASTER_KEY_LENGTH];
|
||||
int decrypt_len;
|
||||
unsigned char decrypt_good, version_good;
|
||||
size_t j, padding_len;
|
||||
PACKET enc_premaster;
|
||||
RSA *rsa = NULL;
|
||||
unsigned char *rsa_decrypt = NULL;
|
||||
int ret = 0;
|
||||
|
||||
rsa = EVP_PKEY_get0_RSA(s->cert->pkeys[SSL_PKEY_RSA].privatekey);
|
||||
if (rsa == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
SSL_R_MISSING_RSA_CERTIFICATE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* SSLv3 and pre-standard DTLS omit the length bytes. */
|
||||
if (s->version == SSL3_VERSION || s->version == DTLS1_BAD_VER) {
|
||||
enc_premaster = *pkt;
|
||||
} else {
|
||||
if (!PACKET_get_length_prefixed_2(pkt, &enc_premaster)
|
||||
|| PACKET_remaining(pkt) != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We want to be sure that the plaintext buffer size makes it safe to
|
||||
* iterate over the entire size of a premaster secret
|
||||
* (SSL_MAX_MASTER_KEY_LENGTH). Reject overly short RSA keys because
|
||||
* their ciphertext cannot accommodate a premaster secret anyway.
|
||||
*/
|
||||
if (RSA_size(rsa) < SSL_MAX_MASTER_KEY_LENGTH) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
RSA_R_KEY_SIZE_TOO_SMALL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
rsa_decrypt = OPENSSL_malloc(RSA_size(rsa));
|
||||
if (rsa_decrypt == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* We must not leak whether a decryption failure occurs because of
|
||||
* Bleichenbacher's attack on PKCS #1 v1.5 RSA padding (see RFC 2246,
|
||||
* section 7.4.7.1). The code follows that advice of the TLS RFC and
|
||||
* generates a random premaster secret for the case that the decrypt
|
||||
* fails. See https://tools.ietf.org/html/rfc5246#section-7.4.7.1
|
||||
*/
|
||||
|
||||
if (RAND_priv_bytes(rand_premaster_secret,
|
||||
sizeof(rand_premaster_secret)) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Decrypt with no padding. PKCS#1 padding will be removed as part of
|
||||
* the timing-sensitive code below.
|
||||
*/
|
||||
/* TODO(size_t): Convert this function */
|
||||
decrypt_len = (int)RSA_private_decrypt((int)PACKET_remaining(&enc_premaster),
|
||||
PACKET_data(&enc_premaster),
|
||||
rsa_decrypt, rsa, RSA_NO_PADDING);
|
||||
if (decrypt_len < 0) {
|
||||
SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Check the padding. See RFC 3447, section 7.2.2. */
|
||||
|
||||
/*
|
||||
* The smallest padded premaster is 11 bytes of overhead. Small keys
|
||||
* are publicly invalid, so this may return immediately. This ensures
|
||||
* PS is at least 8 bytes.
|
||||
*/
|
||||
if (decrypt_len < 11 + SSL_MAX_MASTER_KEY_LENGTH) {
|
||||
SSLfatal(s, SSL_AD_DECRYPT_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
SSL_R_DECRYPTION_FAILED);
|
||||
goto err;
|
||||
}
|
||||
|
||||
padding_len = decrypt_len - SSL_MAX_MASTER_KEY_LENGTH;
|
||||
decrypt_good = constant_time_eq_int_8(rsa_decrypt[0], 0) &
|
||||
constant_time_eq_int_8(rsa_decrypt[1], 2);
|
||||
for (j = 2; j < padding_len - 1; j++) {
|
||||
decrypt_good &= ~constant_time_is_zero_8(rsa_decrypt[j]);
|
||||
}
|
||||
decrypt_good &= constant_time_is_zero_8(rsa_decrypt[padding_len - 1]);
|
||||
|
||||
/*
|
||||
* If the version in the decrypted pre-master secret is correct then
|
||||
* version_good will be 0xff, otherwise it'll be zero. The
|
||||
* Klima-Pokorny-Rosa extension of Bleichenbacher's attack
|
||||
* (http://eprint.iacr.org/2003/052/) exploits the version number
|
||||
* check as a "bad version oracle". Thus version checks are done in
|
||||
* constant time and are treated like any other decryption error.
|
||||
*/
|
||||
version_good =
|
||||
constant_time_eq_8(rsa_decrypt[padding_len],
|
||||
(unsigned)(s->client_version >> 8));
|
||||
version_good &=
|
||||
constant_time_eq_8(rsa_decrypt[padding_len + 1],
|
||||
(unsigned)(s->client_version & 0xff));
|
||||
|
||||
/*
|
||||
* The premaster secret must contain the same version number as the
|
||||
* ClientHello to detect version rollback attacks (strangely, the
|
||||
* protocol does not offer such protection for DH ciphersuites).
|
||||
* However, buggy clients exist that send the negotiated protocol
|
||||
* version instead if the server does not support the requested
|
||||
* protocol version. If SSL_OP_TLS_ROLLBACK_BUG is set, tolerate such
|
||||
* clients.
|
||||
*/
|
||||
if (s->options & SSL_OP_TLS_ROLLBACK_BUG) {
|
||||
unsigned char workaround_good;
|
||||
workaround_good = constant_time_eq_8(rsa_decrypt[padding_len],
|
||||
(unsigned)(s->version >> 8));
|
||||
workaround_good &=
|
||||
constant_time_eq_8(rsa_decrypt[padding_len + 1],
|
||||
(unsigned)(s->version & 0xff));
|
||||
version_good |= workaround_good;
|
||||
}
|
||||
|
||||
/*
|
||||
* Both decryption and version must be good for decrypt_good to
|
||||
* remain non-zero (0xff).
|
||||
*/
|
||||
decrypt_good &= version_good;
|
||||
|
||||
/*
|
||||
* Now copy rand_premaster_secret over from p using
|
||||
* decrypt_good_mask. If decryption failed, then p does not
|
||||
* contain valid plaintext, however, a check above guarantees
|
||||
* it is still sufficiently large to read from.
|
||||
*/
|
||||
for (j = 0; j < sizeof(rand_premaster_secret); j++) {
|
||||
rsa_decrypt[padding_len + j] =
|
||||
constant_time_select_8(decrypt_good,
|
||||
rsa_decrypt[padding_len + j],
|
||||
rand_premaster_secret[j]);
|
||||
}
|
||||
|
||||
if (!ssl_generate_master_secret(s, rsa_decrypt + padding_len,
|
||||
sizeof(rand_premaster_secret), 0)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
err:
|
||||
OPENSSL_free(rsa_decrypt);
|
||||
return ret;
|
||||
#else
|
||||
/* Should never happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_RSA,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int tls_process_cke_dhe(SSL *s, PACKET *pkt)
|
||||
{
|
||||
#ifndef OPENSSL_NO_DH
|
||||
EVP_PKEY *skey = NULL;
|
||||
DH *cdh;
|
||||
unsigned int i;
|
||||
BIGNUM *pub_key;
|
||||
const unsigned char *data;
|
||||
EVP_PKEY *ckey = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (!PACKET_get_net_2(pkt, &i) || PACKET_remaining(pkt) != i) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_DHE,
|
||||
SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG);
|
||||
goto err;
|
||||
}
|
||||
skey = s->s3.tmp.pkey;
|
||||
if (skey == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_DHE,
|
||||
SSL_R_MISSING_TMP_DH_KEY);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (PACKET_remaining(pkt) == 0L) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_DHE,
|
||||
SSL_R_MISSING_TMP_DH_KEY);
|
||||
goto err;
|
||||
}
|
||||
if (!PACKET_get_bytes(pkt, &data, i)) {
|
||||
/* We already checked we have enough data */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_DHE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
ckey = EVP_PKEY_new();
|
||||
if (ckey == NULL || EVP_PKEY_copy_parameters(ckey, skey) == 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_DHE,
|
||||
SSL_R_BN_LIB);
|
||||
goto err;
|
||||
}
|
||||
|
||||
cdh = EVP_PKEY_get0_DH(ckey);
|
||||
pub_key = BN_bin2bn(data, i, NULL);
|
||||
if (pub_key == NULL || cdh == NULL || !DH_set0_key(cdh, pub_key, NULL)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_DHE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
BN_free(pub_key);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (ssl_derive(s, skey, ckey, 1) == 0) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
EVP_PKEY_free(s->s3.tmp.pkey);
|
||||
s->s3.tmp.pkey = NULL;
|
||||
err:
|
||||
EVP_PKEY_free(ckey);
|
||||
return ret;
|
||||
#else
|
||||
/* Should never happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_DHE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int tls_process_cke_ecdhe(SSL *s, PACKET *pkt)
|
||||
{
|
||||
#ifndef OPENSSL_NO_EC
|
||||
EVP_PKEY *skey = s->s3.tmp.pkey;
|
||||
EVP_PKEY *ckey = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (PACKET_remaining(pkt) == 0L) {
|
||||
/* We don't support ECDH client auth */
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_PROCESS_CKE_ECDHE,
|
||||
SSL_R_MISSING_TMP_ECDH_KEY);
|
||||
goto err;
|
||||
} else {
|
||||
unsigned int i;
|
||||
const unsigned char *data;
|
||||
|
||||
/*
|
||||
* Get client's public key from encoded point in the
|
||||
* ClientKeyExchange message.
|
||||
*/
|
||||
|
||||
/* Get encoded point length */
|
||||
if (!PACKET_get_1(pkt, &i) || !PACKET_get_bytes(pkt, &data, i)
|
||||
|| PACKET_remaining(pkt) != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_ECDHE,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
if (skey == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_ECDHE,
|
||||
SSL_R_MISSING_TMP_ECDH_KEY);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ckey = EVP_PKEY_new();
|
||||
if (ckey == NULL || EVP_PKEY_copy_parameters(ckey, skey) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_ECDHE,
|
||||
ERR_R_EVP_LIB);
|
||||
goto err;
|
||||
}
|
||||
if (EVP_PKEY_set1_tls_encodedpoint(ckey, data, i) == 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_ECDHE,
|
||||
ERR_R_EC_LIB);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (ssl_derive(s, skey, ckey, 1) == 0) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
EVP_PKEY_free(s->s3.tmp.pkey);
|
||||
s->s3.tmp.pkey = NULL;
|
||||
err:
|
||||
EVP_PKEY_free(ckey);
|
||||
|
||||
return ret;
|
||||
#else
|
||||
/* Should never happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_ECDHE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int tls_process_cke_srp(SSL *s, PACKET *pkt)
|
||||
{
|
||||
#ifndef OPENSSL_NO_SRP
|
||||
unsigned int i;
|
||||
const unsigned char *data;
|
||||
|
||||
if (!PACKET_get_net_2(pkt, &i)
|
||||
|| !PACKET_get_bytes(pkt, &data, i)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_SRP,
|
||||
SSL_R_BAD_SRP_A_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
if ((s->srp_ctx.A = BN_bin2bn(data, i, NULL)) == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_SRP,
|
||||
ERR_R_BN_LIB);
|
||||
return 0;
|
||||
}
|
||||
if (BN_ucmp(s->srp_ctx.A, s->srp_ctx.N) >= 0 || BN_is_zero(s->srp_ctx.A)) {
|
||||
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_TLS_PROCESS_CKE_SRP,
|
||||
SSL_R_BAD_SRP_PARAMETERS);
|
||||
return 0;
|
||||
}
|
||||
OPENSSL_free(s->session->srp_username);
|
||||
s->session->srp_username = OPENSSL_strdup(s->srp_ctx.login);
|
||||
if (s->session->srp_username == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_SRP,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!srp_generate_server_master_secret(s)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
#else
|
||||
/* Should never happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_SRP,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int tls_process_cke_gost(SSL *s, PACKET *pkt)
|
||||
{
|
||||
#ifndef OPENSSL_NO_GOST
|
||||
EVP_PKEY_CTX *pkey_ctx;
|
||||
EVP_PKEY *client_pub_pkey = NULL, *pk = NULL;
|
||||
unsigned char premaster_secret[32];
|
||||
const unsigned char *start;
|
||||
size_t outlen = 32, inlen;
|
||||
unsigned long alg_a;
|
||||
unsigned int asn1id, asn1len;
|
||||
int ret = 0;
|
||||
PACKET encdata;
|
||||
|
||||
/* Get our certificate private key */
|
||||
alg_a = s->s3.tmp.new_cipher->algorithm_auth;
|
||||
if (alg_a & SSL_aGOST12) {
|
||||
/*
|
||||
* New GOST ciphersuites have SSL_aGOST01 bit too
|
||||
*/
|
||||
pk = s->cert->pkeys[SSL_PKEY_GOST12_512].privatekey;
|
||||
if (pk == NULL) {
|
||||
pk = s->cert->pkeys[SSL_PKEY_GOST12_256].privatekey;
|
||||
}
|
||||
if (pk == NULL) {
|
||||
pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
|
||||
}
|
||||
} else if (alg_a & SSL_aGOST01) {
|
||||
pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey;
|
||||
}
|
||||
|
||||
pkey_ctx = EVP_PKEY_CTX_new(pk, NULL);
|
||||
if (pkey_ctx == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
if (EVP_PKEY_decrypt_init(pkey_ctx) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* If client certificate is present and is of the same type, maybe
|
||||
* use it for key exchange. Don't mind errors from
|
||||
* EVP_PKEY_derive_set_peer, because it is completely valid to use a
|
||||
* client certificate for authorization only.
|
||||
*/
|
||||
client_pub_pkey = X509_get0_pubkey(s->session->peer);
|
||||
if (client_pub_pkey) {
|
||||
if (EVP_PKEY_derive_set_peer(pkey_ctx, client_pub_pkey) <= 0)
|
||||
ERR_clear_error();
|
||||
}
|
||||
/* Decrypt session key */
|
||||
if (!PACKET_get_1(pkt, &asn1id)
|
||||
|| asn1id != (V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED)
|
||||
|| !PACKET_peek_1(pkt, &asn1len)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
SSL_R_DECRYPTION_FAILED);
|
||||
goto err;
|
||||
}
|
||||
if (asn1len == 0x81) {
|
||||
/*
|
||||
* Long form length. Should only be one byte of length. Anything else
|
||||
* isn't supported.
|
||||
* We did a successful peek before so this shouldn't fail
|
||||
*/
|
||||
if (!PACKET_forward(pkt, 1)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
SSL_R_DECRYPTION_FAILED);
|
||||
goto err;
|
||||
}
|
||||
} else if (asn1len >= 0x80) {
|
||||
/*
|
||||
* Indefinite length, or more than one long form length bytes. We don't
|
||||
* support it
|
||||
*/
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
SSL_R_DECRYPTION_FAILED);
|
||||
goto err;
|
||||
} /* else short form length */
|
||||
|
||||
if (!PACKET_as_length_prefixed_1(pkt, &encdata)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
SSL_R_DECRYPTION_FAILED);
|
||||
goto err;
|
||||
}
|
||||
inlen = PACKET_remaining(&encdata);
|
||||
start = PACKET_data(&encdata);
|
||||
|
||||
if (EVP_PKEY_decrypt(pkey_ctx, premaster_secret, &outlen, start,
|
||||
inlen) <= 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
SSL_R_DECRYPTION_FAILED);
|
||||
goto err;
|
||||
}
|
||||
/* Generate master secret */
|
||||
if (!ssl_generate_master_secret(s, premaster_secret,
|
||||
sizeof(premaster_secret), 0)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
/* Check if pubkey from client certificate was used */
|
||||
if (EVP_PKEY_CTX_ctrl(pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2,
|
||||
NULL) > 0)
|
||||
s->statem.no_cert_verify = 1;
|
||||
|
||||
ret = 1;
|
||||
err:
|
||||
EVP_PKEY_CTX_free(pkey_ctx);
|
||||
return ret;
|
||||
#else
|
||||
/* Should never happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_GOST,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
MSG_PROCESS_RETURN tls_process_client_key_exchange(SSL *s, PACKET *pkt)
|
||||
{
|
||||
unsigned long alg_k;
|
||||
|
||||
alg_k = s->s3.tmp.new_cipher->algorithm_mkey;
|
||||
|
||||
/* For PSK parse and retrieve identity, obtain PSK key */
|
||||
if ((alg_k & SSL_PSK) && !tls_process_cke_psk_preamble(s, pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (alg_k & SSL_kPSK) {
|
||||
/* Identity extracted earlier: should be nothing left */
|
||||
if (PACKET_remaining(pkt) != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
/* PSK handled by ssl_generate_master_secret */
|
||||
if (!ssl_generate_master_secret(s, NULL, 0, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else if (alg_k & (SSL_kRSA | SSL_kRSAPSK)) {
|
||||
if (!tls_process_cke_rsa(s, pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else if (alg_k & (SSL_kDHE | SSL_kDHEPSK)) {
|
||||
if (!tls_process_cke_dhe(s, pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else if (alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) {
|
||||
if (!tls_process_cke_ecdhe(s, pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else if (alg_k & SSL_kSRP) {
|
||||
if (!tls_process_cke_srp(s, pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else if (alg_k & SSL_kGOST) {
|
||||
if (!tls_process_cke_gost(s, pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE,
|
||||
SSL_R_UNKNOWN_CIPHER_TYPE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
return MSG_PROCESS_CONTINUE_PROCESSING;
|
||||
err:
|
||||
#ifndef OPENSSL_NO_PSK
|
||||
OPENSSL_clear_free(s->s3.tmp.psk, s->s3.tmp.psklen);
|
||||
s->s3.tmp.psk = NULL;
|
||||
#endif
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
WORK_STATE tls_post_process_client_key_exchange(SSL *s, WORK_STATE wst)
|
||||
{
|
||||
#ifndef OPENSSL_NO_SCTP
|
||||
if (wst == WORK_MORE_A) {
|
||||
if (SSL_IS_DTLS(s)) {
|
||||
unsigned char sctpauthkey[64];
|
||||
char labelbuffer[sizeof(DTLS1_SCTP_AUTH_LABEL)];
|
||||
size_t labellen;
|
||||
/*
|
||||
* Add new shared key for SCTP-Auth, will be ignored if no SCTP
|
||||
* used.
|
||||
*/
|
||||
memcpy(labelbuffer, DTLS1_SCTP_AUTH_LABEL,
|
||||
sizeof(DTLS1_SCTP_AUTH_LABEL));
|
||||
|
||||
/* Don't include the terminating zero. */
|
||||
labellen = sizeof(labelbuffer) - 1;
|
||||
if (s->mode & SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG)
|
||||
labellen += 1;
|
||||
|
||||
if (SSL_export_keying_material(s, sctpauthkey,
|
||||
sizeof(sctpauthkey), labelbuffer,
|
||||
labellen, NULL, 0,
|
||||
0) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return WORK_ERROR;
|
||||
}
|
||||
|
||||
BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY,
|
||||
sizeof(sctpauthkey), sctpauthkey);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (s->statem.no_cert_verify || !s->session->peer) {
|
||||
/*
|
||||
* No certificate verify or no peer certificate so we no longer need
|
||||
* the handshake_buffer
|
||||
*/
|
||||
if (!ssl3_digest_cached_records(s, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
return WORK_FINISHED_CONTINUE;
|
||||
} else {
|
||||
if (!s->s3.handshake_buffer) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return WORK_ERROR;
|
||||
}
|
||||
/*
|
||||
* For sigalgs freeze the handshake buffer. If we support
|
||||
* extms we've done this already so this is a no-op
|
||||
*/
|
||||
if (!ssl3_digest_cached_records(s, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
return WORK_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return WORK_FINISHED_CONTINUE;
|
||||
}
|
||||
|
||||
MSG_PROCESS_RETURN tls_process_client_certificate(SSL *s, PACKET *pkt)
|
||||
{
|
||||
int i;
|
||||
MSG_PROCESS_RETURN ret = MSG_PROCESS_ERROR;
|
||||
X509 *x = NULL;
|
||||
unsigned long l;
|
||||
const unsigned char *certstart, *certbytes;
|
||||
STACK_OF(X509) *sk = NULL;
|
||||
PACKET spkt, context;
|
||||
size_t chainidx;
|
||||
SSL_SESSION *new_sess = NULL;
|
||||
|
||||
/*
|
||||
* To get this far we must have read encrypted data from the client. We no
|
||||
* longer tolerate unencrypted alerts. This value is ignored if less than
|
||||
* TLSv1.3
|
||||
*/
|
||||
s->statem.enc_read_state = ENC_READ_STATE_VALID;
|
||||
|
||||
if ((sk = sk_X509_new_null()) == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (SSL_IS_TLS13(s) && (!PACKET_get_length_prefixed_1(pkt, &context)
|
||||
|| (s->pha_context == NULL && PACKET_remaining(&context) != 0)
|
||||
|| (s->pha_context != NULL &&
|
||||
!PACKET_equal(&context, s->pha_context, s->pha_context_len)))) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_INVALID_CONTEXT);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!PACKET_get_length_prefixed_3(pkt, &spkt)
|
||||
|| PACKET_remaining(pkt) != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
for (chainidx = 0; PACKET_remaining(&spkt) > 0; chainidx++) {
|
||||
if (!PACKET_get_net_3(&spkt, &l)
|
||||
|| !PACKET_get_bytes(&spkt, &certbytes, l)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_CERT_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
certstart = certbytes;
|
||||
x = d2i_X509(NULL, (const unsigned char **)&certbytes, l);
|
||||
if (x == NULL) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, ERR_R_ASN1_LIB);
|
||||
goto err;
|
||||
}
|
||||
if (certbytes != (certstart + l)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_CERT_LENGTH_MISMATCH);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
RAW_EXTENSION *rawexts = NULL;
|
||||
PACKET extensions;
|
||||
|
||||
if (!PACKET_get_length_prefixed_2(&spkt, &extensions)) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_BAD_LENGTH);
|
||||
goto err;
|
||||
}
|
||||
if (!tls_collect_extensions(s, &extensions,
|
||||
SSL_EXT_TLS1_3_CERTIFICATE, &rawexts,
|
||||
NULL, chainidx == 0)
|
||||
|| !tls_parse_all_extensions(s, SSL_EXT_TLS1_3_CERTIFICATE,
|
||||
rawexts, x, chainidx,
|
||||
PACKET_remaining(&spkt) == 0)) {
|
||||
OPENSSL_free(rawexts);
|
||||
goto err;
|
||||
}
|
||||
OPENSSL_free(rawexts);
|
||||
}
|
||||
|
||||
if (!sk_X509_push(sk, x)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
x = NULL;
|
||||
}
|
||||
|
||||
if (sk_X509_num(sk) <= 0) {
|
||||
/* TLS does not mind 0 certs returned */
|
||||
if (s->version == SSL3_VERSION) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_NO_CERTIFICATES_RETURNED);
|
||||
goto err;
|
||||
}
|
||||
/* Fail for TLS only if we required a certificate */
|
||||
else if ((s->verify_mode & SSL_VERIFY_PEER) &&
|
||||
(s->verify_mode & SSL_VERIFY_FAIL_IF_NO_PEER_CERT)) {
|
||||
SSLfatal(s, SSL_AD_CERTIFICATE_REQUIRED,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE);
|
||||
goto err;
|
||||
}
|
||||
/* No client certificate so digest cached records */
|
||||
if (s->s3.handshake_buffer && !ssl3_digest_cached_records(s, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else {
|
||||
EVP_PKEY *pkey;
|
||||
i = ssl_verify_cert_chain(s, sk);
|
||||
if (i <= 0) {
|
||||
SSLfatal(s, ssl_x509err2alert(s->verify_result),
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_CERTIFICATE_VERIFY_FAILED);
|
||||
goto err;
|
||||
}
|
||||
if (i > 1) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE, i);
|
||||
goto err;
|
||||
}
|
||||
pkey = X509_get0_pubkey(sk_X509_value(sk, 0));
|
||||
if (pkey == NULL) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
SSL_R_UNKNOWN_CERTIFICATE_TYPE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Sessions must be immutable once they go into the session cache. Otherwise
|
||||
* we can get multi-thread problems. Therefore we don't "update" sessions,
|
||||
* we replace them with a duplicate. Here, we need to do this every time
|
||||
* a new certificate is received via post-handshake authentication, as the
|
||||
* session may have already gone into the session cache.
|
||||
*/
|
||||
|
||||
if (s->post_handshake_auth == SSL_PHA_REQUESTED) {
|
||||
if ((new_sess = ssl_session_dup(s->session, 0)) == 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
SSL_SESSION_free(s->session);
|
||||
s->session = new_sess;
|
||||
}
|
||||
|
||||
X509_free(s->session->peer);
|
||||
s->session->peer = sk_X509_shift(sk);
|
||||
s->session->verify_result = s->verify_result;
|
||||
|
||||
sk_X509_pop_free(s->session->peer_chain, X509_free);
|
||||
s->session->peer_chain = sk;
|
||||
|
||||
/*
|
||||
* Freeze the handshake buffer. For <TLS1.3 we do this after the CKE
|
||||
* message
|
||||
*/
|
||||
if (SSL_IS_TLS13(s) && !ssl3_digest_cached_records(s, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Inconsistency alert: cert_chain does *not* include the peer's own
|
||||
* certificate, while we do include it in statem_clnt.c
|
||||
*/
|
||||
sk = NULL;
|
||||
|
||||
/* Save the current hash state for when we receive the CertificateVerify */
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
if (!ssl_handshake_hash(s, s->cert_verify_hash,
|
||||
sizeof(s->cert_verify_hash),
|
||||
&s->cert_verify_hash_len)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Resend session tickets */
|
||||
s->sent_tickets = 0;
|
||||
}
|
||||
|
||||
ret = MSG_PROCESS_CONTINUE_READING;
|
||||
|
||||
err:
|
||||
X509_free(x);
|
||||
sk_X509_pop_free(sk, X509_free);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int tls_construct_server_certificate(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
CERT_PKEY *cpk = s->s3.tmp.cert;
|
||||
|
||||
if (cpk == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* In TLSv1.3 the certificate chain is always preceded by a 0 length context
|
||||
* for the server Certificate message
|
||||
*/
|
||||
if (SSL_IS_TLS13(s) && !WPACKET_put_bytes_u8(pkt, 0)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
if (!ssl3_output_cert_chain(s, pkt, cpk)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int create_ticket_prequel(SSL *s, WPACKET *pkt, uint32_t age_add,
|
||||
unsigned char *tick_nonce)
|
||||
{
|
||||
/*
|
||||
* Ticket lifetime hint: For TLSv1.2 this is advisory only and we leave this
|
||||
* unspecified for resumed session (for simplicity).
|
||||
* In TLSv1.3 we reset the "time" field above, and always specify the
|
||||
* timeout.
|
||||
*/
|
||||
if (!WPACKET_put_bytes_u32(pkt,
|
||||
(s->hit && !SSL_IS_TLS13(s))
|
||||
? 0 : s->session->timeout)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CREATE_TICKET_PREQUEL,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
if (!WPACKET_put_bytes_u32(pkt, age_add)
|
||||
|| !WPACKET_sub_memcpy_u8(pkt, tick_nonce, TICKET_NONCE_SIZE)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CREATE_TICKET_PREQUEL,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Start the sub-packet for the actual ticket data */
|
||||
if (!WPACKET_start_sub_packet_u16(pkt)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CREATE_TICKET_PREQUEL,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int construct_stateless_ticket(SSL *s, WPACKET *pkt, uint32_t age_add,
|
||||
unsigned char *tick_nonce)
|
||||
{
|
||||
unsigned char *senc = NULL;
|
||||
EVP_CIPHER_CTX *ctx = NULL;
|
||||
HMAC_CTX *hctx = NULL;
|
||||
unsigned char *p, *encdata1, *encdata2, *macdata1, *macdata2;
|
||||
const unsigned char *const_p;
|
||||
int len, slen_full, slen, lenfinal;
|
||||
SSL_SESSION *sess;
|
||||
unsigned int hlen;
|
||||
SSL_CTX *tctx = s->session_ctx;
|
||||
unsigned char iv[EVP_MAX_IV_LENGTH];
|
||||
unsigned char key_name[TLSEXT_KEYNAME_LENGTH];
|
||||
int iv_len, ok = 0;
|
||||
size_t macoffset, macendoffset;
|
||||
|
||||
/* get session encoding length */
|
||||
slen_full = i2d_SSL_SESSION(s->session, NULL);
|
||||
/*
|
||||
* Some length values are 16 bits, so forget it if session is too
|
||||
* long
|
||||
*/
|
||||
if (slen_full == 0 || slen_full > 0xFF00) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
senc = OPENSSL_malloc(slen_full);
|
||||
if (senc == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_CONSTRUCT_STATELESS_TICKET, ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ctx = EVP_CIPHER_CTX_new();
|
||||
hctx = HMAC_CTX_new();
|
||||
if (ctx == NULL || hctx == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
|
||||
p = senc;
|
||||
if (!i2d_SSL_SESSION(s->session, &p)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* create a fresh copy (not shared with other threads) to clean up
|
||||
*/
|
||||
const_p = senc;
|
||||
sess = d2i_SSL_SESSION(NULL, &const_p, slen_full);
|
||||
if (sess == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
slen = i2d_SSL_SESSION(sess, NULL);
|
||||
if (slen == 0 || slen > slen_full) {
|
||||
/* shouldn't ever happen */
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
SSL_SESSION_free(sess);
|
||||
goto err;
|
||||
}
|
||||
p = senc;
|
||||
if (!i2d_SSL_SESSION(sess, &p)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
SSL_SESSION_free(sess);
|
||||
goto err;
|
||||
}
|
||||
SSL_SESSION_free(sess);
|
||||
|
||||
/*
|
||||
* Initialize HMAC and cipher contexts. If callback present it does
|
||||
* all the work otherwise use generated values from parent ctx.
|
||||
*/
|
||||
if (tctx->ext.ticket_key_cb) {
|
||||
/* if 0 is returned, write an empty ticket */
|
||||
int ret = tctx->ext.ticket_key_cb(s, key_name, iv, ctx,
|
||||
hctx, 1);
|
||||
|
||||
if (ret == 0) {
|
||||
|
||||
/* Put timeout and length */
|
||||
if (!WPACKET_put_bytes_u32(pkt, 0)
|
||||
|| !WPACKET_put_bytes_u16(pkt, 0)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
OPENSSL_free(senc);
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
HMAC_CTX_free(hctx);
|
||||
return 1;
|
||||
}
|
||||
if (ret < 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
SSL_R_CALLBACK_FAILED);
|
||||
goto err;
|
||||
}
|
||||
iv_len = EVP_CIPHER_CTX_iv_length(ctx);
|
||||
} else {
|
||||
const EVP_CIPHER *cipher = EVP_aes_256_cbc();
|
||||
|
||||
iv_len = EVP_CIPHER_iv_length(cipher);
|
||||
if (RAND_bytes(iv, iv_len) <= 0
|
||||
|| !EVP_EncryptInit_ex(ctx, cipher, NULL,
|
||||
tctx->ext.secure->tick_aes_key, iv)
|
||||
|| !HMAC_Init_ex(hctx, tctx->ext.secure->tick_hmac_key,
|
||||
sizeof(tctx->ext.secure->tick_hmac_key),
|
||||
EVP_sha256(), NULL)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
memcpy(key_name, tctx->ext.tick_key_name,
|
||||
sizeof(tctx->ext.tick_key_name));
|
||||
}
|
||||
|
||||
if (!create_ticket_prequel(s, pkt, age_add, tick_nonce)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!WPACKET_get_total_written(pkt, &macoffset)
|
||||
/* Output key name */
|
||||
|| !WPACKET_memcpy(pkt, key_name, sizeof(key_name))
|
||||
/* output IV */
|
||||
|| !WPACKET_memcpy(pkt, iv, iv_len)
|
||||
|| !WPACKET_reserve_bytes(pkt, slen + EVP_MAX_BLOCK_LENGTH,
|
||||
&encdata1)
|
||||
/* Encrypt session data */
|
||||
|| !EVP_EncryptUpdate(ctx, encdata1, &len, senc, slen)
|
||||
|| !WPACKET_allocate_bytes(pkt, len, &encdata2)
|
||||
|| encdata1 != encdata2
|
||||
|| !EVP_EncryptFinal(ctx, encdata1 + len, &lenfinal)
|
||||
|| !WPACKET_allocate_bytes(pkt, lenfinal, &encdata2)
|
||||
|| encdata1 + len != encdata2
|
||||
|| len + lenfinal > slen + EVP_MAX_BLOCK_LENGTH
|
||||
|| !WPACKET_get_total_written(pkt, &macendoffset)
|
||||
|| !HMAC_Update(hctx,
|
||||
(unsigned char *)s->init_buf->data + macoffset,
|
||||
macendoffset - macoffset)
|
||||
|| !WPACKET_reserve_bytes(pkt, EVP_MAX_MD_SIZE, &macdata1)
|
||||
|| !HMAC_Final(hctx, macdata1, &hlen)
|
||||
|| hlen > EVP_MAX_MD_SIZE
|
||||
|| !WPACKET_allocate_bytes(pkt, hlen, &macdata2)
|
||||
|| macdata1 != macdata2) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_CONSTRUCT_STATELESS_TICKET, ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Close the sub-packet created by create_ticket_prequel() */
|
||||
if (!WPACKET_close(pkt)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATELESS_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ok = 1;
|
||||
err:
|
||||
OPENSSL_free(senc);
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
HMAC_CTX_free(hctx);
|
||||
return ok;
|
||||
}
|
||||
|
||||
static int construct_stateful_ticket(SSL *s, WPACKET *pkt, uint32_t age_add,
|
||||
unsigned char *tick_nonce)
|
||||
{
|
||||
if (!create_ticket_prequel(s, pkt, age_add, tick_nonce)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!WPACKET_memcpy(pkt, s->session->session_id,
|
||||
s->session->session_id_length)
|
||||
|| !WPACKET_close(pkt)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_CONSTRUCT_STATEFUL_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tls_construct_new_session_ticket(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
SSL_CTX *tctx = s->session_ctx;
|
||||
unsigned char tick_nonce[TICKET_NONCE_SIZE];
|
||||
union {
|
||||
unsigned char age_add_c[sizeof(uint32_t)];
|
||||
uint32_t age_add;
|
||||
} age_add_u;
|
||||
|
||||
age_add_u.age_add = 0;
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
size_t i, hashlen;
|
||||
uint64_t nonce;
|
||||
static const unsigned char nonce_label[] = "resumption";
|
||||
const EVP_MD *md = ssl_handshake_md(s);
|
||||
int hashleni = EVP_MD_size(md);
|
||||
|
||||
/* Ensure cast to size_t is safe */
|
||||
if (!ossl_assert(hashleni >= 0)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
hashlen = (size_t)hashleni;
|
||||
|
||||
/*
|
||||
* If we already sent one NewSessionTicket, or we resumed then
|
||||
* s->session may already be in a cache and so we must not modify it.
|
||||
* Instead we need to take a copy of it and modify that.
|
||||
*/
|
||||
if (s->sent_tickets != 0 || s->hit) {
|
||||
SSL_SESSION *new_sess = ssl_session_dup(s->session, 0);
|
||||
|
||||
if (new_sess == NULL) {
|
||||
/* SSLfatal already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
SSL_SESSION_free(s->session);
|
||||
s->session = new_sess;
|
||||
}
|
||||
|
||||
if (!ssl_generate_session_id(s, s->session)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
if (RAND_bytes(age_add_u.age_add_c, sizeof(age_add_u)) <= 0) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
goto err;
|
||||
}
|
||||
s->session->ext.tick_age_add = age_add_u.age_add;
|
||||
|
||||
nonce = s->next_ticket_nonce;
|
||||
for (i = TICKET_NONCE_SIZE; i > 0; i--) {
|
||||
tick_nonce[i - 1] = (unsigned char)(nonce & 0xff);
|
||||
nonce >>= 8;
|
||||
}
|
||||
|
||||
if (!tls13_hkdf_expand(s, md, s->resumption_master_secret,
|
||||
nonce_label,
|
||||
sizeof(nonce_label) - 1,
|
||||
tick_nonce,
|
||||
TICKET_NONCE_SIZE,
|
||||
s->session->master_key,
|
||||
hashlen, 1)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
s->session->master_key_length = hashlen;
|
||||
|
||||
s->session->time = (long)time(NULL);
|
||||
if (s->s3.alpn_selected != NULL) {
|
||||
OPENSSL_free(s->session->ext.alpn_selected);
|
||||
s->session->ext.alpn_selected =
|
||||
OPENSSL_memdup(s->s3.alpn_selected, s->s3.alpn_selected_len);
|
||||
if (s->session->ext.alpn_selected == NULL) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
||||
SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
goto err;
|
||||
}
|
||||
s->session->ext.alpn_selected_len = s->s3.alpn_selected_len;
|
||||
}
|
||||
s->session->ext.max_early_data = s->max_early_data;
|
||||
}
|
||||
|
||||
if (tctx->generate_ticket_cb != NULL &&
|
||||
tctx->generate_ticket_cb(s, tctx->ticket_cb_data) == 0)
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* If we are using anti-replay protection then we behave as if
|
||||
* SSL_OP_NO_TICKET is set - we are caching tickets anyway so there
|
||||
* is no point in using full stateless tickets.
|
||||
*/
|
||||
if (SSL_IS_TLS13(s)
|
||||
&& ((s->options & SSL_OP_NO_TICKET) != 0
|
||||
|| (s->max_early_data > 0
|
||||
&& (s->options & SSL_OP_NO_ANTI_REPLAY) == 0))) {
|
||||
if (!construct_stateful_ticket(s, pkt, age_add_u.age_add, tick_nonce)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
} else if (!construct_stateless_ticket(s, pkt, age_add_u.age_add,
|
||||
tick_nonce)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (SSL_IS_TLS13(s)) {
|
||||
if (!tls_construct_extensions(s, pkt,
|
||||
SSL_EXT_TLS1_3_NEW_SESSION_TICKET,
|
||||
NULL, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
* Increment both |sent_tickets| and |next_ticket_nonce|. |sent_tickets|
|
||||
* gets reset to 0 if we send more tickets following a post-handshake
|
||||
* auth, but |next_ticket_nonce| does not.
|
||||
*/
|
||||
s->sent_tickets++;
|
||||
s->next_ticket_nonce++;
|
||||
ssl_update_cache(s, SSL_SESS_CACHE_SERVER);
|
||||
}
|
||||
|
||||
return 1;
|
||||
err:
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* In TLSv1.3 this is called from the extensions code, otherwise it is used to
|
||||
* create a separate message. Returns 1 on success or 0 on failure.
|
||||
*/
|
||||
int tls_construct_cert_status_body(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
if (!WPACKET_put_bytes_u8(pkt, s->ext.status_type)
|
||||
|| !WPACKET_sub_memcpy_u24(pkt, s->ext.ocsp.resp,
|
||||
s->ext.ocsp.resp_len)) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int tls_construct_cert_status(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
if (!tls_construct_cert_status_body(s, pkt)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
||||
/*
|
||||
* tls_process_next_proto reads a Next Protocol Negotiation handshake message.
|
||||
* It sets the next_proto member in s if found
|
||||
*/
|
||||
MSG_PROCESS_RETURN tls_process_next_proto(SSL *s, PACKET *pkt)
|
||||
{
|
||||
PACKET next_proto, padding;
|
||||
size_t next_proto_len;
|
||||
|
||||
/*-
|
||||
* The payload looks like:
|
||||
* uint8 proto_len;
|
||||
* uint8 proto[proto_len];
|
||||
* uint8 padding_len;
|
||||
* uint8 padding[padding_len];
|
||||
*/
|
||||
if (!PACKET_get_length_prefixed_1(pkt, &next_proto)
|
||||
|| !PACKET_get_length_prefixed_1(pkt, &padding)
|
||||
|| PACKET_remaining(pkt) > 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_NEXT_PROTO,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
if (!PACKET_memdup(&next_proto, &s->ext.npn, &next_proto_len)) {
|
||||
s->ext.npn_len = 0;
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_NEXT_PROTO,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
s->ext.npn_len = (unsigned char)next_proto_len;
|
||||
|
||||
return MSG_PROCESS_CONTINUE_READING;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int tls_construct_encrypted_extensions(SSL *s, WPACKET *pkt)
|
||||
{
|
||||
if (!tls_construct_extensions(s, pkt, SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS,
|
||||
NULL, 0)) {
|
||||
/* SSLfatal() already called */
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
MSG_PROCESS_RETURN tls_process_end_of_early_data(SSL *s, PACKET *pkt)
|
||||
{
|
||||
if (PACKET_remaining(pkt) != 0) {
|
||||
SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_END_OF_EARLY_DATA,
|
||||
SSL_R_LENGTH_MISMATCH);
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
if (s->early_data_state != SSL_EARLY_DATA_READING
|
||||
&& s->early_data_state != SSL_EARLY_DATA_READ_RETRY) {
|
||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_END_OF_EARLY_DATA,
|
||||
ERR_R_INTERNAL_ERROR);
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* EndOfEarlyData signals a key change so the end of the message must be on
|
||||
* a record boundary.
|
||||
*/
|
||||
if (RECORD_LAYER_processed_read_pending(&s->rlayer)) {
|
||||
SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE,
|
||||
SSL_F_TLS_PROCESS_END_OF_EARLY_DATA,
|
||||
SSL_R_NOT_ON_RECORD_BOUNDARY);
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
s->early_data_state = SSL_EARLY_DATA_FINISHED_READING;
|
||||
if (!s->method->ssl3_enc->change_cipher_state(s,
|
||||
SSL3_CC_HANDSHAKE | SSL3_CHANGE_CIPHER_SERVER_READ)) {
|
||||
/* SSLfatal() already called */
|
||||
return MSG_PROCESS_ERROR;
|
||||
}
|
||||
|
||||
return MSG_PROCESS_CONTINUE_READING;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
--- ssl/statem/statem_srvr.c
|
||||
+++ ssl/statem/statem_srvr.c
|
||||
@@ -1938,7 +1938,7 @@
|
||||
/* check if some cipher was preferred by call back */
|
||||
if (pref_cipher == NULL)
|
||||
pref_cipher = ssl3_choose_cipher(s, s->session->ciphers,
|
||||
- SSL_get_ciphers(s));
|
||||
+ ssl_get_cipher_preferences(s));
|
||||
if (pref_cipher == NULL) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO,
|
||||
@@ -1947,8 +1947,9 @@
|
||||
}
|
||||
|
||||
s->session->cipher = pref_cipher;
|
||||
- sk_SSL_CIPHER_free(s->cipher_list);
|
||||
- s->cipher_list = sk_SSL_CIPHER_dup(s->session->ciphers);
|
||||
+ ssl_cipher_preference_list_free(s->cipher_list);
|
||||
+ s->cipher_list = ssl_cipher_preference_list_from_ciphers(
|
||||
+ s->session->ciphers);
|
||||
sk_SSL_CIPHER_free(s->cipher_list_by_id);
|
||||
s->cipher_list_by_id = sk_SSL_CIPHER_dup(s->session->ciphers);
|
||||
}
|
||||
@@ -2262,7 +2263,7 @@
|
||||
/* In TLSv1.3 we selected the ciphersuite before resumption */
|
||||
if (!SSL_IS_TLS13(s)) {
|
||||
cipher =
|
||||
- ssl3_choose_cipher(s, s->session->ciphers, SSL_get_ciphers(s));
|
||||
+ ssl3_choose_cipher(s, s->session->ciphers, ssl_get_cipher_preferences(s));
|
||||
|
||||
if (cipher == NULL) {
|
||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||
@@ -44,6 +44,9 @@ push @defltfiles, @seedfiles unless disabled("seed");
|
||||
my @sm4files = qw( evpciph_sm4.txt );
|
||||
push @defltfiles, @sm4files unless disabled("sm4");
|
||||
|
||||
my @desfiles = qw( evpciph_des.txt );
|
||||
push @defltfiles, @desfiles unless disabled("des");
|
||||
|
||||
plan tests => (scalar(@configs) * scalar(@files)) + scalar(@defltfiles) + 1;
|
||||
|
||||
my $infile = bldtop_file('providers', platform->dso('fips'));
|
||||
|
||||
@@ -50,50 +50,6 @@ IV = fedcba9876543210
|
||||
Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
|
||||
Ciphertext = 3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D41C673812CFDE9675
|
||||
|
||||
# DES ECB tests (from destest)
|
||||
|
||||
Cipher = DES-ECB
|
||||
Availablein = default
|
||||
Key = 0000000000000000
|
||||
Plaintext = 0000000000000000
|
||||
Ciphertext = 8CA64DE9C1B123A7
|
||||
|
||||
Cipher = DES-ECB
|
||||
Availablein = default
|
||||
Key = FFFFFFFFFFFFFFFF
|
||||
Plaintext = FFFFFFFFFFFFFFFF
|
||||
Ciphertext = 7359B2163E4EDC58
|
||||
|
||||
Cipher = DES-ECB
|
||||
Availablein = default
|
||||
Key = 3000000000000000
|
||||
Plaintext = 1000000000000001
|
||||
Ciphertext = 958E6E627A05557B
|
||||
|
||||
Cipher = DES-ECB
|
||||
Availablein = default
|
||||
Key = 1111111111111111
|
||||
Plaintext = 1111111111111111
|
||||
Ciphertext = F40379AB9E0EC533
|
||||
|
||||
Cipher = DES-ECB
|
||||
Availablein = default
|
||||
Key = 0123456789ABCDEF
|
||||
Plaintext = 1111111111111111
|
||||
Ciphertext = 17668DFC7292532D
|
||||
|
||||
Cipher = DES-ECB
|
||||
Availablein = default
|
||||
Key = 1111111111111111
|
||||
Plaintext = 0123456789ABCDEF
|
||||
Ciphertext = 8A5AE1F81AB8F2DD
|
||||
|
||||
Cipher = DES-ECB
|
||||
Availablein = default
|
||||
Key = FEDCBA9876543210
|
||||
Plaintext = 0123456789ABCDEF
|
||||
Ciphertext = ED39D950FA74BCC4
|
||||
|
||||
Title = AES (from FIPS-197 test vectors)
|
||||
|
||||
Cipher = AES-128-ECB
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
#
|
||||
# Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
# this file except in compliance with the License. You can obtain a copy
|
||||
# in the file LICENSE in the source distribution or at
|
||||
# https://www.openssl.org/source/license.html
|
||||
|
||||
Title = DES ECB Tests (from destest)
|
||||
|
||||
Cipher = DES-ECB
|
||||
Key = 0000000000000000
|
||||
Plaintext = 0000000000000000
|
||||
Ciphertext = 8CA64DE9C1B123A7
|
||||
|
||||
Cipher = DES-ECB
|
||||
Key = FFFFFFFFFFFFFFFF
|
||||
Plaintext = FFFFFFFFFFFFFFFF
|
||||
Ciphertext = 7359B2163E4EDC58
|
||||
|
||||
Cipher = DES-ECB
|
||||
Key = 3000000000000000
|
||||
Plaintext = 1000000000000001
|
||||
Ciphertext = 958E6E627A05557B
|
||||
|
||||
Cipher = DES-ECB
|
||||
Key = 1111111111111111
|
||||
Plaintext = 1111111111111111
|
||||
Ciphertext = F40379AB9E0EC533
|
||||
|
||||
Cipher = DES-ECB
|
||||
Key = 0123456789ABCDEF
|
||||
Plaintext = 1111111111111111
|
||||
Ciphertext = 17668DFC7292532D
|
||||
|
||||
Cipher = DES-ECB
|
||||
Key = 1111111111111111
|
||||
Plaintext = 0123456789ABCDEF
|
||||
Ciphertext = 8A5AE1F81AB8F2DD
|
||||
|
||||
Cipher = DES-ECB
|
||||
Key = FEDCBA9876543210
|
||||
Plaintext = 0123456789ABCDEF
|
||||
Ciphertext = ED39D950FA74BCC4
|
||||
|
||||
Title = DES Tests (from FIPS PUB 81)
|
||||
|
||||
Cipher = DES-CBC
|
||||
Key = 0123456789abcdef
|
||||
IV = 1234567890abcdef
|
||||
Plaintext = 4e6f772069732074
|
||||
Ciphertext = e5c7cdde872bf27c
|
||||
|
||||
Cipher = DES-CFB8
|
||||
Key = 0123456789abcdef
|
||||
IV = 1234567890abcdef
|
||||
Plaintext = 4e6f7720697320746865
|
||||
Ciphertext = f31fda07011462ee187f
|
||||
|
||||
Cipher = DES-CFB
|
||||
Key = 0123456789abcdef
|
||||
IV = 1234567890abcdef
|
||||
Plaintext = 4e6f77206973207468652074696d6520666f7220616c6c20
|
||||
Ciphertext = f3096249c7f46e51a69e839b1a92f78403467133898ea622
|
||||
@@ -6391,6 +6391,26 @@ Ctrl.hexsecret = hexsecret:abb7d7554c0de41cada5826a1f79d76f
|
||||
Ctrl.hexinfo = hexinfo:a80b9061879365b1669c87a8
|
||||
Output = 71e29fff69198eca92f5180bcb281fbdaf409ec7c99ca704b1f56e782d3c4db10cb4158e6634d793a46c13bffb6bdb71a01101936ea9b20f7dbe302558b1356c
|
||||
|
||||
Title = SSKDF Test vectors from RFC 8636 Section 8 (With precoumputed ASN.1 info)
|
||||
|
||||
KDF = SSKDF
|
||||
Ctrl.digest = digest:SHA1
|
||||
Ctrl.hexsecret = hexsecret:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
Ctrl.hexinfo = hexinfo:307e300a06082b06010502030601a01f041d301ba0071b0553552e5345a110300ea003020101a10730051b036c6861a12904273025a0071b0553552e5345a11a3018a003020101a111300f1b066b72627467741b0553552e5345a22404223020a003020112a10c040aaaaaaaaaaaaaaaaaaaaaa20b0409bbbbbbbbbbbbbbbbbb
|
||||
Output = e6ab38c9413e035bb079201ed0b6b73d8d49a814a737c04ee6649614206f73ad
|
||||
|
||||
KDF = SSKDF
|
||||
Ctrl.digest = digest:SHA256
|
||||
Ctrl.hexsecret = hexsecret:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
Ctrl.hexinfo = hexinfo:307e300a06082b06010502030602a01f041d301ba0071b0553552e5345a110300ea003020101a10730051b036c6861a12904273025a0071b0553552e5345a11a3018a003020101a111300f1b066b72627467741b0553552e5345a22404223020a003020112a10c040aaaaaaaaaaaaaaaaaaaaaa20b0409bbbbbbbbbbbbbbbbbb
|
||||
Output = 77ef4e48c420ae3fec75109d7981697eed5d295c90c62564f7bfd101fa9bc1d5
|
||||
|
||||
KDF = SSKDF
|
||||
Ctrl.digest = digest:SHA512
|
||||
Ctrl.hexsecret = hexsecret:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
Ctrl.hexinfo = hexinfo:307e300a06082b06010502030603a01f041d301ba0071b0553552e5345a110300ea003020101a10730051b036c6861a12904273025a0071b0553552e5345a11a3018a003020101a111300f1b066b72627467741b0553552e5345a22404223020a003020110a10c040aaaaaaaaaaaaaaaaaaaaaa20b0409bbbbbbbbbbbbbbbbbb
|
||||
Output = d3c78b78d75313e9a926f75dfb012363fa17fa01db
|
||||
|
||||
# Test vectors extracted from
|
||||
# https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/components/800-135testvectors/ansx963_2001.zip
|
||||
Title = X963 KDF tests (from NIST test vectors)
|
||||
|
||||
Reference in New Issue
Block a user