diff --git a/CHANGES b/CHANGES index 72201c3f..535269d0 100644 --- a/CHANGES +++ b/CHANGES @@ -21,6 +21,32 @@ options of the apps. [Kurt Roeckx] + *) The command line utilities dhparam, dsa, gendsa and dsaparam have been + deprecated. Instead use the pkeyparam, pkey, genpkey and pkeyparam + programs respectively. + [Paul Dale] + + *) All of the low level DSA functions have been deprecated including: + + DSA_do_sign, DSA_do_verify, DSA_OpenSSL, DSA_set_default_method, + DSA_get_default_method, DSA_set_method, DSA_get_method, DSA_new_method, + DSA_sign_setup, DSA_sign, DSA_verify, DSA_get_ex_new_index, + DSA_set_ex_data, DSA_get_ex_data, DSA_generate_parameters_ex, + DSA_generate_key, DSA_meth_new, DSA_get0_engine, DSA_meth_free, + DSA_meth_dup, DSA_meth_get0_name, DSA_meth_set1_name, DSA_meth_get_flags, + DSA_meth_set_flags, DSA_meth_get0_app_data, DSA_meth_set0_app_data, + DSA_meth_get_sign, DSA_meth_set_sign, DSA_meth_get_sign_setup, + DSA_meth_set_sign_setup, DSA_meth_get_verify, DSA_meth_set_verify, + DSA_meth_get_mod_exp, DSA_meth_set_mod_exp, DSA_meth_get_bn_mod_exp, + DSA_meth_set_bn_mod_exp, DSA_meth_get_init, DSA_meth_set_init, + DSA_meth_get_finish, DSA_meth_set_finish, DSA_meth_get_paramgen, + DSA_meth_set_paramgen, DSA_meth_get_keygen and DSA_meth_set_keygen. + + Use of these low level functions has been informally discouraged for a long + time. Instead applications should use L, + L and L. + [Paul Dale] + *) Reworked the treatment of EC EVP_PKEYs with the SM2 curve to automatically become EVP_PKEY_SM2 rather than EVP_PKEY_EC. This means that applications don't have to look at the curve NID and diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf index 6306a231..a462f9e7 100644 --- a/Configurations/10-main.conf +++ b/Configurations/10-main.conf @@ -1483,6 +1483,16 @@ my %targets = ( lib_cppflags => "-DL_ENDIAN", sys_id => "UEFI", }, + "UEFI-x86" => { + inherit_from => [ "UEFI" ], + asm_arch => 'x86', + perlasm_scheme => "win32n", + }, + "UEFI-x86_64" => { + inherit_from => [ "UEFI" ], + asm_arch => 'x86_64', + perlasm_scheme => "nasm", + }, #### UWIN "UWIN" => { diff --git a/Configure b/Configure index 2dd0520d..7b3e6ccb 100755 --- a/Configure +++ b/Configure @@ -412,6 +412,7 @@ my @disablables = ( "rmd160", "scrypt", "sctp", + "secure-memory", "seed", "shared", "siphash", diff --git a/NEWS b/NEWS index 4d7f0d01..ac3372dc 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,9 @@ Major changes between OpenSSL 1.1.1 and OpenSSL 3.0.0 [under development] + o The algorithm specific public key command line applications have + been deprecated. These include dhparam, gendsa and others. The pkey + alternatives should be used intead: pkey, pkeyparam and genpkey. o X509 certificates signed using SHA1 are no longer allowed at security level 1 or higher. The default security level for TLS is 1, so certificates signed using SHA1 are by default no longer trusted to diff --git a/apps/build.info b/apps/build.info index f49edb4d..ad3ef74a 100644 --- a/apps/build.info +++ b/apps/build.info @@ -12,8 +12,8 @@ ENDIF # Source for the 'openssl' program $OPENSSLSRC=\ openssl.c progs.c \ - asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c dhparam.c \ - dsa.c dsaparam.c ec.c ecparam.c enc.c engine.c errstr.c gendsa.c \ + asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c \ + ec.c ecparam.c enc.c engine.c errstr.c \ genpkey.c genrsa.c kdf.c mac.c nseq.c ocsp.c passwd.c pkcs12.c pkcs7.c \ pkcs8.c pkey.c pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c \ rsautl.c s_client.c s_server.c s_time.c sess_id.c smime.c speed.c \ @@ -31,6 +31,10 @@ IF[{- !$disabled{apps} -}] SOURCE[openssl]=openssl.rc ENDIF + IF[{- !$disabled{'deprecated-3.0'} -}] + SOURCE[openssl]=dhparam.c dsa.c dsaparam.c gendsa.c + ENDIF + SCRIPTS{misc}=CA.pl SOURCE[CA.pl]=CA.pl.in # linkname tells build files that a symbolic link or copy of this script diff --git a/apps/dhparam.c b/apps/dhparam.c index 7a61241f..acff3661 100644 --- a/apps/dhparam.c +++ b/apps/dhparam.c @@ -7,6 +7,9 @@ * https://www.openssl.org/source/license.html */ +/* We need to use some deprecated APIs */ +#define OPENSSL_SUPPRESS_DEPRECATED + #include #ifdef OPENSSL_NO_DH NON_EMPTY_TRANSLATION_UNIT diff --git a/apps/dsa.c b/apps/dsa.c index f0c9fc1c..9704a34c 100644 --- a/apps/dsa.c +++ b/apps/dsa.c @@ -7,6 +7,9 @@ * https://www.openssl.org/source/license.html */ +/* We need to use the deprecated DSA_print */ +#define OPENSSL_SUPPRESS_DEPRECATED + #include #ifdef OPENSSL_NO_DSA NON_EMPTY_TRANSLATION_UNIT @@ -173,6 +176,7 @@ int dsa_main(int argc, char **argv) EVP_PKEY_free(pkey); } } + if (dsa == NULL) { BIO_printf(bio_err, "unable to load Key\n"); ERR_print_errors(bio_err); diff --git a/apps/dsaparam.c b/apps/dsaparam.c index 17068fb9..eebffa0e 100644 --- a/apps/dsaparam.c +++ b/apps/dsaparam.c @@ -7,6 +7,9 @@ * https://www.openssl.org/source/license.html */ +/* We need to use some deprecated APIs */ +#define OPENSSL_SUPPRESS_DEPRECATED + #include #ifdef OPENSSL_NO_DSA NON_EMPTY_TRANSLATION_UNIT diff --git a/apps/gendsa.c b/apps/gendsa.c index 12806ef2..a64ac16a 100644 --- a/apps/gendsa.c +++ b/apps/gendsa.c @@ -7,6 +7,9 @@ * https://www.openssl.org/source/license.html */ +/* We need to use some deprecated APIs */ +#define OPENSSL_SUPPRESS_DEPRECATED + #include #ifdef OPENSSL_NO_DSA NON_EMPTY_TRANSLATION_UNIT diff --git a/apps/include/function.h b/apps/include/function.h index 1911a649..28eb3e5d 100644 --- a/apps/include/function.h +++ b/apps/include/function.h @@ -13,6 +13,8 @@ # include # include "opt.h" +#define DEPRECATED_NO_ALTERNATIVE "unknown" + typedef enum FUNC_TYPE { FT_none, FT_general, FT_md, FT_cipher, FT_pkey, FT_md_alg, FT_cipher_alg @@ -23,6 +25,7 @@ typedef struct function_st { const char *name; int (*func)(int argc, char *argv[]); const OPTIONS *help; + const char *deprecated_alternative; } FUNCTION; DEFINE_LHASH_OF(FUNCTION); diff --git a/apps/lib/s_cb.c b/apps/lib/s_cb.c index 42a82ca3..48fd7f4a 100644 --- a/apps/lib/s_cb.c +++ b/apps/lib/s_cb.c @@ -190,6 +190,7 @@ static STRINT_PAIR cert_type_list[] = { {"RSA fixed ECDH", TLS_CT_RSA_FIXED_ECDH}, {"ECDSA fixed ECDH", TLS_CT_ECDSA_FIXED_ECDH}, {"GOST01 Sign", TLS_CT_GOST01_SIGN}, + {"GOST12 Sign", TLS_CT_GOST12_SIGN}, {NULL} }; diff --git a/apps/openssl.c b/apps/openssl.c index 00ad9ca0..cafe4046 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -47,6 +47,15 @@ BIO *bio_in = NULL; BIO *bio_out = NULL; BIO *bio_err = NULL; +static void warn_deprecated(const char *pname, + const char *deprecated_alternative) +{ + BIO_printf(bio_err, "The command %s is deprecated.", pname); + if (strcmp(deprecated_alternative, DEPRECATED_NO_ALTERNATIVE) != 0) + BIO_printf(bio_err, " Use '%s' instead.", deprecated_alternative); + BIO_printf(bio_err, "\n"); +} + static int apps_startup(void) { #ifdef SIGPIPE @@ -277,6 +286,8 @@ int main(int argc, char *argv[]) fp = lh_FUNCTION_retrieve(prog, &f); if (fp != NULL) { argv[0] = pname; + if (fp->deprecated_alternative != NULL) + warn_deprecated(pname, fp->deprecated_alternative); ret = fp->func(argc, argv); goto end; } @@ -470,6 +481,8 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) } } if (fp != NULL) { + if (fp->deprecated_alternative != NULL) + warn_deprecated(fp->name, fp->deprecated_alternative); return fp->func(argc, argv); } if ((strncmp(argv[0], "no-", 3)) == 0) { diff --git a/apps/pkeyutl.c b/apps/pkeyutl.c index a8cd2a0e..5bc43657 100644 --- a/apps/pkeyutl.c +++ b/apps/pkeyutl.c @@ -556,8 +556,9 @@ static EVP_PKEY_CTX *init_ctx(const char *kdfalg, int *pkeysize, || (group = EC_KEY_get0_group(eckey)) == NULL || (nid = EC_GROUP_get_curve_name(group)) == 0) goto end; - if (nid == NID_sm2) - EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2); + if (nid == NID_sm2 + && !EVP_PKEY_set_alias_type(pkey, EVP_PKEY_SM2)) + goto end; } #endif *pkeysize = EVP_PKEY_size(pkey); diff --git a/apps/progs.c b/apps/progs.c index 82cd19be..eba50e8d 100644 --- a/apps/progs.c +++ b/apps/progs.c @@ -13,388 +13,388 @@ #include "progs.h" FUNCTION functions[] = { - {FT_general, "asn1parse", asn1parse_main, asn1parse_options}, - {FT_general, "ca", ca_main, ca_options}, + {FT_general, "asn1parse", asn1parse_main, asn1parse_options, NULL}, + {FT_general, "ca", ca_main, ca_options, NULL}, #ifndef OPENSSL_NO_SOCK - {FT_general, "ciphers", ciphers_main, ciphers_options}, + {FT_general, "ciphers", ciphers_main, ciphers_options, NULL}, #endif #ifndef OPENSSL_NO_CMS - {FT_general, "cms", cms_main, cms_options}, + {FT_general, "cms", cms_main, cms_options, NULL}, #endif - {FT_general, "crl", crl_main, crl_options}, - {FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options}, - {FT_general, "dgst", dgst_main, dgst_options}, -#ifndef OPENSSL_NO_DH - {FT_general, "dhparam", dhparam_main, dhparam_options}, + {FT_general, "crl", crl_main, crl_options, NULL}, + {FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options, NULL}, + {FT_general, "dgst", dgst_main, dgst_options, NULL}, +#if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0) + {FT_general, "dhparam", dhparam_main, dhparam_options, "pkeyparam"}, #endif -#ifndef OPENSSL_NO_DSA - {FT_general, "dsa", dsa_main, dsa_options}, +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) + {FT_general, "dsa", dsa_main, dsa_options, "pkey"}, #endif -#ifndef OPENSSL_NO_DSA - {FT_general, "dsaparam", dsaparam_main, dsaparam_options}, +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) + {FT_general, "dsaparam", dsaparam_main, dsaparam_options, "pkeyparam"}, #endif #ifndef OPENSSL_NO_EC - {FT_general, "ec", ec_main, ec_options}, + {FT_general, "ec", ec_main, ec_options, NULL}, #endif #ifndef OPENSSL_NO_EC - {FT_general, "ecparam", ecparam_main, ecparam_options}, + {FT_general, "ecparam", ecparam_main, ecparam_options, NULL}, #endif - {FT_general, "enc", enc_main, enc_options}, + {FT_general, "enc", enc_main, enc_options, NULL}, #ifndef OPENSSL_NO_ENGINE - {FT_general, "engine", engine_main, engine_options}, + {FT_general, "engine", engine_main, engine_options, NULL}, #endif - {FT_general, "errstr", errstr_main, errstr_options}, - {FT_general, "fipsinstall", fipsinstall_main, fipsinstall_options}, -#ifndef OPENSSL_NO_DSA - {FT_general, "gendsa", gendsa_main, gendsa_options}, + {FT_general, "errstr", errstr_main, errstr_options, NULL}, + {FT_general, "fipsinstall", fipsinstall_main, fipsinstall_options, NULL}, +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) + {FT_general, "gendsa", gendsa_main, gendsa_options, "genpkey"}, #endif - {FT_general, "genpkey", genpkey_main, genpkey_options}, + {FT_general, "genpkey", genpkey_main, genpkey_options, NULL}, #ifndef OPENSSL_NO_RSA - {FT_general, "genrsa", genrsa_main, genrsa_options}, + {FT_general, "genrsa", genrsa_main, genrsa_options, NULL}, #endif - {FT_general, "help", help_main, help_options}, - {FT_general, "info", info_main, info_options}, - {FT_general, "kdf", kdf_main, kdf_options}, - {FT_general, "list", list_main, list_options}, - {FT_general, "mac", mac_main, mac_options}, - {FT_general, "nseq", nseq_main, nseq_options}, + {FT_general, "help", help_main, help_options, NULL}, + {FT_general, "info", info_main, info_options, NULL}, + {FT_general, "kdf", kdf_main, kdf_options, NULL}, + {FT_general, "list", list_main, list_options, NULL}, + {FT_general, "mac", mac_main, mac_options, NULL}, + {FT_general, "nseq", nseq_main, nseq_options, NULL}, #ifndef OPENSSL_NO_OCSP - {FT_general, "ocsp", ocsp_main, ocsp_options}, + {FT_general, "ocsp", ocsp_main, ocsp_options, NULL}, #endif - {FT_general, "passwd", passwd_main, passwd_options}, + {FT_general, "passwd", passwd_main, passwd_options, NULL}, #ifndef OPENSSL_NO_DES - {FT_general, "pkcs12", pkcs12_main, pkcs12_options}, + {FT_general, "pkcs12", pkcs12_main, pkcs12_options, NULL}, #endif - {FT_general, "pkcs7", pkcs7_main, pkcs7_options}, - {FT_general, "pkcs8", pkcs8_main, pkcs8_options}, - {FT_general, "pkey", pkey_main, pkey_options}, - {FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options}, - {FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options}, - {FT_general, "prime", prime_main, prime_options}, - {FT_general, "provider", provider_main, provider_options}, - {FT_general, "rand", rand_main, rand_options}, - {FT_general, "rehash", rehash_main, rehash_options}, - {FT_general, "req", req_main, req_options}, - {FT_general, "rsa", rsa_main, rsa_options}, + {FT_general, "pkcs7", pkcs7_main, pkcs7_options, NULL}, + {FT_general, "pkcs8", pkcs8_main, pkcs8_options, NULL}, + {FT_general, "pkey", pkey_main, pkey_options, NULL}, + {FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options, NULL}, + {FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options, NULL}, + {FT_general, "prime", prime_main, prime_options, NULL}, + {FT_general, "provider", provider_main, provider_options, NULL}, + {FT_general, "rand", rand_main, rand_options, NULL}, + {FT_general, "rehash", rehash_main, rehash_options, NULL}, + {FT_general, "req", req_main, req_options, NULL}, + {FT_general, "rsa", rsa_main, rsa_options, NULL}, #ifndef OPENSSL_NO_RSA - {FT_general, "rsautl", rsautl_main, rsautl_options}, + {FT_general, "rsautl", rsautl_main, rsautl_options, NULL}, #endif #ifndef OPENSSL_NO_SOCK - {FT_general, "s_client", s_client_main, s_client_options}, + {FT_general, "s_client", s_client_main, s_client_options, NULL}, #endif #ifndef OPENSSL_NO_SOCK - {FT_general, "s_server", s_server_main, s_server_options}, + {FT_general, "s_server", s_server_main, s_server_options, NULL}, #endif #ifndef OPENSSL_NO_SOCK - {FT_general, "s_time", s_time_main, s_time_options}, + {FT_general, "s_time", s_time_main, s_time_options, NULL}, #endif - {FT_general, "sess_id", sess_id_main, sess_id_options}, - {FT_general, "smime", smime_main, smime_options}, - {FT_general, "speed", speed_main, speed_options}, - {FT_general, "spkac", spkac_main, spkac_options}, + {FT_general, "sess_id", sess_id_main, sess_id_options, NULL}, + {FT_general, "smime", smime_main, smime_options, NULL}, + {FT_general, "speed", speed_main, speed_options, NULL}, + {FT_general, "spkac", spkac_main, spkac_options, NULL}, #ifndef OPENSSL_NO_SRP - {FT_general, "srp", srp_main, srp_options}, + {FT_general, "srp", srp_main, srp_options, NULL}, #endif - {FT_general, "storeutl", storeutl_main, storeutl_options}, + {FT_general, "storeutl", storeutl_main, storeutl_options, NULL}, #ifndef OPENSSL_NO_TS - {FT_general, "ts", ts_main, ts_options}, + {FT_general, "ts", ts_main, ts_options, NULL}, #endif - {FT_general, "verify", verify_main, verify_options}, - {FT_general, "version", version_main, version_options}, - {FT_general, "x509", x509_main, x509_options}, + {FT_general, "verify", verify_main, verify_options, NULL}, + {FT_general, "version", version_main, version_options, NULL}, + {FT_general, "x509", x509_main, x509_options, NULL}, #ifndef OPENSSL_NO_MD2 - {FT_md, "md2", dgst_main}, + {FT_md, "md2", dgst_main, NULL, NULL}, #endif #ifndef OPENSSL_NO_MD4 - {FT_md, "md4", dgst_main}, + {FT_md, "md4", dgst_main, NULL, NULL}, #endif - {FT_md, "md5", dgst_main}, + {FT_md, "md5", dgst_main, NULL, NULL}, #ifndef OPENSSL_NO_GOST - {FT_md, "gost", dgst_main}, + {FT_md, "gost", dgst_main, NULL, NULL}, #endif - {FT_md, "sha1", dgst_main}, - {FT_md, "sha224", dgst_main}, - {FT_md, "sha256", dgst_main}, - {FT_md, "sha384", dgst_main}, - {FT_md, "sha512", dgst_main}, - {FT_md, "sha512-224", dgst_main}, - {FT_md, "sha512-256", dgst_main}, - {FT_md, "sha3-224", dgst_main}, - {FT_md, "sha3-256", dgst_main}, - {FT_md, "sha3-384", dgst_main}, - {FT_md, "sha3-512", dgst_main}, - {FT_md, "shake128", dgst_main}, - {FT_md, "shake256", dgst_main}, + {FT_md, "sha1", dgst_main, NULL, NULL}, + {FT_md, "sha224", dgst_main, NULL, NULL}, + {FT_md, "sha256", dgst_main, NULL, NULL}, + {FT_md, "sha384", dgst_main, NULL, NULL}, + {FT_md, "sha512", dgst_main, NULL, NULL}, + {FT_md, "sha512-224", dgst_main, NULL, NULL}, + {FT_md, "sha512-256", dgst_main, NULL, NULL}, + {FT_md, "sha3-224", dgst_main, NULL, NULL}, + {FT_md, "sha3-256", dgst_main, NULL, NULL}, + {FT_md, "sha3-384", dgst_main, NULL, NULL}, + {FT_md, "sha3-512", dgst_main, NULL, NULL}, + {FT_md, "shake128", dgst_main, NULL, NULL}, + {FT_md, "shake256", dgst_main, NULL, NULL}, #ifndef OPENSSL_NO_MDC2 - {FT_md, "mdc2", dgst_main}, + {FT_md, "mdc2", dgst_main, NULL, NULL}, #endif #ifndef OPENSSL_NO_RMD160 - {FT_md, "rmd160", dgst_main}, + {FT_md, "rmd160", dgst_main, NULL, NULL}, #endif #ifndef OPENSSL_NO_BLAKE2 - {FT_md, "blake2b512", dgst_main}, + {FT_md, "blake2b512", dgst_main, NULL, NULL}, #endif #ifndef OPENSSL_NO_BLAKE2 - {FT_md, "blake2s256", dgst_main}, + {FT_md, "blake2s256", dgst_main, NULL, NULL}, #endif #ifndef OPENSSL_NO_SM3 - {FT_md, "sm3", dgst_main}, + {FT_md, "sm3", dgst_main, NULL, NULL}, #endif - {FT_cipher, "aes-128-cbc", enc_main, enc_options}, - {FT_cipher, "aes-128-ecb", enc_main, enc_options}, - {FT_cipher, "aes-192-cbc", enc_main, enc_options}, - {FT_cipher, "aes-192-ecb", enc_main, enc_options}, - {FT_cipher, "aes-256-cbc", enc_main, enc_options}, - {FT_cipher, "aes-256-ecb", enc_main, enc_options}, + {FT_cipher, "aes-128-cbc", enc_main, enc_options, NULL}, + {FT_cipher, "aes-128-ecb", enc_main, enc_options, NULL}, + {FT_cipher, "aes-192-cbc", enc_main, enc_options, NULL}, + {FT_cipher, "aes-192-ecb", enc_main, enc_options, NULL}, + {FT_cipher, "aes-256-cbc", enc_main, enc_options, NULL}, + {FT_cipher, "aes-256-ecb", enc_main, enc_options, NULL}, #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-128-cbc", enc_main, enc_options}, + {FT_cipher, "aria-128-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-128-cfb", enc_main, enc_options}, + {FT_cipher, "aria-128-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-128-ctr", enc_main, enc_options}, + {FT_cipher, "aria-128-ctr", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-128-ecb", enc_main, enc_options}, + {FT_cipher, "aria-128-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-128-ofb", enc_main, enc_options}, + {FT_cipher, "aria-128-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-128-cfb1", enc_main, enc_options}, + {FT_cipher, "aria-128-cfb1", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-128-cfb8", enc_main, enc_options}, + {FT_cipher, "aria-128-cfb8", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-192-cbc", enc_main, enc_options}, + {FT_cipher, "aria-192-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-192-cfb", enc_main, enc_options}, + {FT_cipher, "aria-192-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-192-ctr", enc_main, enc_options}, + {FT_cipher, "aria-192-ctr", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-192-ecb", enc_main, enc_options}, + {FT_cipher, "aria-192-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-192-ofb", enc_main, enc_options}, + {FT_cipher, "aria-192-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-192-cfb1", enc_main, enc_options}, + {FT_cipher, "aria-192-cfb1", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-192-cfb8", enc_main, enc_options}, + {FT_cipher, "aria-192-cfb8", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-256-cbc", enc_main, enc_options}, + {FT_cipher, "aria-256-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-256-cfb", enc_main, enc_options}, + {FT_cipher, "aria-256-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-256-ctr", enc_main, enc_options}, + {FT_cipher, "aria-256-ctr", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-256-ecb", enc_main, enc_options}, + {FT_cipher, "aria-256-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-256-ofb", enc_main, enc_options}, + {FT_cipher, "aria-256-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-256-cfb1", enc_main, enc_options}, + {FT_cipher, "aria-256-cfb1", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_ARIA - {FT_cipher, "aria-256-cfb8", enc_main, enc_options}, + {FT_cipher, "aria-256-cfb8", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAMELLIA - {FT_cipher, "camellia-128-cbc", enc_main, enc_options}, + {FT_cipher, "camellia-128-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAMELLIA - {FT_cipher, "camellia-128-ecb", enc_main, enc_options}, + {FT_cipher, "camellia-128-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAMELLIA - {FT_cipher, "camellia-192-cbc", enc_main, enc_options}, + {FT_cipher, "camellia-192-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAMELLIA - {FT_cipher, "camellia-192-ecb", enc_main, enc_options}, + {FT_cipher, "camellia-192-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAMELLIA - {FT_cipher, "camellia-256-cbc", enc_main, enc_options}, + {FT_cipher, "camellia-256-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAMELLIA - {FT_cipher, "camellia-256-ecb", enc_main, enc_options}, + {FT_cipher, "camellia-256-ecb", enc_main, enc_options, NULL}, #endif - {FT_cipher, "base64", enc_main, enc_options}, + {FT_cipher, "base64", enc_main, enc_options, NULL}, #ifdef ZLIB - {FT_cipher, "zlib", enc_main, enc_options}, + {FT_cipher, "zlib", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des", enc_main, enc_options}, + {FT_cipher, "des", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des3", enc_main, enc_options}, + {FT_cipher, "des3", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "desx", enc_main, enc_options}, + {FT_cipher, "desx", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_IDEA - {FT_cipher, "idea", enc_main, enc_options}, + {FT_cipher, "idea", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SEED - {FT_cipher, "seed", enc_main, enc_options}, + {FT_cipher, "seed", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC4 - {FT_cipher, "rc4", enc_main, enc_options}, + {FT_cipher, "rc4", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC4 - {FT_cipher, "rc4-40", enc_main, enc_options}, + {FT_cipher, "rc4-40", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC2 - {FT_cipher, "rc2", enc_main, enc_options}, + {FT_cipher, "rc2", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_BF - {FT_cipher, "bf", enc_main, enc_options}, + {FT_cipher, "bf", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAST - {FT_cipher, "cast", enc_main, enc_options}, + {FT_cipher, "cast", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC5 - {FT_cipher, "rc5", enc_main, enc_options}, + {FT_cipher, "rc5", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ecb", enc_main, enc_options}, + {FT_cipher, "des-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede", enc_main, enc_options}, + {FT_cipher, "des-ede", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede3", enc_main, enc_options}, + {FT_cipher, "des-ede3", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-cbc", enc_main, enc_options}, + {FT_cipher, "des-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede-cbc", enc_main, enc_options}, + {FT_cipher, "des-ede-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede3-cbc", enc_main, enc_options}, + {FT_cipher, "des-ede3-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-cfb", enc_main, enc_options}, + {FT_cipher, "des-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede-cfb", enc_main, enc_options}, + {FT_cipher, "des-ede-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede3-cfb", enc_main, enc_options}, + {FT_cipher, "des-ede3-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ofb", enc_main, enc_options}, + {FT_cipher, "des-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede-ofb", enc_main, enc_options}, + {FT_cipher, "des-ede-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_DES - {FT_cipher, "des-ede3-ofb", enc_main, enc_options}, + {FT_cipher, "des-ede3-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_IDEA - {FT_cipher, "idea-cbc", enc_main, enc_options}, + {FT_cipher, "idea-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_IDEA - {FT_cipher, "idea-ecb", enc_main, enc_options}, + {FT_cipher, "idea-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_IDEA - {FT_cipher, "idea-cfb", enc_main, enc_options}, + {FT_cipher, "idea-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_IDEA - {FT_cipher, "idea-ofb", enc_main, enc_options}, + {FT_cipher, "idea-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SEED - {FT_cipher, "seed-cbc", enc_main, enc_options}, + {FT_cipher, "seed-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SEED - {FT_cipher, "seed-ecb", enc_main, enc_options}, + {FT_cipher, "seed-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SEED - {FT_cipher, "seed-cfb", enc_main, enc_options}, + {FT_cipher, "seed-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SEED - {FT_cipher, "seed-ofb", enc_main, enc_options}, + {FT_cipher, "seed-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC2 - {FT_cipher, "rc2-cbc", enc_main, enc_options}, + {FT_cipher, "rc2-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC2 - {FT_cipher, "rc2-ecb", enc_main, enc_options}, + {FT_cipher, "rc2-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC2 - {FT_cipher, "rc2-cfb", enc_main, enc_options}, + {FT_cipher, "rc2-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC2 - {FT_cipher, "rc2-ofb", enc_main, enc_options}, + {FT_cipher, "rc2-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC2 - {FT_cipher, "rc2-64-cbc", enc_main, enc_options}, + {FT_cipher, "rc2-64-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC2 - {FT_cipher, "rc2-40-cbc", enc_main, enc_options}, + {FT_cipher, "rc2-40-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_BF - {FT_cipher, "bf-cbc", enc_main, enc_options}, + {FT_cipher, "bf-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_BF - {FT_cipher, "bf-ecb", enc_main, enc_options}, + {FT_cipher, "bf-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_BF - {FT_cipher, "bf-cfb", enc_main, enc_options}, + {FT_cipher, "bf-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_BF - {FT_cipher, "bf-ofb", enc_main, enc_options}, + {FT_cipher, "bf-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAST - {FT_cipher, "cast5-cbc", enc_main, enc_options}, + {FT_cipher, "cast5-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAST - {FT_cipher, "cast5-ecb", enc_main, enc_options}, + {FT_cipher, "cast5-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAST - {FT_cipher, "cast5-cfb", enc_main, enc_options}, + {FT_cipher, "cast5-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAST - {FT_cipher, "cast5-ofb", enc_main, enc_options}, + {FT_cipher, "cast5-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_CAST - {FT_cipher, "cast-cbc", enc_main, enc_options}, + {FT_cipher, "cast-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC5 - {FT_cipher, "rc5-cbc", enc_main, enc_options}, + {FT_cipher, "rc5-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC5 - {FT_cipher, "rc5-ecb", enc_main, enc_options}, + {FT_cipher, "rc5-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC5 - {FT_cipher, "rc5-cfb", enc_main, enc_options}, + {FT_cipher, "rc5-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_RC5 - {FT_cipher, "rc5-ofb", enc_main, enc_options}, + {FT_cipher, "rc5-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SM4 - {FT_cipher, "sm4-cbc", enc_main, enc_options}, + {FT_cipher, "sm4-cbc", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SM4 - {FT_cipher, "sm4-ecb", enc_main, enc_options}, + {FT_cipher, "sm4-ecb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SM4 - {FT_cipher, "sm4-cfb", enc_main, enc_options}, + {FT_cipher, "sm4-cfb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SM4 - {FT_cipher, "sm4-ofb", enc_main, enc_options}, + {FT_cipher, "sm4-ofb", enc_main, enc_options, NULL}, #endif #ifndef OPENSSL_NO_SM4 - {FT_cipher, "sm4-ctr", enc_main, enc_options}, + {FT_cipher, "sm4-ctr", enc_main, enc_options, NULL}, #endif - {0, NULL, NULL} + {0, NULL, NULL, NULL, NULL} }; diff --git a/apps/progs.pl b/apps/progs.pl index 1b304a03..4f1d1c29 100644 --- a/apps/progs.pl +++ b/apps/progs.pl @@ -94,20 +94,33 @@ EOF ciphers => "sock", genrsa => "rsa", rsautl => "rsa", - gendsa => "dsa", - dsaparam => "dsa", gendh => "dh", - dhparam => "dh", ecparam => "ec", pkcs12 => "des", ); + my %cmd_deprecated = ( + dhparam => [ "3_0", "pkeyparam", "dh" ], + dsaparam => [ "3_0", "pkeyparam", "dsa" ], + dsa => [ "3_0", "pkey", "dsa" ], + gendsa => [ "3_0", "genpkey", "dsa" ], + ); print "FUNCTION functions[] = {\n"; foreach my $cmd ( @ARGV ) { my $str = - " {FT_general, \"$cmd\", ${cmd}_main, ${cmd}_options},\n"; + " {FT_general, \"$cmd\", ${cmd}_main, ${cmd}_options, NULL},\n"; if ($cmd =~ /^s_/) { print "#ifndef OPENSSL_NO_SOCK\n${str}#endif\n"; + } elsif (my $deprecated = $cmd_deprecated{$cmd}) { + my @dep = @{$deprecated}; + print "#if "; + if ($dep[2]) { + print "!defined(OPENSSL_NO_" . uc($dep[2]) . ") && "; + } + print "!defined(OPENSSL_NO_DEPRECATED_" . $dep[0] . ")"; + my $dalt = "\"" . $dep[1] . "\""; + $str =~ s/NULL/$dalt/; + print "\n${str}#endif\n"; } elsif (grep { $cmd eq $_ } @disablables) { print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n"; } elsif (my $disabler = $cmd_disabler{$cmd}) { @@ -131,7 +144,7 @@ EOF "mdc2", "rmd160", "blake2b512", "blake2s256", "sm3" ) { - my $str = " {FT_md, \"$cmd\", dgst_main},\n"; + my $str = " {FT_md, \"$cmd\", dgst_main, NULL, NULL},\n"; if (grep { $cmd eq $_ } @disablables) { print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n"; } elsif (my $disabler = $md_disabler{$cmd}) { @@ -177,7 +190,7 @@ EOF "cast-cbc", "rc5-cbc", "rc5-ecb", "rc5-cfb", "rc5-ofb", "sm4-cbc", "sm4-ecb", "sm4-cfb", "sm4-ofb", "sm4-ctr" ) { - my $str = " {FT_cipher, \"$cmd\", enc_main, enc_options},\n"; + my $str = " {FT_cipher, \"$cmd\", enc_main, enc_options, NULL},\n"; (my $algo = $cmd) =~ s/-.*//g; if ($cmd eq "zlib") { print "#ifdef ZLIB\n${str}#endif\n"; @@ -190,5 +203,5 @@ EOF } } - print " {0, NULL, NULL}\n};\n"; + print " {0, NULL, NULL, NULL, NULL}\n};\n"; } diff --git a/apps/speed.c b/apps/speed.c index 17f2cf39..0e94e7ca 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -99,7 +99,7 @@ # include "./testrsa.h" #endif #include -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) # include # include "./testdsa.h" #endif @@ -406,7 +406,7 @@ static const OPT_PAIR doit_choices[] = { static double results[ALGOR_NUM][SIZE_NUM]; -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) enum { R_DSA_512, R_DSA_1024, R_DSA_2048, DSA_NUM }; static const OPT_PAIR dsa_choices[DSA_NUM] = { {"dsa512", R_DSA_512}, @@ -545,7 +545,7 @@ typedef struct loopargs_st { #ifndef OPENSSL_NO_RSA RSA *rsa_key[RSA_NUM]; #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) DSA *dsa_key[DSA_NUM]; #endif #ifndef OPENSSL_NO_EC @@ -1066,7 +1066,7 @@ static int RSA_verify_loop(void *args) } #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) static long dsa_c[DSA_NUM][2]; static int DSA_sign_loop(void *args) { @@ -1520,7 +1520,7 @@ int speed_main(int argc, char **argv) uint8_t rsa_doit[RSA_NUM] = { 0 }; int primes = RSA_DEFAULT_PRIME_NUM; #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) static const unsigned int dsa_bits[DSA_NUM] = { 512, 1024, 2048 }; uint8_t dsa_doit[DSA_NUM] = { 0 }; #endif @@ -1760,7 +1760,7 @@ int speed_main(int argc, char **argv) } } #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) if (strncmp(algo, "dsa", 3) == 0) { if (algo[3] == '\0') { memset(dsa_doit, 1, sizeof(dsa_doit)); @@ -1912,7 +1912,7 @@ int speed_main(int argc, char **argv) #ifndef OPENSSL_NO_RSA memset(rsa_doit, 1, sizeof(rsa_doit)); #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) memset(dsa_doit, 1, sizeof(dsa_doit)); #endif #ifndef OPENSSL_NO_EC @@ -1952,7 +1952,7 @@ int speed_main(int argc, char **argv) } } #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) for (i = 0; i < loopargs_len; i++) { loopargs[i].dsa_key[0] = get_dsa(512); loopargs[i].dsa_key[1] = get_dsa(1024); @@ -2120,7 +2120,7 @@ int speed_main(int argc, char **argv) } # endif -# ifndef OPENSSL_NO_DSA +# if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) dsa_c[R_DSA_512][0] = count / 1000; dsa_c[R_DSA_512][1] = count / 1000 / 2; for (i = 1; i < DSA_NUM; i++) { @@ -2955,7 +2955,7 @@ int speed_main(int argc, char **argv) if (RAND_bytes(loopargs[i].buf, 36) <= 0) goto end; -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) for (testnum = 0; testnum < DSA_NUM; testnum++) { int st = 0; if (!dsa_doit[testnum]) @@ -3582,7 +3582,7 @@ int speed_main(int argc, char **argv) rsa_results[k][0], rsa_results[k][1]); } #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) testnum = 1; for (k = 0; k < DSA_NUM; k++) { if (!dsa_doit[k]) @@ -3695,7 +3695,7 @@ int speed_main(int argc, char **argv) for (k = 0; k < RSA_NUM; k++) RSA_free(loopargs[i].rsa_key[k]); #endif -#ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) for (k = 0; k < DSA_NUM; k++) DSA_free(loopargs[i].dsa_key[k]); #endif @@ -3901,7 +3901,7 @@ static int do_multi(int multi, int size_num) d = atof(sstrsep(&p, sep)); rsa_results[k][1] += d; } -# ifndef OPENSSL_NO_DSA +#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0) else if (strncmp(buf, "+F3:", 4) == 0) { int k; double d; diff --git a/apps/x509.c b/apps/x509.c index c0075379..74036698 100644 --- a/apps/x509.c +++ b/apps/x509.c @@ -128,7 +128,7 @@ const OPTIONS x509_options[] = { {"setalias", OPT_SETALIAS, 's', "Set certificate alias"}, {"days", OPT_DAYS, 'n', "How long till expiry of a signed certificate - def 30 days"}, - {"signkey", OPT_SIGNKEY, '<', "Self sign cert with arg"}, + {"signkey", OPT_SIGNKEY, 's', "Self sign cert with arg"}, {"set_serial", OPT_SET_SERIAL, 's', "Serial number to use"}, {"extensions", OPT_EXTENSIONS, 's', "Section from config file to use"}, {"certopt", OPT_CERTOPT, 's', "Various certificate text options"}, diff --git a/crypto/aes/asm/aes-586.pl b/crypto/aes/asm/aes-586.pl index 401469ee..a11eef09 100755 --- a/crypto/aes/asm/aes-586.pl +++ b/crypto/aes/asm/aes-586.pl @@ -2995,4 +2995,4 @@ sub deckey() &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aes-armv4.pl b/crypto/aes/asm/aes-armv4.pl index 24615350..e8feee35 100644 --- a/crypto/aes/asm/aes-armv4.pl +++ b/crypto/aes/asm/aes-armv4.pl @@ -1245,4 +1245,4 @@ while() { close SELF; print $code; -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/aes/asm/aes-c64xplus.pl b/crypto/aes/asm/aes-c64xplus.pl index 4a9b41af..3d767ce0 100644 --- a/crypto/aes/asm/aes-c64xplus.pl +++ b/crypto/aes/asm/aes-c64xplus.pl @@ -1378,4 +1378,4 @@ AES_Td4: ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aes-mips.pl b/crypto/aes/asm/aes-mips.pl index 73ed9885..9c3a6e6a 100644 --- a/crypto/aes/asm/aes-mips.pl +++ b/crypto/aes/asm/aes-mips.pl @@ -2203,4 +2203,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aes-parisc.pl b/crypto/aes/asm/aes-parisc.pl index 761c2347..c51c11b1 100644 --- a/crypto/aes/asm/aes-parisc.pl +++ b/crypto/aes/asm/aes-parisc.pl @@ -1038,4 +1038,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aes-ppc.pl b/crypto/aes/asm/aes-ppc.pl index 219bd69d..86c666c6 100644 --- a/crypto/aes/asm/aes-ppc.pl +++ b/crypto/aes/asm/aes-ppc.pl @@ -1460,4 +1460,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aes-s390x.pl b/crypto/aes/asm/aes-s390x.pl index a4982554..a0c817a1 100644 --- a/crypto/aes/asm/aes-s390x.pl +++ b/crypto/aes/asm/aes-s390x.pl @@ -2281,4 +2281,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; # force flush +close STDOUT or die "error closing STDOUT: $!"; # force flush diff --git a/crypto/aes/asm/aes-sparcv9.pl b/crypto/aes/asm/aes-sparcv9.pl index f57a9a3f..e1319502 100755 --- a/crypto/aes/asm/aes-sparcv9.pl +++ b/crypto/aes/asm/aes-sparcv9.pl @@ -1188,4 +1188,4 @@ ___ $code =~ s/fmovs.*$//gm; print $code; -close STDOUT or die "error closing STDOUT"; # ensure flush +close STDOUT or die "error closing STDOUT: $!"; # ensure flush diff --git a/crypto/aes/asm/aes-x86_64.pl b/crypto/aes/asm/aes-x86_64.pl index 813817ed..1a771a11 100755 --- a/crypto/aes/asm/aes-x86_64.pl +++ b/crypto/aes/asm/aes-x86_64.pl @@ -606,6 +606,7 @@ $code.=<<___; asm_AES_encrypt: AES_encrypt: .cfi_startproc + endbranch mov %rsp,%rax .cfi_def_cfa_register %rax push %rbx @@ -1226,6 +1227,7 @@ $code.=<<___; asm_AES_decrypt: AES_decrypt: .cfi_startproc + endbranch mov %rsp,%rax .cfi_def_cfa_register %rax push %rbx @@ -1343,6 +1345,7 @@ $code.=<<___; .align 16 AES_set_encrypt_key: .cfi_startproc + endbranch push %rbx .cfi_push %rbx push %rbp @@ -1623,6 +1626,7 @@ $code.=<<___; .align 16 AES_set_decrypt_key: .cfi_startproc + endbranch push %rbx .cfi_push %rbx push %rbp @@ -1737,6 +1741,7 @@ $code.=<<___; asm_AES_cbc_encrypt: AES_cbc_encrypt: .cfi_startproc + endbranch cmp \$0,%rdx # check length je .Lcbc_epilogue pushfq @@ -2919,4 +2924,4 @@ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesfx-sparcv9.pl b/crypto/aes/asm/aesfx-sparcv9.pl index 2512dffa..af99c9f2 100644 --- a/crypto/aes/asm/aesfx-sparcv9.pl +++ b/crypto/aes/asm/aesfx-sparcv9.pl @@ -1266,4 +1266,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesni-mb-x86_64.pl b/crypto/aes/asm/aesni-mb-x86_64.pl index eb852cc6..3b2b5694 100644 --- a/crypto/aes/asm/aesni-mb-x86_64.pl +++ b/crypto/aes/asm/aesni-mb-x86_64.pl @@ -1473,4 +1473,4 @@ $code =~ s/\`([^\`]*)\`/eval($1)/gem; $code =~ s/\b(aes.*%xmm[0-9]+).*$/aesni($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesni-sha1-x86_64.pl b/crypto/aes/asm/aesni-sha1-x86_64.pl index 4a881f8e..9f2b2491 100644 --- a/crypto/aes/asm/aesni-sha1-x86_64.pl +++ b/crypto/aes/asm/aesni-sha1-x86_64.pl @@ -2145,4 +2145,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesni-sha256-x86_64.pl b/crypto/aes/asm/aesni-sha256-x86_64.pl index 58ef8ad2..442c934a 100644 --- a/crypto/aes/asm/aesni-sha256-x86_64.pl +++ b/crypto/aes/asm/aesni-sha256-x86_64.pl @@ -1801,4 +1801,4 @@ sub rex { $code =~ s/\`([^\`]*)\`/eval $1/gem; $code =~ s/\b(sha256[^\s]*)\s+(.*)/sha256op38($1,$2)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesni-x86.pl b/crypto/aes/asm/aesni-x86.pl index 1c714531..ee0a47cd 100644 --- a/crypto/aes/asm/aesni-x86.pl +++ b/crypto/aes/asm/aesni-x86.pl @@ -3410,4 +3410,4 @@ my ($l_,$block,$i1,$i3,$i5) = ($rounds_,$key_,$rounds,$len,$out); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesni-x86_64.pl b/crypto/aes/asm/aesni-x86_64.pl index 79d50da7..4d2d1e09 100644 --- a/crypto/aes/asm/aesni-x86_64.pl +++ b/crypto/aes/asm/aesni-x86_64.pl @@ -277,6 +277,7 @@ $code.=<<___; .align 16 ${PREFIX}_encrypt: .cfi_startproc + endbranch movups ($inp),$inout0 # load input mov 240($key),$rounds # key->rounds ___ @@ -295,6 +296,7 @@ $code.=<<___; .align 16 ${PREFIX}_decrypt: .cfi_startproc + endbranch movups ($inp),$inout0 # load input mov 240($key),$rounds # key->rounds ___ @@ -615,6 +617,7 @@ $code.=<<___; .align 16 aesni_ecb_encrypt: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); lea -0x58(%rsp),%rsp @@ -987,6 +990,7 @@ $code.=<<___; .align 16 aesni_ccm64_encrypt_blocks: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); lea -0x58(%rsp),%rsp @@ -1079,6 +1083,7 @@ $code.=<<___; .align 16 aesni_ccm64_decrypt_blocks: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); lea -0x58(%rsp),%rsp @@ -1205,6 +1210,7 @@ $code.=<<___; .align 16 aesni_ctr32_encrypt_blocks: .cfi_startproc + endbranch cmp \$1,$len jne .Lctr32_bulk @@ -1777,6 +1783,7 @@ $code.=<<___; .align 16 aesni_xts_encrypt: .cfi_startproc + endbranch lea (%rsp),%r11 # frame pointer .cfi_def_cfa_register %r11 push %rbp @@ -2260,6 +2267,7 @@ $code.=<<___; .align 16 aesni_xts_decrypt: .cfi_startproc + endbranch lea (%rsp),%r11 # frame pointer .cfi_def_cfa_register %r11 push %rbp @@ -2785,6 +2793,7 @@ $code.=<<___; .align 32 aesni_ocb_encrypt: .cfi_startproc + endbranch lea (%rsp),%rax push %rbx .cfi_push %rbx @@ -3251,6 +3260,7 @@ __ocb_encrypt1: .align 32 aesni_ocb_decrypt: .cfi_startproc + endbranch lea (%rsp),%rax push %rbx .cfi_push %rbx @@ -3739,6 +3749,7 @@ $code.=<<___; .align 16 ${PREFIX}_cbc_encrypt: .cfi_startproc + endbranch test $len,$len # check length jz .Lcbc_ret @@ -5156,4 +5167,4 @@ $code =~ s/\bmovbe\s+%eax,\s*([0-9]+)\(%rsp\)/movbe($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesp8-ppc.pl b/crypto/aes/asm/aesp8-ppc.pl index 9408bf0a..7bd5e9e3 100755 --- a/crypto/aes/asm/aesp8-ppc.pl +++ b/crypto/aes/asm/aesp8-ppc.pl @@ -3808,4 +3808,4 @@ foreach(split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aest4-sparcv9.pl b/crypto/aes/asm/aest4-sparcv9.pl index c9a2ff69..6a3965a8 100644 --- a/crypto/aes/asm/aest4-sparcv9.pl +++ b/crypto/aes/asm/aest4-sparcv9.pl @@ -925,4 +925,4 @@ ___ &emit_assembler(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/aesv8-armx.pl b/crypto/aes/asm/aesv8-armx.pl index f89bba5c..a18a47e3 100755 --- a/crypto/aes/asm/aesv8-armx.pl +++ b/crypto/aes/asm/aesv8-armx.pl @@ -211,7 +211,12 @@ $code.=<<___; .Loop192: vtbl.8 $key,{$in1},$mask vext.8 $tmp,$zero,$in0,#12 +#ifdef __ARMEB__ + vst1.32 {$in1},[$out],#16 + sub $out,$out,#8 +#else vst1.32 {$in1},[$out],#8 +#endif aese $key,$zero subs $bits,$bits,#1 @@ -1772,8 +1777,11 @@ $code.=<<___; ldr $rounds,[$key,#240] ldr $ctr, [$ivp, #12] +#ifdef __ARMEB__ + vld1.8 {$dat0},[$ivp] +#else vld1.32 {$dat0},[$ivp] - +#endif vld1.32 {q8-q9},[$key] // load key schedule... sub $rounds,$rounds,#4 mov $step,#16 @@ -2237,4 +2245,4 @@ if ($flavour =~ /64/) { ######## 64-bit code } } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/bsaes-armv7.pl b/crypto/aes/asm/bsaes-armv7.pl index 601b6b39..58b8e927 100644 --- a/crypto/aes/asm/bsaes-armv7.pl +++ b/crypto/aes/asm/bsaes-armv7.pl @@ -2491,4 +2491,4 @@ close SELF; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/bsaes-x86_64.pl b/crypto/aes/asm/bsaes-x86_64.pl index b75d95ff..1b0f7096 100644 --- a/crypto/aes/asm/bsaes-x86_64.pl +++ b/crypto/aes/asm/bsaes-x86_64.pl @@ -1616,6 +1616,7 @@ $code.=<<___; .align 16 bsaes_cbc_encrypt: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); mov 48(%rsp),$arg6 # pull direction flag @@ -1921,6 +1922,7 @@ $code.=<<___; .align 16 bsaes_ctr32_encrypt_blocks: .cfi_startproc + endbranch mov %rsp, %rax .Lctr_enc_prologue: push %rbp @@ -3238,4 +3240,4 @@ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/vpaes-armv8.pl b/crypto/aes/asm/vpaes-armv8.pl index 2dba92dd..4068c4bd 100755 --- a/crypto/aes/asm/vpaes-armv8.pl +++ b/crypto/aes/asm/vpaes-armv8.pl @@ -1278,4 +1278,4 @@ ___ } } print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/vpaes-ppc.pl b/crypto/aes/asm/vpaes-ppc.pl index 74f4d9af..522cfb73 100644 --- a/crypto/aes/asm/vpaes-ppc.pl +++ b/crypto/aes/asm/vpaes-ppc.pl @@ -1595,4 +1595,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/vpaes-x86.pl b/crypto/aes/asm/vpaes-x86.pl index a737f2db..f800d83a 100644 --- a/crypto/aes/asm/vpaes-x86.pl +++ b/crypto/aes/asm/vpaes-x86.pl @@ -911,4 +911,4 @@ $k_dsbo=0x2c0; # decryption sbox final output &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/aes/asm/vpaes-x86_64.pl b/crypto/aes/asm/vpaes-x86_64.pl index 5c1dc9f9..ed0af8df 100644 --- a/crypto/aes/asm/vpaes-x86_64.pl +++ b/crypto/aes/asm/vpaes-x86_64.pl @@ -698,6 +698,7 @@ _vpaes_schedule_mangle: .align 16 ${PREFIX}_set_encrypt_key: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -748,6 +749,7 @@ $code.=<<___; .align 16 ${PREFIX}_set_decrypt_key: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -803,6 +805,7 @@ $code.=<<___; .align 16 ${PREFIX}_encrypt: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -848,6 +851,7 @@ $code.=<<___; .align 16 ${PREFIX}_decrypt: .cfi_startproc + endbranch ___ $code.=<<___ if ($win64); lea -0xb8(%rsp),%rsp @@ -899,6 +903,7 @@ $code.=<<___; .align 16 ${PREFIX}_cbc_encrypt: .cfi_startproc + endbranch xchg $key,$len ___ ($len,$key)=($key,$len); @@ -1240,4 +1245,4 @@ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/alphacpuid.pl b/crypto/alphacpuid.pl index c64d5021..681b1187 100644 --- a/crypto/alphacpuid.pl +++ b/crypto/alphacpuid.pl @@ -253,4 +253,4 @@ OPENSSL_instrument_bus2: ___ } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/arm64cpuid.pl b/crypto/arm64cpuid.pl index 0fdaf3db..96facfd8 100755 --- a/crypto/arm64cpuid.pl +++ b/crypto/arm64cpuid.pl @@ -147,4 +147,4 @@ CRYPTO_memcmp: ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/armv4cpuid.pl b/crypto/armv4cpuid.pl index 36466173..f0f95648 100644 --- a/crypto/armv4cpuid.pl +++ b/crypto/armv4cpuid.pl @@ -297,4 +297,4 @@ atomic_add_spinlock: ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/asn1/asn_mime.c b/crypto/asn1/asn_mime.c index 757fe9eb..71916927 100644 --- a/crypto/asn1/asn_mime.c +++ b/crypto/asn1/asn_mime.c @@ -199,6 +199,14 @@ static int asn1_write_micalg(BIO *out, STACK_OF(X509_ALGOR) *mdalgs) BIO_puts(out, "gostr3411-94"); goto err; + case NID_id_GostR3411_2012_256: + BIO_puts(out, "gostr3411-2012-256"); + goto err; + + case NID_id_GostR3411_2012_512: + BIO_puts(out, "gostr3411-2012-512"); + goto err; + default: if (have_unknown) write_comma = 0; diff --git a/crypto/asn1/d2i_pu.c b/crypto/asn1/d2i_pu.c index 4b26ec04..8688bb67 100644 --- a/crypto/asn1/d2i_pu.c +++ b/crypto/asn1/d2i_pu.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include diff --git a/crypto/asn1/i2d_pr.c b/crypto/asn1/i2d_pr.c index 4decdb1d..dd2a82da 100644 --- a/crypto/asn1/i2d_pr.c +++ b/crypto/asn1/i2d_pr.c @@ -10,6 +10,8 @@ #include #include "internal/cryptlib.h" #include +#include +#include #include #include "crypto/asn1.h" #include "crypto/evp.h" @@ -28,6 +30,36 @@ int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp) } return ret; } + if (a->pkeys[0].keymgmt != NULL) { + const char *serprop = OSSL_SERIALIZER_PrivateKey_TO_DER_PQ; + OSSL_SERIALIZER_CTX *ctx = + OSSL_SERIALIZER_CTX_new_by_EVP_PKEY(a, serprop); + BIO *out = BIO_new(BIO_s_mem()); + BUF_MEM *buf = NULL; + int ret = -1; + + if (ctx != NULL + && out != NULL + && OSSL_SERIALIZER_CTX_get_serializer(ctx) != NULL + && OSSL_SERIALIZER_to_bio(ctx, out) + && BIO_get_mem_ptr(out, &buf) > 0) { + ret = buf->length; + + if (pp != NULL) { + if (*pp == NULL) { + *pp = (unsigned char *)buf->data; + buf->length = 0; + buf->data = NULL; + } else { + memcpy(*pp, buf->data, ret); + *pp += ret; + } + } + } + BIO_free(out); + OSSL_SERIALIZER_CTX_free(ctx); + return ret; + } ASN1err(ASN1_F_I2D_PRIVATEKEY, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE); return -1; } diff --git a/crypto/asn1/i2d_pu.c b/crypto/asn1/i2d_pu.c index 8195dda8..b1466882 100644 --- a/crypto/asn1/i2d_pu.c +++ b/crypto/asn1/i2d_pu.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include diff --git a/crypto/bf/asm/bf-586.pl b/crypto/bf/asm/bf-586.pl index a4317f71..43ce999e 100644 --- a/crypto/bf/asm/bf-586.pl +++ b/crypto/bf/asm/bf-586.pl @@ -31,7 +31,7 @@ $tmp4="edx"; &cbc("BF_cbc_encrypt","BF_encrypt","BF_decrypt",1,4,5,3,-1,-1); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub BF_encrypt { diff --git a/crypto/bn/asm/alpha-mont.pl b/crypto/bn/asm/alpha-mont.pl index b242098c..04239b8b 100644 --- a/crypto/bn/asm/alpha-mont.pl +++ b/crypto/bn/asm/alpha-mont.pl @@ -324,4 +324,4 @@ bn_mul_mont: ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/armv4-gf2m.pl b/crypto/bn/asm/armv4-gf2m.pl index 400712f0..ae4cb94b 100644 --- a/crypto/bn/asm/armv4-gf2m.pl +++ b/crypto/bn/asm/armv4-gf2m.pl @@ -338,4 +338,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/bn/asm/armv4-mont.pl b/crypto/bn/asm/armv4-mont.pl index 85ec7934..093f146c 100644 --- a/crypto/bn/asm/armv4-mont.pl +++ b/crypto/bn/asm/armv4-mont.pl @@ -763,4 +763,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/armv8-mont.pl b/crypto/bn/asm/armv8-mont.pl index 77e77ae0..ed77a8a1 100755 --- a/crypto/bn/asm/armv8-mont.pl +++ b/crypto/bn/asm/armv8-mont.pl @@ -1514,4 +1514,4 @@ ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/bn-586.pl b/crypto/bn/asm/bn-586.pl index 3bd422ce..4f6f364f 100644 --- a/crypto/bn/asm/bn-586.pl +++ b/crypto/bn/asm/bn-586.pl @@ -30,7 +30,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub bn_mul_add_words { diff --git a/crypto/bn/asm/c64xplus-gf2m.pl b/crypto/bn/asm/c64xplus-gf2m.pl index da9b24a5..d3558918 100644 --- a/crypto/bn/asm/c64xplus-gf2m.pl +++ b/crypto/bn/asm/c64xplus-gf2m.pl @@ -156,4 +156,4 @@ $code.=<<___; ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/co-586.pl b/crypto/bn/asm/co-586.pl index 7a9752ad..5bb03ad6 100644 --- a/crypto/bn/asm/co-586.pl +++ b/crypto/bn/asm/co-586.pl @@ -21,7 +21,7 @@ $output = pop and open STDOUT,">$output"; &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub mul_add_c { diff --git a/crypto/bn/asm/ia64-mont.pl b/crypto/bn/asm/ia64-mont.pl index 63db7836..fac6ca9b 100644 --- a/crypto/bn/asm/ia64-mont.pl +++ b/crypto/bn/asm/ia64-mont.pl @@ -858,4 +858,4 @@ ___ open STDOUT,">$output" if $output; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/mips-mont.pl b/crypto/bn/asm/mips-mont.pl index 93aa1bf4..3e89ccaf 100644 --- a/crypto/bn/asm/mips-mont.pl +++ b/crypto/bn/asm/mips-mont.pl @@ -433,4 +433,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/mips.pl b/crypto/bn/asm/mips.pl index e24fe2e8..cf67647f 100644 --- a/crypto/bn/asm/mips.pl +++ b/crypto/bn/asm/mips.pl @@ -2262,4 +2262,4 @@ $code.=<<___; .end bn_sqr_comba4 ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/parisc-mont.pl b/crypto/bn/asm/parisc-mont.pl index 757f68af..ed7df628 100644 --- a/crypto/bn/asm/parisc-mont.pl +++ b/crypto/bn/asm/parisc-mont.pl @@ -1005,4 +1005,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/ppc-mont.pl b/crypto/bn/asm/ppc-mont.pl index b208f2dc..497b4c70 100644 --- a/crypto/bn/asm/ppc-mont.pl +++ b/crypto/bn/asm/ppc-mont.pl @@ -1991,4 +1991,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/ppc.pl b/crypto/bn/asm/ppc.pl index a9f50a8e..b3df275d 100644 --- a/crypto/bn/asm/ppc.pl +++ b/crypto/bn/asm/ppc.pl @@ -2013,4 +2013,4 @@ Lppcasm_maw_adios: EOF $data =~ s/\`([^\`]*)\`/eval $1/gem; print $data; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/ppc64-mont.pl b/crypto/bn/asm/ppc64-mont.pl index e869ec87..e5799083 100644 --- a/crypto/bn/asm/ppc64-mont.pl +++ b/crypto/bn/asm/ppc64-mont.pl @@ -1653,4 +1653,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/rsaz-avx2.pl b/crypto/bn/asm/rsaz-avx2.pl index e0332426..a01b2898 100755 --- a/crypto/bn/asm/rsaz-avx2.pl +++ b/crypto/bn/asm/rsaz-avx2.pl @@ -1981,4 +1981,4 @@ rsaz_1024_gather5_avx2: ___ }}} -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/rsaz-x86_64.pl b/crypto/bn/asm/rsaz-x86_64.pl index ee92dfe3..e05dc816 100755 --- a/crypto/bn/asm/rsaz-x86_64.pl +++ b/crypto/bn/asm/rsaz-x86_64.pl @@ -2430,4 +2430,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/s390x-gf2m.pl b/crypto/bn/asm/s390x-gf2m.pl index 4e858001..02acd508 100644 --- a/crypto/bn/asm/s390x-gf2m.pl +++ b/crypto/bn/asm/s390x-gf2m.pl @@ -227,4 +227,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/s390x-mont.pl b/crypto/bn/asm/s390x-mont.pl index f7b1dc21..03fd15bb 100644 --- a/crypto/bn/asm/s390x-mont.pl +++ b/crypto/bn/asm/s390x-mont.pl @@ -283,4 +283,4 @@ foreach (split("\n",$code)) { s/_dswap\s+(%r[0-9]+)/sprintf("rllg\t%s,%s,32",$1,$1) if($SIZE_T==4)/e; print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/sparct4-mont.pl b/crypto/bn/asm/sparct4-mont.pl index 1d4b5ee9..316c2af8 100755 --- a/crypto/bn/asm/sparct4-mont.pl +++ b/crypto/bn/asm/sparct4-mont.pl @@ -1224,4 +1224,4 @@ ___ &emit_assembler(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/sparcv9-gf2m.pl b/crypto/bn/asm/sparcv9-gf2m.pl index 40bac74a..26f0253f 100644 --- a/crypto/bn/asm/sparcv9-gf2m.pl +++ b/crypto/bn/asm/sparcv9-gf2m.pl @@ -196,4 +196,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/sparcv9-mont.pl b/crypto/bn/asm/sparcv9-mont.pl index 33c4ffb5..c16d5730 100644 --- a/crypto/bn/asm/sparcv9-mont.pl +++ b/crypto/bn/asm/sparcv9-mont.pl @@ -616,4 +616,4 @@ $code.=<<___; ___ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/sparcv9a-mont.pl b/crypto/bn/asm/sparcv9a-mont.pl index a91e40ed..369913b8 100755 --- a/crypto/bn/asm/sparcv9a-mont.pl +++ b/crypto/bn/asm/sparcv9a-mont.pl @@ -886,4 +886,4 @@ $code =~ s/fzeros\s+%f([0-9]+)/ print $code; # flush -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/via-mont.pl b/crypto/bn/asm/via-mont.pl index 3c276288..7678e75a 100644 --- a/crypto/bn/asm/via-mont.pl +++ b/crypto/bn/asm/via-mont.pl @@ -247,4 +247,4 @@ $sp=&DWP(28,"esp"); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/vis3-mont.pl b/crypto/bn/asm/vis3-mont.pl index 827679b3..136f3e44 100644 --- a/crypto/bn/asm/vis3-mont.pl +++ b/crypto/bn/asm/vis3-mont.pl @@ -380,4 +380,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/x86-gf2m.pl b/crypto/bn/asm/x86-gf2m.pl index c909065f..46cce652 100644 --- a/crypto/bn/asm/x86-gf2m.pl +++ b/crypto/bn/asm/x86-gf2m.pl @@ -321,4 +321,4 @@ if ($sse2) { &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/x86-mont.pl b/crypto/bn/asm/x86-mont.pl index e2343359..0fcc484b 100755 --- a/crypto/bn/asm/x86-mont.pl +++ b/crypto/bn/asm/x86-mont.pl @@ -627,4 +627,4 @@ $sbit=$num; &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/x86_64-gf2m.pl b/crypto/bn/asm/x86_64-gf2m.pl index 27034285..9c082014 100644 --- a/crypto/bn/asm/x86_64-gf2m.pl +++ b/crypto/bn/asm/x86_64-gf2m.pl @@ -423,4 +423,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/x86_64-mont.pl b/crypto/bn/asm/x86_64-mont.pl index bcc0f83e..9ba7ae8b 100755 --- a/crypto/bn/asm/x86_64-mont.pl +++ b/crypto/bn/asm/x86_64-mont.pl @@ -1591,4 +1591,4 @@ ___ } print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/asm/x86_64-mont5.pl b/crypto/bn/asm/x86_64-mont5.pl index 0eb127b4..6cd7bca9 100755 --- a/crypto/bn/asm/x86_64-mont5.pl +++ b/crypto/bn/asm/x86_64-mont5.pl @@ -3962,4 +3962,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/bn/bn_local.h b/crypto/bn/bn_local.h index ec903385..1c9c018c 100644 --- a/crypto/bn/bn_local.h +++ b/crypto/bn/bn_local.h @@ -22,6 +22,7 @@ # endif # include "crypto/bn.h" +# include "internal/cryptlib.h" /* * These preprocessor symbols control various aspects of the bignum headers diff --git a/crypto/c64xpluscpuid.pl b/crypto/c64xpluscpuid.pl index 0fc1b8b6..9aedc47d 100644 --- a/crypto/c64xpluscpuid.pl +++ b/crypto/c64xpluscpuid.pl @@ -284,4 +284,4 @@ bus_loop2_done?: ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/camellia/asm/cmll-x86.pl b/crypto/camellia/asm/cmll-x86.pl index d1e522fb..f02108cc 100644 --- a/crypto/camellia/asm/cmll-x86.pl +++ b/crypto/camellia/asm/cmll-x86.pl @@ -1146,4 +1146,4 @@ my ($s0,$s1,$s2,$s3) = @T; &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/camellia/asm/cmll-x86_64.pl b/crypto/camellia/asm/cmll-x86_64.pl index 6865e73a..a2f62702 100644 --- a/crypto/camellia/asm/cmll-x86_64.pl +++ b/crypto/camellia/asm/cmll-x86_64.pl @@ -687,6 +687,7 @@ $code.=<<___; .align 16 Camellia_cbc_encrypt: .cfi_startproc + endbranch cmp \$0,%rdx je .Lcbc_abort push %rbx @@ -1152,4 +1153,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/camellia/asm/cmllt4-sparcv9.pl b/crypto/camellia/asm/cmllt4-sparcv9.pl index 95489172..6ac0e31a 100644 --- a/crypto/camellia/asm/cmllt4-sparcv9.pl +++ b/crypto/camellia/asm/cmllt4-sparcv9.pl @@ -935,4 +935,4 @@ ___ &emit_assembler(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/cast/asm/cast-586.pl b/crypto/cast/asm/cast-586.pl index c74810bb..e3bf9756 100644 --- a/crypto/cast/asm/cast-586.pl +++ b/crypto/cast/asm/cast-586.pl @@ -45,7 +45,7 @@ $S4="CAST_S_table3"; &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub CAST_encrypt { local($name,$enc)=@_; diff --git a/crypto/chacha/asm/chacha-armv4.pl b/crypto/chacha/asm/chacha-armv4.pl index 021da300..665ca50c 100755 --- a/crypto/chacha/asm/chacha-armv4.pl +++ b/crypto/chacha/asm/chacha-armv4.pl @@ -1166,4 +1166,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/chacha/asm/chacha-armv8.pl b/crypto/chacha/asm/chacha-armv8.pl index 466de518..368e7ac8 100755 --- a/crypto/chacha/asm/chacha-armv8.pl +++ b/crypto/chacha/asm/chacha-armv8.pl @@ -1289,4 +1289,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # flush +close STDOUT or die "error closing STDOUT: $!"; # flush diff --git a/crypto/chacha/asm/chacha-c64xplus.pl b/crypto/chacha/asm/chacha-c64xplus.pl index 0b146288..6888e12d 100755 --- a/crypto/chacha/asm/chacha-c64xplus.pl +++ b/crypto/chacha/asm/chacha-c64xplus.pl @@ -922,4 +922,4 @@ $code.=<<___; ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/chacha/asm/chacha-ia64.pl b/crypto/chacha/asm/chacha-ia64.pl index 9276dd0f..b13d9728 100644 --- a/crypto/chacha/asm/chacha-ia64.pl +++ b/crypto/chacha/asm/chacha-ia64.pl @@ -288,4 +288,4 @@ stringz "ChaCha20 for IA64, CRYPTOGAMS by \@dot-asm" ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/chacha/asm/chacha-ppc.pl b/crypto/chacha/asm/chacha-ppc.pl index c9c43435..12e76b00 100755 --- a/crypto/chacha/asm/chacha-ppc.pl +++ b/crypto/chacha/asm/chacha-ppc.pl @@ -1349,4 +1349,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/chacha/asm/chacha-x86.pl b/crypto/chacha/asm/chacha-x86.pl index 6cf69688..24c6966d 100755 --- a/crypto/chacha/asm/chacha-x86.pl +++ b/crypto/chacha/asm/chacha-x86.pl @@ -1151,4 +1151,4 @@ sub XOPROUND { &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/chacha/asm/chacha-x86_64.pl b/crypto/chacha/asm/chacha-x86_64.pl index 25140104..1d67b877 100755 --- a/crypto/chacha/asm/chacha-x86_64.pl +++ b/crypto/chacha/asm/chacha-x86_64.pl @@ -4004,4 +4004,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/cmp/build.info b/crypto/cmp/build.info index 760c3423..41a58993 100644 --- a/crypto/cmp/build.info +++ b/crypto/cmp/build.info @@ -1,3 +1,3 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]= cmp_asn.c cmp_ctx.c cmp_err.c cmp_util.c \ - cmp_status.c cmp_hdr.c cmp_protect.c cmp_msg.c + cmp_status.c cmp_hdr.c cmp_protect.c cmp_msg.c cmp_vfy.c diff --git a/crypto/cmp/cmp_asn.c b/crypto/cmp/cmp_asn.c index ca121b06..e02076bb 100644 --- a/crypto/cmp/cmp_asn.c +++ b/crypto/cmp/cmp_asn.c @@ -73,7 +73,8 @@ ASN1_SEQUENCE(OSSL_CMP_ERRORMSGCONTENT) = { IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_ERRORMSGCONTENT) ASN1_ADB_TEMPLATE(infotypeandvalue_default) = ASN1_OPT(OSSL_CMP_ITAV, - infoValue.other, ASN1_ANY); + infoValue.other, + ASN1_ANY); /* ITAV means InfoTypeAndValue */ ASN1_ADB(OSSL_CMP_ITAV) = { /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */ diff --git a/crypto/cmp/cmp_ctx.c b/crypto/cmp/cmp_ctx.c index fc89ea6b..714157a9 100644 --- a/crypto/cmp/cmp_ctx.c +++ b/crypto/cmp/cmp_ctx.c @@ -80,7 +80,7 @@ int OSSL_CMP_CTX_set1_untrusted_certs(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs) sk_X509_pop_free(ctx->untrusted_certs, X509_free); ctx->untrusted_certs = untrusted_certs; return 1; -err: + err: sk_X509_pop_free(untrusted_certs, X509_free); return 0; } @@ -301,7 +301,7 @@ static size_t ossl_cmp_log_trace_cb(const char *buf, size_t cnt, int category, int cmd, void *vdata) { OSSL_CMP_CTX *ctx = vdata; - const char *prefix_msg; + const char *msg; OSSL_CMP_severity level = -1; char *func = NULL; char *file = NULL; @@ -312,14 +312,14 @@ static size_t ossl_cmp_log_trace_cb(const char *buf, size_t cnt, if (ctx->log_cb == NULL) return 1; /* silently drop message */ - prefix_msg = ossl_cmp_log_parse_metadata(buf, &level, &func, &file, &line); + msg = ossl_cmp_log_parse_metadata(buf, &level, &func, &file, &line); if (level > ctx->log_verbosity) /* excludes the case level is unknown */ goto end; /* suppress output since severity is not sufficient */ if (!ctx->log_cb(func != NULL ? func : "(no func)", file != NULL ? file : "(no file)", - line, level, prefix_msg)) + line, level, msg)) cnt = 0; end: @@ -329,6 +329,57 @@ static size_t ossl_cmp_log_trace_cb(const char *buf, size_t cnt, } #endif +/* Print CMP log messages (i.e., diagnostic info) via the log cb of the ctx */ +int ossl_cmp_print_log(OSSL_CMP_severity level, const OSSL_CMP_CTX *ctx, + const char *func, const char *file, int line, + const char *level_str, const char *format, ...) +{ + va_list args; + char hugebuf[1024 * 2]; + int res = 0; + + if (ctx == NULL || ctx->log_cb == NULL) + return 1; /* silently drop message */ + + if (level > ctx->log_verbosity) /* excludes the case level is unknown */ + return 1; /* suppress output since severity is not sufficient */ + + if (format == NULL) + return 0; + + va_start(args, format); + + if (func == NULL) + func = "(unset function name)"; + if (file == NULL) + file = "(unset file name)"; + if (level_str == NULL) + level_str = "(unset level string)"; + +#ifndef OPENSSL_NO_TRACE + if (OSSL_TRACE_ENABLED(CMP)) { + OSSL_TRACE_BEGIN(CMP) { + int printed = + BIO_snprintf(hugebuf, sizeof(hugebuf), + "%s:%s:%d:" OSSL_CMP_LOG_PREFIX "%s: ", + func, file, line, level_str); + if (printed > 0 && (size_t)printed < sizeof(hugebuf)) { + if (BIO_vsnprintf(hugebuf + printed, + sizeof(hugebuf) - printed, format, args) > 0) + res = BIO_puts(trc_out, hugebuf) > 0; + } + } OSSL_TRACE_END(CMP); + } +#else /* compensate for disabled trace API */ + { + if (BIO_vsnprintf(hugebuf, sizeof(hugebuf), format, args) > 0) + res = ctx->log_cb(func, file, line, level, hugebuf); + } +#endif + va_end(args); + return res; +} + /* * Set a callback function for error reporting and logging messages. * Returns 1 on success, 0 on error @@ -768,7 +819,7 @@ int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, * returns 1 on success, 0 on error */ int ossl_cmp_ctx_set1_recipNonce(OSSL_CMP_CTX *ctx, - const ASN1_OCTET_STRING *nonce) + const ASN1_OCTET_STRING *nonce) { if (!ossl_assert(ctx != NULL)) return 0; diff --git a/crypto/cmp/cmp_err.c b/crypto/cmp/cmp_err.c index a6d59f9f..f82ef9e3 100644 --- a/crypto/cmp/cmp_err.c +++ b/crypto/cmp/cmp_err.c @@ -14,6 +14,8 @@ #ifndef OPENSSL_NO_ERR static const ERR_STRING_DATA CMP_str_reasons[] = { + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_ALGORITHM_NOT_SUPPORTED), + "algorithm not supported"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_BAD_REQUEST_ID), "bad request id"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_CERTID_NOT_FOUND), "certid not found"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_CERTIFICATE_NOT_FOUND), @@ -50,6 +52,10 @@ static const ERR_STRING_DATA CMP_str_reasons[] = { "error protecting message"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_ERROR_SETTING_CERTHASH), "error setting certhash"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_ERROR_VALIDATING_PROTECTION), + "error validating protection"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_FAILED_EXTRACTING_PUBKEY), + "failed extracting pubkey"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_FAILURE_OBTAINING_RANDOM), "failure obtaining random"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_FAIL_INFO_OUT_OF_RANGE), @@ -57,19 +63,38 @@ static const ERR_STRING_DATA CMP_str_reasons[] = { {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_INVALID_ARGS), "invalid args"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION), "missing key input for creating protection"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE), + "missing key usage digitalsignature"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_MISSING_PRIVATE_KEY), "missing private key"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_MISSING_PROTECTION), "missing protection"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_MISSING_SENDER_IDENTIFICATION), "missing sender identification"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_MISSING_TRUST_STORE), + "missing trust store"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_MULTIPLE_SAN_SOURCES), "multiple san sources"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_NO_STDIO), "no stdio"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_NO_SUITABLE_SENDER_CERT), + "no suitable sender cert"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_NULL_ARGUMENT), "null argument"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_PKIBODY_ERROR), "pkibody error"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_PKISTATUSINFO_NOT_FOUND), "pkistatusinfo not found"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_POTENTIALLY_INVALID_CERTIFICATE), "potentially invalid certificate"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_RECIPNONCE_UNMATCHED), + "recipnonce unmatched"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_REQUEST_NOT_ACCEPTED), + "request not accepted"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED), + "sender generalname type not supported"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG), + "srvcert does not validate msg"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_TRANSACTIONID_UNMATCHED), + "transactionid unmatched"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_UNEXPECTED_PKIBODY), "unexpected pkibody"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_UNEXPECTED_PVNO), "unexpected pvno"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_UNKNOWN_ALGORITHM_ID), "unknown algorithm id"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_UNKNOWN_CERT_TYPE), "unknown cert type"}, @@ -77,8 +102,11 @@ static const ERR_STRING_DATA CMP_str_reasons[] = { "unsupported algorithm"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_UNSUPPORTED_KEY_TYPE), "unsupported key type"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC), + "unsupported protection alg dhbasedmac"}, {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_WRONG_ALGORITHM_OID), "wrong algorithm oid"}, + {ERR_PACK(ERR_LIB_CMP, 0, CMP_R_WRONG_PBM_VALUE), "wrong pbm value"}, {0, NULL} }; diff --git a/crypto/cmp/cmp_local.h b/crypto/cmp/cmp_local.h index f705cb24..015a3d4e 100644 --- a/crypto/cmp/cmp_local.h +++ b/crypto/cmp/cmp_local.h @@ -48,16 +48,23 @@ struct ossl_cmp_ctx_st { void *http_cb_arg; /* allows to store optional argument to cb */ /* server authentication */ - int unprotectedErrors; /* accept neg. response with no/invalid protection */ - /* to cope with broken server */ + /* + * unprotectedErrors may be set as workaround for broken server responses: + * accept missing or invalid protection of regular error messages, negative + * certificate responses (ip/cp/kup), revocation responses (rp), and PKIConf + */ + int unprotectedErrors; X509 *srvCert; /* certificate used to identify the server */ X509 *validatedSrvCert; /* caches any already validated server cert */ X509_NAME *expected_sender; /* expected sender in pkiheader of response */ X509_STORE *trusted; /* trust store maybe w CRLs and cert verify callback */ STACK_OF(X509) *untrusted_certs; /* untrusted (intermediate) certs */ int ignore_keyusage; /* ignore key usage entry when validating certs */ - int permitTAInExtraCertsForIR; /* allow use of root certs in extracerts */ - /* when validating message protection; used for 3GPP-style E.7 */ + /* + * permitTAInExtraCertsForIR allows use of root certs in extracerts + * when validating message protection; this is used for 3GPP-style E.7 + */ + int permitTAInExtraCertsForIR; /* client authentication */ int unprotectedSend; /* send unprotected PKI messages */ @@ -536,68 +543,108 @@ typedef struct ossl_cmp_pkibody_st { OSSL_CMP_CERTREPMESSAGE *ip; /* 1 */ OSSL_CRMF_MSGS *cr; /* 2 */ OSSL_CMP_CERTREPMESSAGE *cp; /* 3 */ - /* p10cr [4] CertificationRequest, --imported from [PKCS10] */ - /* + /*- + * p10cr [4] CertificationRequest, --imported from [PKCS10] + * * PKCS10_CERTIFICATIONREQUEST is effectively X509_REQ * so it is used directly */ X509_REQ *p10cr; /* 4 */ - /* popdecc [5] POPODecKeyChallContent, --pop Challenge */ - /* POPODecKeyChallContent ::= SEQUENCE OF Challenge */ + /*- + * popdecc [5] POPODecKeyChallContent, --pop Challenge + * + * POPODecKeyChallContent ::= SEQUENCE OF Challenge + */ OSSL_CMP_POPODECKEYCHALLCONTENT *popdecc; /* 5 */ - /* popdecr [6] POPODecKeyRespContent, --pop Response */ - /* POPODecKeyRespContent ::= SEQUENCE OF INTEGER */ + /*- + * popdecr [6] POPODecKeyRespContent, --pop Response + * + * POPODecKeyRespContent ::= SEQUENCE OF INTEGER + */ OSSL_CMP_POPODECKEYRESPCONTENT *popdecr; /* 6 */ OSSL_CRMF_MSGS *kur; /* 7 */ OSSL_CMP_CERTREPMESSAGE *kup; /* 8 */ OSSL_CRMF_MSGS *krr; /* 9 */ - /* krp [10] KeyRecRepContent, --Key Recovery Response */ + /*- + * krp [10] KeyRecRepContent, --Key Recovery Response + */ OSSL_CMP_KEYRECREPCONTENT *krp; /* 10 */ - /* rr [11] RevReqContent, --Revocation Request */ + /*- + * rr [11] RevReqContent, --Revocation Request + */ OSSL_CMP_REVREQCONTENT *rr; /* 11 */ - /* rp [12] RevRepContent, --Revocation Response */ + /*- + * rp [12] RevRepContent, --Revocation Response + */ OSSL_CMP_REVREPCONTENT *rp; /* 12 */ - /* ccr [13] CertReqMessages, --Cross-Cert. Request */ + /*- + * ccr [13] CertReqMessages, --Cross-Cert. Request + */ OSSL_CRMF_MSGS *ccr; /* 13 */ - /* ccp [14] CertRepMessage, --Cross-Cert. Response */ + /*- + * ccp [14] CertRepMessage, --Cross-Cert. Response + */ OSSL_CMP_CERTREPMESSAGE *ccp; /* 14 */ - /* ckuann [15] CAKeyUpdAnnContent, --CA Key Update Ann. */ + /*- + * ckuann [15] CAKeyUpdAnnContent, --CA Key Update Ann. + */ OSSL_CMP_CAKEYUPDANNCONTENT *ckuann; /* 15 */ - /* cann [16] CertAnnContent, --Certificate Ann. */ - /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */ - X509 *cann; /* 16 */ - /* rann [17] RevAnnContent, --Revocation Ann. */ + /*- + * cann [16] CertAnnContent, --Certificate Ann. + * OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly + */ + X509 *cann; /* 16 */ + /*- + * rann [17] RevAnnContent, --Revocation Ann. + */ OSSL_CMP_REVANNCONTENT *rann; /* 17 */ - /* crlann [18] CRLAnnContent, --CRL Announcement */ - /* CRLAnnContent ::= SEQUENCE OF CertificateList */ - OSSL_CMP_CRLANNCONTENT *crlann; - /* PKIConfirmContent ::= NULL */ - /* pkiconf [19] PKIConfirmContent, --Confirmation */ - /* OSSL_CMP_PKICONFIRMCONTENT would be only a typedef of ASN1_NULL */ - /* OSSL_CMP_CONFIRMCONTENT *pkiconf; */ - /* + /*- + * crlann [18] CRLAnnContent, --CRL Announcement + * CRLAnnContent ::= SEQUENCE OF CertificateList + */ + OSSL_CMP_CRLANNCONTENT *crlann; /* 18 */ + /*- + * PKIConfirmContent ::= NULL + * pkiconf [19] PKIConfirmContent, --Confirmation + * OSSL_CMP_PKICONFIRMCONTENT would be only a typedef of ASN1_NULL + * OSSL_CMP_CONFIRMCONTENT *pkiconf; + * * NOTE: this should ASN1_NULL according to the RFC * but there might be a struct in it when sent from faulty servers... */ ASN1_TYPE *pkiconf; /* 19 */ - /* nested [20] NestedMessageContent, --Nested Message */ - /* NestedMessageContent ::= PKIMessages */ + /*- + * nested [20] NestedMessageContent, --Nested Message + * NestedMessageContent ::= PKIMessages + */ OSSL_CMP_MSGS *nested; /* 20 */ - /* genm [21] GenMsgContent, --General Message */ - /* GenMsgContent ::= SEQUENCE OF InfoTypeAndValue */ + /*- + * genm [21] GenMsgContent, --General Message + * GenMsgContent ::= SEQUENCE OF InfoTypeAndValue + */ OSSL_CMP_GENMSGCONTENT *genm; /* 21 */ - /* genp [22] GenRepContent, --General Response */ - /* GenRepContent ::= SEQUENCE OF InfoTypeAndValue */ + /*- + * genp [22] GenRepContent, --General Response + * GenRepContent ::= SEQUENCE OF InfoTypeAndValue + */ OSSL_CMP_GENREPCONTENT *genp; /* 22 */ - /* error [23] ErrorMsgContent, --Error Message */ + /*- + * error [23] ErrorMsgContent, --Error Message + */ OSSL_CMP_ERRORMSGCONTENT *error; /* 23 */ - /* certConf [24] CertConfirmContent, --Certificate confirm */ + /*- + * certConf [24] CertConfirmContent, --Certificate confirm + */ OSSL_CMP_CERTCONFIRMCONTENT *certConf; /* 24 */ - /* pollReq [25] PollReqContent, --Polling request */ - OSSL_CMP_POLLREQCONTENT *pollReq; - /* pollRep [26] PollRepContent --Polling response */ - OSSL_CMP_POLLREPCONTENT *pollRep; + /*- + * pollReq [25] PollReqContent, --Polling request + */ + OSSL_CMP_POLLREQCONTENT *pollReq; /* 25 */ + /*- + * pollRep [26] PollRepContent --Polling response + */ + OSSL_CMP_POLLREPCONTENT *pollRep; /* 26 */ } value; } OSSL_CMP_PKIBODY; DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIBODY) @@ -699,18 +746,15 @@ int ossl_cmp_asn1_get_int(const ASN1_INTEGER *a); const char *ossl_cmp_log_parse_metadata(const char *buf, OSSL_CMP_severity *level, char **func, char **file, int *line); -/* workaround for 4096 bytes limitation of ERR_print_errors_cb() */ -void ossl_cmp_add_error_txt(const char *separator, const char *txt); -# define ossl_cmp_add_error_data(txt) ossl_cmp_add_error_txt(" : ", txt) -# define ossl_cmp_add_error_line(txt) ossl_cmp_add_error_txt("\n", txt) +# define ossl_cmp_add_error_data(txt) ERR_add_error_txt(" : ", txt) +# define ossl_cmp_add_error_line(txt) ERR_add_error_txt("\n", txt) /* functions manipulating lists of certificates etc could be generally useful */ -int ossl_cmp_sk_X509_add1_cert (STACK_OF(X509) *sk, X509 *cert, - int no_dup, int prepend); +int ossl_cmp_sk_X509_add1_cert(STACK_OF(X509) *sk, X509 *cert, + int no_dup, int prepend); int ossl_cmp_sk_X509_add1_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, - int no_self_signed, int no_dups, int prepend); + int no_self_issued, int no_dups, int prepend); int ossl_cmp_X509_STORE_add1_certs(X509_STORE *store, STACK_OF(X509) *certs, - int only_self_signed); -STACK_OF(X509) *ossl_cmp_X509_STORE_get1_certs(X509_STORE *store); + int only_self_issued); int ossl_cmp_asn1_octet_string_set1(ASN1_OCTET_STRING **tgt, const ASN1_OCTET_STRING *src); int ossl_cmp_asn1_octet_string_set1_bytes(ASN1_OCTET_STRING **tgt, @@ -718,6 +762,31 @@ int ossl_cmp_asn1_octet_string_set1_bytes(ASN1_OCTET_STRING **tgt, STACK_OF(X509) *ossl_cmp_build_cert_chain(STACK_OF(X509) *certs, X509 *cert); /* from cmp_ctx.c */ +int ossl_cmp_print_log(OSSL_CMP_severity level, const OSSL_CMP_CTX *ctx, + const char *func, const char *file, int line, + const char *level_str, const char *format, ...); +# define ossl_cmp_log(level, ctx, msg) \ + ossl_cmp_print_log(OSSL_CMP_LOG_##level, ctx, OPENSSL_FUNC, OPENSSL_FILE, \ + OPENSSL_LINE, #level, "%s", msg) +# define ossl_cmp_log1(level, ctx, fmt, arg1) \ + ossl_cmp_print_log(OSSL_CMP_LOG_##level, ctx, OPENSSL_FUNC, OPENSSL_FILE, \ + OPENSSL_LINE, #level, fmt, arg1) +# define ossl_cmp_log2(level, ctx, fmt, arg1, arg2) \ + ossl_cmp_print_log(OSSL_CMP_LOG_##level, ctx, OPENSSL_FUNC, OPENSSL_FILE, \ + OPENSSL_LINE, #level, fmt, arg1, arg2) +# define ossl_cmp_log3(level, ctx, fmt, arg1, arg2, arg3) \ + ossl_cmp_print_log(OSSL_CMP_LOG_##level, ctx, OPENSSL_FUNC, OPENSSL_FILE, \ + OPENSSL_LINE, #level, fmt, arg1, arg2, arg3) +# define ossl_cmp_log4(level, ctx, fmt, arg1, arg2, arg3, arg4) \ + ossl_cmp_print_log(OSSL_CMP_LOG_##level, ctx, OPENSSL_FUNC, OPENSSL_FILE, \ + OPENSSL_LINE, #level, fmt, arg1, arg2, arg3, arg4) +# define OSSL_CMP_LOG_ERROR OSSL_CMP_LOG_ERR +# define OSSL_CMP_LOG_WARN OSSL_CMP_LOG_WARNING +# define ossl_cmp_alert(ctx, msg) ossl_cmp_log(ALERT, ctx, msg) +# define ossl_cmp_err(ctx, msg) ossl_cmp_log(ERROR, ctx, msg) +# define ossl_cmp_warn(ctx, msg) ossl_cmp_log(WARN, ctx, msg) +# define ossl_cmp_info(ctx, msg) ossl_cmp_log(INFO, ctx, msg) +# define ossl_cmp_debug(ctx, msg) ossl_cmp_log(DEBUG, ctx, msg) int ossl_cmp_ctx_set0_validatedSrvCert(OSSL_CMP_CTX *ctx, X509 *cert); int ossl_cmp_ctx_set_status(OSSL_CMP_CTX *ctx, int status); int ossl_cmp_ctx_set0_statusString(OSSL_CMP_CTX *ctx, @@ -825,7 +894,7 @@ OSSL_CMP_MSG *ossl_cmp_pollRep_new(OSSL_CMP_CTX *ctx, int crid, OSSL_CMP_PKISI * ossl_cmp_revrepcontent_get_pkistatusinfo(OSSL_CMP_REVREPCONTENT *rrep, int rsid); OSSL_CRMF_CERTID *ossl_cmp_revrepcontent_get_CertId(OSSL_CMP_REVREPCONTENT *rrep, - int rsid); + int rsid); OSSL_CMP_POLLREP * ossl_cmp_pollrepcontent_get0_pollrep(const OSSL_CMP_POLLREPCONTENT *prc, int rid); @@ -836,9 +905,9 @@ X509 *ossl_cmp_certresponse_get1_certificate(EVP_PKEY *privkey, const OSSL_CMP_CERTRESPONSE *crep); OSSL_CMP_MSG *ossl_cmp_msg_load(const char *file); /* BIO definitions */ -# define OSSL_d2i_CMP_MSG_bio(bp, p) \ +# define OSSL_d2i_CMP_MSG_bio(bp, p) \ ASN1_d2i_bio_of(OSSL_CMP_MSG, OSSL_CMP_MSG_new, d2i_OSSL_CMP_MSG, bp, p) -# define OSSL_i2d_CMP_MSG_bio(bp, o) \ +# define OSSL_i2d_CMP_MSG_bio(bp, o) \ ASN1_i2d_bio_of(OSSL_CMP_MSG, i2d_OSSL_CMP_MSG, bp, o) /* from cmp_protect.c */ @@ -848,4 +917,12 @@ ASN1_BIT_STRING *ossl_cmp_calc_protection(const OSSL_CMP_MSG *msg, int ossl_cmp_msg_add_extraCerts(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); int ossl_cmp_msg_protect(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +/* from cmp_vfy.c */ +typedef int (*ossl_cmp_allow_unprotected_cb_t)(const OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *msg, + int invalid_protection, int arg); +int ossl_cmp_msg_check_received(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg, + ossl_cmp_allow_unprotected_cb_t cb, int cb_arg); +int ossl_cmp_verify_popo(const OSSL_CMP_MSG *msg, int accept_RAVerified); + #endif /* !defined OSSL_CRYPTO_CMP_LOCAL_H */ diff --git a/crypto/cmp/cmp_msg.c b/crypto/cmp/cmp_msg.c index 00381932..c794dc98 100644 --- a/crypto/cmp/cmp_msg.c +++ b/crypto/cmp/cmp_msg.c @@ -232,7 +232,7 @@ static OSSL_CRMF_MSG *crm_new(OSSL_CMP_CTX *ctx, int bodytype, */ || !OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_MSG_get0_tmpl(crm), rkey, subject, ctx->issuer, - NULL/* serial */)) + NULL /* serial */)) goto err; if (ctx->days != 0) { time_t notBefore, notAfter; @@ -442,8 +442,8 @@ OSSL_CMP_MSG *ossl_cmp_rr_new(OSSL_CMP_CTX *ctx) /* Fill the template from the contents of the certificate to be revoked */ if (!OSSL_CRMF_CERTTEMPLATE_fill(rd->certDetails, - NULL/* pubkey would be redundant */, - NULL/* subject would be redundant */, + NULL /* pubkey would be redundant */, + NULL /* subject would be redundant */, X509_get_issuer_name(ctx->oldCert), X509_get_serialNumber(ctx->oldCert))) goto err; @@ -569,7 +569,7 @@ int ossl_cmp_msg_gen_push1_ITAVs(OSSL_CMP_MSG *msg, return 0; for (i = 0; i < sk_OSSL_CMP_ITAV_num(itavs); i++) { - if ((itav = OSSL_CMP_ITAV_dup(sk_OSSL_CMP_ITAV_value(itavs,i))) == NULL) + if ((itav = OSSL_CMP_ITAV_dup(sk_OSSL_CMP_ITAV_value(itavs, i))) == NULL) return 0; if (!ossl_cmp_msg_gen_push0_ITAV(msg, itav)) { OSSL_CMP_ITAV_free(itav); @@ -643,8 +643,8 @@ OSSL_CMP_MSG *ossl_cmp_error_new(OSSL_CMP_CTX *ctx, OSSL_CMP_PKISI *si, } if (errorDetails != NULL) if ((msg->body->value.error->errorDetails = - sk_ASN1_UTF8STRING_deep_copy(errorDetails, ASN1_STRING_dup, - ASN1_STRING_free)) == NULL) + sk_ASN1_UTF8STRING_deep_copy(errorDetails, ASN1_STRING_dup, + ASN1_STRING_free)) == NULL) goto err; if (!unprotected && !ossl_cmp_msg_protect(ctx, msg)) diff --git a/crypto/cmp/cmp_protect.c b/crypto/cmp/cmp_protect.c index 7db3440f..c1b4b858 100644 --- a/crypto/cmp/cmp_protect.c +++ b/crypto/cmp/cmp_protect.c @@ -156,7 +156,7 @@ int ossl_cmp_msg_add_extraCerts(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg) STACK_OF(X509) *chain = ossl_cmp_build_cert_chain(ctx->untrusted_certs, ctx->clCert); int res = ossl_cmp_sk_X509_add1_certs(msg->extraCerts, chain, - 1 /* no self-signed */, + 1 /* no self-issued */, 1 /* no duplicates */, 0); sk_X509_pop_free(chain, X509_free); if (res == 0) diff --git a/crypto/cmp/cmp_status.c b/crypto/cmp/cmp_status.c index a5f6b294..7ebc57d3 100644 --- a/crypto/cmp/cmp_status.c +++ b/crypto/cmp/cmp_status.c @@ -61,7 +61,7 @@ const char *ossl_cmp_PKIStatus_to_string(int status) char buf[40]; BIO_snprintf(buf, sizeof(buf), "PKIStatus: invalid=%d", status); CMPerr(0, CMP_R_ERROR_PARSING_PKISTATUS); - ossl_cmp_add_error_data(buf); + ERR_add_error_data(1, buf); return NULL; } } @@ -195,7 +195,7 @@ char *OSSL_CMP_CTX_snprint_PKIStatus(OSSL_CMP_CTX *ctx, char *buf, int printed_chars; int failinfo_found = 0; int n_status_strings; - char* write_ptr = buf; + char *write_ptr = buf; #define ADVANCE_BUFFER \ if (printed_chars < 0 || (size_t)printed_chars >= bufsize) \ diff --git a/crypto/cmp/cmp_util.c b/crypto/cmp/cmp_util.c index 0390c23e..ad4ae664 100644 --- a/crypto/cmp/cmp_util.c +++ b/crypto/cmp/cmp_util.c @@ -69,7 +69,8 @@ static OSSL_CMP_severity parse_level(const char *level) } const char *ossl_cmp_log_parse_metadata(const char *buf, - OSSL_CMP_severity *level, char **func, char **file, int *line) + OSSL_CMP_severity *level, + char **func, char **file, int *line) { const char *p_func = buf; const char *p_file = buf == NULL ? NULL : strchr(buf, ':'); @@ -106,129 +107,75 @@ const char *ossl_cmp_log_parse_metadata(const char *buf, return msg; } - +#define UNKNOWN_FUNC "(unknown function)" /* the default for OPENSSL_FUNC */ /* - * auxiliary function for incrementally reporting texts via the error queue + * substitute fallback if component/function name is NULL or empty or contains + * just pseudo-information "(unknown function)" due to -pedantic and macros.h */ -static void put_error(int lib, const char *func, int reason, - const char *file, int line) +static const char *improve_location_name(const char *func, const char *fallback) { - ERR_new(); - ERR_set_debug(file, line, func); - ERR_set_error(lib, reason, NULL /* no data here, so fmt is NULL */); + if (!ossl_assert(fallback != NULL)) + return NULL; + return func == NULL || *func == '\0' || strcmp(func, UNKNOWN_FUNC) == 0 + ? fallback : func; } -#define ERR_print_errors_cb_LIMIT 4096 /* size of char buf[] variable there */ -#define TYPICAL_MAX_OUTPUT_BEFORE_DATA 100 -#define MAX_DATA_LEN (ERR_print_errors_cb_LIMIT-TYPICAL_MAX_OUTPUT_BEFORE_DATA) -void ossl_cmp_add_error_txt(const char *separator, const char *txt) +int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg) { - const char *file = NULL; - int line; - const char *func = NULL; - const char *data = NULL; - int flags; - unsigned long err = ERR_peek_last_error(); + const char *level_string = + level == OSSL_CMP_LOG_EMERG ? "EMERG" : + level == OSSL_CMP_LOG_ALERT ? "ALERT" : + level == OSSL_CMP_LOG_CRIT ? "CRIT" : + level == OSSL_CMP_LOG_ERR ? "error" : + level == OSSL_CMP_LOG_WARNING ? "warning" : + level == OSSL_CMP_LOG_NOTICE ? "NOTE" : + level == OSSL_CMP_LOG_INFO ? "info" : + level == OSSL_CMP_LOG_DEBUG ? "DEBUG" : "(unknown level)"; - if (separator == NULL) - separator = ""; - if (err == 0) - put_error(ERR_LIB_CMP, NULL, 0, "", 0); - - do { - size_t available_len, data_len; - const char *curr = txt, *next = txt; - char *tmp; - - ERR_peek_last_error_all(&file, &line, &func, &data, &flags); - if ((flags & ERR_TXT_STRING) == 0) { - data = ""; - separator = ""; - } - data_len = strlen(data); - - /* workaround for limit of ERR_print_errors_cb() */ - if (data_len >= MAX_DATA_LEN - || strlen(separator) >= (size_t)(MAX_DATA_LEN - data_len)) - available_len = 0; - else - available_len = MAX_DATA_LEN - data_len - strlen(separator) - 1; - /* MAX_DATA_LEN > available_len >= 0 */ - - if (separator[0] == '\0') { - const size_t len_next = strlen(next); - - if (len_next <= available_len) { - next += len_next; - curr = NULL; /* no need to split */ - } - else { - next += available_len; - curr = next; /* will split at this point */ - } - } else { - while (*next != '\0' && (size_t)(next - txt) <= available_len) { - curr = next; - next = strstr(curr, separator); - if (next != NULL) - next += strlen(separator); - else - next = curr + strlen(curr); - } - if ((size_t)(next - txt) <= available_len) - curr = NULL; /* the above loop implies *next == '\0' */ - } - if (curr != NULL) { - /* split error msg at curr since error data would get too long */ - if (curr != txt) { - tmp = OPENSSL_strndup(txt, curr - txt); - if (tmp == NULL) - return; - ERR_add_error_data(2, separator, tmp); - OPENSSL_free(tmp); - } - put_error(ERR_LIB_CMP, func, err, file, line); - txt = curr; - } else { - ERR_add_error_data(2, separator, txt); - txt = next; /* finished */ - } - } while (*txt != '\0'); +#ifndef NDEBUG + if (BIO_printf(bio, "%s:%s:%d:", improve_location_name(component, "CMP"), + file, line) < 0) + return 0; +#endif + return BIO_printf(bio, OSSL_CMP_LOG_PREFIX"%s: %s\n", + level_string, msg) >= 0; } +#define ERR_PRINT_BUF_SIZE 4096 /* this is similar to ERR_print_errors_cb, but uses the CMP-specific cb type */ void OSSL_CMP_print_errors_cb(OSSL_cmp_log_cb_t log_fn) { unsigned long err; - char msg[ERR_print_errors_cb_LIMIT]; + char msg[ERR_PRINT_BUF_SIZE]; const char *file = NULL, *func = NULL, *data = NULL; int line, flags; - if (log_fn == NULL) { -#ifndef OPENSSL_NO_STDIO - ERR_print_errors_fp(stderr); -#else - /* CMPerr(0, CMP_R_NO_STDIO) makes no sense during error printing */ -#endif - return; - } - while ((err = ERR_get_error_all(&file, &line, &func, &data, &flags)) != 0) { - char component[128]; - const char *func_ = func != NULL && *func != '\0' ? func : ""; + const char *component = + improve_location_name(func, ERR_lib_error_string(err)); if (!(flags & ERR_TXT_STRING)) data = NULL; -#ifdef OSSL_CMP_PRINT_LIBINFO - BIO_snprintf(component, sizeof(component), "OpenSSL:%s:%s", - ERR_lib_error_string(err), func_); -#else - BIO_snprintf(component, sizeof(component), "%s",func_); -#endif BIO_snprintf(msg, sizeof(msg), "%s%s%s", ERR_reason_error_string(err), - data == NULL ? "" : " : ", data == NULL ? "" : data); - if (log_fn(component, file, line, OSSL_CMP_LOG_ERR, msg) <= 0) - break; /* abort outputting the error report */ + data == NULL || *data == '\0' ? "" : " : ", + data == NULL ? "" : data); + if (log_fn == NULL) { +#ifndef OPENSSL_NO_STDIO + BIO *bio = BIO_new_fp(stderr, BIO_NOCLOSE); + + if (bio != NULL) { + OSSL_CMP_print_to_bio(bio, component, file, line, + OSSL_CMP_LOG_ERR, msg); + BIO_free(bio); + } +#else + /* CMPerr(0, CMP_R_NO_STDIO) makes no sense during error printing */ +#endif + } else { + if (log_fn(component, file, line, OSSL_CMP_LOG_ERR, msg) <= 0) + break; /* abort outputting the error report */ + } } } @@ -266,7 +213,7 @@ int ossl_cmp_sk_X509_add1_cert(STACK_OF(X509) *sk, X509 *cert, } int ossl_cmp_sk_X509_add1_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, - int no_self_signed, int no_dups, int prepend) + int no_self_issued, int no_dups, int prepend) /* compiler would allow 'const' for the list of certs, yet they are up-ref'ed */ { int i; @@ -278,7 +225,7 @@ int ossl_cmp_sk_X509_add1_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, for (i = 0; i < sk_X509_num(certs); i++) { /* certs may be NULL */ X509 *cert = sk_X509_value(certs, i); - if (!no_self_signed || X509_check_issued(cert, cert) != X509_V_OK) { + if (!no_self_issued || X509_check_issued(cert, cert) != X509_V_OK) { if (!ossl_cmp_sk_X509_add1_cert(sk, cert, no_dups, prepend)) return 0; } @@ -287,7 +234,7 @@ int ossl_cmp_sk_X509_add1_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, } int ossl_cmp_X509_STORE_add1_certs(X509_STORE *store, STACK_OF(X509) *certs, - int only_self_signed) + int only_self_issued) { int i; @@ -300,45 +247,13 @@ int ossl_cmp_X509_STORE_add1_certs(X509_STORE *store, STACK_OF(X509) *certs, for (i = 0; i < sk_X509_num(certs); i++) { X509 *cert = sk_X509_value(certs, i); - if (!only_self_signed || X509_check_issued(cert, cert) == X509_V_OK) + if (!only_self_issued || X509_check_issued(cert, cert) == X509_V_OK) if (!X509_STORE_add_cert(store, cert)) /* ups cert ref counter */ return 0; } return 1; } -STACK_OF(X509) *ossl_cmp_X509_STORE_get1_certs(X509_STORE *store) -{ - int i; - STACK_OF(X509) *sk; - STACK_OF(X509_OBJECT) *objs; - - if (store == NULL) { - CMPerr(0, CMP_R_NULL_ARGUMENT); - return 0; - } - if ((sk = sk_X509_new_null()) == NULL) - return NULL; - objs = X509_STORE_get0_objects(store); - for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { - X509 *cert = X509_OBJECT_get0_X509(sk_X509_OBJECT_value(objs, i)); - - if (cert != NULL) { - if (!sk_X509_push(sk, cert)) - goto err; - if (!X509_up_ref(cert)) { - (void)sk_X509_pop(sk); - goto err; - } - } - } - return sk; - - err: - sk_X509_pop_free(sk, X509_free); - return NULL; -} - /*- * Builds up the certificate chain of certs as high up as possible using * the given list of certs containing all possible intermediate certificates and @@ -390,10 +305,10 @@ STACK_OF(X509) *ossl_cmp_build_cert_chain(STACK_OF(X509) *certs, X509 *cert) chain = X509_STORE_CTX_get0_chain(csc); - /* result list to store the up_ref'ed not self-signed certificates */ + /* result list to store the up_ref'ed not self-issued certificates */ if ((result = sk_X509_new_null()) == NULL) goto err; - if (!ossl_cmp_sk_X509_add1_certs(result, chain, 1 /* no self-signed */, + if (!ossl_cmp_sk_X509_add1_certs(result, chain, 1 /* no self-issued */, 1 /* no duplicates */, 0)) { sk_X509_free(result); result = NULL; @@ -438,7 +353,7 @@ int ossl_cmp_asn1_octet_string_set1_bytes(ASN1_OCTET_STRING **tgt, return 0; } if (bytes != NULL) { - if ((new = ASN1_OCTET_STRING_new()) == NULL + if ((new = ASN1_OCTET_STRING_new()) == NULL || !(ASN1_OCTET_STRING_set(new, bytes, len))) { ASN1_OCTET_STRING_free(new); return 0; diff --git a/crypto/cmp/cmp_vfy.c b/crypto/cmp/cmp_vfy.c new file mode 100644 index 00000000..437bc329 --- /dev/null +++ b/crypto/cmp/cmp_vfy.c @@ -0,0 +1,754 @@ +/* + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2020 + * Copyright Siemens AG 2015-2020 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* CMP functions for PKIMessage checking */ + +#include "cmp_local.h" +#include + +/* explicit #includes not strictly needed since implied by the above: */ +#include +#include +#include +#include +#include +#include "crypto/x509.h" + +/* + * Verify a message protected by signature according to section 5.1.3.3 + * (sha1+RSA/DSA or any other algorithm supported by OpenSSL). + * + * Returns 1 on successful validation and 0 otherwise. + */ +static int verify_signature(const OSSL_CMP_CTX *cmp_ctx, + const OSSL_CMP_MSG *msg, X509 *cert) +{ + EVP_MD_CTX *ctx = NULL; + CMP_PROTECTEDPART prot_part; + int digest_nid, pk_nid; + const EVP_MD *digest = NULL; + EVP_PKEY *pubkey = NULL; + int len; + size_t prot_part_der_len = 0; + unsigned char *prot_part_der = NULL; + BIO *bio = BIO_new(BIO_s_mem()); /* may be NULL */ + int res = 0; + + if (!ossl_assert(cmp_ctx != NULL && msg != NULL && cert != NULL)) + return 0; + + /* verify that keyUsage, if present, contains digitalSignature */ + if (!cmp_ctx->ignore_keyusage + && (X509_get_key_usage(cert) & X509v3_KU_DIGITAL_SIGNATURE) == 0) { + CMPerr(0, CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE); + goto sig_err; + } + + pubkey = X509_get_pubkey(cert); + if (pubkey == NULL) { + CMPerr(0, CMP_R_FAILED_EXTRACTING_PUBKEY); + goto sig_err; + } + + /* create the DER representation of protected part */ + prot_part.header = msg->header; + prot_part.body = msg->body; + + len = i2d_CMP_PROTECTEDPART(&prot_part, &prot_part_der); + if (len < 0 || prot_part_der == NULL) + goto end; + prot_part_der_len = (size_t) len; + + /* verify signature of protected part */ + if (!OBJ_find_sigid_algs(OBJ_obj2nid(msg->header->protectionAlg->algorithm), + &digest_nid, &pk_nid) + || digest_nid == NID_undef || pk_nid == NID_undef + || (digest = EVP_get_digestbynid(digest_nid)) == NULL) { + CMPerr(0, CMP_R_ALGORITHM_NOT_SUPPORTED); + goto sig_err; + } + + /* check msg->header->protectionAlg is consistent with public key type */ + if (EVP_PKEY_type(pk_nid) != EVP_PKEY_base_id(pubkey)) { + CMPerr(0, CMP_R_WRONG_ALGORITHM_OID); + goto sig_err; + } + if ((ctx = EVP_MD_CTX_new()) == NULL) + goto end; + if (EVP_DigestVerifyInit(ctx, NULL, digest, NULL, pubkey) + && EVP_DigestVerify(ctx, msg->protection->data, + msg->protection->length, + prot_part_der, prot_part_der_len) == 1) { + res = 1; + goto end; + } + + sig_err: + res = x509_print_ex_brief(bio, cert, X509_FLAG_NO_EXTENSIONS); + CMPerr(0, CMP_R_ERROR_VALIDATING_PROTECTION); + if (res) + ERR_add_error_mem_bio("\n", bio); + res = 0; + + end: + EVP_MD_CTX_free(ctx); + OPENSSL_free(prot_part_der); + EVP_PKEY_free(pubkey); + BIO_free(bio); + + return res; +} + +/* Verify a message protected with PBMAC */ +static int verify_PBMAC(const OSSL_CMP_MSG *msg, + const ASN1_OCTET_STRING *secret) +{ + ASN1_BIT_STRING *protection = NULL; + int valid = 0; + + /* generate expected protection for the message */ + if ((protection = ossl_cmp_calc_protection(msg, secret, NULL)) == NULL) + return 0; /* failed to generate protection string! */ + + valid = msg->protection != NULL && msg->protection->length >= 0 + && msg->protection->type == protection->type + && msg->protection->length == protection->length + && CRYPTO_memcmp(msg->protection->data, protection->data, + protection->length) == 0; + ASN1_BIT_STRING_free(protection); + if (!valid) + CMPerr(0, CMP_R_WRONG_PBM_VALUE); + + return valid; +} + +/* + * Attempt to validate certificate and path using any given store with trusted + * certs (possibly including CRLs and a cert verification callback function) + * and non-trusted intermediate certs from the given ctx. + * + * Returns 1 on successful validation and 0 otherwise. + */ +int OSSL_CMP_validate_cert_path(OSSL_CMP_CTX *ctx, X509_STORE *trusted_store, + X509 *cert) +{ + int valid = 0; + X509_STORE_CTX *csc = NULL; + int err; + + if (ctx == NULL || cert == NULL) { + CMPerr(0, CMP_R_NULL_ARGUMENT); + return 0; + } + + if (trusted_store == NULL) { + CMPerr(0, CMP_R_MISSING_TRUST_STORE); + return 0; + } + + if ((csc = X509_STORE_CTX_new()) == NULL + || !X509_STORE_CTX_init(csc, trusted_store, + cert, ctx->untrusted_certs)) + goto err; + + valid = X509_verify_cert(csc) > 0; + + /* make sure suitable error is queued even if callback did not do */ + err = ERR_peek_last_error(); + if (!valid && ERR_GET_REASON(err) != CMP_R_POTENTIALLY_INVALID_CERTIFICATE) + CMPerr(0, CMP_R_POTENTIALLY_INVALID_CERTIFICATE); + + err: + X509_STORE_CTX_free(csc); + return valid; +} + +/* Return 0 if expect_name != NULL and there is no matching actual_name */ +static int check_name(OSSL_CMP_CTX *ctx, + const char *actual_desc, const X509_NAME *actual_name, + const char *expect_desc, const X509_NAME *expect_name) +{ + char *str; + + if (expect_name == NULL) + return 1; /* no expectation, thus trivially fulfilled */ + + /* make sure that a matching name is there */ + if (actual_name == NULL) { + ossl_cmp_log1(WARN, ctx, "missing %s", actual_desc); + return 0; + } + if (X509_NAME_cmp(actual_name, expect_name) == 0) + return 1; + + if ((str = X509_NAME_oneline(actual_name, NULL, 0)) != NULL) + ossl_cmp_log2(INFO, ctx, " actual name in %s = %s", actual_desc, str); + OPENSSL_free(str); + if ((str = X509_NAME_oneline(expect_name, NULL, 0)) != NULL) + ossl_cmp_log2(INFO, ctx, " does not match %s = %s", expect_desc, str); + OPENSSL_free(str); + return 0; +} + +/* Return 0 if skid != NULL and there is no matching subject key ID in cert */ +static int check_kid(OSSL_CMP_CTX *ctx, + X509 *cert, const ASN1_OCTET_STRING *skid) +{ + char *actual, *expect; + const ASN1_OCTET_STRING *ckid = X509_get0_subject_key_id(cert); + + if (skid == NULL) + return 1; /* no expectation, thus trivially fulfilled */ + + /* make sure that the expected subject key identifier is there */ + if (ckid == NULL) { + ossl_cmp_warn(ctx, "missing Subject Key Identifier in certificate"); + return 0; + } + if (ASN1_OCTET_STRING_cmp(ckid, skid) == 0) + return 1; + + if ((actual = OPENSSL_buf2hexstr(ckid->data, ckid->length)) != NULL) + ossl_cmp_log1(INFO, ctx, " cert Subject Key Identifier = %s", actual); + if ((expect = OPENSSL_buf2hexstr(skid->data, skid->length)) != NULL) + ossl_cmp_log1(INFO, ctx, " does not match senderKID = %s", expect); + OPENSSL_free(expect); + OPENSSL_free(actual); + return 0; +} + +static int already_checked(X509 *cert, const STACK_OF(X509) *already_checked) +{ + int i; + + for (i = sk_X509_num(already_checked /* may be NULL */); i > 0; i--) + if (X509_cmp(sk_X509_value(already_checked, i - 1), cert) == 0) + return 1; + return 0; +} + +/* + * Check if the given cert is acceptable as sender cert of the given message. + * The subject DN must match, the subject key ID as well if present in the msg, + * and the cert must be current (checked if ctx->trusted is not NULL). + * Note that cert revocation etc. is checked by OSSL_CMP_validate_cert_path(). + * + * Returns 0 on error or not acceptable, else 1. + */ +static int cert_acceptable(OSSL_CMP_CTX *ctx, + const char *desc1, const char *desc2, X509 *cert, + const STACK_OF(X509) *already_checked1, + const STACK_OF(X509) *already_checked2, + const OSSL_CMP_MSG *msg) +{ + X509_STORE *ts = ctx->trusted; + char *sub, *iss; + X509_VERIFY_PARAM *vpm = ts != NULL ? X509_STORE_get0_param(ts) : NULL; + int time_cmp; + + ossl_cmp_log2(INFO, ctx, " considering %s %s with..", desc1, desc2); + if ((sub = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0)) != NULL) + ossl_cmp_log1(INFO, ctx, " subject = %s", sub); + if ((iss = X509_NAME_oneline(X509_get_issuer_name(cert), NULL, 0)) != NULL) + ossl_cmp_log1(INFO, ctx, " issuer = %s", iss); + OPENSSL_free(iss); + OPENSSL_free(sub); + + if (already_checked(cert, already_checked1) + || already_checked(cert, already_checked2)) { + ossl_cmp_info(ctx, " cert has already been checked"); + return 0; + } + + time_cmp = X509_cmp_timeframe(vpm, X509_get0_notBefore(cert), + X509_get0_notAfter(cert)); + if (time_cmp != 0) { + ossl_cmp_warn(ctx, time_cmp > 0 ? "cert has expired" + : "cert is not yet valid"); + return 0; + } + + if (!check_name(ctx, + "cert subject", X509_get_subject_name(cert), + "sender field", msg->header->sender->d.directoryName)) + return 0; + + if (!check_kid(ctx, cert, msg->header->senderKID)) + return 0; + /* acceptable also if there is no senderKID in msg header */ + ossl_cmp_info(ctx, " cert is acceptable"); + return 1; +} + +static int check_msg_valid_cert(OSSL_CMP_CTX *ctx, X509_STORE *store, + X509 *scrt, const OSSL_CMP_MSG *msg) +{ + if (!verify_signature(ctx, msg, scrt)) { + ossl_cmp_warn(ctx, "msg signature verification failed"); + return 0; + } + if (!OSSL_CMP_validate_cert_path(ctx, store, scrt)) { + ossl_cmp_warn(ctx, "cert path validation failed"); + return 0; + } + return 1; +} + +/* + * Exceptional handling for 3GPP TS 33.310 [3G/LTE Network Domain Security + * (NDS); Authentication Framework (AF)], only to use for IP and if the ctx + * option is explicitly set: use self-issued certificates from extraCerts as + * trust anchor to validate sender cert and msg - + * provided it also can validate the newly enrolled certificate + */ +static int check_msg_valid_cert_3gpp(OSSL_CMP_CTX *ctx, X509 *scrt, + const OSSL_CMP_MSG *msg) +{ + int valid = 0; + X509_STORE *store = X509_STORE_new(); + + if (store != NULL /* store does not include CRLs */ + && ossl_cmp_X509_STORE_add1_certs(store, msg->extraCerts, + 1 /* self-issued only */)) + valid = check_msg_valid_cert(ctx, store, scrt, msg); + if (valid) { + /* + * verify that the newly enrolled certificate (which is assumed to have + * rid == 0) can also be validated with the same trusted store + */ + EVP_PKEY *privkey = OSSL_CMP_CTX_get0_newPkey(ctx, 1); + OSSL_CMP_CERTRESPONSE *crep = + ossl_cmp_certrepmessage_get0_certresponse(msg->body->value.ip, 0); + X509 *newcrt = ossl_cmp_certresponse_get1_certificate(privkey, crep); + /* + * maybe better use get_cert_status() from cmp_client.c, which catches + * errors + */ + valid = OSSL_CMP_validate_cert_path(ctx, store, newcrt); + X509_free(newcrt); + } + X509_STORE_free(store); + return valid; +} + +/* + * Try all certs in given list for verifying msg, normally or in 3GPP mode. + * If already_checked1 == NULL then certs are assumed to be the msg->extraCerts. + */ +static int check_msg_with_certs(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs, + const char *desc, + const STACK_OF(X509) *already_checked1, + const STACK_OF(X509) *already_checked2, + const OSSL_CMP_MSG *msg, int mode_3gpp) +{ + int in_extraCerts = already_checked1 == NULL; + int n_acceptable_certs = 0; + int i; + + if (sk_X509_num(certs) <= 0) { + ossl_cmp_log1(WARN, ctx, "no %s", desc); + return 0; + } + + for (i = 0; i < sk_X509_num(certs); i++) { /* certs may be NULL */ + X509 *cert = sk_X509_value(certs, i); + + if (!ossl_assert(cert != NULL)) + return 0; + if (!cert_acceptable(ctx, "cert from", desc, cert, + already_checked1, already_checked2, msg)) + continue; + n_acceptable_certs++; + if (mode_3gpp ? check_msg_valid_cert_3gpp(ctx, cert, msg) + : check_msg_valid_cert(ctx, ctx->trusted, cert, msg)) { + /* store successful sender cert for further msgs in transaction */ + if (!X509_up_ref(cert)) + return 0; + if (!ossl_cmp_ctx_set0_validatedSrvCert(ctx, cert)) { + X509_free(cert); + return 0; + } + return 1; + } + } + if (in_extraCerts && n_acceptable_certs == 0) + ossl_cmp_warn(ctx, "no acceptable cert in extraCerts"); + return 0; +} + +/* + * Verify msg trying first ctx->untrusted_certs, which should include extraCerts + * at its front, then trying the trusted certs in truststore (if any) of ctx. + */ +static int check_msg_all_certs(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg, + int mode_3gpp) +{ + int ret = 0; + + ossl_cmp_info(ctx, + mode_3gpp ? "failed; trying now 3GPP mode trusting extraCerts" + : "trying first normal mode using trust store"); + if (check_msg_with_certs(ctx, msg->extraCerts, "extraCerts", + NULL, NULL, msg, mode_3gpp)) + return 1; + if (check_msg_with_certs(ctx, ctx->untrusted_certs, "untrusted certs", + msg->extraCerts, NULL, msg, mode_3gpp)) + return 1; + + if (ctx->trusted == NULL) { + ossl_cmp_warn(ctx, mode_3gpp ? "no self-issued extraCerts" + : "no trusted store"); + } else { + STACK_OF(X509) *trusted = X509_STORE_get1_all_certs(ctx->trusted); + ret = check_msg_with_certs(ctx, trusted, + mode_3gpp ? "self-issued extraCerts" + : "certs in trusted store", + msg->extraCerts, ctx->untrusted_certs, + msg, mode_3gpp); + sk_X509_pop_free(trusted, X509_free); + } + return ret; +} + +/* verify message signature with any acceptable and valid candidate cert */ +static int check_msg_find_cert(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg) +{ + X509 *scrt = ctx->validatedSrvCert; /* previous successful sender cert */ + GENERAL_NAME *sender = msg->header->sender; + char *sname = NULL; + char *skid_str = NULL; + const ASN1_OCTET_STRING *skid = msg->header->senderKID; + OSSL_cmp_log_cb_t backup_log_cb = ctx->log_cb; + int res = 0; + + if (sender == NULL || msg->body == NULL) + return 0; /* other NULL cases already have been checked */ + if (sender->type != GEN_DIRNAME) { + CMPerr(0, CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED); + return 0; + } + + /* + * try first cached scrt, used successfully earlier in same transaction, + * for validating this and any further msgs where extraCerts may be left out + */ + (void)ERR_set_mark(); + if (scrt != NULL + && cert_acceptable(ctx, "previously validated", "sender cert", scrt, + NULL, NULL, msg) + && (check_msg_valid_cert(ctx, ctx->trusted, scrt, msg) + || check_msg_valid_cert_3gpp(ctx, scrt, msg))) { + (void)ERR_pop_to_mark(); + return 1; + } + (void)ERR_pop_to_mark(); + + /* release any cached sender cert that proved no more successfully usable */ + (void)ossl_cmp_ctx_set0_validatedSrvCert(ctx, NULL); + + /* enable clearing irrelevant errors in attempts to validate sender certs */ + (void)ERR_set_mark(); + ctx->log_cb = NULL; /* temporarily disable logging diagnostic info */ + + if (check_msg_all_certs(ctx, msg, 0 /* using ctx->trusted */) + || check_msg_all_certs(ctx, msg, 1 /* 3gpp */)) { + /* discard any diagnostic info on trying to use certs */ + ctx->log_cb = backup_log_cb; /* restore any logging */ + (void)ERR_pop_to_mark(); + res = 1; + goto end; + } + /* failed finding a sender cert that verifies the message signature */ + ctx->log_cb = backup_log_cb; /* restore any logging */ + (void)ERR_clear_last_mark(); + + sname = X509_NAME_oneline(sender->d.directoryName, NULL, 0); + skid_str = skid == NULL ? NULL + : OPENSSL_buf2hexstr(skid->data, skid->length); + if (ctx->log_cb != NULL) { + ossl_cmp_info(ctx, "verifying msg signature with valid cert that.."); + if (sname != NULL) + ossl_cmp_log1(INFO, ctx, "matches msg sender name = %s", sname); + if (skid_str != NULL) + ossl_cmp_log1(INFO, ctx, "matches msg senderKID = %s", skid_str); + else + ossl_cmp_info(ctx, "while msg header does not contain senderKID"); + /* re-do the above checks (just) for adding diagnostic information */ + check_msg_all_certs(ctx, msg, 0 /* using ctx->trusted */); + check_msg_all_certs(ctx, msg, 1 /* 3gpp */); + } + + CMPerr(0, CMP_R_NO_SUITABLE_SENDER_CERT); + if (sname != NULL) { + ERR_add_error_txt(NULL, "for msg sender name = "); + ERR_add_error_txt(NULL, sname); + } + if (skid_str != NULL) { + ERR_add_error_txt(" and ", "for msg senderKID = "); + ERR_add_error_txt(NULL, skid_str); + } + + end: + OPENSSL_free(sname); + OPENSSL_free(skid_str); + return res; +} + +/* + * Validate the protection of the given PKIMessage using either password- + * based mac (PBM) or a signature algorithm. In the case of signature algorithm, + * the sender certificate can have been pinned by providing it in ctx->srvCert, + * else it is searched in msg->extraCerts, ctx->untrusted_certs, in ctx->trusted + * (in this order) and is path is validated against ctx->trusted. + * + * If ctx->permitTAInExtraCertsForIR is true and when validating a CMP IP msg, + * the trust anchor for validating the IP msg may be taken from msg->extraCerts + * if a self-issued certificate is found there that can be used to + * validate the enrolled certificate returned in the IP. + * This is according to the need given in 3GPP TS 33.310. + * + * Returns 1 on success, 0 on error or validation failed. + */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg) +{ + X509_ALGOR *alg; + int nid = NID_undef, pk_nid = NID_undef; + const ASN1_OBJECT *algorOID = NULL; + X509 *scrt; + + if (ctx == NULL || msg == NULL + || msg->header == NULL || msg->body == NULL) { + CMPerr(0, CMP_R_NULL_ARGUMENT); + return 0; + } + + if ((alg = msg->header->protectionAlg) == NULL /* unprotected message */ + || msg->protection == NULL || msg->protection->data == NULL) { + CMPerr(0, CMP_R_MISSING_PROTECTION); + return 0; + } + + /* determine the nid for the used protection algorithm */ + X509_ALGOR_get0(&algorOID, NULL, NULL, alg); + nid = OBJ_obj2nid(algorOID); + + switch (nid) { + /* 5.1.3.1. Shared Secret Information */ + case NID_id_PasswordBasedMAC: + if (verify_PBMAC(msg, ctx->secretValue)) { + /* + * RFC 4210, 5.3.2: 'Note that if the PKI Message Protection is + * "shared secret information", then any certificate transported in + * the caPubs field may be directly trusted as a root CA + * certificate by the initiator.' + */ + switch (ossl_cmp_msg_get_bodytype(msg)) { + case -1: + return 0; + case OSSL_CMP_PKIBODY_IP: + case OSSL_CMP_PKIBODY_CP: + case OSSL_CMP_PKIBODY_KUP: + case OSSL_CMP_PKIBODY_CCP: + if (ctx->trusted != NULL) { + STACK_OF(X509) *certs = msg->body->value.ip->caPubs; + /* value.ip is same for cp, kup, and ccp */ + + if (!ossl_cmp_X509_STORE_add1_certs(ctx->trusted, certs, 0)) + /* adds both self-issued and not self-issued certs */ + return 0; + } + break; + default: + break; + } + return 1; + } + break; + + /* + * 5.1.3.2 DH Key Pairs + * Not yet supported + */ + case NID_id_DHBasedMac: + CMPerr(0, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC); + break; + + /* + * 5.1.3.3. Signature + */ + default: + if (!OBJ_find_sigid_algs(OBJ_obj2nid(alg->algorithm), NULL, &pk_nid) + || pk_nid == NID_undef) { + CMPerr(0, CMP_R_UNKNOWN_ALGORITHM_ID); + break; + } + /* validate sender name of received msg */ + if (msg->header->sender->type != GEN_DIRNAME) { + CMPerr(0, CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED); + break; /* FR#42: support for more than X509_NAME */ + } + /* + * Compare actual sender name of response with expected sender name. + * Expected name can be set explicitly or the subject of ctx->srvCert. + * Mitigates risk to accept misused certificate of an unauthorized + * entity of a trusted hierarchy. + */ + if (!check_name(ctx, "sender DN field", + msg->header->sender->d.directoryName, + "expected sender", ctx->expected_sender)) + break; + /* Note: if recipient was NULL-DN it could be learned here if needed */ + + scrt = ctx->srvCert; + if (scrt == NULL) { + if (check_msg_find_cert(ctx, msg)) + return 1; + } else { /* use pinned sender cert */ + /* use ctx->srvCert for signature check even if not acceptable */ + if (verify_signature(ctx, msg, scrt)) + return 1; + /* call cert_acceptable() for adding diagnostic information */ + (void)cert_acceptable(ctx, "explicitly set", "sender cert", scrt, + NULL, NULL, msg); + ossl_cmp_warn(ctx, "msg signature verification failed"); + CMPerr(0, CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG); + } + break; + } + return 0; +} + + +/*- + * Check received message (i.e., response by server or request from client) + * Any msg->extraCerts are prepended to ctx->untrusted_certs + * + * Ensures that: + * it has a valid body type + * its protection is valid or absent (allowed only if callback function is + * present and function yields non-zero result using also supplied argument) + * its transaction ID matches the previous transaction ID stored in ctx (if any) + * its recipNonce matches the previous senderNonce stored in the ctx (if any) + * + * If everything is fine: + * learns the senderNonce from the received message, + * learns the transaction ID if it is not yet in ctx. + * + * returns body type (which is >= 0) of the message on success, -1 on error + */ +int ossl_cmp_msg_check_received(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg, + ossl_cmp_allow_unprotected_cb_t cb, int cb_arg) +{ + int rcvd_type; + + if (!ossl_assert(ctx != NULL && msg != NULL)) + return -1; + + if (sk_X509_num(msg->extraCerts) > 10) + ossl_cmp_warn(ctx, + "received CMP message contains more than 10 extraCerts"); + + /* validate message protection */ + if (msg->header->protectionAlg != 0) { + /* detect explicitly permitted exceptions for invalid protection */ + if (!OSSL_CMP_validate_msg(ctx, msg) + && (cb == NULL || !(*cb)(ctx, msg, 1, cb_arg))) { + CMPerr(0, CMP_R_ERROR_VALIDATING_PROTECTION); + return -1; + } + } else { + /* detect explicitly permitted exceptions for missing protection */ + if (cb == NULL || !(*cb)(ctx, msg, 0, cb_arg)) { + CMPerr(0, CMP_R_MISSING_PROTECTION); + return -1; + } + } + + /* + * Store any provided extraCerts in ctx for future use, + * such that they are available to ctx->certConf_cb and + * the peer does not need to send them again in the same transaction. + * For efficiency, the extraCerts are prepended so they get used first. + */ + if (!ossl_cmp_sk_X509_add1_certs(ctx->untrusted_certs, msg->extraCerts, + 0 /* this allows self-issued certs */, + 1 /* no_dups */, 1 /* prepend */)) + return -1; + + /* check CMP version number in header */ + if (ossl_cmp_hdr_get_pvno(OSSL_CMP_MSG_get0_header(msg)) != OSSL_CMP_PVNO) { + CMPerr(0, CMP_R_UNEXPECTED_PVNO); + return -1; + } + + /* compare received transactionID with the expected one in previous msg */ + if (ctx->transactionID != NULL + && (msg->header->transactionID == NULL + || ASN1_OCTET_STRING_cmp(ctx->transactionID, + msg->header->transactionID) != 0)) { + CMPerr(0, CMP_R_TRANSACTIONID_UNMATCHED); + return -1; + } + + /* compare received nonce with the one we sent */ + if (ctx->senderNonce != NULL + && (msg->header->recipNonce == NULL + || ASN1_OCTET_STRING_cmp(ctx->senderNonce, + msg->header->recipNonce) != 0)) { + CMPerr(0, CMP_R_RECIPNONCE_UNMATCHED); + return -1; + } + + /* + * RFC 4210 section 5.1.1 states: the recipNonce is copied from + * the senderNonce of the previous message in the transaction. + * --> Store for setting in next message + */ + if (!ossl_cmp_ctx_set1_recipNonce(ctx, msg->header->senderNonce)) + return -1; + + /* if not yet present, learn transactionID */ + if (ctx->transactionID == NULL + && !OSSL_CMP_CTX_set1_transactionID(ctx, msg->header->transactionID)) + return -1; + + if ((rcvd_type = ossl_cmp_msg_get_bodytype(msg)) < 0) { + CMPerr(0, CMP_R_PKIBODY_ERROR); + return -1; + } + return rcvd_type; +} + +int ossl_cmp_verify_popo(const OSSL_CMP_MSG *msg, int accept_RAVerified) +{ + if (!ossl_assert(msg != NULL && msg->body != NULL)) + return 0; + switch (msg->body->type) { + case OSSL_CMP_PKIBODY_P10CR: + { + X509_REQ *req = msg->body->value.p10cr; + + if (X509_REQ_verify(req, X509_REQ_get0_pubkey(req)) > 0) + return 1; + CMPerr(0, CMP_R_REQUEST_NOT_ACCEPTED); + return 0; + } + case OSSL_CMP_PKIBODY_IR: + case OSSL_CMP_PKIBODY_CR: + case OSSL_CMP_PKIBODY_KUR: + return OSSL_CRMF_MSGS_verify_popo(msg->body->value.ir, + OSSL_CMP_CERTREQID, + accept_RAVerified); + default: + CMPerr(0, CMP_R_PKIBODY_ERROR); + return 0; + } +} diff --git a/crypto/crmf/crmf_asn.c b/crypto/crmf/crmf_asn.c index 8b6657f9..bd375c6f 100644 --- a/crypto/crmf/crmf_asn.c +++ b/crypto/crmf/crmf_asn.c @@ -141,8 +141,8 @@ ASN1_CHOICE(OSSL_CRMF_POPO) = { IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_POPO) -ASN1_ADB_TEMPLATE(attributetypeandvalue_default) = ASN1_OPT( - OSSL_CRMF_ATTRIBUTETYPEANDVALUE, value.other, ASN1_ANY); +ASN1_ADB_TEMPLATE(attributetypeandvalue_default) = + ASN1_OPT(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, value.other, ASN1_ANY); ASN1_ADB(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) = { ADB_ENTRY(NID_id_regCtrl_regToken, ASN1_SIMPLE(OSSL_CRMF_ATTRIBUTETYPEANDVALUE, @@ -187,7 +187,7 @@ IMPLEMENT_ASN1_FUNCTIONS(OSSL_CRMF_OPTIONALVALIDITY) ASN1_SEQUENCE(OSSL_CRMF_CERTTEMPLATE) = { - ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, version, ASN1_INTEGER, 0), + ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, version, ASN1_INTEGER, 0), /* * serialNumber MUST be omitted. This field is assigned by the CA * during certificate creation. @@ -197,16 +197,16 @@ ASN1_SEQUENCE(OSSL_CRMF_CERTTEMPLATE) = { * signingAlg MUST be omitted. This field is assigned by the CA * during certificate creation. */ - ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, signingAlg, X509_ALGOR, 2), - ASN1_EXP_OPT(OSSL_CRMF_CERTTEMPLATE, issuer, X509_NAME, 3), + ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, signingAlg, X509_ALGOR, 2), + ASN1_EXP_OPT(OSSL_CRMF_CERTTEMPLATE, issuer, X509_NAME, 3), ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, validity, OSSL_CRMF_OPTIONALVALIDITY, 4), - ASN1_EXP_OPT(OSSL_CRMF_CERTTEMPLATE, subject, X509_NAME, 5), - ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, publicKey, X509_PUBKEY, 6), + ASN1_EXP_OPT(OSSL_CRMF_CERTTEMPLATE, subject, X509_NAME, 5), + ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, publicKey, X509_PUBKEY, 6), /* issuerUID is deprecated in version 2 */ - ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, issuerUID, ASN1_BIT_STRING, 7), + ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, issuerUID, ASN1_BIT_STRING, 7), /* subjectUID is deprecated in version 2 */ - ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, subjectUID, ASN1_BIT_STRING, 8), + ASN1_IMP_OPT(OSSL_CRMF_CERTTEMPLATE, subjectUID, ASN1_BIT_STRING, 8), ASN1_IMP_SEQUENCE_OF_OPT(OSSL_CRMF_CERTTEMPLATE, extensions, X509_EXTENSION, 9), } ASN1_SEQUENCE_END(OSSL_CRMF_CERTTEMPLATE) diff --git a/crypto/crmf/crmf_lib.c b/crypto/crmf/crmf_lib.c index 64dbf809..4d815692 100644 --- a/crypto/crmf/crmf_lib.c +++ b/crypto/crmf/crmf_lib.c @@ -47,7 +47,7 @@ int OSSL_CRMF_MSG_set1_##ctrlinf##_##atyp(OSSL_CRMF_MSG *msg, \ { \ OSSL_CRMF_ATTRIBUTETYPEANDVALUE *atav = NULL; \ \ - if (msg == NULL || in == NULL) \ + if (msg == NULL || in == NULL) \ goto err; \ if ((atav = OSSL_CRMF_ATTRIBUTETYPEANDVALUE_new()) == NULL) \ goto err; \ @@ -122,9 +122,9 @@ int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, return 1; } -int OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo( - OSSL_CRMF_PKIPUBLICATIONINFO *pi, - OSSL_CRMF_SINGLEPUBINFO *spi) +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi) { if (pi == NULL || spi == NULL) { CRMFerr(CRMF_F_OSSL_CRMF_MSG_PKIPUBLICATIONINFO_PUSH0_SINGLEPUBINFO, @@ -139,8 +139,8 @@ int OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo( return sk_OSSL_CRMF_SINGLEPUBINFO_push(pi->pubInfos, spi); } -int OSSL_CRMF_MSG_set_PKIPublicationInfo_action( - OSSL_CRMF_PKIPUBLICATIONINFO *pi, int action) +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action) { if (pi == NULL || action < OSSL_CRMF_PUB_ACTION_DONTPUBLISH @@ -457,7 +457,7 @@ int OSSL_CRMF_MSG_create_popo(OSSL_CRMF_MSG *crm, EVP_PKEY *pkey, { OSSL_CRMF_POPOSIGNINGKEY *ps = OSSL_CRMF_POPOSIGNINGKEY_new(); if (ps == NULL - || !CRMF_poposigningkey_init(ps, crm->certReq, pkey, dgst)){ + || !CRMF_poposigningkey_init(ps, crm->certReq, pkey, dgst)) { OSSL_CRMF_POPOSIGNINGKEY_free(ps); goto err; } @@ -542,21 +542,23 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, * the public key from the certificate template. This MUST be * exactly the same value as contained in the certificate template. */ + const ASN1_ITEM *rptr = ASN1_ITEM_rptr(OSSL_CRMF_POPOSIGNINGKEYINPUT); + if (pubkey == NULL || sig->poposkInput->publicKey == NULL || X509_PUBKEY_cmp(pubkey, sig->poposkInput->publicKey) - || ASN1_item_verify( - ASN1_ITEM_rptr(OSSL_CRMF_POPOSIGNINGKEYINPUT), - sig->algorithmIdentifier, sig->signature, - sig->poposkInput, X509_PUBKEY_get0(pubkey)) < 1) + || ASN1_item_verify(rptr, sig->algorithmIdentifier, + sig->signature, sig->poposkInput, + X509_PUBKEY_get0(pubkey)) < 1) break; } else { if (pubkey == NULL || req->certReq->certTemplate->subject == NULL || ASN1_item_verify(ASN1_ITEM_rptr(OSSL_CRMF_CERTREQUEST), - sig->algorithmIdentifier, sig->signature, - req->certReq, - X509_PUBKEY_get0(pubkey)) < 1) + sig->algorithmIdentifier, + sig->signature, + req->certReq, + X509_PUBKEY_get0(pubkey)) < 1) break; } return 1; diff --git a/crypto/crmf/crmf_local.h b/crypto/crmf/crmf_local.h index 06b32b53..3f3f75cf 100644 --- a/crypto/crmf/crmf_local.h +++ b/crypto/crmf/crmf_local.h @@ -185,9 +185,9 @@ DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKMACVALUE) typedef struct ossl_crmf_popoprivkey_st { int type; union { - ASN1_BIT_STRING *thisMessage; /* 0 */ /* Deprecated */ + ASN1_BIT_STRING *thisMessage; /* 0 */ /* Deprecated */ ASN1_INTEGER *subsequentMessage; /* 1 */ - ASN1_BIT_STRING *dhMAC; /* 2 */ /* Deprecated */ + ASN1_BIT_STRING *dhMAC; /* 2 */ /* Deprecated */ OSSL_CRMF_PKMACVALUE *agreeMAC; /* 3 */ /* * TODO: This is not ASN1_NULL but CMS_ENVELOPEDDATA which should be @@ -310,20 +310,20 @@ DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_OPTIONALVALIDITY) * } */ struct ossl_crmf_certtemplate_st { - ASN1_INTEGER *version; /* 0 */ - ASN1_INTEGER *serialNumber; /* 1 */ /* serialNumber MUST be omitted */ - /* This field is assigned by the CA during certificate creation */ - X509_ALGOR *signingAlg; /* 2 */ /* signingAlg MUST be omitted */ - /* This field is assigned by the CA during certificate creation */ - X509_NAME *issuer; /* 3 */ - OSSL_CRMF_OPTIONALVALIDITY *validity; /* 4 */ - X509_NAME *subject; /* 5 */ - X509_PUBKEY *publicKey; /* 6 */ - ASN1_BIT_STRING *issuerUID; /* 7 */ /* deprecated in version 2 */ - /* According to rfc 3280: UniqueIdentifier ::= BIT STRING */ - ASN1_BIT_STRING *subjectUID; /* 8 */ /* deprecated in version 2 */ - /* Could be X509_EXTENSION*S*, but that's only cosmetic */ - STACK_OF(X509_EXTENSION) *extensions; /* 9 */ + ASN1_INTEGER *version; + ASN1_INTEGER *serialNumber; /* serialNumber MUST be omitted */ + /* This field is assigned by the CA during certificate creation */ + X509_ALGOR *signingAlg; /* signingAlg MUST be omitted */ + /* This field is assigned by the CA during certificate creation */ + X509_NAME *issuer; + OSSL_CRMF_OPTIONALVALIDITY *validity; + X509_NAME *subject; + X509_PUBKEY *publicKey; + ASN1_BIT_STRING *issuerUID; /* deprecated in version 2 */ + /* According to rfc 3280: UniqueIdentifier ::= BIT STRING */ + ASN1_BIT_STRING *subjectUID; /* deprecated in version 2 */ + /* Could be X509_EXTENSION*S*, but that's only cosmetic */ + STACK_OF(X509_EXTENSION) *extensions; } /* OSSL_CRMF_CERTTEMPLATE */; /*- diff --git a/crypto/crmf/crmf_pbm.c b/crypto/crmf/crmf_pbm.c index 2dfa84e4..6c22bc29 100644 --- a/crypto/crmf/crmf_pbm.c +++ b/crypto/crmf/crmf_pbm.c @@ -71,7 +71,7 @@ OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(size_t slen, int owfnid, /* * iterationCount identifies the number of times the hash is applied * during the key computation process. The iterationCount MUST be a - * minimum of 100. Many people suggest using values as high as 1000 + * minimum of 100. Many people suggest using values as high as 1000 * iterations as the minimum value. The trade off here is between * protection of the password from attacks and the time spent by the * server processing all of the different iterations in deriving diff --git a/crypto/des/asm/crypt586.pl b/crypto/des/asm/crypt586.pl index def4e7fd..05d1d992 100644 --- a/crypto/des/asm/crypt586.pl +++ b/crypto/des/asm/crypt586.pl @@ -24,7 +24,7 @@ $R="esi"; &fcrypt_body("fcrypt_body"); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub fcrypt_body { diff --git a/crypto/des/asm/des-586.pl b/crypto/des/asm/des-586.pl index 45fe3d2d..197ba2d7 100644 --- a/crypto/des/asm/des-586.pl +++ b/crypto/des/asm/des-586.pl @@ -46,7 +46,7 @@ $small_footprint=1 if (grep(/\-DOPENSSL_SMALL_FOOTPRINT/,@ARGV)); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub DES_encrypt_internal() { diff --git a/crypto/des/asm/dest4-sparcv9.pl b/crypto/des/asm/dest4-sparcv9.pl index 90438f0e..7168c732 100644 --- a/crypto/des/asm/dest4-sparcv9.pl +++ b/crypto/des/asm/dest4-sparcv9.pl @@ -623,4 +623,4 @@ ___ &emit_assembler(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/dh/dh_ameth.c b/crypto/dh/dh_ameth.c index 4f74ab6f..bee414ab 100644 --- a/crypto/dh/dh_ameth.c +++ b/crypto/dh/dh_ameth.c @@ -505,10 +505,10 @@ static int dh_pkey_export_to(const EVP_PKEY *from, void *to_keydata, return 0; } /* A key must at least have a public part. */ - if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_DH_PUB_KEY, pub_key)) + if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_PUB_KEY, pub_key)) return 0; if (priv_key != NULL) { - if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_DH_PRIV_KEY, + if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_PRIV_KEY, priv_key)) return 0; } diff --git a/crypto/dh/dh_check.c b/crypto/dh/dh_check.c index 8bb24520..4832230f 100644 --- a/crypto/dh/dh_check.c +++ b/crypto/dh/dh_check.c @@ -11,6 +11,7 @@ #include "internal/cryptlib.h" #include #include "dh_local.h" +#include "crypto/dh.h" /*- * Check that p and g are suitable enough @@ -37,6 +38,28 @@ int DH_check_params_ex(const DH *dh) return errflags == 0; } +#ifdef FIPS_MODE +int DH_check_params(const DH *dh, int *ret) +{ + int nid; + + *ret = 0; + /* + * SP800-56A R3 Section 5.5.2 Assurances of Domain Parameter Validity + * (1a) The domain parameters correspond to any approved safe prime group. + */ + nid = DH_get_nid((DH *)dh); + if (nid != NID_undef) + return 1; + /* + * OR + * (2b) FFC domain params conform to FIPS-186-4 explicit domain param + * validity tests. + */ + return ffc_params_FIPS186_4_validate(&dh->params, FFC_PARAM_TYPE_DH, NULL, + FFC_PARAMS_VALIDATE_ALL, ret, NULL); +} +#else int DH_check_params(const DH *dh, int *ret) { int ok = 0; @@ -73,6 +96,7 @@ int DH_check_params(const DH *dh, int *ret) BN_CTX_free(ctx); return ok; } +#endif /* FIPS_MODE */ /*- * Check that p is a safe prime and @@ -107,11 +131,20 @@ int DH_check_ex(const DH *dh) return errflags == 0; } +/* Note: according to documentation - this only checks the params */ int DH_check(const DH *dh, int *ret) { +#ifdef FIPS_MODE + return DH_check_params(dh, ret); +#else int ok = 0, r; BN_CTX *ctx = NULL; BIGNUM *t1 = NULL, *t2 = NULL; + int nid = DH_get_nid((DH *)dh); + + *ret = 0; + if (nid != NID_undef) + return 1; if (!DH_check_params(dh, ret)) return 0; @@ -171,6 +204,7 @@ int DH_check(const DH *dh, int *ret) BN_CTX_end(ctx); BN_CTX_free(ctx); return ok; +#endif /* FIPS_MODE */ } int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key) @@ -190,38 +224,83 @@ int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key) return errflags == 0; } +/* + * See SP800-56Ar3 Section 5.6.2.3.1 : FFC Full public key validation. + */ int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret) +{ + return ffc_validate_public_key(&dh->params, pub_key, ret); +} + +/* + * See SP800-56Ar3 Section 5.6.2.3.1 : FFC Partial public key validation. + * To only be used with ephemeral FFC public keys generated using the approved + * safe-prime groups. + */ +int dh_check_pub_key_partial(const DH *dh, const BIGNUM *pub_key, int *ret) +{ + return ffc_validate_public_key_partial(&dh->params, pub_key, ret); +} + +int dh_check_priv_key(const DH *dh, const BIGNUM *priv_key, int *ret) { int ok = 0; - BIGNUM *tmp = NULL; - BN_CTX *ctx = NULL; + BIGNUM *two_powN = NULL, *upper; *ret = 0; - ctx = BN_CTX_new(); - if (ctx == NULL) + two_powN = BN_new(); + if (two_powN == NULL) + return 0; + if (dh->params.q == NULL) goto err; - BN_CTX_start(ctx); - tmp = BN_CTX_get(ctx); - if (tmp == NULL || !BN_set_word(tmp, 1)) - goto err; - if (BN_cmp(pub_key, tmp) <= 0) - *ret |= DH_CHECK_PUBKEY_TOO_SMALL; - if (BN_copy(tmp, dh->params.p) == NULL || !BN_sub_word(tmp, 1)) - goto err; - if (BN_cmp(pub_key, tmp) >= 0) - *ret |= DH_CHECK_PUBKEY_TOO_LARGE; + upper = dh->params.q; - if (dh->params.q != NULL) { - /* Check pub_key^q == 1 mod p */ - if (!BN_mod_exp(tmp, pub_key, dh->params.q, dh->params.p, ctx)) + /* Is it from an approved Safe prime group ?*/ + if (DH_get_nid((DH *)dh) != NID_undef) { + if (!BN_lshift(two_powN, BN_value_one(), dh->length)) goto err; - if (!BN_is_one(tmp)) - *ret |= DH_CHECK_PUBKEY_INVALID; + if (BN_cmp(two_powN, dh->params.q) < 0) + upper = two_powN; } + if (!ffc_validate_private_key(upper, priv_key, ret)) + goto err; ok = 1; - err: - BN_CTX_end(ctx); - BN_CTX_free(ctx); +err: + BN_free(two_powN); return ok; } + +/* + * FFC pairwise check from SP800-56A R3. + * Section 5.6.2.1.4 Owner Assurance of Pair-wise Consistency + */ +int dh_check_pairwise(DH *dh) +{ + int ret = 0; + BN_CTX *ctx = NULL; + BIGNUM *pub_key = NULL; + + if (dh->params.p == NULL + || dh->params.g == NULL + || dh->priv_key == NULL + || dh->pub_key == NULL) + return 0; + + ctx = BN_CTX_new_ex(dh->libctx); + if (ctx == NULL) + goto err; + pub_key = BN_new(); + if (pub_key == NULL) + goto err; + + /* recalculate the public key = (g ^ priv) mod p */ + if (!dh_generate_public_key(ctx, dh, dh->priv_key, pub_key)) + goto err; + /* check it matches the existing pubic_key */ + ret = BN_cmp(pub_key, dh->pub_key) == 0; +err: + BN_free(pub_key); + BN_CTX_free(ctx); + return ret; +} diff --git a/crypto/dh/dh_gen.c b/crypto/dh/dh_gen.c index 3d3bcb22..89264e9f 100644 --- a/crypto/dh/dh_gen.c +++ b/crypto/dh/dh_gen.c @@ -27,7 +27,7 @@ static int dh_builtin_genparams(DH *ret, int prime_len, int generator, * TODO(3.0): keygen should be able to use this method to do a FIPS186-4 style * paramgen. */ -int dh_generate_ffc_parameters(OPENSSL_CTX *libctx, DH *dh, int bits, +int dh_generate_ffc_parameters(DH *dh, int bits, int qbits, int gindex, BN_GENCB *cb) { int ret, res; @@ -38,7 +38,8 @@ int dh_generate_ffc_parameters(OPENSSL_CTX *libctx, DH *dh, int bits, qbits = EVP_MD_size(evpmd) * 8; } dh->params.gindex = gindex; - ret = ffc_params_FIPS186_4_generate(libctx, &dh->params, FFC_PARAM_TYPE_DH, + ret = ffc_params_FIPS186_4_generate(dh->libctx, &dh->params, + FFC_PARAM_TYPE_DH, bits, qbits, NULL, &res, cb); if (ret > 0) dh->dirty_cnt++; diff --git a/crypto/dh/dh_group_params.c b/crypto/dh/dh_group_params.c index 4996e854..6c057d1f 100644 --- a/crypto/dh/dh_group_params.c +++ b/crypto/dh/dh_group_params.c @@ -15,11 +15,16 @@ #include #include #include "crypto/bn_dh.h" +#include "crypto/dh.h" -static DH *dh_param_init(int nid, const BIGNUM *p, int32_t nbits) +#ifndef FIPS_MODE +static DH *dh_new_by_nid_with_ctx(OPENSSL_CTX *libctx, int nid); + +static DH *dh_param_init(OPENSSL_CTX *libctx, int nid, const BIGNUM *p, + int32_t nbits) { BIGNUM *q = NULL; - DH *dh = DH_new(); + DH *dh = dh_new_with_ctx(libctx); if (dh == NULL) return NULL; @@ -41,7 +46,7 @@ static DH *dh_param_init(int nid, const BIGNUM *p, int32_t nbits) return dh; } -DH *DH_new_by_nid(int nid) +static DH *dh_new_by_nid_with_ctx(OPENSSL_CTX *libctx, int nid) { /* * The last parameter specified in these fields is @@ -50,35 +55,41 @@ DH *DH_new_by_nid(int nid) */ switch (nid) { case NID_ffdhe2048: - return dh_param_init(nid, &_bignum_ffdhe2048_p, 225); + return dh_param_init(libctx, nid, &_bignum_ffdhe2048_p, 225); case NID_ffdhe3072: - return dh_param_init(nid, &_bignum_ffdhe3072_p, 275); + return dh_param_init(libctx, nid, &_bignum_ffdhe3072_p, 275); case NID_ffdhe4096: - return dh_param_init(nid, &_bignum_ffdhe4096_p, 325); + return dh_param_init(libctx, nid, &_bignum_ffdhe4096_p, 325); case NID_ffdhe6144: - return dh_param_init(nid, &_bignum_ffdhe6144_p, 375); + return dh_param_init(libctx, nid, &_bignum_ffdhe6144_p, 375); case NID_ffdhe8192: - return dh_param_init(nid, &_bignum_ffdhe8192_p, 400); + return dh_param_init(libctx, nid, &_bignum_ffdhe8192_p, 400); #ifndef FIPS_MODE case NID_modp_1536: - return dh_param_init(nid, &_bignum_modp_1536_p, 190); + return dh_param_init(libctx, nid, &_bignum_modp_1536_p, 190); #endif case NID_modp_2048: - return dh_param_init(nid, &_bignum_modp_2048_p, 225); + return dh_param_init(libctx, nid, &_bignum_modp_2048_p, 225); case NID_modp_3072: - return dh_param_init(nid, &_bignum_modp_3072_p, 275); + return dh_param_init(libctx, nid, &_bignum_modp_3072_p, 275); case NID_modp_4096: - return dh_param_init(nid, &_bignum_modp_4096_p, 325); + return dh_param_init(libctx, nid, &_bignum_modp_4096_p, 325); case NID_modp_6144: - return dh_param_init(nid, &_bignum_modp_6144_p, 375); + return dh_param_init(libctx, nid, &_bignum_modp_6144_p, 375); case NID_modp_8192: - return dh_param_init(nid, &_bignum_modp_8192_p, 400); + return dh_param_init(libctx, nid, &_bignum_modp_8192_p, 400); default: - DHerr(DH_F_DH_NEW_BY_NID, DH_R_INVALID_PARAMETER_NID); + DHerr(0, DH_R_INVALID_PARAMETER_NID); return NULL; } } +DH *DH_new_by_nid(int nid) +{ + return dh_new_by_nid_with_ctx(NULL, nid); +} +#endif + int DH_get_nid(DH *dh) { int nid = dh->params.nid; diff --git a/crypto/dh/dh_key.c b/crypto/dh/dh_key.c index 0bee75c0..14d35466 100644 --- a/crypto/dh/dh_key.c +++ b/crypto/dh/dh_key.c @@ -20,8 +20,7 @@ static int dh_bn_mod_exp(const DH *dh, BIGNUM *r, static int dh_init(DH *dh); static int dh_finish(DH *dh); -int dh_compute_key(OPENSSL_CTX *libctx, unsigned char *key, - const BIGNUM *pub_key, DH *dh) +static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) { BN_CTX *ctx = NULL; BN_MONT_CTX *mont = NULL; @@ -41,7 +40,7 @@ int dh_compute_key(OPENSSL_CTX *libctx, unsigned char *key, return 0; } - ctx = BN_CTX_new_ex(libctx); + ctx = BN_CTX_new_ex(dh->libctx); if (ctx == NULL) goto err; BN_CTX_start(ctx); @@ -81,18 +80,21 @@ int dh_compute_key(OPENSSL_CTX *libctx, unsigned char *key, return ret; } -static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) +int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) { - return dh_compute_key(NULL, key, pub_key, dh); +#ifdef FIPS_MODE + return compute_key(key, pub_key, dh); +#else + return dh->meth->compute_key(key, pub_key, dh); +#endif } -int dh_compute_key_padded(OPENSSL_CTX *libctx, unsigned char *key, - const BIGNUM *pub_key, DH *dh) +int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh) { int rv, pad; #ifdef FIPS_MODE - rv = dh_compute_key(libctx, key, pub_key, dh); + rv = compute_key(key, pub_key, dh); #else rv = dh->meth->compute_key(key, pub_key, dh); #endif @@ -106,18 +108,6 @@ int dh_compute_key_padded(OPENSSL_CTX *libctx, unsigned char *key, return rv + pad; } -#ifndef FIPS_MODE -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) -{ - return dh->meth->compute_key(key, pub_key, dh); -} - -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh) -{ - return dh_compute_key_padded(NULL, key, pub_key, dh); -} -#endif - static DH_METHOD dh_ossl = { "OpenSSL DH Method", generate_key, @@ -168,14 +158,46 @@ void DH_set_default_method(const DH_METHOD *meth) { default_DH_method = meth; } +#endif /* FIPS_MODE */ int DH_generate_key(DH *dh) { +#ifdef FIPS_MODE + return generate_key(dh); +#else return dh->meth->generate_key(dh); +#endif } -#endif /* FIPS_MODE */ -static int dh_generate_key(OPENSSL_CTX *libctx, DH *dh) +int dh_generate_public_key(BN_CTX *ctx, DH *dh, const BIGNUM *priv_key, + BIGNUM *pub_key) +{ + int ret = 0; + BIGNUM *prk = BN_new(); + BN_MONT_CTX *mont = NULL; + + if (prk == NULL) + return 0; + + if (dh->flags & DH_FLAG_CACHE_MONT_P) { + mont = BN_MONT_CTX_set_locked(&dh->method_mont_p, + dh->lock, dh->params.p, ctx); + if (mont == NULL) + goto err; + } + BN_with_flags(prk, priv_key, BN_FLG_CONSTTIME); + + /* pub_key = g^priv_key mod p */ + if (!dh->meth->bn_mod_exp(dh, pub_key, dh->params.g, prk, dh->params.p, + ctx, mont)) + goto err; + ret = 1; +err: + BN_clear_free(prk); + return ret; +} + +static int generate_key(DH *dh) { int ok = 0; int generate_new_key = 0; @@ -183,7 +205,6 @@ static int dh_generate_key(OPENSSL_CTX *libctx, DH *dh) unsigned l; #endif BN_CTX *ctx = NULL; - BN_MONT_CTX *mont = NULL; BIGNUM *pub_key = NULL, *priv_key = NULL; if (BN_num_bits(dh->params.p) > OPENSSL_DH_MAX_MODULUS_BITS) { @@ -196,7 +217,7 @@ static int dh_generate_key(OPENSSL_CTX *libctx, DH *dh) return 0; } - ctx = BN_CTX_new_ex(libctx); + ctx = BN_CTX_new_ex(dh->libctx); if (ctx == NULL) goto err; @@ -205,23 +226,17 @@ static int dh_generate_key(OPENSSL_CTX *libctx, DH *dh) if (priv_key == NULL) goto err; generate_new_key = 1; - } else + } else { priv_key = dh->priv_key; + } if (dh->pub_key == NULL) { pub_key = BN_new(); if (pub_key == NULL) goto err; - } else + } else { pub_key = dh->pub_key; - - if (dh->flags & DH_FLAG_CACHE_MONT_P) { - mont = BN_MONT_CTX_set_locked(&dh->method_mont_p, - dh->lock, dh->params.p, ctx); - if (!mont) - goto err; } - if (generate_new_key) { /* Is it an approved safe prime ?*/ if (DH_get_nid(dh) != NID_undef) { @@ -274,22 +289,8 @@ static int dh_generate_key(OPENSSL_CTX *libctx, DH *dh) } } - { - BIGNUM *prk = BN_new(); - - if (prk == NULL) - goto err; - BN_with_flags(prk, priv_key, BN_FLG_CONSTTIME); - - /* pub_key = g^priv_key mod p */ - if (!dh->meth->bn_mod_exp(dh, pub_key, dh->params.g, prk, dh->params.p, - ctx, mont)) { - BN_clear_free(prk); - goto err; - } - /* We MUST free prk before any further use of priv_key */ - BN_clear_free(prk); - } + if (!dh_generate_public_key(ctx, dh, priv_key, pub_key)) + goto err; dh->pub_key = pub_key; dh->priv_key = priv_key; @@ -307,11 +308,6 @@ static int dh_generate_key(OPENSSL_CTX *libctx, DH *dh) return ok; } -static int generate_key(DH *dh) -{ - return dh_generate_key(NULL, dh); -} - int dh_buf2key(DH *dh, const unsigned char *buf, size_t len) { int err_reason = DH_R_BN_ERROR; diff --git a/crypto/dh/dh_lib.c b/crypto/dh/dh_lib.c index 0c1cccb5..e6fc3ef2 100644 --- a/crypto/dh/dh_lib.c +++ b/crypto/dh/dh_lib.c @@ -16,6 +16,8 @@ #include "crypto/dh.h" #include "dh_local.h" +static DH *dh_new_intern(ENGINE *engine, OPENSSL_CTX *libctx); + #ifndef FIPS_MODE int DH_set_method(DH *dh, const DH_METHOD *meth) { @@ -36,36 +38,47 @@ int DH_set_method(DH *dh, const DH_METHOD *meth) meth->init(dh); return 1; } -#endif /* !FIPS_MODE */ DH *DH_new(void) { - return DH_new_method(NULL); + return dh_new_intern(NULL, NULL); } DH *DH_new_method(ENGINE *engine) +{ + return dh_new_intern(engine, NULL); +} +#endif /* !FIPS_MODE */ + +DH *dh_new_with_ctx(OPENSSL_CTX *libctx) +{ + return dh_new_intern(NULL, libctx); +} + +static DH *dh_new_intern(ENGINE *engine, OPENSSL_CTX *libctx) { DH *ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { - DHerr(DH_F_DH_NEW_METHOD, ERR_R_MALLOC_FAILURE); + DHerr(0, ERR_R_MALLOC_FAILURE); return NULL; } ret->references = 1; ret->lock = CRYPTO_THREAD_lock_new(); if (ret->lock == NULL) { - DHerr(DH_F_DH_NEW_METHOD, ERR_R_MALLOC_FAILURE); + DHerr(0, ERR_R_MALLOC_FAILURE); OPENSSL_free(ret); return NULL; } + ret->libctx = libctx; ret->meth = DH_get_default_method(); #if !defined(FIPS_MODE) && !defined(OPENSSL_NO_ENGINE) ret->flags = ret->meth->flags; /* early default init */ if (engine) { if (!ENGINE_init(engine)) { - DHerr(DH_F_DH_NEW_METHOD, ERR_R_ENGINE_LIB); + DHerr(0, ERR_R_ENGINE_LIB); goto err; } ret->engine = engine; @@ -74,7 +87,7 @@ DH *DH_new_method(ENGINE *engine) if (ret->engine) { ret->meth = ENGINE_get_DH(ret->engine); if (ret->meth == NULL) { - DHerr(DH_F_DH_NEW_METHOD, ERR_R_ENGINE_LIB); + DHerr(0, ERR_R_ENGINE_LIB); goto err; } } @@ -88,7 +101,7 @@ DH *DH_new_method(ENGINE *engine) #endif /* FIPS_MODE */ if ((ret->meth->init != NULL) && !ret->meth->init(ret)) { - DHerr(DH_F_DH_NEW_METHOD, ERR_R_INIT_FAIL); + DHerr(0, ERR_R_INIT_FAIL); goto err; } diff --git a/crypto/dh/dh_local.h b/crypto/dh/dh_local.h index 57d9d348..7fefcf76 100644 --- a/crypto/dh/dh_local.h +++ b/crypto/dh/dh_local.h @@ -31,6 +31,7 @@ struct dh_st { CRYPTO_EX_DATA ex_data; ENGINE *engine; #endif + OPENSSL_CTX *libctx; const DH_METHOD *meth; CRYPTO_RWLOCK *lock; diff --git a/crypto/dh/dh_pmeth.c b/crypto/dh/dh_pmeth.c index 38935fd9..3b163bbe 100644 --- a/crypto/dh/dh_pmeth.c +++ b/crypto/dh/dh_pmeth.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include diff --git a/crypto/dsa/dsa_ameth.c b/crypto/dsa/dsa_ameth.c index 9d1b8971..9715a75d 100644 --- a/crypto/dsa/dsa_ameth.c +++ b/crypto/dsa/dsa_ameth.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include @@ -530,11 +536,11 @@ static int dsa_pkey_export_to(const EVP_PKEY *from, void *to_keydata, || !ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_FFC_Q, q) || !ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_FFC_G, g)) return 0; - if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_DSA_PUB_KEY, + if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_PUB_KEY, pub_key)) return 0; if (priv_key != NULL) { - if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_DSA_PRIV_KEY, + if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_PRIV_KEY, priv_key)) return 0; } diff --git a/crypto/dsa/dsa_asn1.c b/crypto/dsa/dsa_asn1.c index ba1cbad2..5586b6a6 100644 --- a/crypto/dsa/dsa_asn1.c +++ b/crypto/dsa/dsa_asn1.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include "dsa_local.h" diff --git a/crypto/dsa/dsa_check.c b/crypto/dsa/dsa_check.c new file mode 100644 index 00000000..3b86d2dc --- /dev/null +++ b/crypto/dsa/dsa_check.c @@ -0,0 +1,85 @@ +/* + * 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 +#include "internal/cryptlib.h" +#include +#include "dsa_local.h" +#include "crypto/dsa.h" + +int dsa_check_params(const DSA *dsa, int *ret) +{ + int nid; + /* + * (2b) FFC domain params conform to FIPS-186-4 explicit domain param + * validity tests. + */ + return ffc_params_FIPS186_4_validate(&dsa->params, FFC_PARAM_TYPE_DSA, NULL, + FFC_PARAMS_VALIDATE_ALL, ret, NULL); +} + +/* + * See SP800-56Ar3 Section 5.6.2.3.1 : FFC Full public key validation. + */ +int dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret) +{ + return ffc_validate_public_key(&dsa->params, pub_key, ret); +} + +/* + * See SP800-56Ar3 Section 5.6.2.3.1 : FFC Partial public key validation. + * To only be used with ephemeral FFC public keys generated using the approved + * safe-prime groups. + */ +int dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, int *ret) +{ + return ffc_validate_public_key_partial(&dsa->params, pub_key, ret); +} + +int dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret) +{ + *ret = 0; + + return (dsa->params.q != NULL + && ffc_validate_private_key(dsa->params.q, priv_key, ret)); +} + +/* + * FFC pairwise check from SP800-56A R3. + * Section 5.6.2.1.4 Owner Assurance of Pair-wise Consistency + */ +int dsa_check_pairwise(const DSA *dsa) +{ + int ret = 0; + BN_CTX *ctx = NULL; + BIGNUM *pub_key = NULL; + + if (dsa->params.p == NULL + || dsa->params.g == NULL + || dsa->priv_key == NULL + || dsa->pub_key == NULL) + return 0; + + ctx = BN_CTX_new_ex(dsa->libctx); + if (ctx == NULL) + goto err; + pub_key = BN_new(); + if (pub_key == NULL) + goto err; + + /* recalculate the public key = (g ^ priv) mod p */ + if (!dsa_generate_public_key(ctx, dsa, dsa->priv_key, pub_key)) + goto err; + /* check it matches the existing pubic_key */ + ret = BN_cmp(pub_key, dsa->pub_key) == 0; +err: + BN_free(pub_key); + BN_CTX_free(ctx); + return ret; +} diff --git a/crypto/dsa/dsa_depr.c b/crypto/dsa/dsa_depr.c index 2b363e26..5c8f9af2 100644 --- a/crypto/dsa/dsa_depr.c +++ b/crypto/dsa/dsa_depr.c @@ -12,6 +12,12 @@ * version(s). */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + /* * Parameter generation follows the updated Appendix 2.2 for FIPS PUB 186, * also Appendix 2.2 of FIPS PUB 186-1 (i.e. use SHA as defined in FIPS PUB diff --git a/crypto/dsa/dsa_gen.c b/crypto/dsa/dsa_gen.c index aa6b84c0..2148a1a4 100644 --- a/crypto/dsa/dsa_gen.c +++ b/crypto/dsa/dsa_gen.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include "internal/cryptlib.h" @@ -17,7 +23,7 @@ #include "crypto/dsa.h" #include "dsa_local.h" -int dsa_generate_ffc_parameters(OPENSSL_CTX *libctx, DSA *dsa, int type, +int dsa_generate_ffc_parameters(DSA *dsa, int type, int pbits, int qbits, int gindex, BN_GENCB *cb) { @@ -31,12 +37,12 @@ int dsa_generate_ffc_parameters(OPENSSL_CTX *libctx, DSA *dsa, int type, dsa->params.gindex = gindex; #ifndef FIPS_MODE if (type == DSA_PARAMGEN_TYPE_FIPS_186_2) - ret = ffc_params_FIPS186_2_generate(libctx, &dsa->params, + ret = ffc_params_FIPS186_2_generate(dsa->libctx, &dsa->params, FFC_PARAM_TYPE_DSA, pbits, qbits, NULL, &res, cb); else #endif - ret = ffc_params_FIPS186_4_generate(libctx, &dsa->params, + ret = ffc_params_FIPS186_4_generate(dsa->libctx, &dsa->params, FFC_PARAM_TYPE_DSA, pbits, qbits, NULL, &res, cb); if (ret > 0) @@ -44,10 +50,10 @@ int dsa_generate_ffc_parameters(OPENSSL_CTX *libctx, DSA *dsa, int type, return ret; } -int dsa_generate_parameters_ctx(OPENSSL_CTX *libctx, DSA *dsa, int bits, - const unsigned char *seed_in, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb) +int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed_in, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb) { #ifndef FIPS_MODE if (dsa->meth->dsa_paramgen) @@ -61,15 +67,13 @@ int dsa_generate_parameters_ctx(OPENSSL_CTX *libctx, DSA *dsa, int bits, #ifndef FIPS_MODE /* The old code used FIPS 186-2 DSA Parameter generation */ if (bits <= 1024 && seed_len == 20) { - if (!dsa_generate_ffc_parameters(libctx, dsa, - DSA_PARAMGEN_TYPE_FIPS_186_2, + if (!dsa_generate_ffc_parameters(dsa, DSA_PARAMGEN_TYPE_FIPS_186_2, bits, 160, -1, cb)) return 0; } else #endif { - if (!dsa_generate_ffc_parameters(libctx, dsa, - DSA_PARAMGEN_TYPE_FIPS_186_4, + if (!dsa_generate_ffc_parameters(dsa, DSA_PARAMGEN_TYPE_FIPS_186_4, bits, -1, -1, cb)) return 0; } @@ -80,13 +84,3 @@ int dsa_generate_parameters_ctx(OPENSSL_CTX *libctx, DSA *dsa, int bits, *h_ret = dsa->params.h; return 1; } - -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed_in, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb) -{ - return dsa_generate_parameters_ctx(NULL, dsa, bits, - seed_in, seed_len, - counter_ret, h_ret, cb); -} diff --git a/crypto/dsa/dsa_key.c b/crypto/dsa/dsa_key.c index e0a3c825..c93ea15b 100644 --- a/crypto/dsa/dsa_key.c +++ b/crypto/dsa/dsa_key.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include "internal/cryptlib.h" @@ -14,31 +20,43 @@ #include "crypto/dsa.h" #include "dsa_local.h" -static int dsa_builtin_keygen(OPENSSL_CTX *libctx, DSA *dsa); +static int dsa_builtin_keygen(DSA *dsa); int DSA_generate_key(DSA *dsa) -{ - if (dsa->meth->dsa_keygen != NULL) - return dsa->meth->dsa_keygen(dsa); - return dsa_builtin_keygen(NULL, dsa); -} - -int dsa_generate_key_ctx(OPENSSL_CTX *libctx, DSA *dsa) { #ifndef FIPS_MODE if (dsa->meth->dsa_keygen != NULL) return dsa->meth->dsa_keygen(dsa); #endif - return dsa_builtin_keygen(libctx, dsa); + return dsa_builtin_keygen(dsa); } -static int dsa_builtin_keygen(OPENSSL_CTX *libctx, DSA *dsa) +int dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, const BIGNUM *priv_key, + BIGNUM *pub_key) +{ + int ret = 0; + BIGNUM *prk = BN_new(); + + if (prk == NULL) + return 0; + BN_with_flags(prk, priv_key, BN_FLG_CONSTTIME); + + /* pub_key = g ^ priv_key mod p */ + if (!BN_mod_exp(pub_key, dsa->params.g, prk, dsa->params.p, ctx)) + goto err; + ret = 1; +err: + BN_clear_free(prk); + return ret; +} + +static int dsa_builtin_keygen(DSA *dsa) { int ok = 0; BN_CTX *ctx = NULL; BIGNUM *pub_key = NULL, *priv_key = NULL; - if ((ctx = BN_CTX_new_ex(libctx)) == NULL) + if ((ctx = BN_CTX_new_ex(dsa->libctx)) == NULL) goto err; if (dsa->priv_key == NULL) { @@ -59,21 +77,8 @@ static int dsa_builtin_keygen(OPENSSL_CTX *libctx, DSA *dsa) pub_key = dsa->pub_key; } - { - BIGNUM *prk = BN_new(); - - if (prk == NULL) - goto err; - BN_with_flags(prk, priv_key, BN_FLG_CONSTTIME); - - /* pub_key = g ^ priv_key mod p */ - if (!BN_mod_exp(pub_key, dsa->params.g, prk, dsa->params.p, ctx)) { - BN_free(prk); - goto err; - } - /* We MUST free prk before any further use of priv_key */ - BN_free(prk); - } + if (!dsa_generate_public_key(ctx, dsa, priv_key, pub_key)) + goto err; dsa->priv_key = priv_key; dsa->pub_key = pub_key; diff --git a/crypto/dsa/dsa_lib.c b/crypto/dsa/dsa_lib.c index 334ee747..4b048d48 100644 --- a/crypto/dsa/dsa_lib.c +++ b/crypto/dsa/dsa_lib.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include "internal/refcount.h" @@ -17,6 +23,8 @@ #include "crypto/dsa.h" #include "crypto/dh.h" /* required by DSA_dup_DH() */ +static DSA *dsa_new_intern(ENGINE *engine, OPENSSL_CTX *libctx); + #ifndef FIPS_MODE int DSA_set_ex_data(DSA *d, int idx, void *arg) @@ -122,29 +130,30 @@ const DSA_METHOD *DSA_get_method(DSA *d) return d->meth; } -static DSA *dsa_new_method(OPENSSL_CTX *libctx, ENGINE *engine) +static DSA *dsa_new_intern(ENGINE *engine, OPENSSL_CTX *libctx) { DSA *ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { - DSAerr(DSA_F_DSA_NEW_METHOD, ERR_R_MALLOC_FAILURE); + DSAerr(0, ERR_R_MALLOC_FAILURE); return NULL; } ret->references = 1; ret->lock = CRYPTO_THREAD_lock_new(); if (ret->lock == NULL) { - DSAerr(DSA_F_DSA_NEW_METHOD, ERR_R_MALLOC_FAILURE); + DSAerr(0, ERR_R_MALLOC_FAILURE); OPENSSL_free(ret); return NULL; } + ret->libctx = libctx; ret->meth = DSA_get_default_method(); #if !defined(FIPS_MODE) && !defined(OPENSSL_NO_ENGINE) ret->flags = ret->meth->flags & ~DSA_FLAG_NON_FIPS_ALLOW; /* early default init */ if (engine) { if (!ENGINE_init(engine)) { - DSAerr(DSA_F_DSA_NEW_METHOD, ERR_R_ENGINE_LIB); + DSAerr(0, ERR_R_ENGINE_LIB); goto err; } ret->engine = engine; @@ -153,7 +162,7 @@ static DSA *dsa_new_method(OPENSSL_CTX *libctx, ENGINE *engine) if (ret->engine) { ret->meth = ENGINE_get_DSA(ret->engine); if (ret->meth == NULL) { - DSAerr(DSA_F_DSA_NEW_METHOD, ERR_R_ENGINE_LIB); + DSAerr(0, ERR_R_ENGINE_LIB); goto err; } } @@ -167,7 +176,7 @@ static DSA *dsa_new_method(OPENSSL_CTX *libctx, ENGINE *engine) #endif if ((ret->meth->init != NULL) && !ret->meth->init(ret)) { - DSAerr(DSA_F_DSA_NEW_METHOD, ERR_R_INIT_FAIL); + DSAerr(0, ERR_R_INIT_FAIL); goto err; } @@ -180,13 +189,20 @@ static DSA *dsa_new_method(OPENSSL_CTX *libctx, ENGINE *engine) DSA *DSA_new_method(ENGINE *engine) { - return dsa_new_method(NULL, engine); + return dsa_new_intern(engine, NULL); } +DSA *dsa_new_with_ctx(OPENSSL_CTX *libctx) +{ + return dsa_new_intern(NULL, libctx); +} + +#ifndef FIPS_MODE DSA *DSA_new(void) { - return DSA_new_method(NULL); + return dsa_new_intern(NULL, NULL); } +#endif void DSA_free(DSA *r) { diff --git a/crypto/dsa/dsa_local.h b/crypto/dsa/dsa_local.h index f01b0aae..f68ae2d0 100644 --- a/crypto/dsa/dsa_local.h +++ b/crypto/dsa/dsa_local.h @@ -32,6 +32,7 @@ struct dsa_st { /* functional reference if 'meth' is ENGINE-provided */ ENGINE *engine; CRYPTO_RWLOCK *lock; + OPENSSL_CTX *libctx; /* Provider data */ size_t dirty_cnt; /* If any key material changes, increment this */ @@ -68,5 +69,4 @@ struct dsa_method { int (*dsa_keygen) (DSA *dsa); }; -DSA_SIG *dsa_do_sign_int(OPENSSL_CTX *libctx, const unsigned char *dgst, - int dlen, DSA *dsa); +DSA_SIG *dsa_do_sign_int(const unsigned char *dgst, int dlen, DSA *dsa); diff --git a/crypto/dsa/dsa_meth.c b/crypto/dsa/dsa_meth.c index 226ea340..0a46002b 100644 --- a/crypto/dsa/dsa_meth.c +++ b/crypto/dsa/dsa_meth.c @@ -19,6 +19,7 @@ #include #include +#ifndef OPENSSL_NO_DEPRECATED_3_0 DSA_METHOD *DSA_meth_new(const char *name, int flags) { DSA_METHOD *dsam = OPENSSL_zalloc(sizeof(*dsam)); @@ -222,3 +223,4 @@ int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)) dsam->dsa_keygen = keygen; return 1; } +#endif diff --git a/crypto/dsa/dsa_ossl.c b/crypto/dsa/dsa_ossl.c index 91cb8339..a87493a0 100644 --- a/crypto/dsa/dsa_ossl.c +++ b/crypto/dsa/dsa_ossl.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include "crypto/bn.h" @@ -61,8 +67,7 @@ const DSA_METHOD *DSA_OpenSSL(void) return &openssl_dsa_meth; } -DSA_SIG *dsa_do_sign_int(OPENSSL_CTX *libctx, const unsigned char *dgst, - int dlen, DSA *dsa) +DSA_SIG *dsa_do_sign_int(const unsigned char *dgst, int dlen, DSA *dsa) { BIGNUM *kinv = NULL; BIGNUM *m, *blind, *blindm, *tmp; @@ -90,7 +95,7 @@ DSA_SIG *dsa_do_sign_int(OPENSSL_CTX *libctx, const unsigned char *dgst, if (ret->r == NULL || ret->s == NULL) goto err; - ctx = BN_CTX_new_ex(libctx); + ctx = BN_CTX_new_ex(dsa->libctx); if (ctx == NULL) goto err; m = BN_CTX_get(ctx); @@ -180,7 +185,7 @@ DSA_SIG *dsa_do_sign_int(OPENSSL_CTX *libctx, const unsigned char *dgst, static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) { - return dsa_do_sign_int(NULL, dgst, dlen, dsa); + return dsa_do_sign_int(dgst, dlen, dsa); } static int dsa_sign_setup_no_digest(DSA *dsa, BN_CTX *ctx_in, diff --git a/crypto/dsa/dsa_pmeth.c b/crypto/dsa/dsa_pmeth.c index 0ab5372b..008a607b 100644 --- a/crypto/dsa/dsa_pmeth.c +++ b/crypto/dsa/dsa_pmeth.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include diff --git a/crypto/dsa/dsa_prn.c b/crypto/dsa/dsa_prn.c index 4bc4b0d1..65edf63d 100644 --- a/crypto/dsa/dsa_prn.c +++ b/crypto/dsa/dsa_prn.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include diff --git a/crypto/dsa/dsa_sign.c b/crypto/dsa/dsa_sign.c index d3e8cfa1..9ef8f30f 100644 --- a/crypto/dsa/dsa_sign.c +++ b/crypto/dsa/dsa_sign.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include "dsa_local.h" @@ -142,16 +148,16 @@ int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s) return 1; } -int dsa_sign_int(OPENSSL_CTX *libctx, int type, const unsigned char *dgst, +int dsa_sign_int(int type, const unsigned char *dgst, int dlen, unsigned char *sig, unsigned int *siglen, DSA *dsa) { DSA_SIG *s; /* legacy case uses the method table */ - if (libctx == NULL || dsa->meth != DSA_get_default_method()) + if (dsa->libctx == NULL || dsa->meth != DSA_get_default_method()) s = DSA_do_sign(dgst, dlen, dsa); else - s = dsa_do_sign_int(libctx, dgst, dlen, dsa); + s = dsa_do_sign_int(dgst, dlen, dsa); if (s == NULL) { *siglen = 0; return 0; @@ -164,7 +170,7 @@ int dsa_sign_int(OPENSSL_CTX *libctx, int type, const unsigned char *dgst, int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig, unsigned int *siglen, DSA *dsa) { - return dsa_sign_int(NULL, type, dgst, dlen, sig, siglen, dsa); + return dsa_sign_int(type, dgst, dlen, sig, siglen, dsa); } /* data has already been hashed (probably with SHA or SHA-1). */ diff --git a/crypto/dsa/dsa_vrf.c b/crypto/dsa/dsa_vrf.c index cf4412b5..329c07ad 100644 --- a/crypto/dsa/dsa_vrf.c +++ b/crypto/dsa/dsa_vrf.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include "internal/cryptlib.h" #include "dsa_local.h" diff --git a/crypto/ec/asm/ecp_nistz256-armv4.pl b/crypto/ec/asm/ecp_nistz256-armv4.pl index 8813c97a..c4cc4981 100755 --- a/crypto/ec/asm/ecp_nistz256-armv4.pl +++ b/crypto/ec/asm/ecp_nistz256-armv4.pl @@ -1853,4 +1853,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/ec/asm/ecp_nistz256-armv8.pl b/crypto/ec/asm/ecp_nistz256-armv8.pl index 794f7631..30da9000 100644 --- a/crypto/ec/asm/ecp_nistz256-armv8.pl +++ b/crypto/ec/asm/ecp_nistz256-armv8.pl @@ -1874,4 +1874,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/ec/asm/ecp_nistz256-avx2.pl b/crypto/ec/asm/ecp_nistz256-avx2.pl index 8c04b0e9..cf14869f 100755 --- a/crypto/ec/asm/ecp_nistz256-avx2.pl +++ b/crypto/ec/asm/ecp_nistz256-avx2.pl @@ -2079,4 +2079,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/ec/asm/ecp_nistz256-ppc64.pl b/crypto/ec/asm/ecp_nistz256-ppc64.pl index b7ca4e97..9934f680 100755 --- a/crypto/ec/asm/ecp_nistz256-ppc64.pl +++ b/crypto/ec/asm/ecp_nistz256-ppc64.pl @@ -2382,4 +2382,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/ec/asm/ecp_nistz256-sparcv9.pl b/crypto/ec/asm/ecp_nistz256-sparcv9.pl index 29194089..70afa8fc 100755 --- a/crypto/ec/asm/ecp_nistz256-sparcv9.pl +++ b/crypto/ec/asm/ecp_nistz256-sparcv9.pl @@ -3056,4 +3056,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/ec/asm/ecp_nistz256-x86.pl b/crypto/ec/asm/ecp_nistz256-x86.pl index edc1d5a3..7320fc1a 100755 --- a/crypto/ec/asm/ecp_nistz256-x86.pl +++ b/crypto/ec/asm/ecp_nistz256-x86.pl @@ -1858,4 +1858,4 @@ for ($i=0;$i<7;$i++) { &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/ec/asm/ecp_nistz256-x86_64.pl b/crypto/ec/asm/ecp_nistz256-x86_64.pl index 33485c61..c0914d90 100755 --- a/crypto/ec/asm/ecp_nistz256-x86_64.pl +++ b/crypto/ec/asm/ecp_nistz256-x86_64.pl @@ -4738,4 +4738,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/ec/asm/x25519-ppc64.pl b/crypto/ec/asm/x25519-ppc64.pl index 9a48d2ad..f43059c8 100755 --- a/crypto/ec/asm/x25519-ppc64.pl +++ b/crypto/ec/asm/x25519-ppc64.pl @@ -824,4 +824,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/ec/asm/x25519-x86_64.pl b/crypto/ec/asm/x25519-x86_64.pl index 1a42728d..8cd5645e 100755 --- a/crypto/ec/asm/x25519-x86_64.pl +++ b/crypto/ec/asm/x25519-x86_64.pl @@ -1130,4 +1130,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/ec/build.info b/crypto/ec/build.info index ba16e088..a8828c51 100644 --- a/crypto/ec/build.info +++ b/crypto/ec/build.info @@ -54,8 +54,8 @@ $COMMON=ec_lib.c ecp_smpl.c ecp_mont.c ecp_nist.c ec_cvt.c ec_mult.c \ curve448/arch_32/f_impl.c curve448/f_generic.c curve448/scalar.c \ curve448/curve448_tables.c curve448/eddsa.c curve448/curve448.c \ $ECASM -SOURCE[../../libcrypto]=$COMMON ec_ameth.c ec_pmeth.c ecx_meth.c ec_err.c \ - ecdh_kdf.c eck_prn.c +SOURCE[../../libcrypto]=$COMMON ec_ameth.c ec_pmeth.c ecx_meth.c ecx_key.c \ + ec_err.c ecdh_kdf.c eck_prn.c SOURCE[../../providers/libfips.a]=$COMMON # Implementations are now spread across several libraries, so the defines diff --git a/crypto/ec/curve25519.c b/crypto/ec/curve25519.c index 6672f5d2..024f7fe1 100644 --- a/crypto/ec/curve25519.c +++ b/crypto/ec/curve25519.c @@ -14,6 +14,7 @@ #include "internal/deprecated.h" #include +#include "crypto/ecx.h" #include "ec_local.h" #include #include diff --git a/crypto/ec/curve448/curve448.c b/crypto/ec/curve448/curve448.c index e3dffd09..ecc98d88 100644 --- a/crypto/ec/curve448/curve448.c +++ b/crypto/ec/curve448/curve448.c @@ -15,6 +15,7 @@ #include "point_448.h" #include "ed448.h" +#include "crypto/ecx.h" #include "curve448_local.h" #define COFACTOR 4 diff --git a/crypto/ec/curve448/curve448_local.h b/crypto/ec/curve448/curve448_local.h index 197627f6..36f960ec 100644 --- a/crypto/ec/curve448/curve448_local.h +++ b/crypto/ec/curve448/curve448_local.h @@ -10,12 +10,6 @@ # define OSSL_CRYPTO_EC_CURVE448_LOCAL_H # include "curve448utils.h" -int X448(uint8_t out_shared_key[56], const uint8_t private_key[56], - const uint8_t peer_public_value[56]); - -void X448_public_from_private(uint8_t out_public_value[56], - const uint8_t private_key[56]); - int ED448_sign(OPENSSL_CTX *ctx, uint8_t *out_sig, const uint8_t *message, size_t message_len, const uint8_t public_key[57], const uint8_t private_key[57], const uint8_t *context, diff --git a/crypto/ec/ec_local.h b/crypto/ec/ec_local.h index a523ab64..c0eacc9c 100644 --- a/crypto/ec/ec_local.h +++ b/crypto/ec/ec_local.h @@ -683,11 +683,6 @@ int ED25519_verify(const uint8_t *message, size_t message_len, void ED25519_public_from_private(uint8_t out_public_key[32], const uint8_t private_key[32]); -int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32], - const uint8_t peer_public_value[32]); -void X25519_public_from_private(uint8_t out_public_value[32], - const uint8_t private_key[32]); - /*- * This functions computes a single point multiplication over the EC group, * using, at a high level, a Montgomery ladder with conditional swaps, with diff --git a/crypto/ec/ecx_key.c b/crypto/ec/ecx_key.c new file mode 100644 index 00000000..59643cc6 --- /dev/null +++ b/crypto/ec/ecx_key.c @@ -0,0 +1,69 @@ +/* + * Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include "crypto/ecx.h" + +ECX_KEY *ecx_key_new(size_t keylen, int haspubkey) +{ + ECX_KEY *ret = OPENSSL_zalloc(sizeof(*ret)); + + if (ret == NULL) + return NULL; + + ret->haspubkey = haspubkey; + ret->keylen = keylen; + ret->references = 1; + + ret->lock = CRYPTO_THREAD_lock_new(); + if (ret->lock == NULL) { + ERR_raise(ERR_LIB_EC, ERR_R_MALLOC_FAILURE); + OPENSSL_free(ret); + return NULL; + } + + return ret; +} + +void ecx_key_free(ECX_KEY *key) +{ + int i; + + if (key == NULL) + return; + + CRYPTO_DOWN_REF(&key->references, &i, key->lock); + REF_PRINT_COUNT("ECX_KEY", r); + if (i > 0) + return; + REF_ASSERT_ISNT(i < 0); + + OPENSSL_secure_clear_free(key->privkey, key->keylen); + CRYPTO_THREAD_lock_free(key->lock); + OPENSSL_free(key); +} + +int ecx_key_up_ref(ECX_KEY *key) +{ + int i; + + if (CRYPTO_UP_REF(&key->references, &i, key->lock) <= 0) + return 0; + + REF_PRINT_COUNT("ECX_KEY", key); + REF_ASSERT_ISNT(i < 2); + return ((i > 1) ? 1 : 0); +} + +unsigned char *ecx_key_allocate_privkey(ECX_KEY *key) +{ + key->privkey = OPENSSL_secure_zalloc(key->keylen); + + return key->privkey; +} diff --git a/crypto/ec/ecx_meth.c b/crypto/ec/ecx_meth.c index 525fcd34..32817562 100644 --- a/crypto/ec/ecx_meth.c +++ b/crypto/ec/ecx_meth.c @@ -18,22 +18,14 @@ #include #include #include +#include +#include "internal/param_build.h" #include "crypto/asn1.h" #include "crypto/evp.h" +#include "crypto/ecx.h" #include "ec_local.h" #include "curve448/curve448_local.h" -#define X25519_BITS 253 -#define X25519_SECURITY_BITS 128 - -#define ED25519_SIGSIZE 64 - -#define X448_BITS 448 -#define ED448_BITS 456 -#define X448_SECURITY_BITS 224 - -#define ED448_SIGSIZE 114 - #define ISX448(id) ((id) == EVP_PKEY_X448) #define IS25519(id) ((id) == EVP_PKEY_X25519 || (id) == EVP_PKEY_ED25519) #define KEYLENID(id) (IS25519(id) ? X25519_KEYLEN \ @@ -73,7 +65,7 @@ static int ecx_key_op(EVP_PKEY *pkey, int id, const X509_ALGOR *palg, } } - key = OPENSSL_zalloc(sizeof(*key)); + key = ecx_key_new(KEYLENID(id), 1); if (key == NULL) { ECerr(EC_F_ECX_KEY_OP, ERR_R_MALLOC_FAILURE); return 0; @@ -83,17 +75,14 @@ static int ecx_key_op(EVP_PKEY *pkey, int id, const X509_ALGOR *palg, if (op == KEY_OP_PUBLIC) { memcpy(pubkey, p, plen); } else { - privkey = key->privkey = OPENSSL_secure_malloc(KEYLENID(id)); + privkey = ecx_key_allocate_privkey(key); if (privkey == NULL) { ECerr(EC_F_ECX_KEY_OP, ERR_R_MALLOC_FAILURE); goto err; } if (op == KEY_OP_KEYGEN) { - if (RAND_priv_bytes(privkey, KEYLENID(id)) <= 0) { - OPENSSL_secure_free(privkey); - key->privkey = NULL; + if (RAND_priv_bytes(privkey, KEYLENID(id)) <= 0) goto err; - } if (id == EVP_PKEY_X25519) { privkey[0] &= 248; privkey[X25519_KEYLEN - 1] &= 127; @@ -128,7 +117,7 @@ static int ecx_key_op(EVP_PKEY *pkey, int id, const X509_ALGOR *palg, EVP_PKEY_assign(pkey, id, key); return 1; err: - OPENSSL_free(key); + ecx_key_free(key); return 0; } @@ -264,9 +253,7 @@ static int ecx_security_bits(const EVP_PKEY *pkey) static void ecx_free(EVP_PKEY *pkey) { - if (pkey->pkey.ecx != NULL) - OPENSSL_secure_clear_free(pkey->pkey.ecx->privkey, KEYLEN(pkey)); - OPENSSL_free(pkey->pkey.ecx); + ecx_key_free(pkey->pkey.ecx); } /* "parameters" are always equal */ @@ -416,6 +403,48 @@ static int ecx_get_pub_key(const EVP_PKEY *pkey, unsigned char *pub, return 1; } +static size_t ecx_pkey_dirty_cnt(const EVP_PKEY *pkey) +{ + /* + * We provide no mechanism to "update" an ECX key once it has been set, + * therefore we do not have to maintain a dirty count. + */ + return 1; +} + +static int ecx_pkey_export_to(const EVP_PKEY *from, void *to_keydata, + EVP_KEYMGMT *to_keymgmt) +{ + const ECX_KEY *key = from->pkey.ecx; + OSSL_PARAM_BLD tmpl; + OSSL_PARAM *params = NULL; + int rv = 0; + + ossl_param_bld_init(&tmpl); + + /* A key must at least have a public part */ + if (!ossl_param_bld_push_octet_string(&tmpl, OSSL_PKEY_PARAM_PUB_KEY, + key->pubkey, key->keylen)) + goto err; + + if (key->privkey != NULL) { + if (!ossl_param_bld_push_octet_string(&tmpl, + OSSL_PKEY_PARAM_PRIV_KEY, + key->privkey, key->keylen)) + goto err; + } + + params = ossl_param_bld_to_param(&tmpl); + + /* We export, the provider imports */ + rv = evp_keymgmt_import(to_keymgmt, to_keydata, OSSL_KEYMGMT_SELECT_ALL, + params); + + err: + ossl_param_bld_free(params); + return rv; +} + const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth = { EVP_PKEY_X25519, EVP_PKEY_X25519, @@ -457,6 +486,8 @@ const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth = { ecx_set_pub_key, ecx_get_priv_key, ecx_get_pub_key, + ecx_pkey_dirty_cnt, + ecx_pkey_export_to }; const EVP_PKEY_ASN1_METHOD ecx448_asn1_meth = { @@ -500,6 +531,8 @@ const EVP_PKEY_ASN1_METHOD ecx448_asn1_meth = { ecx_set_pub_key, ecx_get_priv_key, ecx_get_pub_key, + ecx_pkey_dirty_cnt, + ecx_pkey_export_to }; static int ecd_size25519(const EVP_PKEY *pkey) @@ -918,9 +951,9 @@ static void s390x_x448_mod_p(unsigned char u[56]) u, u_red, sizeof(u_red)); } -static int s390x_x25519_mul(unsigned char u_dst[32], - const unsigned char u_src[32], - const unsigned char d_src[32]) +int s390x_x25519_mul(unsigned char u_dst[32], + const unsigned char u_src[32], + const unsigned char d_src[32]) { union { struct { @@ -951,9 +984,9 @@ static int s390x_x25519_mul(unsigned char u_dst[32], return rc; } -static int s390x_x448_mul(unsigned char u_dst[56], - const unsigned char u_src[56], - const unsigned char d_src[56]) +int s390x_x448_mul(unsigned char u_dst[56], + const unsigned char u_src[56], + const unsigned char d_src[56]) { union { struct { @@ -1067,10 +1100,9 @@ static int s390x_pkey_ecx_keygen25519(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - ECX_KEY *key; + ECX_KEY *key = ecx_key_new(X25519_KEYLEN, 1); unsigned char *privkey = NULL, *pubkey; - key = OPENSSL_zalloc(sizeof(*key)); if (key == NULL) { ECerr(EC_F_S390X_PKEY_ECX_KEYGEN25519, ERR_R_MALLOC_FAILURE); goto err; @@ -1078,7 +1110,7 @@ static int s390x_pkey_ecx_keygen25519(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) pubkey = key->pubkey; - privkey = key->privkey = OPENSSL_secure_malloc(X25519_KEYLEN); + privkey = ecx_key_allocate_privkey(key); if (privkey == NULL) { ECerr(EC_F_S390X_PKEY_ECX_KEYGEN25519, ERR_R_MALLOC_FAILURE); goto err; @@ -1097,9 +1129,7 @@ static int s390x_pkey_ecx_keygen25519(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, key); return 1; err: - OPENSSL_secure_clear_free(privkey, X25519_KEYLEN); - key->privkey = NULL; - OPENSSL_free(key); + ecx_key_free(key); return 0; } @@ -1112,10 +1142,9 @@ static int s390x_pkey_ecx_keygen448(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - ECX_KEY *key; + ECX_KEY *key = ecx_key_new(X448_KEYLEN, 1); unsigned char *privkey = NULL, *pubkey; - key = OPENSSL_zalloc(sizeof(*key)); if (key == NULL) { ECerr(EC_F_S390X_PKEY_ECX_KEYGEN448, ERR_R_MALLOC_FAILURE); goto err; @@ -1123,7 +1152,7 @@ static int s390x_pkey_ecx_keygen448(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) pubkey = key->pubkey; - privkey = key->privkey = OPENSSL_secure_malloc(X448_KEYLEN); + privkey = ecx_key_allocate_privkey(key); if (privkey == NULL) { ECerr(EC_F_S390X_PKEY_ECX_KEYGEN448, ERR_R_MALLOC_FAILURE); goto err; @@ -1141,9 +1170,7 @@ static int s390x_pkey_ecx_keygen448(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, key); return 1; err: - OPENSSL_secure_clear_free(privkey, X448_KEYLEN); - key->privkey = NULL; - OPENSSL_free(key); + ecx_key_free(key); return 0; } @@ -1160,11 +1187,10 @@ static int s390x_pkey_ecd_keygen25519(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, }; unsigned char x_dst[32], buff[SHA512_DIGEST_LENGTH]; - ECX_KEY *key; + ECX_KEY *key = ecx_key_new(ED25519_KEYLEN, 1); unsigned char *privkey = NULL, *pubkey; unsigned int sz; - key = OPENSSL_zalloc(sizeof(*key)); if (key == NULL) { ECerr(EC_F_S390X_PKEY_ECD_KEYGEN25519, ERR_R_MALLOC_FAILURE); goto err; @@ -1172,7 +1198,7 @@ static int s390x_pkey_ecd_keygen25519(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) pubkey = key->pubkey; - privkey = key->privkey = OPENSSL_secure_malloc(ED25519_KEYLEN); + privkey = ecx_key_allocate_privkey(key); if (privkey == NULL) { ECerr(EC_F_S390X_PKEY_ECD_KEYGEN25519, ERR_R_MALLOC_FAILURE); goto err; @@ -1197,9 +1223,7 @@ static int s390x_pkey_ecd_keygen25519(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, key); return 1; err: - OPENSSL_secure_clear_free(privkey, ED25519_KEYLEN); - key->privkey = NULL; - OPENSSL_free(key); + ecx_key_free(key); return 0; } @@ -1220,11 +1244,10 @@ static int s390x_pkey_ecd_keygen448(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) 0x24, 0xbc, 0xb6, 0x6e, 0x71, 0x46, 0x3f, 0x69, 0x00 }; unsigned char x_dst[57], buff[114]; - ECX_KEY *key; + ECX_KEY *key = ecx_key_new(ED448_KEYLEN, 1); unsigned char *privkey = NULL, *pubkey; EVP_MD_CTX *hashctx = NULL; - key = OPENSSL_zalloc(sizeof(*key)); if (key == NULL) { ECerr(EC_F_S390X_PKEY_ECD_KEYGEN448, ERR_R_MALLOC_FAILURE); goto err; @@ -1232,7 +1255,7 @@ static int s390x_pkey_ecd_keygen448(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) pubkey = key->pubkey; - privkey = key->privkey = OPENSSL_secure_malloc(ED448_KEYLEN); + privkey = ecx_key_allocate_privkey(key); if (privkey == NULL) { ECerr(EC_F_S390X_PKEY_ECD_KEYGEN448, ERR_R_MALLOC_FAILURE); goto err; @@ -1265,9 +1288,7 @@ static int s390x_pkey_ecd_keygen448(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) EVP_MD_CTX_free(hashctx); return 1; err: - OPENSSL_secure_clear_free(privkey, ED448_KEYLEN); - key->privkey = NULL; - OPENSSL_free(key); + ecx_key_free(key); EVP_MD_CTX_free(hashctx); return 0; } diff --git a/crypto/err/err_prn.c b/crypto/err/err_prn.c index e0184b07..9a588982 100644 --- a/crypto/err/err_prn.c +++ b/crypto/err/err_prn.c @@ -17,12 +17,13 @@ #include #include "err_local.h" +#define ERR_PRINT_BUF_SIZE 4096 void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), void *u) { CRYPTO_THREAD_ID tid = CRYPTO_THREAD_get_current_id(); unsigned long l; - char buf[4096], *hex; + char buf[ERR_PRINT_BUF_SIZE], *hex; const char *lib, *reason; const char *file, *data, *func; int line, flags; @@ -44,6 +45,123 @@ void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), } } +/* auxiliary function for incrementally reporting texts via the error queue */ +static void put_error(int lib, const char *func, int reason, + const char *file, int line) +{ + ERR_new(); + ERR_set_debug(file, line, func); + ERR_set_error(lib, reason, NULL /* no data here, so fmt is NULL */); +} + +#define TYPICAL_MAX_OUTPUT_BEFORE_DATA 100 +#define MAX_DATA_LEN (ERR_PRINT_BUF_SIZE - TYPICAL_MAX_OUTPUT_BEFORE_DATA) +void ERR_add_error_txt(const char *separator, const char *txt) +{ + const char *file = NULL; + int line; + const char *func = NULL; + const char *data = NULL; + int flags; + unsigned long err = ERR_peek_last_error(); + + if (separator == NULL) + separator = ""; + if (err == 0) + put_error(ERR_LIB_CMP, NULL, 0, "", 0); + + do { + size_t available_len, data_len; + const char *curr = txt, *next = txt; + const char *leading_separator = separator; + int trailing_separator = 0; + char *tmp; + + ERR_peek_last_error_all(&file, &line, &func, &data, &flags); + if ((flags & ERR_TXT_STRING) == 0) { + data = ""; + leading_separator = ""; + } + data_len = strlen(data); + + /* workaround for limit of ERR_print_errors_cb() */ + if (data_len >= MAX_DATA_LEN + || strlen(separator) >= (size_t)(MAX_DATA_LEN - data_len)) + available_len = 0; + else + available_len = MAX_DATA_LEN - data_len - strlen(separator) - 1; + /* MAX_DATA_LEN > available_len >= 0 */ + + if (*separator == '\0') { + const size_t len_next = strlen(next); + + if (len_next <= available_len) { + next += len_next; + curr = NULL; /* no need to split */ + } else { + next += available_len; + curr = next; /* will split at this point */ + } + } else { + while (*next != '\0' && (size_t)(next - txt) <= available_len) { + curr = next; + next = strstr(curr, separator); + if (next != NULL) { + next += strlen(separator); + trailing_separator = *next == '\0'; + } else { + next = curr + strlen(curr); + } + } + if ((size_t)(next - txt) <= available_len) + curr = NULL; /* the above loop implies *next == '\0' */ + } + if (curr != NULL) { + /* split error msg at curr since error data would get too long */ + if (curr != txt) { + tmp = OPENSSL_strndup(txt, curr - txt); + if (tmp == NULL) + return; + ERR_add_error_data(2, separator, tmp); + OPENSSL_free(tmp); + } + put_error(ERR_LIB_CMP, func, err, file, line); + txt = curr; + } else { + if (trailing_separator) { + tmp = OPENSSL_strndup(txt, next - strlen(separator) - txt); + if (tmp == NULL) + return; + /* output txt without the trailing separator */ + ERR_add_error_data(2, leading_separator, tmp); + OPENSSL_free(tmp); + } else { + ERR_add_error_data(2, leading_separator, txt); + } + txt = next; /* finished */ + } + } while (*txt != '\0'); +} + +void ERR_add_error_mem_bio(const char *separator, BIO *bio) +{ + if (bio != NULL) { + char *str; + long len = BIO_get_mem_data(bio, &str); + + if (len > 0) { + if (str[len - 1] != '\0') { + if (BIO_write(bio, "", 1) <= 0) + return; + + len = BIO_get_mem_data(bio, &str); + } + if (len > 1) + ERR_add_error_txt(separator, str); + } + } +} + static int print_bio(const char *str, size_t len, void *bp) { return BIO_write((BIO *)bp, str, len); diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt index e17a7476..88ae74c7 100644 --- a/crypto/err/openssl.txt +++ b/crypto/err/openssl.txt @@ -2067,6 +2067,7 @@ 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 +CMP_R_ALGORITHM_NOT_SUPPORTED:139:algorithm not supported CMP_R_BAD_REQUEST_ID:108:bad request id CMP_R_CERTID_NOT_FOUND:109:certid not found CMP_R_CERTIFICATE_NOT_FOUND:112:certificate not found @@ -2087,24 +2088,41 @@ CMP_R_ERROR_CREATING_RR:126:error creating rr CMP_R_ERROR_PARSING_PKISTATUS:107:error parsing pkistatus CMP_R_ERROR_PROTECTING_MESSAGE:127:error protecting message CMP_R_ERROR_SETTING_CERTHASH:128:error setting certhash +CMP_R_ERROR_VALIDATING_PROTECTION:140:error validating protection +CMP_R_FAILED_EXTRACTING_PUBKEY:141:failed extracting pubkey CMP_R_FAILURE_OBTAINING_RANDOM:110:failure obtaining random CMP_R_FAIL_INFO_OUT_OF_RANGE:129:fail info out of range CMP_R_INVALID_ARGS:100:invalid args CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION:130:\ missing key input for creating protection +CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE:142:missing key usage digitalsignature CMP_R_MISSING_PRIVATE_KEY:131:missing private key +CMP_R_MISSING_PROTECTION:143:missing protection CMP_R_MISSING_SENDER_IDENTIFICATION:111:missing sender identification +CMP_R_MISSING_TRUST_STORE:144:missing trust store CMP_R_MULTIPLE_SAN_SOURCES:102:multiple san sources CMP_R_NO_STDIO:194:no stdio +CMP_R_NO_SUITABLE_SENDER_CERT:145:no suitable sender cert CMP_R_NULL_ARGUMENT:103:null argument +CMP_R_PKIBODY_ERROR:146:pkibody error CMP_R_PKISTATUSINFO_NOT_FOUND:132:pkistatusinfo not found -CMP_R_POTENTIALLY_INVALID_CERTIFICATE:139:potentially invalid certificate +CMP_R_POTENTIALLY_INVALID_CERTIFICATE:147:potentially invalid certificate +CMP_R_RECIPNONCE_UNMATCHED:148:recipnonce unmatched +CMP_R_REQUEST_NOT_ACCEPTED:149:request not accepted +CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED:150:\ + sender generalname type not supported +CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG:151:srvcert does not validate msg +CMP_R_TRANSACTIONID_UNMATCHED:152:transactionid unmatched CMP_R_UNEXPECTED_PKIBODY:133:unexpected pkibody +CMP_R_UNEXPECTED_PVNO:153:unexpected pvno CMP_R_UNKNOWN_ALGORITHM_ID:134:unknown algorithm id CMP_R_UNKNOWN_CERT_TYPE:135:unknown cert type CMP_R_UNSUPPORTED_ALGORITHM:136:unsupported algorithm CMP_R_UNSUPPORTED_KEY_TYPE:137:unsupported key type +CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC:154:\ + unsupported protection alg dhbasedmac CMP_R_WRONG_ALGORITHM_OID:138:wrong algorithm oid +CMP_R_WRONG_PBM_VALUE:155:wrong pbm value 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 @@ -2741,6 +2759,7 @@ PROV_R_BAD_TLS_CLIENT_VERSION:161:bad tls client version PROV_R_BN_ERROR:160:bn error 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_DURING_DERIVATION:164:failed during derivation PROV_R_FAILED_TO_DECRYPT:162:failed to decrypt PROV_R_FAILED_TO_GENERATE_KEY:121:failed to generate key PROV_R_FAILED_TO_GET_PARAMETER:103:failed to get parameter @@ -3362,6 +3381,7 @@ 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_CERTIFICATE_VERIFICATION_FAILED:139:certificate verification failed 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 diff --git a/crypto/err/openssl.txt.old b/crypto/err/openssl.txt.old index a663bd28..e6a45ac0 100644 --- a/crypto/err/openssl.txt.old +++ b/crypto/err/openssl.txt.old @@ -1822,13 +1822,13 @@ 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_CACHE_OBJECTS:163:cache_objects 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_CACHE_OBJECTS:163:cache_objects 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 @@ -2067,6 +2067,7 @@ 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 +CMP_R_ALGORITHM_NOT_SUPPORTED:139:algorithm not supported CMP_R_BAD_REQUEST_ID:108:bad request id CMP_R_CERTID_NOT_FOUND:109:certid not found CMP_R_CERTIFICATE_NOT_FOUND:112:certificate not found @@ -2087,24 +2088,41 @@ CMP_R_ERROR_CREATING_RR:126:error creating rr CMP_R_ERROR_PARSING_PKISTATUS:107:error parsing pkistatus CMP_R_ERROR_PROTECTING_MESSAGE:127:error protecting message CMP_R_ERROR_SETTING_CERTHASH:128:error setting certhash +CMP_R_ERROR_VALIDATING_PROTECTION:140:error validating protection +CMP_R_FAILED_EXTRACTING_PUBKEY:141:failed extracting pubkey CMP_R_FAILURE_OBTAINING_RANDOM:110:failure obtaining random CMP_R_FAIL_INFO_OUT_OF_RANGE:129:fail info out of range CMP_R_INVALID_ARGS:100:invalid args CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION:130:\ missing key input for creating protection +CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE:142:missing key usage digitalsignature CMP_R_MISSING_PRIVATE_KEY:131:missing private key +CMP_R_MISSING_PROTECTION:143:missing protection CMP_R_MISSING_SENDER_IDENTIFICATION:111:missing sender identification +CMP_R_MISSING_TRUST_STORE:144:missing trust store CMP_R_MULTIPLE_SAN_SOURCES:102:multiple san sources CMP_R_NO_STDIO:194:no stdio +CMP_R_NO_SUITABLE_SENDER_CERT:145:no suitable sender cert CMP_R_NULL_ARGUMENT:103:null argument +CMP_R_PKIBODY_ERROR:146:pkibody error CMP_R_PKISTATUSINFO_NOT_FOUND:132:pkistatusinfo not found -CMP_R_POTENTIALLY_INVALID_CERTIFICATE:139:potentially invalid certificate +CMP_R_POTENTIALLY_INVALID_CERTIFICATE:147:potentially invalid certificate +CMP_R_RECIPNONCE_UNMATCHED:148:recipnonce unmatched +CMP_R_REQUEST_NOT_ACCEPTED:149:request not accepted +CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED:150:\ + sender generalname type not supported +CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG:151:srvcert does not validate msg +CMP_R_TRANSACTIONID_UNMATCHED:152:transactionid unmatched CMP_R_UNEXPECTED_PKIBODY:133:unexpected pkibody +CMP_R_UNEXPECTED_PVNO:153:unexpected pvno CMP_R_UNKNOWN_ALGORITHM_ID:134:unknown algorithm id CMP_R_UNKNOWN_CERT_TYPE:135:unknown cert type CMP_R_UNSUPPORTED_ALGORITHM:136:unsupported algorithm CMP_R_UNSUPPORTED_KEY_TYPE:137:unsupported key type +CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC:154:\ + unsupported protection alg dhbasedmac CMP_R_WRONG_ALGORITHM_OID:138:wrong algorithm oid +CMP_R_WRONG_PBM_VALUE:155:wrong pbm value 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 @@ -2741,6 +2759,7 @@ PROV_R_BAD_TLS_CLIENT_VERSION:161:bad tls client version PROV_R_BN_ERROR:160:bn error 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_DURING_DERIVATION:164:failed during derivation PROV_R_FAILED_TO_DECRYPT:162:failed to decrypt PROV_R_FAILED_TO_GENERATE_KEY:121:failed to generate key PROV_R_FAILED_TO_GET_PARAMETER:103:failed to get parameter @@ -3359,6 +3378,7 @@ 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_CERTIFICATE_VERIFICATION_FAILED:139:certificate verification failed 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 diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c index 76b4df1d..98e07043 100644 --- a/crypto/evp/p_lib.c +++ b/crypto/evp/p_lib.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include "internal/refcount.h" diff --git a/crypto/ffc/build.info b/crypto/ffc/build.info index d3314c30..c8bc7e90 100644 --- a/crypto/ffc/build.info +++ b/crypto/ffc/build.info @@ -1,6 +1,7 @@ LIBS=../../libcrypto -$COMMON=ffc_params.c ffc_params_generate.c ffc_key_generate.c +$COMMON=ffc_params.c ffc_params_generate.c ffc_key_generate.c\ + ffc_params_validate.c ffc_key_validate.c SOURCE[../../libcrypto]=$COMMON SOURCE[../../providers/libfips.a]=$COMMON diff --git a/crypto/ffc/ffc_key_generate.c b/crypto/ffc/ffc_key_generate.c index 186245cc..b8c85480 100644 --- a/crypto/ffc/ffc_key_generate.c +++ b/crypto/ffc/ffc_key_generate.c @@ -23,6 +23,19 @@ int ffc_generate_private_key(BN_CTX *ctx, const FFC_PARAMS *params, int N, int s, BIGNUM *priv) { #ifdef FIPS_MODE + return ffc_generate_private_key_fips(ctx, params, N, s, priv); +#else + do { + if (!BN_priv_rand_range_ex(priv, params->q, ctx)) + return 0; + } while (BN_is_zero(priv) || BN_is_one(priv)); + return 1; +#endif /* FIPS_MODE */ +} + +int ffc_generate_private_key_fips(BN_CTX *ctx, const FFC_PARAMS *params, + int N, int s, BIGNUM *priv) +{ int ret = 0; BIGNUM *m, *two_powN = NULL; @@ -51,11 +64,4 @@ int ffc_generate_private_key(BN_CTX *ctx, const FFC_PARAMS *params, err: BN_free(two_powN); return ret; -#else - do { - if (!BN_priv_rand_range_ex(priv, params->q, ctx)) - return 0; - } while (BN_is_zero(priv) || BN_is_one(priv)); - return 1; -#endif /* FIPS_MODE */ } diff --git a/crypto/ffc/ffc_key_validate.c b/crypto/ffc/ffc_key_validate.c new file mode 100644 index 00000000..a35f52e1 --- /dev/null +++ b/crypto/ffc/ffc_key_validate.c @@ -0,0 +1,120 @@ +/* + * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "internal/ffc.h" + +/* + * See SP800-56Ar3 Section 5.6.2.3.1 : FFC Partial public key validation. + * To only be used with ephemeral FFC public keys generated using the approved + * safe-prime groups. (Checks that the public key is in the range [2, p - 1] + * + * ret contains 0 on success, or error flags (see FFC_ERROR_PUBKEY_TOO_SMALL) + */ +int ffc_validate_public_key_partial(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret) +{ + int ok = 0; + BIGNUM *tmp = NULL; + BN_CTX *ctx = NULL; + + *ret = 0; + ctx = BN_CTX_new_ex(NULL); + if (ctx == NULL) + goto err; + + BN_CTX_start(ctx); + tmp = BN_CTX_get(ctx); + /* Step(1): Verify pub_key >= 2 */ + if (tmp == NULL + || !BN_set_word(tmp, 1)) + goto err; + if (BN_cmp(pub_key, tmp) <= 0) { + *ret |= FFC_ERROR_PUBKEY_TOO_SMALL; + goto err; + } + /* Step(1): Verify pub_key <= p-2 */ + if (BN_copy(tmp, params->p) == NULL + || !BN_sub_word(tmp, 1)) + goto err; + if (BN_cmp(pub_key, tmp) >= 0) { + *ret |= FFC_ERROR_PUBKEY_TOO_LARGE; + goto err; + } + ok = 1; + err: + if (ctx != NULL) { + BN_CTX_end(ctx); + BN_CTX_free(ctx); + } + return ok; +} + +/* + * See SP800-56Ar3 Section 5.6.2.3.1 : FFC Full public key validation. + */ +int ffc_validate_public_key(const FFC_PARAMS *params, const BIGNUM *pub_key, + int *ret) +{ + int ok = 0; + BIGNUM *tmp = NULL; + BN_CTX *ctx = NULL; + + if (!ffc_validate_public_key_partial(params, pub_key, ret)) + return 0; + + if (params->q != NULL) { + ctx = BN_CTX_new_ex(NULL); + if (ctx == NULL) + goto err; + BN_CTX_start(ctx); + tmp = BN_CTX_get(ctx); + + /* Check pub_key^q == 1 mod p */ + if (tmp == NULL + || !BN_mod_exp(tmp, pub_key, params->q, params->p, ctx)) + goto err; + if (!BN_is_one(tmp)) { + *ret |= FFC_ERROR_PUBKEY_INVALID; + goto err; + } + } + + ok = 1; + err: + if (ctx != NULL) { + BN_CTX_end(ctx); + BN_CTX_free(ctx); + } + return ok; +} + +/* + * See SP800-56Ar3 Section 5.6.2.1.2: Owner assurance of Private key validity. + * Verifies priv_key is in the range [1..upper-1]. The passed in value of upper + * is normally params->q but can be 2^N for approved safe prime groups. + * Note: This assumes that the domain parameters are valid. + */ +int ffc_validate_private_key(const BIGNUM *upper, const BIGNUM *priv, int *ret) +{ + int ok = 0; + + *ret = 0; + + if (BN_cmp(priv, BN_value_one()) < 0) { + *ret |= FFC_ERROR_PRIVKEY_TOO_SMALL; + goto err; + } + if (BN_cmp(priv, upper) >= 0) { + *ret |= FFC_ERROR_PRIVKEY_TOO_LARGE; + goto err; + } + ok = 1; +err: + return ok; +} diff --git a/crypto/ffc/ffc_params.c b/crypto/ffc/ffc_params.c index 0c9d1a5d..cb8987b6 100644 --- a/crypto/ffc/ffc_params.c +++ b/crypto/ffc/ffc_params.c @@ -15,7 +15,7 @@ void ffc_params_init(FFC_PARAMS *params) { - memset(params, 0, sizeof(FFC_PARAMS)); + memset(params, 0, sizeof(*params)); params->pcounter = -1; params->gindex = FFC_UNVERIFIABLE_GINDEX; } diff --git a/crypto/ffc/ffc_params_generate.c b/crypto/ffc/ffc_params_generate.c index c32c33e8..cb51bf0e 100644 --- a/crypto/ffc/ffc_params_generate.c +++ b/crypto/ffc/ffc_params_generate.c @@ -46,8 +46,6 @@ static int ffc_validate_LN(size_t L, size_t N, int type) return 80; if (L == 2048 && (N == 224 || N == 256)) return 112; - if (L == 2048 && N == 256) - return 112; if (L == 3072 && N == 256) return 128; } @@ -103,13 +101,14 @@ static int generate_canonical_g(BN_CTX *ctx, BN_MONT_CTX *mont, EVP_MD_CTX *mctx = NULL; int mdsize; - mctx = EVP_MD_CTX_new(); - if (mctx == NULL) - goto err; - mdsize = EVP_MD_size(evpmd); if (mdsize <= 0) - goto err; + return 0; + + mctx = EVP_MD_CTX_new(); + if (mctx == NULL) + return 0; + /* * A.2.3 Step (4) & (5) * A.2.4 Step (6) & (7) @@ -134,7 +133,7 @@ static int generate_canonical_g(BN_CTX *ctx, BN_MONT_CTX *mont, || !EVP_DigestFinal_ex(mctx, md, NULL) || (BN_bin2bn(md, mdsize, tmp) == NULL) || !BN_mod_exp_mont(g, tmp, e, p, ctx, mont)) - return 0; + break; /* exit on failure */ /* * A.2.3 Step (10) * A.2.4 Step (12) @@ -145,7 +144,6 @@ static int generate_canonical_g(BN_CTX *ctx, BN_MONT_CTX *mont, break; /* found g */ } } -err: EVP_MD_CTX_free(mctx); return ret; } @@ -476,10 +474,10 @@ static EVP_MD *fetch_default_md(OPENSSL_CTX *libctx, size_t N) * - FFC_PARAMS_RET_STATUS_UNVERIFIABLE_G if the validation of G succeeded, * but G is unverifiable. */ -int ffc_param_FIPS186_4_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, - int type, size_t L, size_t N, - const EVP_MD *evpmd, int validate_flags, - int *res, BN_GENCB *cb) +int ffc_params_FIPS186_4_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb) { int ok = FFC_PARAMS_RET_STATUS_FAILED; unsigned char *seed = NULL, *seed_tmp = NULL; @@ -743,7 +741,7 @@ err: if (seed != params->seed) OPENSSL_free(seed); OPENSSL_free(seed_tmp); - if (ctx) + if (ctx != NULL) BN_CTX_end(ctx); BN_CTX_free(ctx); BN_MONT_CTX_free(mont); @@ -752,10 +750,10 @@ err: return ok; } -int ffc_param_FIPS186_2_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, - int type, size_t L, size_t N, - const EVP_MD *evpmd, int validate_flags, - int *res, BN_GENCB *cb) +int ffc_params_FIPS186_2_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb) { int ok = FFC_PARAMS_RET_STATUS_FAILED; unsigned char seed[SHA256_DIGEST_LENGTH]; @@ -979,8 +977,8 @@ int ffc_params_FIPS186_4_generate(OPENSSL_CTX *libctx, FFC_PARAMS *params, int type, size_t L, size_t N, const EVP_MD *evpmd, int *res, BN_GENCB *cb) { - return ffc_param_FIPS186_4_gen_verify(libctx, params, type, L, N, evpmd, 0, - res, cb); + return ffc_params_FIPS186_4_gen_verify(libctx, params, type, L, N, evpmd, 0, + res, cb); } /* This should no longer be used in FIPS mode */ @@ -988,14 +986,6 @@ int ffc_params_FIPS186_2_generate(OPENSSL_CTX *libctx, FFC_PARAMS *params, int type, size_t L, size_t N, const EVP_MD *evpmd, int *res, BN_GENCB *cb) { - return ffc_param_FIPS186_2_gen_verify(libctx, params, type, L, N, evpmd, - 0, res, cb); -} - -/* TODO(3.0) - Add this in another PR - just add a stub for now */ -int ffc_params_validate_unverifiable_g(BN_CTX *ctx, BN_MONT_CTX *mont, - const BIGNUM *p, const BIGNUM *q, - const BIGNUM *g, BIGNUM *tmp, int *ret) -{ - return 1; + return ffc_params_FIPS186_2_gen_verify(libctx, params, type, L, N, evpmd, + 0, res, cb); } diff --git a/crypto/ffc/ffc_params_validate.c b/crypto/ffc/ffc_params_validate.c new file mode 100644 index 00000000..4d0a4d83 --- /dev/null +++ b/crypto/ffc/ffc_params_validate.c @@ -0,0 +1,80 @@ +/* + * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Finite Field cryptography (FFC) is used for DSA and DH. + * This file contains methods for validation of FFC parameters. + * It calls the same functions as the generation as the code is very similar. + */ + +#include "internal/ffc.h" + +/* FIPS186-4 A.2.2 Unverifiable partial validation of Generator g */ +int ffc_params_validate_unverifiable_g(BN_CTX *ctx, BN_MONT_CTX *mont, + const BIGNUM *p, const BIGNUM *q, + const BIGNUM *g, BIGNUM *tmp, int *ret) +{ + /* + * A.2.2 Step (1) AND + * A.2.4 Step (2) + * Verify that 2 <= g <= (p - 1) + */ + if (BN_cmp(g, BN_value_one()) <= 0 || BN_cmp(g, p) >= 0) { + *ret |= FFC_ERROR_NOT_SUITABLE_GENERATOR; + return 0; + } + + /* + * A.2.2 Step (2) AND + * A.2.4 Step (3) + * Check g^q mod p = 1 + */ + if (!BN_mod_exp_mont(tmp, g, q, p, ctx, mont)) + return 0; + if (BN_cmp(tmp, BN_value_one()) != 0) { + *ret |= FFC_ERROR_NOT_SUITABLE_GENERATOR; + return 0; + } + return 1; +} + +int ffc_params_FIPS186_4_validate(const FFC_PARAMS *params, int type, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb) +{ + size_t L, N; + + if (params == NULL || params->p == NULL || params->q == NULL) + return FFC_PARAMS_RET_STATUS_FAILED; + + /* A.1.1.3 Step (1..2) : L = len(p), N = len(q) */ + L = BN_num_bits(params->p); + N = BN_num_bits(params->q); + return ffc_params_FIPS186_4_gen_verify(NULL, (FFC_PARAMS *)params, type, L, N, + evpmd, validate_flags, res, cb); +} + +/* This may be used in FIPS mode to validate deprecated FIPS-186-2 Params */ +int ffc_params_FIPS186_2_validate(const FFC_PARAMS *params, int type, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb) +{ + size_t L, N; + + if (params->p == NULL || params->q == NULL) { + *res = FFC_CHECK_INVALID_PQ; + return FFC_PARAMS_RET_STATUS_FAILED; + } + + /* A.1.1.3 Step (1..2) : L = len(p), N = len(q) */ + L = BN_num_bits(params->p); + N = BN_num_bits(params->q); + return ffc_params_FIPS186_2_gen_verify(NULL, (FFC_PARAMS *)params, type, L, N, + evpmd, validate_flags, res, cb); +} diff --git a/crypto/http/http_client.c b/crypto/http/http_client.c index 424b4c39..2649723c 100644 --- a/crypto/http/http_client.c +++ b/crypto/http/http_client.c @@ -883,8 +883,11 @@ BIO *OSSL_HTTP_transfer(const char *server, const char *port, const char *path, if (lib == ERR_LIB_SSL || lib == ERR_LIB_HTTP || (lib == ERR_LIB_BIO && reason == BIO_R_CONNECT_TIMEOUT) || (lib == ERR_LIB_BIO && reason == BIO_R_CONNECT_ERROR) +# ifndef OPENSSL_NO_CMP || (lib == ERR_LIB_CMP - && reason == CMP_R_POTENTIALLY_INVALID_CERTIFICATE)) { + && reason == CMP_R_POTENTIALLY_INVALID_CERTIFICATE) +# endif + ) { BIO_snprintf(buf, 200, "server=%s:%s", server, port); ERR_add_error_data(1, buf); if (err == 0) { diff --git a/crypto/http/http_local.h b/crypto/http/http_local.h index 33457f1e..37eb74a6 100644 --- a/crypto/http/http_local.h +++ b/crypto/http/http_local.h @@ -16,12 +16,12 @@ /* name aliases for legacy names with name prefix "OCSP_" */ typedef OCSP_REQ_CTX OSSL_HTTP_REQ_CTX; /* functions meanwhile only used internally */ -# define OSSL_HTTP_REQ_CTX_new OCSP_REQ_CTX_new -# define OSSL_HTTP_REQ_CTX_free OCSP_REQ_CTX_free -# define OSSL_HTTP_REQ_CTX_header OCSP_REQ_CTX_http -# define OSSL_HTTP_REQ_CTX_add1_header OCSP_REQ_CTX_add1_header -# define OSSL_HTTP_REQ_CTX_i2d OCSP_REQ_CTX_i2d -# define OSSL_HTTP_REQ_CTX_nbio OCSP_REQ_CTX_nbio +# define OSSL_HTTP_REQ_CTX_new OCSP_REQ_CTX_new +# define OSSL_HTTP_REQ_CTX_free OCSP_REQ_CTX_free +# define OSSL_HTTP_REQ_CTX_header OCSP_REQ_CTX_http +# define OSSL_HTTP_REQ_CTX_add1_header OCSP_REQ_CTX_add1_header +# define OSSL_HTTP_REQ_CTX_i2d OCSP_REQ_CTX_i2d +# define OSSL_HTTP_REQ_CTX_nbio OCSP_REQ_CTX_nbio # ifndef OPENSSL_NO_SOCK # define OSSL_HTTP_REQ_CTX_sendreq_d2i OCSP_REQ_CTX_nbio_d2i # endif diff --git a/crypto/md5/asm/md5-586.pl b/crypto/md5/asm/md5-586.pl index b03bf11e..79e1b856 100644 --- a/crypto/md5/asm/md5-586.pl +++ b/crypto/md5/asm/md5-586.pl @@ -45,7 +45,7 @@ $X="esi"; &md5_block("md5_block_asm_data_order"); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub Np { diff --git a/crypto/md5/asm/md5-sparcv9.pl b/crypto/md5/asm/md5-sparcv9.pl index 9cf03965..ee9d1486 100644 --- a/crypto/md5/asm/md5-sparcv9.pl +++ b/crypto/md5/asm/md5-sparcv9.pl @@ -436,4 +436,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/md5/asm/md5-x86_64.pl b/crypto/md5/asm/md5-x86_64.pl index 99cbbea7..88383728 100755 --- a/crypto/md5/asm/md5-x86_64.pl +++ b/crypto/md5/asm/md5-x86_64.pl @@ -392,4 +392,4 @@ ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/mem_sec.c b/crypto/mem_sec.c index 6aca2737..00546166 100644 --- a/crypto/mem_sec.c +++ b/crypto/mem_sec.c @@ -20,8 +20,7 @@ #include -/* e_os.h defines OPENSSL_SECURE_MEMORY if secure memory can be implemented */ -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY # include # include # include @@ -47,7 +46,7 @@ # define MAP_ANON MAP_ANONYMOUS #endif -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY static size_t secure_mem_used; static int secure_mem_initialized; @@ -67,7 +66,7 @@ static int sh_allocated(const char *ptr); int CRYPTO_secure_malloc_init(size_t size, size_t minsize) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY int ret = 0; if (!secure_mem_initialized) { @@ -85,12 +84,12 @@ int CRYPTO_secure_malloc_init(size_t size, size_t minsize) return ret; #else return 0; -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ } int CRYPTO_secure_malloc_done(void) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY if (secure_mem_used == 0) { sh_done(); secure_mem_initialized = 0; @@ -98,22 +97,22 @@ int CRYPTO_secure_malloc_done(void) sec_malloc_lock = NULL; return 1; } -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ return 0; } int CRYPTO_secure_malloc_initialized(void) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY return secure_mem_initialized; #else return 0; -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ } void *CRYPTO_secure_malloc(size_t num, const char *file, int line) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY void *ret; size_t actual_size; @@ -128,12 +127,12 @@ void *CRYPTO_secure_malloc(size_t num, const char *file, int line) return ret; #else return CRYPTO_malloc(num, file, line); -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ } void *CRYPTO_secure_zalloc(size_t num, const char *file, int line) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY if (secure_mem_initialized) /* CRYPTO_secure_malloc() zeroes allocations when it is implemented */ return CRYPTO_secure_malloc(num, file, line); @@ -143,7 +142,7 @@ void *CRYPTO_secure_zalloc(size_t num, const char *file, int line) void CRYPTO_secure_free(void *ptr, const char *file, int line) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY size_t actual_size; if (ptr == NULL) @@ -160,13 +159,13 @@ void CRYPTO_secure_free(void *ptr, const char *file, int line) CRYPTO_THREAD_unlock(sec_malloc_lock); #else CRYPTO_free(ptr, file, line); -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ } void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *file, int line) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY size_t actual_size; if (ptr == NULL) @@ -187,12 +186,12 @@ void CRYPTO_secure_clear_free(void *ptr, size_t num, return; OPENSSL_cleanse(ptr, num); CRYPTO_free(ptr, file, line); -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ } int CRYPTO_secure_allocated(const void *ptr) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY int ret; if (!secure_mem_initialized) @@ -203,21 +202,21 @@ int CRYPTO_secure_allocated(const void *ptr) return ret; #else return 0; -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ } size_t CRYPTO_secure_used(void) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY return secure_mem_used; #else return 0; -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ } size_t CRYPTO_secure_actual_size(void *ptr) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY size_t actual_size; CRYPTO_THREAD_write_lock(sec_malloc_lock); @@ -235,7 +234,7 @@ size_t CRYPTO_secure_actual_size(void *ptr) /* * SECURE HEAP IMPLEMENTATION */ -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY /* @@ -642,4 +641,4 @@ static size_t sh_actual_size(char *ptr) OPENSSL_assert(sh_testbit(ptr, list, sh.bittable)); return sh.arena_size / (ONE << list); } -#endif /* OPENSSL_SECURE_MEMORY */ +#endif /* OPENSSL_NO_SECURE_MEMORY */ diff --git a/crypto/modes/asm/aes-gcm-armv8_64.pl b/crypto/modes/asm/aes-gcm-armv8_64.pl index 5078424e..328e5449 100755 --- a/crypto/modes/asm/aes-gcm-armv8_64.pl +++ b/crypto/modes/asm/aes-gcm-armv8_64.pl @@ -5719,4 +5719,4 @@ if ($flavour =~ /64/) { ######## 64-bit code } } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/modes/asm/aesni-gcm-x86_64.pl b/crypto/modes/asm/aesni-gcm-x86_64.pl index 70b1757f..a066fe09 100644 --- a/crypto/modes/asm/aesni-gcm-x86_64.pl +++ b/crypto/modes/asm/aesni-gcm-x86_64.pl @@ -1106,4 +1106,4 @@ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghash-alpha.pl b/crypto/modes/asm/ghash-alpha.pl index 8f56d277..2def37d0 100644 --- a/crypto/modes/asm/ghash-alpha.pl +++ b/crypto/modes/asm/ghash-alpha.pl @@ -463,5 +463,5 @@ rem_4bit: ___ $output=pop and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghash-armv4.pl b/crypto/modes/asm/ghash-armv4.pl index 0b94340d..bc44449a 100644 --- a/crypto/modes/asm/ghash-armv4.pl +++ b/crypto/modes/asm/ghash-armv4.pl @@ -551,4 +551,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/modes/asm/ghash-c64xplus.pl b/crypto/modes/asm/ghash-c64xplus.pl index fa9822b3..41efa4ba 100644 --- a/crypto/modes/asm/ghash-c64xplus.pl +++ b/crypto/modes/asm/ghash-c64xplus.pl @@ -243,4 +243,4 @@ $code.=<<___; ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghash-ia64.pl b/crypto/modes/asm/ghash-ia64.pl index 404207a9..dcdbc83f 100755 --- a/crypto/modes/asm/ghash-ia64.pl +++ b/crypto/modes/asm/ghash-ia64.pl @@ -467,4 +467,4 @@ $code =~ s/mux1(\s+)\S+\@rev/nop.i$1 0x0/gm if ($big_endian); $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghash-parisc.pl b/crypto/modes/asm/ghash-parisc.pl index 8192831e..a1fb99f3 100644 --- a/crypto/modes/asm/ghash-parisc.pl +++ b/crypto/modes/asm/ghash-parisc.pl @@ -748,4 +748,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghash-s390x.pl b/crypto/modes/asm/ghash-s390x.pl index b9a63762..bd1c811b 100644 --- a/crypto/modes/asm/ghash-s390x.pl +++ b/crypto/modes/asm/ghash-s390x.pl @@ -261,4 +261,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghash-sparcv9.pl b/crypto/modes/asm/ghash-sparcv9.pl index ac61df60..b8bfa815 100644 --- a/crypto/modes/asm/ghash-sparcv9.pl +++ b/crypto/modes/asm/ghash-sparcv9.pl @@ -577,4 +577,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghash-x86.pl b/crypto/modes/asm/ghash-x86.pl index d3b0ed86..cebcf290 100644 --- a/crypto/modes/asm/ghash-x86.pl +++ b/crypto/modes/asm/ghash-x86.pl @@ -1377,7 +1377,7 @@ my ($Xhi,$Xi)=@_; &asciz("GHASH for x86, CRYPTOGAMS by "); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; # A question was risen about choice of vanilla MMX. Or rather why wasn't # SSE2 chosen instead? In addition to the fact that MMX runs on legacy diff --git a/crypto/modes/asm/ghash-x86_64.pl b/crypto/modes/asm/ghash-x86_64.pl index 3af31abc..db8063df 100644 --- a/crypto/modes/asm/ghash-x86_64.pl +++ b/crypto/modes/asm/ghash-x86_64.pl @@ -241,6 +241,7 @@ $code=<<___; .align 16 gcm_gmult_4bit: .cfi_startproc + endbranch push %rbx .cfi_push %rbx push %rbp # %rbp and others are pushed exclusively in @@ -288,6 +289,7 @@ $code.=<<___; .align 16 gcm_ghash_4bit: .cfi_startproc + endbranch push %rbx .cfi_push %rbx push %rbp @@ -614,6 +616,7 @@ $code.=<<___; .align 16 gcm_gmult_clmul: .cfi_startproc + endbranch .L_gmult_clmul: movdqu ($Xip),$Xi movdqa .Lbswap_mask(%rip),$T3 @@ -665,6 +668,7 @@ $code.=<<___; .align 32 gcm_ghash_clmul: .cfi_startproc + endbranch .L_ghash_clmul: ___ $code.=<<___ if ($win64); @@ -1168,6 +1172,7 @@ $code.=<<___; .align 32 gcm_gmult_avx: .cfi_startproc + endbranch jmp .L_gmult_clmul .cfi_endproc .size gcm_gmult_avx,.-gcm_gmult_avx @@ -1179,6 +1184,7 @@ $code.=<<___; .align 32 gcm_ghash_avx: .cfi_startproc + endbranch ___ if ($avx) { my ($Xip,$Htbl,$inp,$len)=@_4args; @@ -1817,4 +1823,4 @@ $code =~ s/\`([^\`]*)\`/eval($1)/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/modes/asm/ghashp8-ppc.pl b/crypto/modes/asm/ghashp8-ppc.pl index aa3af21a..d6caefcc 100755 --- a/crypto/modes/asm/ghashp8-ppc.pl +++ b/crypto/modes/asm/ghashp8-ppc.pl @@ -671,4 +671,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/modes/asm/ghashv8-armx.pl b/crypto/modes/asm/ghashv8-armx.pl index 5618410a..8272f507 100644 --- a/crypto/modes/asm/ghashv8-armx.pl +++ b/crypto/modes/asm/ghashv8-armx.pl @@ -794,4 +794,4 @@ if ($flavour =~ /64/) { ######## 64-bit code } } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/param_build.c b/crypto/param_build.c index 21bed313..7c3b1a59 100644 --- a/crypto/param_build.c +++ b/crypto/param_build.c @@ -330,33 +330,3 @@ void ossl_param_bld_free(OSSL_PARAM *params) OPENSSL_free(params); } } - -OSSL_PARAM *ossl_param_bld_to_param_ex(OSSL_PARAM_BLD *bld, OSSL_PARAM *params, - size_t param_n, void *data, - size_t data_n, void *secure, - size_t secure_n) -{ - if (params == NULL || data == NULL) { - CRYPTOerr(CRYPTO_F_OSSL_PARAM_BLD_TO_PARAM_EX, - CRYPTO_R_INVALID_NULL_ARGUMENT); - return NULL; - } - if (param_n < bld->curr + 1) { - CRYPTOerr(CRYPTO_F_OSSL_PARAM_BLD_TO_PARAM_EX, - CRYPTO_R_INSUFFICIENT_PARAM_SIZE); - return NULL; - } - if (data_n < ALIGN_SIZE * bld->total_blocks) { - CRYPTOerr(CRYPTO_F_OSSL_PARAM_BLD_TO_PARAM_EX, - CRYPTO_R_INSUFFICIENT_DATA_SPACE); - return NULL; - } - if (bld->secure_blocks > 0 && secure_n < ALIGN_SIZE * bld->secure_blocks) { - CRYPTOerr(CRYPTO_F_OSSL_PARAM_BLD_TO_PARAM_EX, - CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE); - return NULL; - } - param_bld_convert(bld, params, (OSSL_PARAM_BLD_BLOCK *)data, - (OSSL_PARAM_BLD_BLOCK *)secure); - return params; -} diff --git a/crypto/params_from_text.c b/crypto/params_from_text.c index 053b93d2..59cee5f1 100644 --- a/crypto/params_from_text.c +++ b/crypto/params_from_text.c @@ -160,37 +160,6 @@ static int construct_from_text(OSSL_PARAM *to, const OSSL_PARAM *paramdef, return 1; } -int OSSL_PARAM_construct_from_text(OSSL_PARAM *to, - const OSSL_PARAM *paramdefs, - const char *key, const char *value, - size_t value_n, - void *buf, size_t *buf_n) -{ - const OSSL_PARAM *paramdef = NULL; - int ishex = 0; - BIGNUM *tmpbn = NULL; - int ok = 0; - - if (to == NULL || paramdefs == NULL) - return 0; - - if (!prepare_from_text(paramdefs, key, value, value_n, - ¶mdef, &ishex, buf_n, &tmpbn)) - return 0; - - /* - * The user gets the expected buffer size back even if the buffer isn't - * allocated. - */ - if (buf == NULL) - return 1; - - ok = construct_from_text(to, paramdef, value, value_n, ishex, - buf, *buf_n, tmpbn); - BN_free(tmpbn); - return ok; -} - int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, const OSSL_PARAM *paramdefs, const char *key, const char *value, diff --git a/crypto/pariscid.pl b/crypto/pariscid.pl index 8d21c30d..c8ee8bdb 100644 --- a/crypto/pariscid.pl +++ b/crypto/pariscid.pl @@ -275,5 +275,5 @@ foreach(split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/pem/pem_all.c b/crypto/pem/pem_all.c index ba98371d..d4b069d3 100644 --- a/crypto/pem/pem_all.c +++ b/crypto/pem/pem_all.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include diff --git a/crypto/pem/pem_info.c b/crypto/pem/pem_info.c index 919769ae..6c8eb2a9 100644 --- a/crypto/pem/pem_info.c +++ b/crypto/pem/pem_info.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include diff --git a/crypto/pem/pvkfmt.c b/crypto/pem/pvkfmt.c index 95bd4da3..7f9de421 100644 --- a/crypto/pem/pvkfmt.c +++ b/crypto/pem/pvkfmt.c @@ -12,6 +12,12 @@ * and PRIVATEKEYBLOB). */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include "internal/cryptlib.h" #include #include diff --git a/crypto/perlasm/arm-xlate.pl b/crypto/perlasm/arm-xlate.pl index bee0523f..b7ee99ee 100755 --- a/crypto/perlasm/arm-xlate.pl +++ b/crypto/perlasm/arm-xlate.pl @@ -191,4 +191,4 @@ while(my $line=<>) { print "\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl index 33051010..571d59c2 100755 --- a/crypto/perlasm/ppc-xlate.pl +++ b/crypto/perlasm/ppc-xlate.pl @@ -343,4 +343,4 @@ while($line=<>) { print "\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl index e5644014..aff165c5 100755 --- a/crypto/perlasm/x86_64-xlate.pl +++ b/crypto/perlasm/x86_64-xlate.pl @@ -101,24 +101,33 @@ elsif (!$gas) $decor="\$L\$"; } -my $cet_property = <<'_____'; +my $cet_property; +if ($flavour =~ /elf/) { + # Always generate .note.gnu.property section for ELF outputs to + # mark Intel CET support since all input files must be marked + # with Intel CET support in order for linker to mark output with + # Intel CET support. + my $p2align=3; $p2align=2 if ($flavour eq "elf32"); + $cet_property = <<_____; .section ".note.gnu.property", "a" - .align 8 + .p2align $p2align .long 1f - 0f .long 4f - 1f .long 5 0: .asciz "GNU" 1: - .align 8 + .p2align $p2align .long 0xc0000002 .long 3f - 2f 2: .long 3 3: - .p2align 3 + .p2align $p2align 4: _____ +} + my $current_segment; my $current_function; my %globals; @@ -1145,9 +1154,7 @@ my $vprotq = sub { # Intel Control-flow Enforcement Technology extension. All functions and # indirect branch targets will have to start with this instruction... -my $used_cet = 0; my $endbranch = sub { - $used_cet = 1; (0xf3,0x0f,0x1e,0xfa); }; @@ -1233,11 +1240,11 @@ while(defined(my $line=<>)) { print $line,"\n"; } -print "$cet_property" if ($gas && $used_cet); +print "$cet_property" if ($cet_property); print "\n$current_segment\tENDS\n" if ($current_segment && $masm); print "END\n" if ($masm); -close STDOUT; +close STDOUT or die "error closing STDOUT: $!;" ################################################# # Cross-reference x86_64 ABI "card" diff --git a/crypto/poly1305/asm/poly1305-armv4.pl b/crypto/poly1305/asm/poly1305-armv4.pl index 2884cda7..aab5ce73 100755 --- a/crypto/poly1305/asm/poly1305-armv4.pl +++ b/crypto/poly1305/asm/poly1305-armv4.pl @@ -1252,4 +1252,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/poly1305/asm/poly1305-armv8.pl b/crypto/poly1305/asm/poly1305-armv8.pl index d547f4e7..887c6f92 100755 --- a/crypto/poly1305/asm/poly1305-armv8.pl +++ b/crypto/poly1305/asm/poly1305-armv8.pl @@ -940,4 +940,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/poly1305/asm/poly1305-mips.pl b/crypto/poly1305/asm/poly1305-mips.pl index 92deb0b0..dc7eb640 100755 --- a/crypto/poly1305/asm/poly1305-mips.pl +++ b/crypto/poly1305/asm/poly1305-mips.pl @@ -437,5 +437,5 @@ ___ $output and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/poly1305/asm/poly1305-ppc.pl b/crypto/poly1305/asm/poly1305-ppc.pl index 980dcd33..915d0947 100755 --- a/crypto/poly1305/asm/poly1305-ppc.pl +++ b/crypto/poly1305/asm/poly1305-ppc.pl @@ -1978,4 +1978,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/poly1305/asm/poly1305-ppcfp.pl b/crypto/poly1305/asm/poly1305-ppcfp.pl index 78e1bf85..10342544 100755 --- a/crypto/poly1305/asm/poly1305-ppcfp.pl +++ b/crypto/poly1305/asm/poly1305-ppcfp.pl @@ -740,4 +740,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/poly1305/asm/poly1305-sparcv9.pl b/crypto/poly1305/asm/poly1305-sparcv9.pl index c8079042..5275f990 100755 --- a/crypto/poly1305/asm/poly1305-sparcv9.pl +++ b/crypto/poly1305/asm/poly1305-sparcv9.pl @@ -1116,4 +1116,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/poly1305/asm/poly1305-x86.pl b/crypto/poly1305/asm/poly1305-x86.pl index b1c74661..8df52e4b 100755 --- a/crypto/poly1305/asm/poly1305-x86.pl +++ b/crypto/poly1305/asm/poly1305-x86.pl @@ -1811,4 +1811,4 @@ sub vlazy_reduction { &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/poly1305/asm/poly1305-x86_64.pl b/crypto/poly1305/asm/poly1305-x86_64.pl index c03af539..b97398db 100755 --- a/crypto/poly1305/asm/poly1305-x86_64.pl +++ b/crypto/poly1305/asm/poly1305-x86_64.pl @@ -2808,6 +2808,7 @@ $code.=<<___; .align 32 poly1305_blocks_vpmadd52: .cfi_startproc + endbranch shr \$4,$len jz .Lno_data_vpmadd52 # too short @@ -3741,6 +3742,7 @@ $code.=<<___; .align 32 poly1305_emit_base2_44: .cfi_startproc + endbranch mov 0($ctx),%r8 # load hash value mov 8($ctx),%r9 mov 16($ctx),%r10 @@ -4182,4 +4184,4 @@ foreach (split('\n',$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/ppccpuid.pl b/crypto/ppccpuid.pl index ea705e3e..3dbd6dab 100755 --- a/crypto/ppccpuid.pl +++ b/crypto/ppccpuid.pl @@ -383,4 +383,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/rc4/asm/rc4-586.pl b/crypto/rc4/asm/rc4-586.pl index 79068ffd..126903f7 100644 --- a/crypto/rc4/asm/rc4-586.pl +++ b/crypto/rc4/asm/rc4-586.pl @@ -422,4 +422,4 @@ $idx="edx"; &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/rc4/asm/rc4-c64xplus.pl b/crypto/rc4/asm/rc4-c64xplus.pl index 2c998d50..28ff0887 100644 --- a/crypto/rc4/asm/rc4-c64xplus.pl +++ b/crypto/rc4/asm/rc4-c64xplus.pl @@ -188,4 +188,4 @@ ___ $output = pop and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/rc4/asm/rc4-md5-x86_64.pl b/crypto/rc4/asm/rc4-md5-x86_64.pl index 853e6d6d..a3f6550a 100644 --- a/crypto/rc4/asm/rc4-md5-x86_64.pl +++ b/crypto/rc4/asm/rc4-md5-x86_64.pl @@ -662,4 +662,4 @@ $code =~ s/#rc4#//gm if ($rc4); print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/rc4/asm/rc4-parisc.pl b/crypto/rc4/asm/rc4-parisc.pl index 30a8bb50..660295ab 100644 --- a/crypto/rc4/asm/rc4-parisc.pl +++ b/crypto/rc4/asm/rc4-parisc.pl @@ -333,4 +333,4 @@ foreach(split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/rc4/asm/rc4-s390x.pl b/crypto/rc4/asm/rc4-s390x.pl index f6d3401c..c4e4cdea 100644 --- a/crypto/rc4/asm/rc4-s390x.pl +++ b/crypto/rc4/asm/rc4-s390x.pl @@ -240,4 +240,4 @@ RC4_options: ___ print $code; -close STDOUT or die "error closing STDOUT"; # force flush +close STDOUT or die "error closing STDOUT: $!"; # force flush diff --git a/crypto/rc4/asm/rc4-x86_64.pl b/crypto/rc4/asm/rc4-x86_64.pl index b86425e5..adbc40a3 100755 --- a/crypto/rc4/asm/rc4-x86_64.pl +++ b/crypto/rc4/asm/rc4-x86_64.pl @@ -142,6 +142,7 @@ $code=<<___; .align 16 RC4: .cfi_startproc + endbranch or $len,$len jne .Lentry ret @@ -457,6 +458,7 @@ $code.=<<___; .align 16 RC4_set_key: .cfi_startproc + endbranch lea 8($dat),$dat lea ($inp,$len),$inp neg $len @@ -531,6 +533,7 @@ RC4_set_key: .align 16 RC4_options: .cfi_startproc + endbranch lea .Lopts(%rip),%rax mov OPENSSL_ia32cap_P(%rip),%edx bt \$20,%edx @@ -700,4 +703,4 @@ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/rc5/asm/rc5-586.pl b/crypto/rc5/asm/rc5-586.pl index cf553679..3c8e3833 100644 --- a/crypto/rc5/asm/rc5-586.pl +++ b/crypto/rc5/asm/rc5-586.pl @@ -31,7 +31,7 @@ $tmp4="edx"; &cbc("RC5_32_cbc_encrypt","RC5_32_encrypt","RC5_32_decrypt",0,4,5,3,-1,-1); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub RC5_32_encrypt { diff --git a/crypto/ripemd/asm/rmd-586.pl b/crypto/ripemd/asm/rmd-586.pl index 45f03eb3..d4e64b8c 100644 --- a/crypto/ripemd/asm/rmd-586.pl +++ b/crypto/ripemd/asm/rmd-586.pl @@ -69,7 +69,7 @@ $KR3=0x7A6D76E9; &ripemd160_block("ripemd160_block_asm_data_order"); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; sub Xv { diff --git a/crypto/rsa/build.info b/crypto/rsa/build.info index 70864170..274f3769 100644 --- a/crypto/rsa/build.info +++ b/crypto/rsa/build.info @@ -1,7 +1,10 @@ LIBS=../../libcrypto -SOURCE[../../libcrypto]=\ - rsa_ossl.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c \ - rsa_pk1.c rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c \ - rsa_pss.c rsa_x931.c rsa_asn1.c rsa_depr.c rsa_ameth.c rsa_prn.c \ - rsa_pmeth.c rsa_crpt.c rsa_x931g.c rsa_meth.c rsa_mp.c \ - rsa_sp800_56b_gen.c rsa_sp800_56b_check.c + +$COMMON=rsa_ossl.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_pk1.c \ + rsa_none.c rsa_oaep.c rsa_chk.c rsa_pss.c rsa_x931.c rsa_crpt.c \ + rsa_x931g.c rsa_sp800_56b_gen.c rsa_sp800_56b_check.c + +SOURCE[../../libcrypto]=$COMMON\ + rsa_saos.c rsa_err.c rsa_asn1.c rsa_depr.c rsa_ameth.c rsa_prn.c \ + rsa_pmeth.c rsa_meth.c rsa_mp.c rsa_ssl.c +SOURCE[../../providers/libfips.a]=$COMMON diff --git a/crypto/rsa/rsa_crpt.c b/crypto/rsa/rsa_crpt.c index 6a408e90..6abee298 100644 --- a/crypto/rsa/rsa_crpt.c +++ b/crypto/rsa/rsa_crpt.c @@ -114,7 +114,7 @@ BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx) BN_BLINDING *ret = NULL; if (in_ctx == NULL) { - if ((ctx = BN_CTX_new()) == NULL) + if ((ctx = BN_CTX_new_ex(rsa->libctx)) == NULL) return 0; } else { ctx = in_ctx; diff --git a/crypto/rsa/rsa_err.c b/crypto/rsa/rsa_err.c index 692b1a1b..382b8cb7 100644 --- a/crypto/rsa/rsa_err.c +++ b/crypto/rsa/rsa_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff --git a/crypto/rsa/rsa_lib.c b/crypto/rsa/rsa_lib.c index 634c251e..d6c5da75 100644 --- a/crypto/rsa/rsa_lib.c +++ b/crypto/rsa/rsa_lib.c @@ -19,9 +19,12 @@ #include "crypto/rsa.h" #include "rsa_local.h" +static RSA *rsa_new_intern(ENGINE *engine, OPENSSL_CTX *libctx); + +#ifndef FIPS_MODE RSA *RSA_new(void) { - return RSA_new_method(NULL); + return rsa_new_intern(NULL, NULL); } const RSA_METHOD *RSA_get_method(const RSA *rsa) @@ -50,28 +53,40 @@ int RSA_set_method(RSA *rsa, const RSA_METHOD *meth) } RSA *RSA_new_method(ENGINE *engine) +{ + return rsa_new_intern(engine, NULL); +} +#endif + +RSA *rsa_new_with_ctx(OPENSSL_CTX *libctx) +{ + return rsa_new_intern(NULL, libctx); +} + +static RSA *rsa_new_intern(ENGINE *engine, OPENSSL_CTX *libctx) { RSA *ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { - RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_MALLOC_FAILURE); + RSAerr(0, ERR_R_MALLOC_FAILURE); return NULL; } ret->references = 1; ret->lock = CRYPTO_THREAD_lock_new(); if (ret->lock == NULL) { - RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_MALLOC_FAILURE); + RSAerr(0, ERR_R_MALLOC_FAILURE); OPENSSL_free(ret); return NULL; } + ret->libctx = libctx; ret->meth = RSA_get_default_method(); -#ifndef OPENSSL_NO_ENGINE +#if !defined(OPENSSL_NO_ENGINE) && !defined(FIPS_MODE) ret->flags = ret->meth->flags & ~RSA_FLAG_NON_FIPS_ALLOW; if (engine) { if (!ENGINE_init(engine)) { - RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_ENGINE_LIB); + RSAerr(0, ERR_R_ENGINE_LIB); goto err; } ret->engine = engine; @@ -81,7 +96,7 @@ RSA *RSA_new_method(ENGINE *engine) if (ret->engine) { ret->meth = ENGINE_get_RSA(ret->engine); if (ret->meth == NULL) { - RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_ENGINE_LIB); + RSAerr(0, ERR_R_ENGINE_LIB); goto err; } } @@ -95,7 +110,7 @@ RSA *RSA_new_method(ENGINE *engine) #endif if ((ret->meth->init != NULL) && !ret->meth->init(ret)) { - RSAerr(RSA_F_RSA_NEW_METHOD, ERR_R_INIT_FAIL); + RSAerr(0, ERR_R_INIT_FAIL); goto err; } @@ -121,7 +136,7 @@ void RSA_free(RSA *r) if (r->meth != NULL && r->meth->finish != NULL) r->meth->finish(r); -#ifndef OPENSSL_NO_ENGINE +#if !defined(OPENSSL_NO_ENGINE) && !defined(FIPS_MODE) ENGINE_finish(r->engine); #endif @@ -139,8 +154,11 @@ void RSA_free(RSA *r) BN_clear_free(r->dmp1); BN_clear_free(r->dmq1); BN_clear_free(r->iqmp); + /* TODO(3.0): Support PSS in FIPS_MODE */ +#ifndef FIPS_MODE RSA_PSS_PARAMS_free(r->pss); sk_RSA_PRIME_INFO_pop_free(r->prime_infos, rsa_multip_info_free); +#endif BN_BLINDING_free(r->blinding); BN_BLINDING_free(r->mt_blinding); OPENSSL_free(r->bignum_data); @@ -302,6 +320,7 @@ int RSA_security_bits(const RSA *rsa) { int bits = BN_num_bits(rsa->n); +#ifndef FIPS_MODE if (rsa->version == RSA_ASN1_VERSION_MULTI) { /* This ought to mean that we have private key at hand. */ int ex_primes = sk_RSA_PRIME_INFO_num(rsa->prime_infos); @@ -309,6 +328,7 @@ int RSA_security_bits(const RSA *rsa) if (ex_primes <= 0 || (ex_primes + 2) > rsa_multip_cap(bits)) return 0; } +#endif return rsa_compute_security_bits(bits); } @@ -394,6 +414,7 @@ int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp) return 1; } +#ifndef FIPS_MODE /* * Is it better to export RSA_PRIME_INFO structure * and related functions to let user pass a triplet? @@ -462,6 +483,7 @@ int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], sk_RSA_PRIME_INFO_pop_free(prime_infos, rsa_multip_info_free_ex); return 0; } +#endif void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d) @@ -482,6 +504,7 @@ void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q) *q = r->q; } +#ifndef FIPS_MODE int RSA_get_multi_prime_extra_count(const RSA *r) { int pnum; @@ -511,6 +534,7 @@ int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]) return 1; } +#endif void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, @@ -524,6 +548,7 @@ void RSA_get0_crt_params(const RSA *r, *iqmp = r->iqmp; } +#ifndef FIPS_MODE int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], const BIGNUM *coeffs[]) { @@ -549,6 +574,7 @@ int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], return 1; } +#endif const BIGNUM *RSA_get0_n(const RSA *r) { @@ -590,10 +616,13 @@ const BIGNUM *RSA_get0_iqmp(const RSA *r) return r->iqmp; } +/* TODO(3.0): Temporary until we move PSS support into the FIPS module */ +#ifndef FIPS_MODE const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r) { return r->pss; } +#endif void RSA_clear_flags(RSA *r, int flags) { @@ -616,6 +645,7 @@ int RSA_get_version(RSA *r) return r->version; } +#ifndef FIPS_MODE ENGINE *RSA_get0_engine(const RSA *r) { return r->engine; @@ -630,6 +660,7 @@ int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2) return -1; return EVP_PKEY_CTX_ctrl(ctx, -1, optype, cmd, p1, p2); } +#endif DEFINE_STACK_OF(BIGNUM) @@ -637,7 +668,9 @@ int rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, const STACK_OF(BIGNUM) *exps, const STACK_OF(BIGNUM) *coeffs) { +#ifndef FIPS_MODE STACK_OF(RSA_PRIME_INFO) *prime_infos, *old_infos = NULL; +#endif int pnum; if (primes == NULL || exps == NULL || coeffs == NULL) @@ -656,9 +689,12 @@ int rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, sk_BIGNUM_value(coeffs, 0))) return 0; +#ifndef FIPS_MODE old_infos = r->prime_infos; +#endif if (pnum > 2) { +#ifndef FIPS_MODE int i; prime_infos = sk_RSA_PRIME_INFO_new_reserve(NULL, pnum); @@ -695,8 +731,12 @@ int rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, r->prime_infos = old_infos; goto err; } +#else + return 0; +#endif } +#ifndef FIPS_MODE if (old_infos != NULL) { /* * This is hard to deal with, since the old infos could @@ -706,15 +746,18 @@ int rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, */ sk_RSA_PRIME_INFO_pop_free(old_infos, rsa_multip_info_free); } +#endif r->version = pnum > 2 ? RSA_ASN1_VERSION_MULTI : RSA_ASN1_VERSION_DEFAULT; r->dirty_cnt++; return 1; +#ifndef FIPS_MODE err: /* r, d, t should not be freed */ sk_RSA_PRIME_INFO_pop_free(prime_infos, rsa_multip_info_free_ex); return 0; +#endif } DEFINE_SPECIAL_STACK_OF_CONST(BIGNUM_const, BIGNUM) @@ -723,29 +766,34 @@ int rsa_get0_all_params(RSA *r, STACK_OF(BIGNUM_const) *primes, STACK_OF(BIGNUM_const) *exps, STACK_OF(BIGNUM_const) *coeffs) { +#ifndef FIPS_MODE RSA_PRIME_INFO *pinfo; int i, pnum; +#endif if (r == NULL) return 0; - pnum = RSA_get_multi_prime_extra_count(r); - sk_BIGNUM_const_push(primes, RSA_get0_p(r)); sk_BIGNUM_const_push(primes, RSA_get0_q(r)); sk_BIGNUM_const_push(exps, RSA_get0_dmp1(r)); sk_BIGNUM_const_push(exps, RSA_get0_dmq1(r)); sk_BIGNUM_const_push(coeffs, RSA_get0_iqmp(r)); + +#ifndef FIPS_MODE + pnum = RSA_get_multi_prime_extra_count(r); for (i = 0; i < pnum; i++) { pinfo = sk_RSA_PRIME_INFO_value(r->prime_infos, i); sk_BIGNUM_const_push(primes, pinfo->r); sk_BIGNUM_const_push(exps, pinfo->d); sk_BIGNUM_const_push(coeffs, pinfo->t); } +#endif return 1; } +#ifndef FIPS_MODE int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode) { OSSL_PARAM pad_params[2], *p = pad_params; @@ -1129,3 +1177,4 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label) return (int)labellen; } +#endif diff --git a/crypto/rsa/rsa_local.h b/crypto/rsa/rsa_local.h index 9b55115e..e15c1ae3 100644 --- a/crypto/rsa/rsa_local.h +++ b/crypto/rsa/rsa_local.h @@ -29,6 +29,8 @@ DECLARE_ASN1_ITEM(RSA_PRIME_INFO) DEFINE_STACK_OF(RSA_PRIME_INFO) struct rsa_st { + OPENSSL_CTX *libctx; + /* * The first parameter is used to pickup errors where this is passed * instead of an EVP_PKEY, it is set to 0 @@ -46,11 +48,12 @@ struct rsa_st { BIGNUM *dmp1; BIGNUM *dmq1; BIGNUM *iqmp; + /* TODO(3.0): Support PSS in FIPS_MODE */ +#ifndef FIPS_MODE /* for multi-prime RSA, defined in RFC 8017 */ STACK_OF(RSA_PRIME_INFO) *prime_infos; /* If a PSS only key this contains the parameter restrictions */ RSA_PSS_PARAMS *pss; -#ifndef FIPS_MODE /* be careful using this if the RSA structure is shared */ CRYPTO_EX_DATA ex_data; #endif diff --git a/crypto/rsa/rsa_oaep.c b/crypto/rsa/rsa_oaep.c index 1ae7ed28..d1150f09 100644 --- a/crypto/rsa/rsa_oaep.c +++ b/crypto/rsa/rsa_oaep.c @@ -57,8 +57,14 @@ int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, unsigned char seedmask[EVP_MAX_MD_SIZE]; int mdlen, dbmask_len = 0; +#ifndef FIPS_MODE if (md == NULL) md = EVP_sha1(); +#else + RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1, + ERR_R_PASSED_NULL_PARAMETER); + return 0; +#endif if (mgf1md == NULL) mgf1md = md; @@ -147,8 +153,15 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, phash[EVP_MAX_MD_SIZE]; int mdlen; - if (md == NULL) + if (md == NULL) { +#ifndef FIPS_MODE md = EVP_sha1(); +#else + RSAerr(0, ERR_R_PASSED_NULL_PARAMETER); + return -1; +#endif + } + if (mgf1md == NULL) mgf1md = md; @@ -272,13 +285,19 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, to[i] = constant_time_select_8(mask, db[i + mdlen + 1], to[i]); } +#ifndef FIPS_MODE /* * To avoid chosen ciphertext attacks, the error message should not * reveal which kind of decoding error happened. + * + * This trick doesn't work in the FIPS provider because libcrypto manages + * the error stack. Instead we opt not to put an error on the stack at all + * in case of padding failure in the FIPS provider. */ RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1, RSA_R_OAEP_DECODING_ERROR); err_clear_last_constant_time(1 & good); +#endif cleanup: OPENSSL_cleanse(seed, sizeof(seed)); OPENSSL_clear_free(db, dblen); diff --git a/crypto/rsa/rsa_ossl.c b/crypto/rsa/rsa_ossl.c index 39d17cf3..6332a5a4 100644 --- a/crypto/rsa/rsa_ossl.c +++ b/crypto/rsa/rsa_ossl.c @@ -91,7 +91,7 @@ static int rsa_ossl_public_encrypt(int flen, const unsigned char *from, } } - if ((ctx = BN_CTX_new()) == NULL) + if ((ctx = BN_CTX_new_ex(rsa->libctx)) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); @@ -110,9 +110,11 @@ static int rsa_ossl_public_encrypt(int flen, const unsigned char *from, case RSA_PKCS1_OAEP_PADDING: i = RSA_padding_add_PKCS1_OAEP(buf, num, from, flen, NULL, 0); break; +#ifndef FIPS_MODE case RSA_SSLV23_PADDING: i = RSA_padding_add_SSLv23(buf, num, from, flen); break; +#endif case RSA_NO_PADDING: i = RSA_padding_add_none(buf, num, from, flen); break; @@ -246,7 +248,7 @@ static int rsa_ossl_private_encrypt(int flen, const unsigned char *from, BIGNUM *unblind = NULL; BN_BLINDING *blinding = NULL; - if ((ctx = BN_CTX_new()) == NULL) + if ((ctx = BN_CTX_new_ex(rsa->libctx)) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); @@ -380,7 +382,7 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, BIGNUM *unblind = NULL; BN_BLINDING *blinding = NULL; - if ((ctx = BN_CTX_new()) == NULL) + if ((ctx = BN_CTX_new_ex(rsa->libctx)) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); @@ -480,9 +482,11 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, case RSA_PKCS1_OAEP_PADDING: r = RSA_padding_check_PKCS1_OAEP(to, num, buf, j, num, NULL, 0); break; +#ifndef FIPS_MODE case RSA_SSLV23_PADDING: r = RSA_padding_check_SSLv23(to, num, buf, j, num); break; +#endif case RSA_NO_PADDING: memcpy(to, buf, (r = j)); break; @@ -490,8 +494,15 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, RSAerr(RSA_F_RSA_OSSL_PRIVATE_DECRYPT, RSA_R_UNKNOWN_PADDING_TYPE); goto err; } +#ifndef FIPS_MODE + /* + * This trick doesn't work in the FIPS provider because libcrypto manages + * the error stack. Instead we opt not to put an error on the stack at all + * in case of padding failure in the FIPS provider. + */ RSAerr(RSA_F_RSA_OSSL_PRIVATE_DECRYPT, RSA_R_PADDING_CHECK_FAILED); err_clear_last_constant_time(1 & ~constant_time_msb(r)); +#endif err: BN_CTX_end(ctx); @@ -527,7 +538,7 @@ static int rsa_ossl_public_decrypt(int flen, const unsigned char *from, } } - if ((ctx = BN_CTX_new()) == NULL) + if ((ctx = BN_CTX_new_ex(rsa->libctx)) == NULL) goto err; BN_CTX_start(ctx); f = BN_CTX_get(ctx); @@ -600,23 +611,31 @@ static int rsa_ossl_public_decrypt(int flen, const unsigned char *from, static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { - BIGNUM *r1, *m1, *vrfy, *r2, *m[RSA_MAX_PRIME_NUM - 2]; - int ret = 0, i, ex_primes = 0, smooth = 0; + BIGNUM *r1, *m1, *vrfy; + int ret = 0, smooth = 0; +#ifndef FIPS_MODE + BIGNUM *r2, *m[RSA_MAX_PRIME_NUM - 2]; + int i, ex_primes = 0; RSA_PRIME_INFO *pinfo; +#endif BN_CTX_start(ctx); r1 = BN_CTX_get(ctx); +#ifndef FIPS_MODE r2 = BN_CTX_get(ctx); +#endif m1 = BN_CTX_get(ctx); vrfy = BN_CTX_get(ctx); if (vrfy == NULL) goto err; +#ifndef FIPS_MODE if (rsa->version == RSA_ASN1_VERSION_MULTI && ((ex_primes = sk_RSA_PRIME_INFO_num(rsa->prime_infos)) <= 0 || ex_primes > RSA_MAX_PRIME_NUM - 2)) goto err; +#endif if (rsa->flags & RSA_FLAG_CACHE_PRIVATE) { BIGNUM *factor = BN_new(); @@ -637,6 +656,7 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) BN_free(factor); goto err; } +#ifndef FIPS_MODE for (i = 0; i < ex_primes; i++) { pinfo = sk_RSA_PRIME_INFO_value(rsa->prime_infos, i); BN_with_flags(factor, pinfo->r, BN_FLG_CONSTTIME); @@ -645,13 +665,16 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) goto err; } } +#endif /* * We MUST free |factor| before any further use of the prime factors */ BN_free(factor); - smooth = (ex_primes == 0) - && (rsa->meth->bn_mod_exp == BN_mod_exp_mont) + smooth = (rsa->meth->bn_mod_exp == BN_mod_exp_mont) +#ifndef FIPS_MODE + && (ex_primes == 0) +#endif && (BN_num_bits(rsa->q) == BN_num_bits(rsa->p)); } @@ -757,6 +780,7 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) BN_free(dmp1); } +#ifndef FIPS_MODE /* * calculate m_i in multi-prime case * @@ -806,6 +830,7 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) BN_free(cc); BN_free(di); } +#endif if (!BN_sub(r0, r0, m1)) goto err; @@ -849,6 +874,7 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) if (!BN_add(r0, r1, m1)) goto err; +#ifndef FIPS_MODE /* add m_i to m in multi-prime case */ if (ex_primes > 0) { BIGNUM *pr2 = BN_new(); @@ -891,6 +917,7 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) } BN_free(pr2); } +#endif tail: if (rsa->e && rsa->n) { @@ -966,15 +993,18 @@ static int rsa_ossl_init(RSA *rsa) static int rsa_ossl_finish(RSA *rsa) { +#ifndef FIPS_MODE int i; RSA_PRIME_INFO *pinfo; - BN_MONT_CTX_free(rsa->_method_mod_n); - BN_MONT_CTX_free(rsa->_method_mod_p); - BN_MONT_CTX_free(rsa->_method_mod_q); for (i = 0; i < sk_RSA_PRIME_INFO_num(rsa->prime_infos); i++) { pinfo = sk_RSA_PRIME_INFO_value(rsa->prime_infos, i); BN_MONT_CTX_free(pinfo->m); } +#endif + + BN_MONT_CTX_free(rsa->_method_mod_n); + BN_MONT_CTX_free(rsa->_method_mod_p); + BN_MONT_CTX_free(rsa->_method_mod_q); return 1; } diff --git a/crypto/rsa/rsa_pk1.c b/crypto/rsa/rsa_pk1.c index 007e9b8c..eedc558e 100644 --- a/crypto/rsa/rsa_pk1.c +++ b/crypto/rsa/rsa_pk1.c @@ -251,8 +251,15 @@ int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, } OPENSSL_clear_free(em, num); +#ifndef FIPS_MODE + /* + * This trick doesn't work in the FIPS provider because libcrypto manages + * the error stack. Instead we opt not to put an error on the stack at all + * in case of padding failure in the FIPS provider. + */ RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2, RSA_R_PKCS_DECODING_ERROR); err_clear_last_constant_time(1 & good); +#endif return constant_time_select_int(good, mlen, -1); } diff --git a/crypto/rsa/rsa_sp800_56b_check.c b/crypto/rsa/rsa_sp800_56b_check.c index 93d3103a..e2728407 100644 --- a/crypto/rsa/rsa_sp800_56b_check.c +++ b/crypto/rsa/rsa_sp800_56b_check.c @@ -269,7 +269,7 @@ int rsa_sp800_56b_check_public(const RSA *rsa) return 0; } - ctx = BN_CTX_new(); + ctx = BN_CTX_new_ex(rsa->libctx); gcd = BN_new(); if (ctx == NULL || gcd == NULL) goto err; @@ -358,7 +358,7 @@ int rsa_sp800_56b_check_keypair(const RSA *rsa, const BIGNUM *efixed, return 0; } - ctx = BN_CTX_new(); + ctx = BN_CTX_new_ex(rsa->libctx); if (ctx == NULL) return 0; diff --git a/crypto/rsa/rsa_sp800_56b_gen.c b/crypto/rsa/rsa_sp800_56b_gen.c index 5474aaa4..1f8d01d4 100644 --- a/crypto/rsa/rsa_sp800_56b_gen.c +++ b/crypto/rsa/rsa_sp800_56b_gen.c @@ -297,7 +297,7 @@ int rsa_sp800_56b_generate_key(RSA *rsa, int nbits, const BIGNUM *efixed, if (!rsa_sp800_56b_validate_strength(nbits, -1)) return 0; - ctx = BN_CTX_new(); + ctx = BN_CTX_new_ex(rsa->libctx); if (ctx == NULL) return 0; diff --git a/crypto/s390xcpuid.pl b/crypto/s390xcpuid.pl index 713dae9b..f330eff1 100755 --- a/crypto/s390xcpuid.pl +++ b/crypto/s390xcpuid.pl @@ -558,4 +558,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; # force flush +close STDOUT or die "error closing STDOUT: $!"; # force flush diff --git a/crypto/sha/asm/keccak1600-armv4.pl b/crypto/sha/asm/keccak1600-armv4.pl index 8a1b1b6e..d5af6a85 100755 --- a/crypto/sha/asm/keccak1600-armv4.pl +++ b/crypto/sha/asm/keccak1600-armv4.pl @@ -1633,4 +1633,4 @@ foreach (split($/,$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/sha/asm/keccak1600-armv8.pl b/crypto/sha/asm/keccak1600-armv8.pl index c80d1355..188d7bde 100755 --- a/crypto/sha/asm/keccak1600-armv8.pl +++ b/crypto/sha/asm/keccak1600-armv8.pl @@ -873,4 +873,4 @@ foreach(split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-avx2.pl b/crypto/sha/asm/keccak1600-avx2.pl index 5e5e5db2..36f8c2be 100755 --- a/crypto/sha/asm/keccak1600-avx2.pl +++ b/crypto/sha/asm/keccak1600-avx2.pl @@ -478,4 +478,4 @@ ___ $output=pop and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-avx512.pl b/crypto/sha/asm/keccak1600-avx512.pl index 52d3f292..d7ffc793 100755 --- a/crypto/sha/asm/keccak1600-avx512.pl +++ b/crypto/sha/asm/keccak1600-avx512.pl @@ -547,4 +547,4 @@ ___ $output=pop and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-avx512vl.pl b/crypto/sha/asm/keccak1600-avx512vl.pl index d0254969..5930c0cd 100755 --- a/crypto/sha/asm/keccak1600-avx512vl.pl +++ b/crypto/sha/asm/keccak1600-avx512vl.pl @@ -388,4 +388,4 @@ ___ $output=pop and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-c64x.pl b/crypto/sha/asm/keccak1600-c64x.pl index 9238dd5e..631117f1 100755 --- a/crypto/sha/asm/keccak1600-c64x.pl +++ b/crypto/sha/asm/keccak1600-c64x.pl @@ -881,4 +881,4 @@ ___ $output=pop and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-mmx.pl b/crypto/sha/asm/keccak1600-mmx.pl index e376adf1..ad607f4c 100755 --- a/crypto/sha/asm/keccak1600-mmx.pl +++ b/crypto/sha/asm/keccak1600-mmx.pl @@ -436,4 +436,4 @@ sub Rho() { ######### regular Rho step &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-ppc64.pl b/crypto/sha/asm/keccak1600-ppc64.pl index fb73291c..77832d5d 100755 --- a/crypto/sha/asm/keccak1600-ppc64.pl +++ b/crypto/sha/asm/keccak1600-ppc64.pl @@ -759,4 +759,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-s390x.pl b/crypto/sha/asm/keccak1600-s390x.pl index 5dc970ef..8f75bb95 100755 --- a/crypto/sha/asm/keccak1600-s390x.pl +++ b/crypto/sha/asm/keccak1600-s390x.pl @@ -559,4 +559,4 @@ ___ $code =~ s/(srlg\s+)(%r[0-9]+),/$1$2,$2,/gm; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600-x86_64.pl b/crypto/sha/asm/keccak1600-x86_64.pl index 0cedea35..f98bd768 100755 --- a/crypto/sha/asm/keccak1600-x86_64.pl +++ b/crypto/sha/asm/keccak1600-x86_64.pl @@ -608,4 +608,4 @@ foreach (split("\n",$code)) { print $_, "\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/keccak1600p8-ppc.pl b/crypto/sha/asm/keccak1600p8-ppc.pl index c6285af7..61d60686 100755 --- a/crypto/sha/asm/keccak1600p8-ppc.pl +++ b/crypto/sha/asm/keccak1600p8-ppc.pl @@ -851,4 +851,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-586.pl b/crypto/sha/asm/sha1-586.pl index eed01f30..d8828185 100644 --- a/crypto/sha/asm/sha1-586.pl +++ b/crypto/sha/asm/sha1-586.pl @@ -1487,4 +1487,4 @@ sub Xtail_avx() &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-alpha.pl b/crypto/sha/asm/sha1-alpha.pl index b4f9388a..7de230e8 100644 --- a/crypto/sha/asm/sha1-alpha.pl +++ b/crypto/sha/asm/sha1-alpha.pl @@ -326,4 +326,4 @@ $code.=<<___; ___ $output=pop and open STDOUT,">$output"; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-armv4-large.pl b/crypto/sha/asm/sha1-armv4-large.pl index 8ed30479..d82a38bb 100644 --- a/crypto/sha/asm/sha1-armv4-large.pl +++ b/crypto/sha/asm/sha1-armv4-large.pl @@ -749,4 +749,4 @@ foreach (split($/,$code)) { print $_,$/; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/sha/asm/sha1-armv8.pl b/crypto/sha/asm/sha1-armv8.pl index cb0e3833..e874481f 100644 --- a/crypto/sha/asm/sha1-armv8.pl +++ b/crypto/sha/asm/sha1-armv8.pl @@ -357,4 +357,4 @@ foreach(split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-c64xplus.pl b/crypto/sha/asm/sha1-c64xplus.pl index 4a4772ea..156aa225 100644 --- a/crypto/sha/asm/sha1-c64xplus.pl +++ b/crypto/sha/asm/sha1-c64xplus.pl @@ -333,4 +333,4 @@ $code.=<<___; ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-mb-x86_64.pl b/crypto/sha/asm/sha1-mb-x86_64.pl index 71aacc56..0873bd96 100644 --- a/crypto/sha/asm/sha1-mb-x86_64.pl +++ b/crypto/sha/asm/sha1-mb-x86_64.pl @@ -1627,4 +1627,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-mips.pl b/crypto/sha/asm/sha1-mips.pl index 4a510c6a..a5af4a63 100644 --- a/crypto/sha/asm/sha1-mips.pl +++ b/crypto/sha/asm/sha1-mips.pl @@ -461,4 +461,4 @@ $code.=<<___; .asciiz "SHA1 for MIPS, CRYPTOGAMS by " ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-parisc.pl b/crypto/sha/asm/sha1-parisc.pl index 4f643463..c913be1b 100644 --- a/crypto/sha/asm/sha1-parisc.pl +++ b/crypto/sha/asm/sha1-parisc.pl @@ -279,4 +279,4 @@ foreach(split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-ppc.pl b/crypto/sha/asm/sha1-ppc.pl index 0bc16c0a..498d30e4 100755 --- a/crypto/sha/asm/sha1-ppc.pl +++ b/crypto/sha/asm/sha1-ppc.pl @@ -352,4 +352,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-s390x.pl b/crypto/sha/asm/sha1-s390x.pl index 4de9f384..71e8a9bb 100644 --- a/crypto/sha/asm/sha1-s390x.pl +++ b/crypto/sha/asm/sha1-s390x.pl @@ -248,4 +248,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-sparcv9.pl b/crypto/sha/asm/sha1-sparcv9.pl index 585996b1..04ec84d3 100644 --- a/crypto/sha/asm/sha1-sparcv9.pl +++ b/crypto/sha/asm/sha1-sparcv9.pl @@ -430,4 +430,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-sparcv9a.pl b/crypto/sha/asm/sha1-sparcv9a.pl index 9c24a48e..d9f05de5 100644 --- a/crypto/sha/asm/sha1-sparcv9a.pl +++ b/crypto/sha/asm/sha1-sparcv9a.pl @@ -604,4 +604,4 @@ $code =~ s/\b(alignaddr)\s+(%[goli][0-7]),(%[goli][0-7]),(%[goli][0-7])/ &unalignaddr($1,$2,$3,$4) /gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha1-thumb.pl b/crypto/sha/asm/sha1-thumb.pl index b89bd978..01a772e7 100644 --- a/crypto/sha/asm/sha1-thumb.pl +++ b/crypto/sha/asm/sha1-thumb.pl @@ -262,4 +262,4 @@ $code.=<<___; ___ print $code; -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/sha/asm/sha1-x86_64.pl b/crypto/sha/asm/sha1-x86_64.pl index 7ed39165..540368e6 100755 --- a/crypto/sha/asm/sha1-x86_64.pl +++ b/crypto/sha/asm/sha1-x86_64.pl @@ -2131,4 +2131,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha256-586.pl b/crypto/sha/asm/sha256-586.pl index 962e1e9a..f890dc18 100644 --- a/crypto/sha/asm/sha256-586.pl +++ b/crypto/sha/asm/sha256-586.pl @@ -1292,4 +1292,4 @@ sub bodyx_00_15 () { # +10% &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha256-armv4.pl b/crypto/sha/asm/sha256-armv4.pl index f20840d2..1eb4f0d3 100644 --- a/crypto/sha/asm/sha256-armv4.pl +++ b/crypto/sha/asm/sha256-armv4.pl @@ -739,4 +739,4 @@ foreach (split($/,$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/sha/asm/sha256-c64xplus.pl b/crypto/sha/asm/sha256-c64xplus.pl index 8dba0c84..cef9f6ea 100644 --- a/crypto/sha/asm/sha256-c64xplus.pl +++ b/crypto/sha/asm/sha256-c64xplus.pl @@ -316,4 +316,4 @@ K256: ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha256-mb-x86_64.pl b/crypto/sha/asm/sha256-mb-x86_64.pl index 2f939781..7e9f4860 100644 --- a/crypto/sha/asm/sha256-mb-x86_64.pl +++ b/crypto/sha/asm/sha256-mb-x86_64.pl @@ -1613,4 +1613,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-586.pl b/crypto/sha/asm/sha512-586.pl index 78cafda6..215defe3 100644 --- a/crypto/sha/asm/sha512-586.pl +++ b/crypto/sha/asm/sha512-586.pl @@ -921,4 +921,4 @@ sub BODY_00_15_ssse3 { # "phase-less" copy of BODY_00_15_sse2 &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-armv4.pl b/crypto/sha/asm/sha512-armv4.pl index 7c6ac41b..fa8f2c85 100644 --- a/crypto/sha/asm/sha512-armv4.pl +++ b/crypto/sha/asm/sha512-armv4.pl @@ -677,4 +677,4 @@ while() { close SELF; print $code; -close STDOUT or die "error closing STDOUT"; # enforce flush +close STDOUT or die "error closing STDOUT: $!"; # enforce flush diff --git a/crypto/sha/asm/sha512-armv8.pl b/crypto/sha/asm/sha512-armv8.pl index 228b643c..7ef518cd 100644 --- a/crypto/sha/asm/sha512-armv8.pl +++ b/crypto/sha/asm/sha512-armv8.pl @@ -891,4 +891,4 @@ foreach(split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-c64xplus.pl b/crypto/sha/asm/sha512-c64xplus.pl index 14b6bb5a..60ac946a 100644 --- a/crypto/sha/asm/sha512-c64xplus.pl +++ b/crypto/sha/asm/sha512-c64xplus.pl @@ -434,4 +434,4 @@ K512: ___ print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-mips.pl b/crypto/sha/asm/sha512-mips.pl index 5f585eb9..42c0fa04 100644 --- a/crypto/sha/asm/sha512-mips.pl +++ b/crypto/sha/asm/sha512-mips.pl @@ -524,4 +524,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-parisc.pl b/crypto/sha/asm/sha512-parisc.pl index 17a304cb..9cc0e56d 100755 --- a/crypto/sha/asm/sha512-parisc.pl +++ b/crypto/sha/asm/sha512-parisc.pl @@ -807,4 +807,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-ppc.pl b/crypto/sha/asm/sha512-ppc.pl index f5c4138d..aaf56cfb 100755 --- a/crypto/sha/asm/sha512-ppc.pl +++ b/crypto/sha/asm/sha512-ppc.pl @@ -799,4 +799,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-s390x.pl b/crypto/sha/asm/sha512-s390x.pl index 78d710c3..5c6786d8 100644 --- a/crypto/sha/asm/sha512-s390x.pl +++ b/crypto/sha/asm/sha512-s390x.pl @@ -323,4 +323,4 @@ $code =~ s/\`([^\`]*)\`/eval $1/gem; $code =~ s/(srlg\s+)(%r[0-9]+),/$1$2,$2,/gm; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-sparcv9.pl b/crypto/sha/asm/sha512-sparcv9.pl index 11dd8d61..7d81008f 100644 --- a/crypto/sha/asm/sha512-sparcv9.pl +++ b/crypto/sha/asm/sha512-sparcv9.pl @@ -856,4 +856,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512-x86_64.pl b/crypto/sha/asm/sha512-x86_64.pl index 7c7cb23c..f73ec5d3 100755 --- a/crypto/sha/asm/sha512-x86_64.pl +++ b/crypto/sha/asm/sha512-x86_64.pl @@ -2557,4 +2557,4 @@ foreach (split("\n",$code)) { print $_,"\n"; } -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sha/asm/sha512p8-ppc.pl b/crypto/sha/asm/sha512p8-ppc.pl index ea3d3083..82610e2c 100755 --- a/crypto/sha/asm/sha512p8-ppc.pl +++ b/crypto/sha/asm/sha512p8-ppc.pl @@ -420,4 +420,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/sm2/sm2_pmeth.c b/crypto/sm2/sm2_pmeth.c index 681a0ab1..c3ba9280 100644 --- a/crypto/sm2/sm2_pmeth.c +++ b/crypto/sm2/sm2_pmeth.c @@ -253,8 +253,7 @@ static int pkey_sm2_ctrl_str(EVP_PKEY_CTX *ctx, } else if (strcmp(type, "sm2_hex_id") == 0) { /* * TODO(3.0): reconsider the name "sm2_hex_id", OR change - * OSSL_PARAM_construct_from_text() / OSSL_PARAM_allocate_from_text() - * to handle infix "_hex_" + * OSSL_PARAM_allocate_from_text() to handle infix "_hex_" */ hex_id = OPENSSL_hexstr2buf((const char *)value, &hex_len); if (hex_id == NULL) { diff --git a/crypto/whrlpool/asm/wp-mmx.pl b/crypto/whrlpool/asm/wp-mmx.pl index 2780f96d..851d3ce9 100644 --- a/crypto/whrlpool/asm/wp-mmx.pl +++ b/crypto/whrlpool/asm/wp-mmx.pl @@ -503,4 +503,4 @@ for($i=0;$i<8;$i++) { &function_end_B("whirlpool_block_mmx"); &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/whrlpool/asm/wp-x86_64.pl b/crypto/whrlpool/asm/wp-x86_64.pl index ee09234a..546ffb28 100644 --- a/crypto/whrlpool/asm/wp-x86_64.pl +++ b/crypto/whrlpool/asm/wp-x86_64.pl @@ -616,4 +616,4 @@ ___ $code =~ s/\`([^\`]*)\`/eval $1/gem; print $code; -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/crypto/x509/t_x509.c b/crypto/x509/t_x509.c index 4969bb34..eac299c0 100644 --- a/crypto/x509/t_x509.c +++ b/crypto/x509/t_x509.c @@ -15,6 +15,7 @@ #include #include #include "crypto/asn1.h" +#include "crypto/x509.h" #ifndef OPENSSL_NO_STDIO int X509_print_fp(FILE *fp, X509 *x) @@ -380,3 +381,107 @@ int X509_aux_print(BIO *out, X509 *x, int indent) } return 1; } + +/* + * Helper functions for improving certificate verification error diagnostics + */ + +int x509_print_ex_brief(BIO *bio, X509 *cert, unsigned long neg_cflags) +{ + unsigned long flags = ASN1_STRFLGS_RFC2253 | ASN1_STRFLGS_ESC_QUOTE | + XN_FLAG_SEP_CPLUS_SPC | XN_FLAG_FN_SN; + + if (cert == NULL) + return BIO_printf(bio, " (no certificate)\n") > 0; + if (BIO_printf(bio, " certificate\n") <= 0 + || !X509_print_ex(bio, cert, flags, ~X509_FLAG_NO_SUBJECT)) + return 0; + if (X509_check_issued((X509 *)cert, cert) == X509_V_OK) { + if (BIO_printf(bio, " self-issued\n") <= 0) + return 0; + } else { + if (BIO_printf(bio, " ") <= 0 + || !X509_print_ex(bio, cert, flags, ~X509_FLAG_NO_ISSUER)) + return 0; + } + if (!X509_print_ex(bio, cert, flags, + ~(X509_FLAG_NO_SERIAL | X509_FLAG_NO_VALIDITY))) + return 0; + if (X509_cmp_current_time(X509_get0_notBefore(cert)) > 0) + if (BIO_printf(bio, " not yet valid\n") <= 0) + return 0; + if (X509_cmp_current_time(X509_get0_notAfter(cert)) < 0) + if (BIO_printf(bio, " no more valid\n") <= 0) + return 0; + return X509_print_ex(bio, cert, flags, ~(neg_cflags)); +} + +static int print_certs(BIO *bio, const STACK_OF(X509) *certs) +{ + int i; + + if (certs == NULL || sk_X509_num(certs) <= 0) + return BIO_printf(bio, " (no certificates)\n") >= 0; + + for (i = 0; i < sk_X509_num(certs); i++) { + X509 *cert = sk_X509_value(certs, i); + if (cert != NULL && !x509_print_ex_brief(bio, cert, 0)) + return 0; + } + return 1; +} + +static int print_store_certs(BIO *bio, X509_STORE *store) +{ + if (store != NULL) { + STACK_OF(X509) *certs = X509_STORE_get1_all_certs(store); + int ret = print_certs(bio, certs); + + sk_X509_pop_free(certs, X509_free); + return ret; + } else { + return BIO_printf(bio, " (no trusted store)\n") >= 0; + } +} + +/* Extend the error queue with details on a failed cert verification */ +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx) +{ + if (ok == 0 && ctx != NULL) { + int cert_error = X509_STORE_CTX_get_error(ctx); + int depth = X509_STORE_CTX_get_error_depth(ctx); + X509 *cert = X509_STORE_CTX_get_current_cert(ctx); + BIO *bio = BIO_new(BIO_s_mem()); /* may be NULL */ + + BIO_printf(bio, "%s at depth=%d error=%d (%s)\n", + X509_STORE_CTX_get0_parent_ctx(ctx) != NULL + ? "CRL path validation" : "certificate verification", + depth, cert_error, + X509_verify_cert_error_string(cert_error)); + BIO_printf(bio, "failure for:\n"); + x509_print_ex_brief(bio, cert, X509_FLAG_NO_EXTENSIONS); + if (cert_error == X509_V_ERR_CERT_UNTRUSTED + || cert_error == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT + || cert_error == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN + || cert_error == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT + || cert_error == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY + || cert_error == X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER + || cert_error == X509_V_ERR_STORE_LOOKUP) { + BIO_printf(bio, "non-trusted certs:\n"); + print_certs(bio, X509_STORE_CTX_get0_untrusted(ctx)); + BIO_printf(bio, "certs in trust store:\n"); + print_store_certs(bio, X509_STORE_CTX_get0_store(ctx)); + } + CMPerr(0, X509_R_CERTIFICATE_VERIFICATION_FAILED); + ERR_add_error_mem_bio("\n", bio); + BIO_free(bio); + } + + /* + * TODO we could check policies here too, e.g.: + * if (cert_error == X509_V_OK && ok == 2) + * policies_print(NULL, ctx); + */ + + return ok; +} diff --git a/crypto/x509/x509_err.c b/crypto/x509/x509_err.c index 1b01fd01..59ffbee6 100644 --- a/crypto/x509/x509_err.c +++ b/crypto/x509/x509_err.c @@ -22,6 +22,8 @@ static const ERR_STRING_DATA X509_str_reasons[] = { {ERR_PACK(ERR_LIB_X509, 0, X509_R_CANT_CHECK_DH_KEY), "cant check dh key"}, {ERR_PACK(ERR_LIB_X509, 0, X509_R_CERT_ALREADY_IN_HASH_TABLE), "cert already in hash table"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_CERTIFICATE_VERIFICATION_FAILED), + "certificate verification failed"}, {ERR_PACK(ERR_LIB_X509, 0, X509_R_CRL_ALREADY_DELTA), "crl already delta"}, {ERR_PACK(ERR_LIB_X509, 0, X509_R_CRL_VERIFY_FAILURE), "crl verify failure"}, diff --git a/crypto/x509/x509_lu.c b/crypto/x509/x509_lu.c index 016b4b30..9018d6e1 100644 --- a/crypto/x509/x509_lu.c +++ b/crypto/x509/x509_lu.c @@ -532,6 +532,41 @@ STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v) return v->objs; } +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *store) +{ + STACK_OF(X509) *sk; + STACK_OF(X509_OBJECT) *objs; + int i; + + if (store == NULL) { + X509err(0, ERR_R_PASSED_NULL_PARAMETER); + return NULL; + } + if ((sk = sk_X509_new_null()) == NULL) + return NULL; + X509_STORE_lock(store); + objs = X509_STORE_get0_objects(store); + for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { + X509 *cert = X509_OBJECT_get0_X509(sk_X509_OBJECT_value(objs, i)); + + if (cert != NULL) { + if (!X509_up_ref(cert)) + goto err; + if (!sk_X509_push(sk, cert)) { + X509_free(cert); + goto err; + } + } + } + X509_STORE_unlock(store); + return sk; + + err: + X509_STORE_unlock(store); + sk_X509_pop_free(sk, X509_free); + return NULL; +} + STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *ctx, X509_NAME *nm) { int i, idx, cnt; diff --git a/crypto/x509/x_pubkey.c b/crypto/x509/x_pubkey.c index a583813b..f79a57cb 100644 --- a/crypto/x509/x_pubkey.c +++ b/crypto/x509/x_pubkey.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include "internal/cryptlib.h" #include @@ -87,7 +93,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) } } else if (pkey->pkeys[0].keymgmt != NULL) { BIO *bmem = BIO_new(BIO_s_mem()); - const char *serprop = "format=der,type=public"; + const char *serprop = OSSL_SERIALIZER_PUBKEY_TO_DER_PQ; OSSL_SERIALIZER_CTX *sctx = OSSL_SERIALIZER_CTX_new_by_EVP_PKEY(pkey, serprop); @@ -247,21 +253,52 @@ EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length) int i2d_PUBKEY(const EVP_PKEY *a, unsigned char **pp) { - X509_PUBKEY *xpk = NULL; int ret = -1; if (a == NULL) return 0; - if ((xpk = X509_PUBKEY_new()) == NULL) - return -1; - if (a->ameth != NULL && a->ameth->pub_encode != NULL - && !a->ameth->pub_encode(xpk, a)) - goto error; - xpk->pkey = (EVP_PKEY *)a; - ret = i2d_X509_PUBKEY(xpk, pp); - xpk->pkey = NULL; - error: - X509_PUBKEY_free(xpk); + if (a->ameth != NULL) { + X509_PUBKEY *xpk = NULL; + + if ((xpk = X509_PUBKEY_new()) == NULL) + return -1; + + /* pub_encode() only encode parameters, not the key itself */ + if (a->ameth->pub_encode != NULL && a->ameth->pub_encode(xpk, a)) { + xpk->pkey = (EVP_PKEY *)a; + ret = i2d_X509_PUBKEY(xpk, pp); + xpk->pkey = NULL; + } + X509_PUBKEY_free(xpk); + } else if (a->pkeys[0].keymgmt != NULL) { + const char *serprop = OSSL_SERIALIZER_PUBKEY_TO_DER_PQ; + OSSL_SERIALIZER_CTX *ctx = + OSSL_SERIALIZER_CTX_new_by_EVP_PKEY(a, serprop); + BIO *out = BIO_new(BIO_s_mem()); + BUF_MEM *buf = NULL; + + if (ctx != NULL + && out != NULL + && OSSL_SERIALIZER_CTX_get_serializer(ctx) != NULL + && OSSL_SERIALIZER_to_bio(ctx, out) + && BIO_get_mem_ptr(out, &buf) > 0) { + ret = buf->length; + + if (pp != NULL) { + if (*pp == NULL) { + *pp = (unsigned char *)buf->data; + buf->length = 0; + buf->data = NULL; + } else { + memcpy(*pp, buf->data, ret); + *pp += ret; + } + } + } + BIO_free(out); + OSSL_SERIALIZER_CTX_free(ctx); + } + return ret; } diff --git a/crypto/x86_64cpuid.pl b/crypto/x86_64cpuid.pl index 966dddbb..32d18a23 100644 --- a/crypto/x86_64cpuid.pl +++ b/crypto/x86_64cpuid.pl @@ -42,6 +42,7 @@ print<<___; .align 16 OPENSSL_atomic_add: .cfi_startproc + endbranch movl ($arg1),%eax .Lspin: leaq ($arg2,%rax),%r8 .byte 0xf0 # lock @@ -58,6 +59,7 @@ OPENSSL_atomic_add: .align 16 OPENSSL_rdtsc: .cfi_startproc + endbranch rdtsc shl \$32,%rdx or %rdx,%rax @@ -70,6 +72,7 @@ OPENSSL_rdtsc: .align 16 OPENSSL_ia32_cpuid: .cfi_startproc + endbranch mov %rbx,%r8 # save %rbx .cfi_register %rbx,%r8 @@ -239,6 +242,7 @@ OPENSSL_ia32_cpuid: .align 16 OPENSSL_cleanse: .cfi_startproc + endbranch xor %rax,%rax cmp \$15,$arg2 jae .Lot @@ -276,6 +280,7 @@ OPENSSL_cleanse: .align 16 CRYPTO_memcmp: .cfi_startproc + endbranch xor %rax,%rax xor %r10,%r10 cmp \$0,$arg3 @@ -314,6 +319,7 @@ print<<___ if (!$win64); .align 16 OPENSSL_wipe_cpu: .cfi_startproc + endbranch pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -378,6 +384,7 @@ print<<___; .align 16 OPENSSL_instrument_bus: .cfi_startproc + endbranch mov $arg1,$out # tribute to Win64 mov $arg2,$cnt mov $arg2,$max @@ -412,6 +419,7 @@ OPENSSL_instrument_bus: .align 16 OPENSSL_instrument_bus2: .cfi_startproc + endbranch mov $arg1,$out # tribute to Win64 mov $arg2,$cnt mov $arg3,$max @@ -467,6 +475,7 @@ print<<___; .align 16 OPENSSL_ia32_${rdop}_bytes: .cfi_startproc + endbranch xor %rax, %rax # return value cmp \$0,$arg2 je .Ldone_${rdop}_bytes @@ -510,4 +519,4 @@ ___ gen_random("rdrand"); gen_random("rdseed"); -close STDOUT or die "error closing STDOUT"; # flush +close STDOUT or die "error closing STDOUT: $!"; # flush diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl index 4aaac916..484bbdd7 100644 --- a/crypto/x86cpuid.pl +++ b/crypto/x86cpuid.pl @@ -504,4 +504,4 @@ my $rdop = shift; &asm_finish(); -close STDOUT or die "error closing STDOUT"; +close STDOUT or die "error closing STDOUT: $!"; diff --git a/doc/internal/man3/ossl_cmp_asn1_octet_string_set1.pod b/doc/internal/man3/ossl_cmp_asn1_octet_string_set1.pod index 08941362..a239ca04 100644 --- a/doc/internal/man3/ossl_cmp_asn1_octet_string_set1.pod +++ b/doc/internal/man3/ossl_cmp_asn1_octet_string_set1.pod @@ -2,10 +2,6 @@ =head1 NAME -ossl_cmp_log_parse_metadata, -ossl_cmp_add_error_txt, -ossl_cmp_add_error_data, -ossl_cmp_add_error_line, ossl_cmp_asn1_octet_string_set1, ossl_cmp_asn1_octet_string_set1_bytes, ossl_cmp_build_cert_chain @@ -15,14 +11,6 @@ ossl_cmp_build_cert_chain #include "cmp_local.h" - const char *ossl_cmp_log_parse_metadata(const char *buf, - OSSL_CMP_severity *level, char **func, - char **file, int *line); - - void ossl_cmp_add_error_txt(const char *separator, const char *txt); - #define ossl_cmp_add_error_data(txt) - #define ossl_cmp_add_error_line(txt) - int ossl_cmp_asn1_octet_string_set1(ASN1_OCTET_STRING **tgt, const ASN1_OCTET_STRING *src); int ossl_cmp_asn1_octet_string_set1_bytes(ASN1_OCTET_STRING **tgt, @@ -32,27 +20,6 @@ ossl_cmp_build_cert_chain =head1 DESCRIPTION -ossl_cmp_log_parse_metadata() parses the given message buffer I populated -by L etc. -according to the pattern OSSL_CMP_LOG_START#level ": %s\n", filling in -the variable pointed to by I with the severity level or -1, -the variable pointed to by I with the function name string or NULL, -the variable pointed to by I with the filename string or NULL, and -the variable pointed to by I with the line number or -1. -Any string returned via I<*func> and I<*file> must be freeed by the caller. - -ossl_cmp_add_error_txt() appends text to the extra data field of the last -error message in the OpenSSL error queue, after adding the optional separator -unless data has been empty so far. The text can be of arbitrary length, -which is not possible when using L in conjunction with -L. - -ossl_cmp_add_error_data() is a macro calling -ossl_cmp_add_error_txt() with the separator being ":". - -ossl_cmp_add_error_line() is a macro calling -ossl_cmp_add_error_txt() with the separator being "\n". - ossl_cmp_asn1_octet_string_set1() frees any previous value of the variable referenced via the I argument and assigns either a copy of the ASN1_OCTET_STRING given as the I argument or NULL. @@ -68,15 +35,6 @@ certificates and optionally the (possible) trust anchor(s). =head1 RETURN VALUES -ossl_cmp_log_parse_metadata() returns the pointer to the actual message text -after the OSSL_CMP_LOG_PREFIX and level and ':' if found in the buffer, -else the beginning of the buffer. - -ossl_cmp_add_error_txt() -ossl_cmp_add_error_data(), and -ossl_cmp_add_error_line() -do not return anything. - ossl_cmp_build_cert_chain() returns NULL on error, else a pointer to a stack of (up_ref'ed) certificates containing the EE certificate given in the function arguments (cert) diff --git a/doc/internal/man3/ossl_cmp_certReq_new.pod b/doc/internal/man3/ossl_cmp_certReq_new.pod new file mode 100644 index 00000000..f54c215f --- /dev/null +++ b/doc/internal/man3/ossl_cmp_certReq_new.pod @@ -0,0 +1,193 @@ +=pod + +=head1 NAME + +ossl_cmp_certReq_new, +ossl_cmp_certRep_new, +ossl_cmp_rr_new, +ossl_cmp_rp_new, +ossl_cmp_certConf_new, +ossl_cmp_pkiconf_new, +ossl_cmp_pollReq_new, +ossl_cmp_pollRep_new, +ossl_cmp_genm_new, +ossl_cmp_genp_new, +ossl_cmp_error_new +- functions for generating CMP messages + +=head1 SYNOPSIS + + #include + +# define OSSL_CMP_PKIBODY_IR 0 +# define OSSL_CMP_PKIBODY_IP 1 +# define OSSL_CMP_PKIBODY_CR 2 +# define OSSL_CMP_PKIBODY_CP 3 +# define OSSL_CMP_PKIBODY_P10CR 4 +# define OSSL_CMP_PKIBODY_POPDECC 5 +# define OSSL_CMP_PKIBODY_POPDECR 6 +# define OSSL_CMP_PKIBODY_KUR 7 +# define OSSL_CMP_PKIBODY_KUP 8 +# define OSSL_CMP_PKIBODY_KRR 9 +# define OSSL_CMP_PKIBODY_KRP 10 +# define OSSL_CMP_PKIBODY_RR 11 +# define OSSL_CMP_PKIBODY_RP 12 +# define OSSL_CMP_PKIBODY_CCR 13 +# define OSSL_CMP_PKIBODY_CCP 14 +# define OSSL_CMP_PKIBODY_CKUANN 15 +# define OSSL_CMP_PKIBODY_CANN 16 +# define OSSL_CMP_PKIBODY_RANN 17 +# define OSSL_CMP_PKIBODY_CRLANN 18 +# define OSSL_CMP_PKIBODY_PKICONF 19 +# define OSSL_CMP_PKIBODY_NESTED 20 +# define OSSL_CMP_PKIBODY_GENM 21 +# define OSSL_CMP_PKIBODY_GENP 22 +# define OSSL_CMP_PKIBODY_ERROR 23 +# define OSSL_CMP_PKIBODY_CERTCONF 24 +# define OSSL_CMP_PKIBODY_POLLREQ 25 +# define OSSL_CMP_PKIBODY_POLLREP 26 + + OSSL_ossl_cmp_MSG *ossl_cmp_certReq_new(OSSL_CMP_CTX *ctx, int bodytype, + int err_code); + OSSL_CMP_MSG *ossl_cmp_certRep_new(OSSL_CMP_CTX *ctx, int bodytype, + int certReqId, OSSL_CMP_PKISI *si, + X509 *cert, STACK_OF(X509) *chain, + STACK_OF(X509) *caPubs, + int encrypted, int unprotectedErrors); + OSSL_CMP_MSG *ossl_cmp_rr_new(OSSL_CMP_CTX *ctx); + OSSL_CMP_MSG *ossl_cmp_rp_new(OSSL_CMP_CTX *ctx, OSSL_CMP_PKISI *si, + OSSL_CRMF_CERTID *cid, int unprot_err); + OSSL_CMP_MSG *ossl_cmp_certConf_new(OSSL_CMP_CTX *ctx, int fail_info, + const char *text); + OSSL_CMP_MSG *ossl_cmp_pkiconf_new(OSSL_CMP_CTX *ctx); + OSSL_CMP_MSG *ossl_cmp_pollReq_new(OSSL_CMP_CTX *ctx, int crid); + OSSL_CMP_MSG *ossl_cmp_pollRep_new(OSSL_CMP_CTX *ctx, int crid, int poll_after) + OSSL_CMP_MSG *ossl_cmp_genm_new(OSSL_CMP_CTX *ctx); + OSSL_CMP_MSG *ossl_cmp_genp_new(OSSL_CMP_CTX *ctx); + OSSL_CMP_MSG *ossl_cmp_error_new(OSSL_CMP_CTX *ctx, OSSL_CMP_PKISI *si, + int errorCode, + OSSL_CMP_PKIFREETEXT *errorDetails, + int unprotected) + +=head1 DESCRIPTION + +This is the API for creating various CMP PKIMESSAGES. The +functions allocate a new message, fill it with the relevant data derived from +the given OSSL_CMP_CTX, and create the applicable protection. + +ossl_cmp_certReq_new() creates a PKIMessage for requesting a certificate, +which can be either of IR/CR/KUR/P10CR, depending on the given B. +The OpenSSL error reason code defined in err.h to use on error is given as +B. + +Available CMP certificate request PKIMessage Bs are: + +=over 4 + +=item * B - Initialization Request + +=item * B - Certification Request + +=item * B - PKCS#10 Certification Request + +=item * B - Key Update Request + +=back + +ossl_cmp_certrep_new() creates a PKIMessage for certificate response, which can +be either of IP/CP/KUP, depending on the given B. + +Available CMP certificate response PKIMessage Bs are: + +=over 4 + +=item * B - Initialization Response + +=item * B - Certification Response + +=item * B - Key Update Response + +=back + +The list of all CMP PKIMessage Bs is: + + #define OSSL_CMP_PKIBODY_IR 0 + #define OSSL_CMP_PKIBODY_IP 1 + #define OSSL_CMP_PKIBODY_CR 2 + #define OSSL_CMP_PKIBODY_CP 3 + #define OSSL_CMP_PKIBODY_P10CR 4 + #define OSSL_CMP_PKIBODY_POPDECC 5 + #define OSSL_CMP_PKIBODY_POPDECR 6 + #define OSSL_CMP_PKIBODY_KRR 9 + #define OSSL_CMP_PKIBODY_KRP 10 + #define OSSL_CMP_PKIBODY_RR 11 + #define OSSL_CMP_PKIBODY_RP 12 + #define OSSL_CMP_PKIBODY_CCR 13 + #define OSSL_CMP_PKIBODY_CCP 14 + #define OSSL_CMP_PKIBODY_CKUANN 15 + #define OSSL_CMP_PKIBODY_CANN 16 + #define OSSL_CMP_PKIBODY_RANN 17 + #define OSSL_CMP_PKIBODY_CRLANN 18 + #define OSSL_CMP_PKIBODY_PKICONF 19 + #define OSSL_CMP_PKIBODY_NESTED 20 + #define OSSL_CMP_PKIBODY_GENM 21 + #define OSSL_CMP_PKIBODY_GENP 22 + #define OSSL_CMP_PKIBODY_ERROR 23 + #define OSSL_CMP_PKIBODY_CERTCONF 24 + #define OSSL_CMP_PKIBODY_POLLREQ 25 + #define OSSL_CMP_PKIBODY_POLLREP 26 + +ossl_cmp_rr_new() creates a Revocation Request message from the +information set via OSSL_CMP_CTX_set1_oldClCert(). + +ossl_cmp_rp_new() creates a Revocation Response message with status set to +B and CertID set to B. Consumes B. +Accepts unprotected errors if B != 0. + +ossl_cmp_certConf_new() creates a Certificate Confirmation message for the last +received certificate. PKIStatus defaults to B if the B bit +field is 0. Else it is taken as the failInfo of the PKIStatusInfo, PKIStatus is +set to B, and B is copied to statusString unless it is NULL. + +ossl_cmp_pkiconf_new() creates a PKI Confirmation message. + +ossl_cmp_pollReq_new() creates a Polling Request message with certReqId set to +B. + +ossl_cmp_pollRep_new() creates a Polling Response message with certReqId set to +B and pollAfter to B. + +ossl_cmp_genm_new() creates a new General Message with an empty ITAV stack. + +ossl_cmp_genp_new() creates a new General Response with an empty ITAV stack. + +ossl_cmp_error_new() creates a new Error Message with the given contents, +copying B and B. + +=head1 NOTES + +CMP is specified in RFC 4210 (and CRMF in RFC 4211). + +=head1 RETURN VALUES + +All of the functions return a new OSSL_CMP_MSG structure containing +the generated message on success, or NULL on error. + +=head1 SEE ALSO + +L, L + +=head1 HISTORY + +The OpenSSL CMP support was added in OpenSSL 3.0. + +=head1 COPYRIGHT + +Copyright 2007-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 +L. + +=cut diff --git a/doc/internal/man3/ossl_cmp_msg_create.pod b/doc/internal/man3/ossl_cmp_msg_create.pod new file mode 100644 index 00000000..7498a1d6 --- /dev/null +++ b/doc/internal/man3/ossl_cmp_msg_create.pod @@ -0,0 +1,81 @@ +=pod + +=head1 NAME + +ossl_cmp_bodytype_to_string, +ossl_cmp_msg_get_bodytype, +ossl_cmp_msg_set_bodytype, +ossl_cmp_msg_create, +ossl_cmp_msg_load, +ossl_cmp_msg_gen_ITAV_push0, +ossl_cmp_msg_gen_ITAVs_push1 +- functions manipulating CMP messages + +=head1 SYNOPSIS + + #include "cmp_int.h" + + const char *ossl_cmp_bodytype_to_string(int type); + int ossl_cmp_msg_get_bodytype(const OSSL_CMP_MSG *msg); + int ossl_cmp_msg_set_bodytype( OSSL_CMP_MSG *msg, int type); + OSSL_CMP_MSG *ossl_cmp_msg_create(OSSL_CMP_CTX *ctx, int bodytype); + OSSL_CMP_MSG *ossl_cmp_msg_load(const char *file); + int ossl_cmp_msg_gen_ITAV_push0(OSSL_CMP_MSG *msg, OSSL_CMP_ITAV *itav); + int ossl_cmp_msg_gen_ITAVs_push1(OSSL_CMP_MSG *msg, + STACK_OF(OSSL_CMP_ITAV) *itavs); + +=head1 DESCRIPTION + +ossl_cmp_bodytype_to_string() returns the name of the given body type as string, +or "illegal body type" on error. + +ossl_cmp_msg_get_bodytype() returns the body type of the given PKIMessage, +or -1 on error. + +ossl_cmp_msg_set_bodytype() sets the type of the message contained in +the PKIMessage body field. +Returns 1 on success, 0 on error. + +ossl_cmp_msg_create() creates and initializes a OSSL_CMP_MSG structure, +using B for the header and B for the body. +Returns pointer to created OSSL_CMP_MSG on success, NULL on error. + +OSSL_CMP_MSG *ossl_cmp_msg_load() loads a OSSL_CMP_MSG from a B. +Returns pointer to created OSSL_CMP_MSG on success, NULL on error. + +ossl_cmp_msg_gen_ITAV_push0() pushes the B to the body of the +PKIMessage B of GenMsg or GenRep type. Consumes the B pointer. +Returns 1 on success, 0 on error. + +ossl_cmp_msg_gen_ITAVs_push1() adds a copy of the B stack to the body +of the PKIMessage B of GenMsg or GenRep type. +Does not consume the B pointer nor its elements. +Returns 1 on success, 0 on error. + +=head1 NOTES + +CMP is defined in RFC 4210 (and CRMF in RFC 4211). + +=head1 RETURN VALUES + +See the individual functions above. + +=head1 SEE ALSO + +L, L, +L + +=head1 HISTORY + +The OpenSSL CMP support was added in OpenSSL 3.0. + +=head1 COPYRIGHT + +Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. + +Licensed under the Apache License 2.0 (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +L. + +=cut diff --git a/doc/internal/man3/ossl_cmp_msg_protect.pod b/doc/internal/man3/ossl_cmp_msg_protect.pod new file mode 100644 index 00000000..7fd4e82e --- /dev/null +++ b/doc/internal/man3/ossl_cmp_msg_protect.pod @@ -0,0 +1,53 @@ +=pod + +=head1 NAME + +ossl_cmp_msg_protect, +ossl_cmp_msg_add_extraCerts +- functions for producing CMP message protection + +=head1 SYNOPSIS + + #include "cmp_int.h" + + int ossl_cmp_msg_protect(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); + int ossl_cmp_msg_add_extraCerts(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); + +=head1 DESCRIPTION + +ossl_cmp_msg_protect() protects the given message B using an algorithm +depending on the available context information given in the B. +If there is a secretValue it selects PBMAC. Else if there is a clCert +it selects Signature and uses B. +It also sets the protectionAlg field in the message header accordingly. + +ossl_cmp_msg_add_extraCerts() adds elements to the extraCerts field in the given +message B. It tries to build the certificate chain of the client cert in +the B if present by using certificates in ctx->untrusted_certs; +if no untrusted certs are set, it will at least add the client certificate. +In any case all the certificates explicitly specified to be sent out (i.e., +BextraCertsOut>) are added. Note that it will NOT add the root certificate +of the chain, i.e, the trust anchor (unless it is part of extraCertsOut). + +=head1 NOTES + +CMP is defined in RFC 4210 (and CRMF in RFC 4211). + +=head1 RETURN VALUES + +All functions return 1 on success, 0 on error. + +=head1 HISTORY + +The OpenSSL CMP support was added in OpenSSL 3.0. + +=head1 COPYRIGHT + +Copyright 2007-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 +L. + +=cut diff --git a/doc/internal/man3/ossl_cmp_print_log.pod b/doc/internal/man3/ossl_cmp_print_log.pod new file mode 100644 index 00000000..47d4dd8e --- /dev/null +++ b/doc/internal/man3/ossl_cmp_print_log.pod @@ -0,0 +1,108 @@ +=pod + +=head1 NAME + +ossl_cmp_print_log, +ossl_cmp_alert, +ossl_cmp_err, +ossl_cmp_warn, +ossl_cmp_info, +ossl_cmp_debug, +ossl_cmp_log, +ossl_cmp_log1, +ossl_cmp_log2, +ossl_cmp_log3, +ossl_cmp_log4, +ossl_cmp_log_parse_metadata, +ossl_cmp_add_error_data, +ossl_cmp_add_error_line +- logging and error reporting support for CMP + +=head1 SYNOPSIS + + #include "cmp_local.h" + + int ossl_cmp_print_log(OSSL_CMP_severity level, const OSSL_CMP_CTX *ctx, + const char *func, const char *file, int line, + const char *level_str, const char *format, ...); + #define ossl_cmp_alert(ctx, msg) + #define ossl_cmp_err(ctx, msg) + #define ossl_cmp_warn(ctx, msg) + #define ossl_cmp_info(ctx, msg) + #define ossl_cmp_debug(ctx, (msg) + #define ossl_cmp_log(level, ctx, msg) + #define ossl_cmp_log1(level, ctx, fmt, arg1) + #define ossl_cmp_log2(level, ctx, fmt, arg1, arg2) + #define ossl_cmp_log3(level, ctx, fmt, arg1, arg2, arg3) + #define ossl_cmp_log4(level, ctx, fmt, arg1, arg2, arg3, arg4) + const char *ossl_cmp_log_parse_metadata(const char *buf, + OSSL_CMP_severity *level, char **func, + char **file, int *line); + + #define ossl_cmp_add_error_data(txt) + #define ossl_cmp_add_error_line(txt) + +=head1 DESCRIPTION + +ossl_cmp_print_log() prints CMP log messages (i.e., diagnostic info) via the +log callback of the B if present and the severity level is sufficient. +If the trace API if enabled the function uses it, prepending the function name, +filename, line number, and severity information to the message being output. +In any case the B, B, B, and B parameters +and the message constructed using the given B and variable further +argument list are passed to the log callback function (unless it is NULL). +The B, B, B, and B arguments may be NULL. + +ossl_cmp_alert(), ossl_cmp_err(), ossl_cmp_warn(), ossl_cmp_info(), and +ossl_cmp_debug() output a simple alert/error/warning/info/debug message +via ossl_cmp_print_log(). + +ossl_cmp_log(), ossl_cmp_log1(), ossl_cmp_log2(), ossl_cmp_log3(), and +ossl_cmp_log4() output a log message with the given severity, +constructing the message text from the given format and arguments. + +ossl_cmp_log_parse_metadata() parses the given message buffer I populated +by ossl_cmp_log() etc. +according to the pattern OSSL_CMP_LOG_START#level ": %s\n", filling in +the variable pointed to by I with the severity level or -1, +the variable pointed to by I with the function name string or NULL, +the variable pointed to by I with the filename string or NULL, and +the variable pointed to by I with the line number or -1. +Any string returned via I<*func> and I<*file> must be freeed by the caller. + +ossl_cmp_add_error_data() is a macro calling +L with the separator being ":". + +ossl_cmp_add_error_line() is a macro calling +L with the separator being "\n". + +=head1 RETURN VALUES + +ossl_cmp_log_parse_metadata() returns the pointer to the actual message text +after the OSSL_CMP_LOG_PREFIX and level and ':' if found in the buffer, +else the beginning of the buffer. + +ossl_cmp_add_error_data() and +ossl_cmp_add_error_line() +do not return anything. + +All other functions return 1 on success, 0 on error. + +=head1 SEE ALSO + +L + +=head1 HISTORY + +The OpenSSL CMP support was added in OpenSSL 3.0. + +=head1 COPYRIGHT + +Copyright 2007-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 +L. + +=cut diff --git a/doc/internal/man3/ossl_cmp_sk_X509_add1_cert.pod b/doc/internal/man3/ossl_cmp_sk_X509_add1_cert.pod index cb36855a..4c647708 100644 --- a/doc/internal/man3/ossl_cmp_sk_X509_add1_cert.pod +++ b/doc/internal/man3/ossl_cmp_sk_X509_add1_cert.pod @@ -15,9 +15,9 @@ ossl_cmp_X509_STORE_get1_certs int ossl_cmp_sk_X509_add1_cert(STACK_OF(X509) *sk, X509 *cert, int no_dup, int prepend); int ossl_cmp_sk_X509_add1_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, - int no_self_signed, int no_dups, int prepend); + int no_self_issued, int no_dups, int prepend); int ossl_cmp_X509_STORE_add1_certs(X509_STORE *store, STACK_OF(X509) *certs, - int only_self_signed); + int only_self_issued); STACK_OF(X509) *ossl_cmp_X509_STORE_get1_certs(X509_STORE *store); =head1 DESCRIPTION @@ -29,10 +29,10 @@ On success the reference count of the certificate is increased. ossl_cmp_sk_X509_add1_certs() appends or prepends (depending on the I argument) a list of certificates to the given list, -optionally only if not self-signed and optionally only if not already contained. +optionally only if not self-issued and optionally only if not already contained. The reference counts of those certificates appended successfully are increased. -ossl_cmp_X509_STORE_add1_certs() adds all or only self-signed certificates from +ossl_cmp_X509_STORE_add1_certs() adds all or only self-issued certificates from the given stack to given store. The I parameter may be NULL. ossl_cmp_X509_STORE_get1_certs() retrieves a copy of all certificates in the diff --git a/doc/internal/man3/ossl_param_bld_init.pod b/doc/internal/man3/ossl_param_bld_init.pod index 545eaf14..110192fb 100644 --- a/doc/internal/man3/ossl_param_bld_init.pod +++ b/doc/internal/man3/ossl_param_bld_init.pod @@ -2,7 +2,7 @@ =head1 NAME -ossl_param_bld_init, ossl_param_bld_to_param, ossl_param_bld_to_param_ex, +ossl_param_bld_init, ossl_param_bld_to_param, ossl_param_bld_free, ossl_param_bld_push_int, ossl_param_bld_push_uint, ossl_param_bld_push_long, ossl_param_bld_push_ulong, ossl_param_bld_push_int32, ossl_param_bld_push_uint32, @@ -24,10 +24,6 @@ ossl_param_bld_push_octet_string, ossl_param_bld_push_octet_ptr void ossl_param_bld_init(OSSL_PARAM_BLD *bld); OSSL_PARAM *ossl_param_bld_to_param(OSSL_PARAM_BLD *bld); - OSSL_PARAM *ossl_param_bld_to_param_ex(OSSL_PARAM_BLD *bld, - OSSL_PARAM *params, size_t param_n, - void *data, size_t data_n, - void *secure, size_t secure_n); void ossl_param_bld_free(OSSL_PARAM *params); int ossl_param_bld_push_TYPE(OSSL_PARAM_BLD *bld, const char *key, TYPE val); @@ -64,14 +60,6 @@ ossl_param_bld_free() with the functions return value. ossl_param_bld_free() deallocates the memory allocated by ossl_param_bld_to_param(). -ossl_param_bld_to_param_ex() behaves like ossl_param_bld_to_param(), except that -no additional memory is allocated. -An OSSL_PARAM array of at least I elements is passed in as I. -The auxiliary storage for the parameters is a block of memory pointed to -by I of at least I bytes in size. -If required, secure memory for private BIGNUMs should be pointed to by -I of at least I bytes in size. - =begin comment POD is pretty good at recognising function names and making them appropriately @@ -125,8 +113,8 @@ scope until the OSSL_PARAM array is freed. =head1 RETURN VALUES -ossl_param_bld_to_param() and ossl_param_bld_to_param_ex() return the -allocated OSSL_PARAM array, or NULL on error. +ossl_param_bld_to_param() returns the allocated OSSL_PARAM array, or NULL +on error. All of the ossl_param_bld_push_TYPE functions return 1 on success and 0 on error. diff --git a/doc/man1/openssl-dhparam.pod.in b/doc/man1/openssl-dhparam.pod.in index 9da15f7a..906af1c2 100644 --- a/doc/man1/openssl-dhparam.pod.in +++ b/doc/man1/openssl-dhparam.pod.in @@ -29,6 +29,9 @@ B =head1 DESCRIPTION +This command has been deprecated. +The L command should be used instead. + This command is used to manipulate DH parameter files. =head1 OPTIONS @@ -125,8 +128,13 @@ There should be a way to generate and manipulate DH keys. =head1 SEE ALSO L, +L, L +=head1 HISTORY + +This command was deprecated in OpenSSL 3.0. + =head1 COPYRIGHT Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man1/openssl-dsa.pod.in b/doc/man1/openssl-dsa.pod.in index 548d3687..4ba948a4 100644 --- a/doc/man1/openssl-dsa.pod.in +++ b/doc/man1/openssl-dsa.pod.in @@ -42,6 +42,9 @@ B B =head1 DESCRIPTION +This command has been deprecated. +The L command should be used instead. + This command processes DSA keys. They can be converted between various forms and their components printed out. B This command uses the traditional SSLeay compatible format for private key encryption: newer @@ -147,11 +150,16 @@ To just output the public part of a private key: =head1 SEE ALSO L, +L, L, L, L, L +=head1 HISTORY + +This command was deprecated in OpenSSL 3.0. + =head1 COPYRIGHT Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man1/openssl-dsaparam.pod.in b/doc/man1/openssl-dsaparam.pod.in index bab74367..51d44bd9 100644 --- a/doc/man1/openssl-dsaparam.pod.in +++ b/doc/man1/openssl-dsaparam.pod.in @@ -24,6 +24,9 @@ B =head1 DESCRIPTION +This command has been deprecated. +The L command should be used instead. + This command is used to manipulate or generate DSA parameter files. DSA parameter generation can be a slow process and as a result the same set of @@ -95,11 +98,16 @@ the input file (if any) is ignored. =head1 SEE ALSO L, +L, L, L, L, L +=head1 HISTORY + +This command was deprecated in OpenSSL 3.0. + =head1 COPYRIGHT Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man1/openssl-gendsa.pod.in b/doc/man1/openssl-gendsa.pod.in index e98d662a..f1f8fe5b 100644 --- a/doc/man1/openssl-gendsa.pod.in +++ b/doc/man1/openssl-gendsa.pod.in @@ -32,6 +32,9 @@ B B =head1 DESCRIPTION +This command has been deprecated. +The L command should be used instead. + This command generates a DSA private key from a DSA parameter file (which will be typically generated by the L command). @@ -83,11 +86,16 @@ much quicker that RSA key generation for example. =head1 SEE ALSO L, +L, L, L, L, L +=head1 HISTORY + +This command was deprecated in OpenSSL 3.0. + =head1 COPYRIGHT Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man1/openssl-x509.pod.in b/doc/man1/openssl-x509.pod.in index 3da2b0d1..50496984 100644 --- a/doc/man1/openssl-x509.pod.in +++ b/doc/man1/openssl-x509.pod.in @@ -45,7 +45,7 @@ B B [B<-setalias> I] [B<-days> I] [B<-set_serial> I] -[B<-signkey> I] +[B<-signkey> I] [B<-badsig>] [B<-passin> I] [B<-x509toreq>] @@ -348,10 +348,11 @@ can thus behave like a "mini CA". =over 4 -=item B<-signkey> I +=item B<-signkey> I This option causes the input file to be self signed using the supplied -private key. +private key or engine. The private key's format is specified with the +B<-keyform> option. It sets the issuer name to the subject name (i.e., makes it self-issued) and changes the public key to the supplied value (unless overridden by diff --git a/doc/man3/BIO_f_buffer.pod b/doc/man3/BIO_f_buffer.pod index 6009b479..ec3f04d7 100644 --- a/doc/man3/BIO_f_buffer.pod +++ b/doc/man3/BIO_f_buffer.pod @@ -49,10 +49,20 @@ is expanded. These functions, other than BIO_f_buffer(), are implemented as macros. -Buffering BIOs implement BIO_gets() by using BIO_read_ex() operations on the -next BIO in the chain. By prepending a buffering BIO to a chain it is therefore -possible to provide BIO_gets() functionality if the following BIOs do not -support it (for example SSL BIOs). +Buffering BIOs implement BIO_read_ex() and BIO_gets() by using +BIO_read_ex() operations on the next BIO in the chain and storing the +result in an internal buffer, from which bytes are given back to the +caller as appropriate for the call; a BIO_gets() is guaranteed to give +the caller a whole line, and BIO_read_ex() is guaranteed to give the +caller the number of bytes it asks for, unless there's an error or end +of communication is reached in the next BIO. By prepending a +buffering BIO to a chain it is therefore possible to provide +BIO_gets() or exact size BIO_read_ex() functionality if the following +BIOs do not support it. + +Do not add more than one BIO_f_buffer() to a BIO chain. The result of +doing so will force a full read of the size of the internal buffer of +the top BIO_f_buffer(), which is 4 KiB at a minimum. Data is only written to the next BIO in the chain when the write buffer fills or when BIO_flush() is called. It is therefore important to call BIO_flush() diff --git a/doc/man3/DSA_meth_new.pod b/doc/man3/DSA_meth_new.pod index c5e6ccd0..1e23c0e6 100644 --- a/doc/man3/DSA_meth_new.pod +++ b/doc/man3/DSA_meth_new.pod @@ -16,6 +16,10 @@ DSA_meth_set_keygen - Routines to build up DSA methods #include +Deprecated since OpenSSL 3.0, can be hidden entirely by defining +B with a suitable version value, see +L: + DSA_METHOD *DSA_meth_new(const char *name, int flags); void DSA_meth_free(DSA_METHOD *dsam); @@ -86,6 +90,10 @@ DSA_meth_set_keygen - Routines to build up DSA methods =head1 DESCRIPTION +All of the functions described on this page are deprecated. +Applications and extension implementations should instead use the +OSSL_PROVIDER APIs. + The B type is a structure used for the provision of custom DSA implementations. It provides a set of functions used by OpenSSL for the implementation of the various DSA capabilities. @@ -200,11 +208,13 @@ L, L, L =head1 HISTORY +The functions described here were deprecated in OpenSSL 3.0. + The functions described here were added in OpenSSL 1.1.0. =head1 COPYRIGHT -Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy diff --git a/doc/man3/DSA_size.pod b/doc/man3/DSA_size.pod index e74b3258..473ab985 100644 --- a/doc/man3/DSA_size.pod +++ b/doc/man3/DSA_size.pod @@ -8,12 +8,20 @@ DSA_size, DSA_bits, DSA_security_bits - get DSA signature size, key bits or secu #include +Deprecated since OpenSSL 3.0, can be hidden entirely by defining +B with a suitable version value, see +L: + int DSA_size(const DSA *dsa); int DSA_bits(const DSA *dsa); int DSA_security_bits(const DSA *dsa); =head1 DESCRIPTION +All of the functions described on this page are deprecated. +Applications should instead use L, +L and L. + DSA_size() returns the maximum size of an ASN.1 encoded DSA signature for key B in bytes. It can be used to determine how much memory must be allocated for a DSA signature. @@ -34,8 +42,15 @@ DSA_bits() returns the number of bits in the key. =head1 SEE ALSO +L, +L, +L, L, L +=head1 HISTORY + +All of these functions were deprecated in OpenSSL 3.0. + =head1 COPYRIGHT Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man3/ERR_put_error.pod b/doc/man3/ERR_put_error.pod index e3c19bfd..85538f71 100644 --- a/doc/man3/ERR_put_error.pod +++ b/doc/man3/ERR_put_error.pod @@ -3,7 +3,8 @@ =head1 NAME ERR_raise, ERR_raise_data, -ERR_put_error, ERR_add_error_data, ERR_add_error_vdata +ERR_put_error, ERR_add_error_data, ERR_add_error_vdata, +ERR_add_error_txt, ERR_add_error_mem_bio - record an error =head1 SYNOPSIS @@ -15,6 +16,8 @@ ERR_put_error, ERR_add_error_data, ERR_add_error_vdata void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list arg); + void ERR_add_error_txt(const char *sep, const char *txt); + void ERR_add_error_mem_bio(const char *sep, BIO *bio); Deprecated since OpenSSL 3.0: @@ -38,9 +41,23 @@ B of library B, in line number B of B. This function is usually called by a macro. ERR_add_error_data() associates the concatenation of its B string -arguments with the error code added last. +arguments as additional data with the error code added last. ERR_add_error_vdata() is similar except the argument is a B. Multiple calls to these functions append to the current top of the error queue. +The total length of the string data per error is limited to 4096 characters. + +ERR_add_error_txt() appends the given text string as additional data to the +last error queue entry, after inserting the optional separator string if it is +not NULL and the top error entry does not yet have additional data. +In case the separator is at the end of the text it is not appended to the data. +The B argument may be for instance "\n" to insert a line break when needed. +If the associated data would become more than 4096 characters long +(which is the limit given above) +it is split over sufficiently many new copies of the last error queue entry. + +ERR_add_error_mem_bio() is the same as ERR_add_error_txt() except that +the text string is taken from the given memory BIO. +It appends '\0' to the BIO contents if not already NUL-terminated. L can be used to register error strings so that the application can a generate human-readable @@ -76,8 +93,10 @@ the ASN1err() macro. =head1 RETURN VALUES -ERR_raise(), ERR_put_error(), ERR_add_error_data() and -ERR_add_error_vdata() return no values. +ERR_raise(), ERR_put_error(), +ERR_add_error_data(), ERR_add_error_vdata() +ERR_add_error_txt(), and ERR_add_error_mem_bio() +return no values. =head1 NOTES @@ -87,6 +106,10 @@ ERR_raise() and ERR_put_error() are implemented as macros. L +=head1 HISTORY + +B and B were added in OpenSSL 3.0. + =head1 COPYRIGHT Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man3/OSSL_CMP_log_open.pod b/doc/man3/OSSL_CMP_log_open.pod index 64399e2b..9f204d6e 100644 --- a/doc/man3/OSSL_CMP_log_open.pod +++ b/doc/man3/OSSL_CMP_log_open.pod @@ -4,16 +4,6 @@ OSSL_CMP_log_open, OSSL_CMP_log_close, -OSSL_CMP_alert, -OSSL_CMP_err, -OSSL_CMP_warn, -OSSL_CMP_info, -OSSL_CMP_debug, -OSSL_CMP_log, -OSSL_CMP_log1, -OSSL_CMP_log2, -OSSL_CMP_log3, -OSSL_CMP_log4, OSSL_CMP_severity, OSSL_CMP_LOG_EMERG, OSSL_CMP_LOG_ALERT, @@ -24,6 +14,7 @@ OSSL_CMP_LOG_NOTICE, OSSL_CMP_LOG_INFO, OSSL_CMP_LOG_DEBUG, OSSL_cmp_log_cb_t, +OSSL_CMP_print_to_bio, OSSL_CMP_print_errors_cb - functions for logging and error reporting @@ -33,16 +24,6 @@ OSSL_CMP_print_errors_cb int OSSL_CMP_log_open(void); void OSSL_CMP_log_close(void); - #define OSSL_CMP_alert(msg) - #define OSSL_CMP_err(msg) - #define OSSL_CMP_warn(msg) - #define OSSL_CMP_info(msg) - #define OSSL_CMP_debug(msg) - #define OSSL_CMP_log(level, msg) - #define OSSL_CMP_log1(level, fmt, arg1) - #define OSSL_CMP_log2(level, fmt, arg1, arg2) - #define OSSL_CMP_log3(level, fmt, arg1, arg2, arg3) - #define OSSL_CMP_log4(level, fmt, arg1, arg2, arg3, arg4) /* severity level declarations resemble those from syslog.h */ typedef int OSSL_CMP_severity; @@ -54,16 +35,18 @@ OSSL_CMP_print_errors_cb #define OSSL_CMP_LOG_NOTICE 5 #define OSSL_CMP_LOG_INFO 6 #define OSSL_CMP_LOG_DEBUG 7 + typedef int (*OSSL_cmp_log_cb_t)(const char *component, const char *file, int line, OSSL_CMP_severity level, const char *msg); - + int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg); void OSSL_CMP_print_errors_cb(OSSL_cmp_log_cb_t log_fn); =head1 DESCRIPTION The logging and error reporting facility described here contains -convenience functions for CMP-specific logging via the trace API, +convenience functions for CMP-specific logging, including a string prefix mirroring the severity levels of syslog.h, and enhancements of the error queue mechanism needed for large diagnostic messages produced by the CMP library in case of certificate validation failures. @@ -73,12 +56,12 @@ should be provided for user information, debugging, and auditing purposes. A CMP application can obtain this information by providing a callback function with the following type: - typedef void (*OSSL_cmp_log_cb_t)(const char *component, - const char *file, int line, - OSSL_CMP_severity level, const char *msg); + typedef int (*OSSL_cmp_log_cb_t)(const char *component, + const char *file, int line, + OSSL_CMP_severity level, const char *msg); The parameters may provide -a component identifier (which may be a library name or function name) or NULL, +some component info (which may be a module name and/or function name) or NULL, a file pathname or NULL, a line number or 0 indicating the source code location, a severity level, and @@ -105,19 +88,15 @@ OSSL_CMP_log_close() may be called when all activities are finished to flush any pending CMP-specific log output and deallocate related resources. It may be called multiple times. It does get called at OpenSSL stutdown. -OSSL_CMP_alert() outputs a simple alert message via the trace API. -OSSL_CMP_err() outputs a simple error message via the trace API. -OSSL_CMP_warn() outputs a simple warning message via the trace API. -OSSL_CMP_info() outputs a simple info message via the trace API. -OSSL_CMP_debug() outputs a simple debug message via the trace API. - -Note that due to the design of the trace API used, the log functions have no -effect unless the B option is used during build configuration. +OSSL_CMP_print_to_bio() prints the given component info, filename, line number, +severity level, and log message or error queue message to the given B. +B usually is a function or module name. +If it is NULL, empty, or "(unknown function)" then "CMP" is used as fallback. OSSL_CMP_print_errors_cb() outputs any entries in the OpenSSL error queue. It is similar to B but uses the CMP log callback function -C for uniformity with CMP logging if not B. Otherwise it uses -B to print to STDERR (unless OPENSSL_NO_STDIO is defined). +C for uniformity with CMP logging if not B. Otherwise it prints to +STDERR using B (unless OPENSSL_NO_STDIO is defined). =head1 RETURN VALUES diff --git a/doc/man3/OSSL_CMP_validate_msg.pod b/doc/man3/OSSL_CMP_validate_msg.pod new file mode 100644 index 00000000..acb17fac --- /dev/null +++ b/doc/man3/OSSL_CMP_validate_msg.pod @@ -0,0 +1,86 @@ +=pod + +=head1 NAME + +OSSL_CMP_validate_msg, +OSSL_CMP_validate_cert_path +- functions for verifying CMP message protection + +=head1 SYNOPSIS + + #include + int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); + int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +=head1 DESCRIPTION + +This is the API for validating the protection of CMP messages, +which includes validating CMP message sender certificates and their paths +while optionally checking the revocation status of the certificates(s). + +OSSL_CMP_validate_msg() validates the protection of the given C +using either password-based mac (PBM) or a signature algorithm. + +In case of signature algorithm, the certificate to use for the signature check +is preferably the one provided by a call to L. +If no such sender cert has been pinned then candidate sender certificates are +taken from the list of certificates received in the C extraCerts, then any +certificates provided before via L, and +then all trusted certificates provided via L, +where a candidate is acceptable only if has not expired, its subject DN matches +the C sender DN (as far as present), and its subject key identifier +is present and matches the senderKID (as far as the latter present). +Each acceptable cert is tried in the given order to see if the message +signature check succeeds and the cert and its path can be verified +using any trust store set via L. + +If the option OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR was set by calling +L, for an Initialization Response (IP) message +any self-issued certificate from the C extraCerts field may also be used +as trust anchor for the path verification of an acceptable cert if it can be +used also to validate the issued certificate returned in the IP message. This is +according to TS 33.310 [Network Domain Security (NDS); Authentication Framework +(AF)] document specified by the The 3rd Generation Partnership Project (3GPP). + +Any cert that has been found as described above is cached and tried first when +validating the signatures of subsequent messages in the same transaction. + +After successful validation of PBM-based protection of a certificate response +the certificates in the caPubs field (if any) are added to the trusted +certificates provided via L, such that +they are available for validating subsequent messages in the same context. +Those could apply to any Polling Response (pollRep), error, or PKI Confirmation +(PKIConf) messages following in the same or future transactions. + +OSSL_CMP_validate_cert_path() attempts to validate the given certificate and its +path using the given store of trusted certs (possibly including CRLs and a cert +verification callback) and non-trusted intermediate certs from the B. + +=head1 NOTES + +CMP is defined in RFC 4210 (and CRMF in RFC 4211). + +=head1 RETURN VALUES + +OSSL_CMP_validate_msg() and OSSL_CMP_validate_cert_path() +return 1 on success, 0 on error or validation failed. + +=head1 SEE ALSO + +L, L + +=head1 HISTORY + +The OpenSSL CMP support was added in OpenSSL 3.0. + +=head1 COPYRIGHT + +Copyright 2007-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 +L. + +=cut diff --git a/doc/man3/OSSL_PARAM_construct_from_text.pod b/doc/man3/OSSL_PARAM_allocate_from_text.pod similarity index 86% rename from doc/man3/OSSL_PARAM_construct_from_text.pod rename to doc/man3/OSSL_PARAM_allocate_from_text.pod index 7e6c3e91..c16491e7 100644 --- a/doc/man3/OSSL_PARAM_construct_from_text.pod +++ b/doc/man3/OSSL_PARAM_allocate_from_text.pod @@ -2,18 +2,13 @@ =head1 NAME -OSSL_PARAM_construct_from_text, OSSL_PARAM_allocate_from_text +OSSL_PARAM_allocate_from_text - OSSL_PARAM construction utilities =head1 SYNOPSIS #include - int OSSL_PARAM_construct_from_text(OSSL_PARAM *to, - const OSSL_PARAM *paramdefs, - const char *key, const char *value, - size_t value_n, - void *buf, size_t *buf_n) int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, const OSSL_PARAM *paramdefs, const char *key, const char *value, @@ -30,7 +25,7 @@ OpenSSL 3.0 introduces a new mechanism to do the same thing with an array of parameters that contain name, value, value type and value size (see L for more information). -OSSL_PARAM_construct_from_text() takes a control I, I and +OSSL_PARAM_allocate_from_text() takes a control I, I and value size I, and given a parameter descriptor array I, it converts the value to something suitable for L and stores that in the buffer I, and modifies @@ -42,9 +37,6 @@ left untouched, allowing a caller to find out how large the buffer should be. I needs to be correctly aligned for the type of the B I. - -OSSL_PARAM_allocate_from_text() works like OSSL_PARAM_construct_from_text(), -except it allocates the buffer internally. The caller must remember to free the data of I when it's not useful any more. @@ -57,8 +49,7 @@ as parameter value. =head1 RETURN VALUES -OSSL_PARAM_construct_from_text() and OSSL_PARAM_allocate_from_text() -returns 1 on success, and 0 on error. +OSSL_PARAM_allocate_from_text() returns 1 on success, and 0 on error. =head1 NOTES diff --git a/doc/man3/OSSL_SERIALIZER_CTX_new_by_EVP_PKEY.pod b/doc/man3/OSSL_SERIALIZER_CTX_new_by_EVP_PKEY.pod index 8cc7cfbf..f95753aa 100644 --- a/doc/man3/OSSL_SERIALIZER_CTX_new_by_EVP_PKEY.pod +++ b/doc/man3/OSSL_SERIALIZER_CTX_new_by_EVP_PKEY.pod @@ -10,6 +10,9 @@ OSSL_SERIALIZER_CTX_set_passphrase_ui, OSSL_SERIALIZER_PUBKEY_TO_PEM_PQ, OSSL_SERIALIZER_PrivateKey_TO_PEM_PQ, OSSL_SERIALIZER_Parameters_TO_PEM_PQ, +OSSL_SERIALIZER_PUBKEY_TO_DER_PQ, +OSSL_SERIALIZER_PrivateKey_TO_DER_PQ, +OSSL_SERIALIZER_Parameters_TO_DER_PQ, OSSL_SERIALIZER_PUBKEY_TO_TEXT_PQ, OSSL_SERIALIZER_PrivateKey_TO_TEXT_PQ, OSSL_SERIALIZER_Parameters_TO_TEXT_PQ @@ -38,6 +41,10 @@ OSSL_SERIALIZER_Parameters_TO_TEXT_PQ #define OSSL_SERIALIZER_PrivateKey_TO_PEM_PQ "format=pem,type=private" #define OSSL_SERIALIZER_Parameters_TO_PEM_PQ "format=pem,type=parameters" + #define OSSL_SERIALIZER_PUBKEY_TO_DER_PQ "format=der,type=public" + #define OSSL_SERIALIZER_PrivateKey_TO_DER_PQ "format=der,type=private" + #define OSSL_SERIALIZER_Parameters_TO_DER_PQ "format=der,type=parameters" + #define OSSL_SERIALIZER_PUBKEY_TO_TEXT_PQ "format=text,type=public" #define OSSL_SERIALIZER_PrivateKey_TO_TEXT_PQ "format=text,type=private" #define OSSL_SERIALIZER_Parameters_TO_TEXT_PQ "format=text,type=parameters" @@ -84,11 +91,14 @@ through an internal B function. The macros B, B, B, +B, +B, +B, B, B, B are convenience macros with property queries to serialize the B as a public key, private -key or parameters to B, or to text. +key or parameters to B, to B, or to text. =head1 RETURN VALUES diff --git a/doc/man3/RSA_print.pod b/doc/man3/RSA_print.pod index a0904b66..8318b552 100644 --- a/doc/man3/RSA_print.pod +++ b/doc/man3/RSA_print.pod @@ -10,11 +10,19 @@ DHparams_print, DHparams_print_fp - print cryptographic parameters #include +Deprecated since OpenSSL 3.0, can be hidden entirely by defining +B with a suitable version value, see +L: + int RSA_print(BIO *bp, RSA *x, int offset); int RSA_print_fp(FILE *fp, RSA *x, int offset); #include +Deprecated since OpenSSL 3.0, can be hidden entirely by defining +B with a suitable version value, see +L: + int DSAparams_print(BIO *bp, DSA *x); int DSAparams_print_fp(FILE *fp, DSA *x); int DSA_print(BIO *bp, DSA *x, int offset); @@ -22,11 +30,19 @@ DHparams_print, DHparams_print_fp - print cryptographic parameters #include +Deprecated since OpenSSL 3.0, can be hidden entirely by defining +B with a suitable version value, see +L: + int DHparams_print(BIO *bp, DH *x); int DHparams_print_fp(FILE *fp, DH *x); =head1 DESCRIPTION +All of the functions described on this page are deprecated. +Applications should instead use L and +L. + A human-readable hexadecimal output of the components of the RSA key, DSA parameters or key or DH parameters is printed to B or B. @@ -38,7 +54,13 @@ These functions return 1 on success, 0 on error. =head1 SEE ALSO -L + L, + L, + L + +=head1 HISTORY + +All of these functions were deprecated in OpenSSL 3.0. =head1 COPYRIGHT diff --git a/doc/man3/X509_STORE_CTX_set_verify_cb.pod b/doc/man3/X509_STORE_CTX_set_verify_cb.pod index 64ccefa7..c53b14db 100644 --- a/doc/man3/X509_STORE_CTX_set_verify_cb.pod +++ b/doc/man3/X509_STORE_CTX_set_verify_cb.pod @@ -14,14 +14,16 @@ X509_STORE_CTX_get_check_issued, X509_STORE_CTX_get_get_issuer, X509_STORE_CTX_get_verify_cb, X509_STORE_CTX_set_verify_cb, -X509_STORE_CTX_verify_cb -- get and set verification callback +X509_STORE_CTX_verify_cb, +X509_STORE_CTX_print_verify_cb +- get and set X509_STORE_CTX components such as verification callback =head1 SYNOPSIS #include typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); + int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); @@ -63,6 +65,12 @@ structure and receive additional information about the error, for example by calling X509_STORE_CTX_get_current_cert(). Additional application data can be passed to the callback via the B mechanism. +X509_STORE_CTX_print_verify_cb() is a verification callback function that, +when a certificate verification has failed, adds an entry to the error queue +with code B and with diagnostic details, +including the most relevant fields of the target certificate that failed to +verify and, if appropriate, of the available untrusted and trusted certificates. + X509_STORE_CTX_get_verify_cb() returns the value of the current callback for the specific B. @@ -200,6 +208,8 @@ X509_STORE_CTX_get_cert_crl(), X509_STORE_CTX_get_check_policy(), X509_STORE_CTX_get_lookup_certs(), X509_STORE_CTX_get_lookup_crls() and X509_STORE_CTX_get_cleanup() functions were added in OpenSSL 1.1.0. +X509_STORE_CTX_print_verify_cb() was added in OpenSSL 3.0. + =head1 COPYRIGHT Copyright 2009-2016 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man3/X509_STORE_get0_param.pod b/doc/man3/X509_STORE_get0_param.pod index 27fe7867..6db760ea 100644 --- a/doc/man3/X509_STORE_get0_param.pod +++ b/doc/man3/X509_STORE_get0_param.pod @@ -3,7 +3,8 @@ =head1 NAME X509_STORE_get0_param, X509_STORE_set1_param, -X509_STORE_get0_objects - X509_STORE setter and getter functions +X509_STORE_get0_objects, X509_STORE_get1_all_certs +- X509_STORE setter and getter functions =head1 SYNOPSIS @@ -12,6 +13,7 @@ X509_STORE_get0_objects - X509_STORE setter and getter functions X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *ctx); + STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); =head1 DESCRIPTION @@ -22,10 +24,12 @@ X509_STORE_get0_param() retrieves an internal pointer to the verification parameters for B. The returned pointer must not be freed by the calling application -X509_STORE_get0_objects() retrieve an internal pointer to the store's +X509_STORE_get0_objects() retrieves an internal pointer to the store's X509 object cache. The cache contains B and B objects. The returned pointer must not be freed by the calling application. +X509_STORE_get1_all_certs() returns a list of all certificates in the store. +The caller is responsible for freeing the returned list. =head1 RETURN VALUES @@ -36,6 +40,9 @@ X509_STORE_set1_param() returns 1 for success and 0 for failure. X509_STORE_get0_objects() returns a pointer to a stack of B. +X509_STORE_get1_all_certs() returns a pointer to a stack of the retrieved +certificates on success, else NULL. + =head1 SEE ALSO L @@ -44,6 +51,7 @@ L B and B were added in OpenSSL 1.1.0. +B was added in OpenSSL 3.0. =head1 COPYRIGHT diff --git a/e_os.h b/e_os.h index e33c56dc..bd864240 100644 --- a/e_os.h +++ b/e_os.h @@ -299,11 +299,16 @@ struct servent *getservbyname(const char *name, const char *proto); # define CRYPTO_memcmp memcmp # endif -/* unistd.h defines _POSIX_VERSION */ -# if !defined(OPENSSL_NO_SECURE_MEMORY) && defined(OPENSSL_SYS_UNIX) \ - && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) \ - || defined(__sun) || defined(__hpux) || defined(__sgi) \ - || defined(__osf__) ) -# define OPENSSL_SECURE_MEMORY /* secure memory is implemented */ +# ifndef OPENSSL_NO_SECURE_MEMORY + /* unistd.h defines _POSIX_VERSION */ +# if defined(OPENSSL_SYS_UNIX) \ + && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) \ + || defined(__sun) || defined(__hpux) || defined(__sgi) \ + || defined(__osf__) ) + /* secure memory is implemented */ +# else +# define OPENSSL_NO_SECURE_MEMORY +# endif # endif + #endif diff --git a/fuzz/asn1.c b/fuzz/asn1.c index 0dbccb06..846bb8fa 100644 --- a/fuzz/asn1.c +++ b/fuzz/asn1.c @@ -334,9 +334,9 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len) #endif #ifndef OPENSSL_NO_DSA DO_TEST_NO_PRINT(DSA_SIG, d2i_DSA_SIG, i2d_DSA_SIG); - DO_TEST_PRINT_OFFSET(DSA, d2i_DSAPrivateKey, i2d_DSAPrivateKey, DSA_print); - DO_TEST_PRINT_OFFSET(DSA, d2i_DSAPublicKey, i2d_DSAPublicKey, DSA_print); - DO_TEST(DSA, d2i_DSAparams, i2d_DSAparams, DSAparams_print); + DO_TEST_NO_PRINT(DSA, d2i_DSAPrivateKey, i2d_DSAPrivateKey); + DO_TEST_NO_PRINT(DSA, d2i_DSAPublicKey, i2d_DSAPublicKey); + DO_TEST_NO_PRINT(DSA, d2i_DSAparams, i2d_DSAparams); #endif DO_TEST_PRINT_OFFSET(RSA, d2i_RSAPublicKey, i2d_RSAPublicKey, RSA_print); #ifndef OPENSSL_NO_EC diff --git a/include/crypto/dh.h b/include/crypto/dh.h index 2b48b5d9..3af3c522 100644 --- a/include/crypto/dh.h +++ b/include/crypto/dh.h @@ -10,12 +10,16 @@ #include #include "internal/ffc.h" -int dh_generate_ffc_parameters(OPENSSL_CTX *libctx, DH *dh, int bits, - int qbits, int gindex, BN_GENCB *cb); +DH *dh_new_with_ctx(OPENSSL_CTX *libctx); + +int dh_generate_ffc_parameters(DH *dh, int bits, + int qbits, int gindex, BN_GENCB *cb); +int dh_generate_public_key(BN_CTX *ctx, DH *dh, const BIGNUM *priv_key, + BIGNUM *pub_key); -int dh_compute_key(OPENSSL_CTX *ctx, unsigned char *key, const BIGNUM *pub_key, - DH *dh); -int dh_compute_key_padded(OPENSSL_CTX *ctx, unsigned char *key, - const BIGNUM *pub_key, DH *dh); FFC_PARAMS *dh_get0_params(DH *dh); int dh_get0_nid(const DH *dh); + +int dh_check_pub_key_partial(const DH *dh, const BIGNUM *pub_key, int *ret); +int dh_check_priv_key(const DH *dh, const BIGNUM *priv_key, int *ret); +int dh_check_pairwise(DH *dh); diff --git a/include/crypto/dsa.h b/include/crypto/dsa.h index 1865fe0f..1da23a8a 100644 --- a/include/crypto/dsa.h +++ b/include/crypto/dsa.h @@ -1,5 +1,5 @@ /* - * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -12,16 +12,19 @@ #define DSA_PARAMGEN_TYPE_FIPS_186_2 1 /* Use legacy FIPS186-2 standard */ #define DSA_PARAMGEN_TYPE_FIPS_186_4 2 /* Use FIPS186-4 standard */ -int dsa_generate_parameters_ctx(OPENSSL_CTX *libctx, DSA *dsa, int bits, - const unsigned char *seed_in, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); +DSA *dsa_new_with_ctx(OPENSSL_CTX *libctx); -int dsa_generate_ffc_parameters(OPENSSL_CTX *libctx, DSA *dsa, int type, +int dsa_generate_ffc_parameters(DSA *dsa, int type, int pbits, int qbits, int gindex, BN_GENCB *cb); -int dsa_sign_int(OPENSSL_CTX *libctx, int type, const unsigned char *dgst, +int dsa_sign_int(int type, const unsigned char *dgst, int dlen, unsigned char *sig, unsigned int *siglen, DSA *dsa); -int dsa_generate_key_ctx(OPENSSL_CTX *libctx, DSA *dsa); const unsigned char *dsa_algorithmidentifier_encoding(int md_nid, size_t *len); +int dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, const BIGNUM *priv_key, + BIGNUM *pub_key); +int dsa_check_params(const DSA *dsa, int *ret); +int dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret); +int dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, int *ret); +int dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret); +int dsa_check_pairwise(const DSA *dsa); diff --git a/include/crypto/ecx.h b/include/crypto/ecx.h new file mode 100644 index 00000000..e179db1b --- /dev/null +++ b/include/crypto/ecx.h @@ -0,0 +1,74 @@ +/* + * Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* Internal EC functions for other submodules: not for application use */ + +#ifndef OSSL_CRYPTO_ECX_H +# define OSSL_CRYPTO_ECX_H +# include + +# ifndef OPENSSL_NO_EC + +# include +# include +# include "internal/refcount.h" + +# define X25519_KEYLEN 32 +# define X448_KEYLEN 56 +# define ED25519_KEYLEN 32 +# define ED448_KEYLEN 57 + +# define MAX_KEYLEN ED448_KEYLEN + +# define X25519_BITS 253 +# define X25519_SECURITY_BITS 128 + +# define ED25519_SIGSIZE 64 + +# define X448_BITS 448 +# define ED448_BITS 456 +# define X448_SECURITY_BITS 224 + +# define ED448_SIGSIZE 114 + +struct ecx_key_st { + unsigned int haspubkey:1; + unsigned char pubkey[MAX_KEYLEN]; + unsigned char *privkey; + size_t keylen; + CRYPTO_REF_COUNT references; + CRYPTO_RWLOCK *lock; +}; + +typedef struct ecx_key_st ECX_KEY; + +ECX_KEY *ecx_key_new(size_t keylen, int haspubkey); +unsigned char *ecx_key_allocate_privkey(ECX_KEY *key); +void ecx_key_free(ECX_KEY *key); +int ecx_key_up_ref(ECX_KEY *key); + +int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32], + const uint8_t peer_public_value[32]); +void X25519_public_from_private(uint8_t out_public_value[32], + const uint8_t private_key[32]); + +int X448(uint8_t out_shared_key[56], const uint8_t private_key[56], + const uint8_t peer_public_value[56]); +void X448_public_from_private(uint8_t out_public_value[56], + const uint8_t private_key[56]); + +int s390x_x25519_mul(unsigned char u_dst[32], + const unsigned char u_src[32], + const unsigned char d_src[32]); +int s390x_x448_mul(unsigned char u_dst[56], + const unsigned char u_src[56], + const unsigned char d_src[56]); + +# endif /* OPENSSL_NO_EC */ +#endif diff --git a/include/crypto/evp.h b/include/crypto/evp.h index 6903cc65..65889ae8 100644 --- a/include/crypto/evp.h +++ b/include/crypto/evp.h @@ -10,6 +10,7 @@ #include #include #include "internal/refcount.h" +#include "crypto/ecx.h" /* * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag @@ -495,23 +496,6 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ cipher##_init_key, NULL, NULL, NULL, NULL) - -# ifndef OPENSSL_NO_EC - -#define X25519_KEYLEN 32 -#define X448_KEYLEN 56 -#define ED25519_KEYLEN 32 -#define ED448_KEYLEN 57 - -#define MAX_KEYLEN ED448_KEYLEN - -typedef struct { - unsigned char pubkey[MAX_KEYLEN]; - unsigned char *privkey; -} ECX_KEY; - -#endif - /* * Type needs to be a bit field Sub-type needs to be for variations on the * method, as in, can it do arbitrary encryption.... diff --git a/include/crypto/modes.h b/include/crypto/modes.h index 08e4ffae..edcdab95 100644 --- a/include/crypto/modes.h +++ b/include/crypto/modes.h @@ -56,12 +56,15 @@ typedef unsigned char u8; asm ("bswapl %0" \ : "+r"(ret_)); ret_; }) # elif defined(__aarch64__) -# define BSWAP8(x) ({ u64 ret_; \ +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define BSWAP8(x) ({ u64 ret_; \ asm ("rev %0,%1" \ : "=r"(ret_) : "r"(x)); ret_; }) -# define BSWAP4(x) ({ u32 ret_; \ +# define BSWAP4(x) ({ u32 ret_; \ asm ("rev %w0,%w1" \ : "=r"(ret_) : "r"(x)); ret_; }) +# endif # elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) # define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ asm ("rev %0,%0; rev %1,%1" \ diff --git a/include/crypto/rsa.h b/include/crypto/rsa.h index c3763d1e..97fd0f7a 100644 --- a/include/crypto/rsa.h +++ b/include/crypto/rsa.h @@ -12,6 +12,8 @@ #include +RSA *rsa_new_with_ctx(OPENSSL_CTX *libctx); + int rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, const STACK_OF(BIGNUM) *exps, const STACK_OF(BIGNUM) *coeffs); diff --git a/include/crypto/x509.h b/include/crypto/x509.h index 11a77695..602a72fd 100644 --- a/include/crypto/x509.h +++ b/include/crypto/x509.h @@ -288,5 +288,6 @@ struct x509_object_st { int a2i_ipadd(unsigned char *ipout, const char *ipasc); int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int x509_print_ex_brief(BIO *bio, X509 *cert, unsigned long neg_cflags); void x509_init_sig_info(X509 *x); diff --git a/include/internal/ffc.h b/include/internal/ffc.h index 67282fd8..006be73d 100644 --- a/include/internal/ffc.h +++ b/include/internal/ffc.h @@ -56,6 +56,14 @@ # define FFC_CHECK_G_MISMATCH 0x08000 # define FFC_CHECK_COUNTER_MISMATCH 0x10000 +/* Validation Return codes */ +# define FFC_ERROR_PUBKEY_TOO_SMALL 0x01 +# define FFC_ERROR_PUBKEY_TOO_LARGE 0x02 +# define FFC_ERROR_PUBKEY_INVALID 0x04 +# define FFC_ERROR_NOT_SUITABLE_GENERATOR 0x08 +# define FFC_ERROR_PRIVKEY_TOO_SMALL 0x10 +# define FFC_ERROR_PRIVKEY_TOO_LARGE 0x20 + /* * Finite field cryptography (FFC) domain parameters are used by DH and DSA. * Refer to FIPS186_4 Appendix A & B. @@ -113,20 +121,37 @@ int ffc_params_FIPS186_2_generate(OPENSSL_CTX *libctx, FFC_PARAMS *params, int type, size_t L, size_t N, const EVP_MD *evpmd, int *res, BN_GENCB *cb); -int ffc_param_FIPS186_4_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, - int type, size_t L, size_t N, - const EVP_MD *evpmd, int validate_flags, - int *res, BN_GENCB *cb); -int ffc_param_FIPS186_2_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, - int type, size_t L, size_t N, - const EVP_MD *evpmd, int validate_flags, - int *res, BN_GENCB *cb); +int ffc_params_FIPS186_4_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb); +int ffc_params_FIPS186_2_gen_verify(OPENSSL_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb); + +int ffc_params_FIPS186_4_validate(const FFC_PARAMS *params, int type, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb); +int ffc_params_FIPS186_2_validate(const FFC_PARAMS *params, int type, + const EVP_MD *evpmd, int validate_flags, + int *res, BN_GENCB *cb); + int ffc_generate_private_key(BN_CTX *ctx, const FFC_PARAMS *params, int N, int s, BIGNUM *priv); +int ffc_generate_private_key_fips(BN_CTX *ctx, const FFC_PARAMS *params, + int N, int s, BIGNUM *priv); int ffc_params_validate_unverifiable_g(BN_CTX *ctx, BN_MONT_CTX *mont, const BIGNUM *p, const BIGNUM *q, const BIGNUM *g, BIGNUM *tmp, int *ret); +int ffc_validate_public_key(const FFC_PARAMS *params, const BIGNUM *pub_key, + int *ret); +int ffc_validate_public_key_partial(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ffc_validate_private_key(const BIGNUM *upper, const BIGNUM *priv_key, + int *ret); + #endif /* OSSL_INTERNAL_FFC_H */ diff --git a/include/internal/param_build.h b/include/internal/param_build.h index ac1945f6..59104b93 100644 --- a/include/internal/param_build.h +++ b/include/internal/param_build.h @@ -42,10 +42,6 @@ typedef struct { void ossl_param_bld_init(OSSL_PARAM_BLD *bld); OSSL_PARAM *ossl_param_bld_to_param(OSSL_PARAM_BLD *bld); void ossl_param_bld_free(OSSL_PARAM *params); -OSSL_PARAM *ossl_param_bld_to_param_ex(OSSL_PARAM_BLD *bld, - OSSL_PARAM *params, size_t param_n, - void *data, size_t data_n, - void *secure, size_t secure_n); int ossl_param_bld_push_int(OSSL_PARAM_BLD *bld, const char *key, int val); int ossl_param_bld_push_uint(OSSL_PARAM_BLD *bld, const char *key, diff --git a/include/openssl/cmp.h b/include/openssl/cmp.h index 78763248..43dcc699 100644 --- a/include/openssl/cmp.h +++ b/include/openssl/cmp.h @@ -26,7 +26,7 @@ # include # include -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { # endif @@ -128,9 +128,9 @@ extern "C" { # define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 # define OSSL_CMP_PKIFAILUREINFO_MAX 26 # define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ - ( (1<<(OSSL_CMP_PKIFAILUREINFO_MAX+1)) - 1) + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) # if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX -# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int # endif typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; @@ -348,6 +348,11 @@ ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); /* support application-level CMP debugging in cmp.c: */ OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + # ifdef __cplusplus } # endif diff --git a/include/openssl/cmp_util.h b/include/openssl/cmp_util.h index ee368afa..56fb49e1 100644 --- a/include/openssl/cmp_util.h +++ b/include/openssl/cmp_util.h @@ -19,39 +19,13 @@ # include # include -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { # endif -/* - * convenience functions for CMP-specific logging via the trace API - */ int OSSL_CMP_log_open(void); void OSSL_CMP_log_close(void); # define OSSL_CMP_LOG_PREFIX "CMP " -/* in OSSL_CMP_LOG_START, cannot use OPENSSL_FUNC when expands to __func__ */ -# define OSSL_CMP_LOG_START "%s:" OPENSSL_FILE ":" \ - OPENSSL_MSTR(OPENSSL_LINE) ":" OSSL_CMP_LOG_PREFIX -# define OSSL_CMP_alert(msg) OSSL_CMP_log(ALERT, msg) -# define OSSL_CMP_err(msg) OSSL_CMP_log(ERROR, msg) -# define OSSL_CMP_warn(msg) OSSL_CMP_log(WARN, msg) -# define OSSL_CMP_info(msg) OSSL_CMP_log(INFO, msg) -# define OSSL_CMP_debug(msg) OSSL_CMP_log(DEBUG, msg) -# define OSSL_CMP_log(level, msg) \ - OSSL_TRACEV(CMP, (trc_out, OSSL_CMP_LOG_START#level ": %s\n", \ - OPENSSL_FUNC, msg)) -# define OSSL_CMP_log1(level, fmt, arg1) \ - OSSL_TRACEV(CMP, (trc_out, OSSL_CMP_LOG_START#level ": " fmt "\n", \ - OPENSSL_FUNC, arg1)) -# define OSSL_CMP_log2(level, fmt, arg1, arg2) \ - OSSL_TRACEV(CMP, (trc_out, OSSL_CMP_LOG_START#level ": " fmt "\n", \ - OPENSSL_FUNC, arg1, arg2)) -# define OSSL_CMP_log3(level, fmt, arg1, arg2, arg3) \ - OSSL_TRACEV(CMP, (trc_out, OSSL_CMP_LOG_START#level ": " fmt "\n", \ - OPENSSL_FUNC, arg1, arg2, arg3)) -# define OSSL_CMP_log4(level, fmt, arg1, arg2, arg3, arg4) \ - OSSL_TRACEV(CMP, (trc_out, OSSL_CMP_LOG_START#level ": " fmt "\n", \ - OPENSSL_FUNC, arg1, arg2, arg3, arg4)) /* * generalized logging/error callback mirroring the severity levels of syslog.h @@ -68,6 +42,8 @@ typedef int OSSL_CMP_severity; typedef int (*OSSL_cmp_log_cb_t)(const char *func, const char *file, int line, OSSL_CMP_severity level, const char *msg); +int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg); /* use of the logging callback for outputting error queue */ void OSSL_CMP_print_errors_cb(OSSL_cmp_log_cb_t log_fn); diff --git a/include/openssl/cmperr.h b/include/openssl/cmperr.h index cd962fb5..51795a52 100644 --- a/include/openssl/cmperr.h +++ b/include/openssl/cmperr.h @@ -19,7 +19,7 @@ # ifndef OPENSSL_NO_CMP -# ifdef __cplusplus +# ifdef __cplusplus extern "C" # endif int ERR_load_CMP_strings(void); @@ -27,12 +27,13 @@ int ERR_load_CMP_strings(void); /* * CMP function codes. */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# endif /* * CMP reason codes. */ +# define CMP_R_ALGORITHM_NOT_SUPPORTED 139 # define CMP_R_BAD_REQUEST_ID 108 # define CMP_R_CERTID_NOT_FOUND 109 # define CMP_R_CERTIFICATE_NOT_FOUND 112 @@ -53,23 +54,38 @@ int ERR_load_CMP_strings(void); # define CMP_R_ERROR_PARSING_PKISTATUS 107 # define CMP_R_ERROR_PROTECTING_MESSAGE 127 # define CMP_R_ERROR_SETTING_CERTHASH 128 +# define CMP_R_ERROR_VALIDATING_PROTECTION 140 +# define CMP_R_FAILED_EXTRACTING_PUBKEY 141 # define CMP_R_FAILURE_OBTAINING_RANDOM 110 # define CMP_R_FAIL_INFO_OUT_OF_RANGE 129 # define CMP_R_INVALID_ARGS 100 # define CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION 130 +# define CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE 142 # define CMP_R_MISSING_PRIVATE_KEY 131 +# define CMP_R_MISSING_PROTECTION 143 # define CMP_R_MISSING_SENDER_IDENTIFICATION 111 +# define CMP_R_MISSING_TRUST_STORE 144 # define CMP_R_MULTIPLE_SAN_SOURCES 102 # define CMP_R_NO_STDIO 194 +# define CMP_R_NO_SUITABLE_SENDER_CERT 145 # define CMP_R_NULL_ARGUMENT 103 +# define CMP_R_PKIBODY_ERROR 146 # define CMP_R_PKISTATUSINFO_NOT_FOUND 132 -# define CMP_R_POTENTIALLY_INVALID_CERTIFICATE 139 +# define CMP_R_POTENTIALLY_INVALID_CERTIFICATE 147 +# define CMP_R_RECIPNONCE_UNMATCHED 148 +# define CMP_R_REQUEST_NOT_ACCEPTED 149 +# define CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED 150 +# define CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG 151 +# define CMP_R_TRANSACTIONID_UNMATCHED 152 # define CMP_R_UNEXPECTED_PKIBODY 133 +# define CMP_R_UNEXPECTED_PVNO 153 # define CMP_R_UNKNOWN_ALGORITHM_ID 134 # define CMP_R_UNKNOWN_CERT_TYPE 135 # define CMP_R_UNSUPPORTED_ALGORITHM 136 # define CMP_R_UNSUPPORTED_KEY_TYPE 137 +# define CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC 154 # define CMP_R_WRONG_ALGORITHM_OID 138 +# define CMP_R_WRONG_PBM_VALUE 155 # endif #endif diff --git a/include/openssl/core_names.h b/include/openssl/core_names.h index c17eee42..84fbcf38 100644 --- a/include/openssl/core_names.h +++ b/include/openssl/core_names.h @@ -171,20 +171,14 @@ extern "C" { #define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES #define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ #define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_PUB_KEY "pub" +#define OSSL_PKEY_PARAM_PRIV_KEY "priv" /* Diffie-Hellman/DSA Parameters */ #define OSSL_PKEY_PARAM_FFC_P "p" #define OSSL_PKEY_PARAM_FFC_G "g" #define OSSL_PKEY_PARAM_FFC_Q "q" -/* Diffie-Hellman Keys */ -#define OSSL_PKEY_PARAM_DH_PUB_KEY "pub" -#define OSSL_PKEY_PARAM_DH_PRIV_KEY "priv" - -/* DSA Keys */ -#define OSSL_PKEY_PARAM_DSA_PUB_KEY "pub" -#define OSSL_PKEY_PARAM_DSA_PRIV_KEY "priv" - /* RSA Keys */ /* * n, e, d are the usual public and private key components diff --git a/include/openssl/crmf.h b/include/openssl/crmf.h index 160ad326..09b57f6b 100644 --- a/include/openssl/crmf.h +++ b/include/openssl/crmf.h @@ -26,7 +26,7 @@ # include # include -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { # endif @@ -77,9 +77,9 @@ int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, const ASN1_UTF8STRING *tok); int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, const ASN1_UTF8STRING *auth); -int OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo( - OSSL_CRMF_PKIPUBLICATIONINFO *pi, - OSSL_CRMF_SINGLEPUBINFO *spi); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); # define OSSL_CRMF_PUB_METHOD_DONTCARE 0 # define OSSL_CRMF_PUB_METHOD_X500 1 # define OSSL_CRMF_PUB_METHOD_WEB 2 @@ -88,10 +88,10 @@ int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, int method, GENERAL_NAME *nm); # define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 # define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 -int OSSL_CRMF_MSG_set_PKIPublicationInfo_action( - OSSL_CRMF_PKIPUBLICATIONINFO *pi, int action); +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, - const OSSL_CRMF_PKIPUBLICATIONINFO *pi); + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, const X509_PUBKEY *pubkey); int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, @@ -110,7 +110,7 @@ int OSSL_CRMF_MSG_get_certReqId(OSSL_CRMF_MSG *crm); int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); -# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_NONE -1 # define OSSL_CRMF_POPO_RAVERIFIED 0 # define OSSL_CRMF_POPO_SIGNATURE 1 # define OSSL_CRMF_POPO_KEYENC 2 diff --git a/include/openssl/crmferr.h b/include/openssl/crmferr.h index 97f5159b..97a3028c 100644 --- a/include/openssl/crmferr.h +++ b/include/openssl/crmferr.h @@ -19,7 +19,7 @@ # ifndef OPENSSL_NO_CRMF -# ifdef __cplusplus +# ifdef __cplusplus extern "C" # endif int ERR_load_CRMF_strings(void); @@ -27,7 +27,7 @@ int ERR_load_CRMF_strings(void); /* * CRMF function codes. */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DEPRECATED_3_0 # define CRMF_F_CRMF_POPOSIGNINGKEY_INIT 0 # define CRMF_F_OSSL_CRMF_CERTID_GEN 0 # define CRMF_F_OSSL_CRMF_CERTTEMPLATE_FILL 0 @@ -47,7 +47,7 @@ int ERR_load_CRMF_strings(void); # define CRMF_F_OSSL_CRMF_MSG_SET_VALIDITY 0 # define CRMF_F_OSSL_CRMF_PBMP_NEW 0 # define CRMF_F_OSSL_CRMF_PBM_NEW 0 -# endif +# endif /* * CRMF reason codes. diff --git a/include/openssl/dsa.h b/include/openssl/dsa.h index 9697a9ca..5fe87bee 100644 --- a/include/openssl/dsa.h +++ b/include/openssl/dsa.h @@ -19,33 +19,35 @@ # include # ifndef OPENSSL_NO_DSA -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif -# include -# include -# include -# include -# include -# include -# ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# include -# endif -# include +# endif +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif -# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 -# define DSA_FLAG_CACHE_MONT_P 0x01 -# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * Does nothing. Previously this switched off constant time behaviour. */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 -# endif +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSA_FLAG_CACHE_MONT_P 0x01 /* * If this flag is set the DSA method is FIPS compliant and can be used in @@ -54,7 +56,7 @@ extern "C" { * result is compliant. */ -# define DSA_FLAG_FIPS_METHOD 0x0400 +# define DSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -62,8 +64,9 @@ extern "C" { * usage is compliant. */ -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 -# define DSA_FLAG_FIPS_CHECKED 0x0800 +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define DSA_FLAG_FIPS_CHECKED 0x0800 +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /* Already defined in ossl_typ.h */ /* typedef struct dsa_st DSA; */ @@ -71,12 +74,20 @@ extern "C" { typedef struct DSA_SIG_st DSA_SIG; -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of(DSA,i2d_DSAparams,bp,x) +/* + * TODO(3.0): consider removing the ASN.1 encoding and decoding when + * deserialisation is completed elsewhere. + */ +# define d2i_DSAparams_fp(fp, x) \ + (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams, (fp), \ + (unsigned char **)(x)) +# define i2d_DSAparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DSAparams, (fp), (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp, x) \ + ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAparams, bp, x) +# define i2d_DSAparams_bio(bp, x) \ + ASN1_i2d_bio_of(DSA, i2d_DSAparams, bp, x) DECLARE_ASN1_DUP_FUNCTION_name(DSA, DSAparams) DSA_SIG *DSA_SIG_new(void); @@ -85,35 +96,41 @@ DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA_SIG, DSA_SIG) void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); +DEPRECATEDIN_3_0(DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, + DSA *dsa)) +DEPRECATEDIN_3_0(int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa)) -const DSA_METHOD *DSA_OpenSSL(void); +DEPRECATEDIN_3_0(const DSA_METHOD *DSA_OpenSSL(void)) -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); -const DSA_METHOD *DSA_get_method(DSA *d); +DEPRECATEDIN_3_0(void DSA_set_default_method(const DSA_METHOD *)) +DEPRECATEDIN_3_0(const DSA_METHOD *DSA_get_default_method(void)) +DEPRECATEDIN_3_0(int DSA_set_method(DSA *dsa, const DSA_METHOD *)) +DEPRECATEDIN_3_0(const DSA_METHOD *DSA_get_method(DSA *d)) DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); +DEPRECATEDIN_3_0(DSA *DSA_new_method(ENGINE *engine)) void DSA_free(DSA *r); /* "up" the DSA object's reference count */ int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); -int DSA_bits(const DSA *d); -int DSA_security_bits(const DSA *d); +DEPRECATEDIN_3_0(int DSA_size(const DSA *)) +DEPRECATEDIN_3_0(int DSA_bits(const DSA *d)) +DEPRECATEDIN_3_0(int DSA_security_bits(const DSA *d)) /* next 4 return -1 on error */ -DEPRECATEDIN_3_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); +DEPRECATEDIN_3_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, + BIGNUM **rp)) +DEPRECATEDIN_3_0(int DSA_sign(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, + DSA *dsa)) +DEPRECATEDIN_3_0(int DSA_verify(int type, const unsigned char *dgst, + int dgst_len, const unsigned char *sigbuf, + int siglen, DSA *dsa)) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +# endif +DEPRECATEDIN_3_0(int DSA_set_ex_data(DSA *d, int idx, void *arg)) +DEPRECATEDIN_3_0(void *DSA_get_ex_data(DSA *d, int idx)) DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA, DSAPublicKey) DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA, DSAPrivateKey) @@ -130,53 +147,56 @@ DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, void *cb_arg)) /* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); +DEPRECATEDIN_3_0(int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, + int seed_len, int *counter_ret, + unsigned long *h_ret, + BN_GENCB *cb)) -int DSA_generate_key(DSA *a); +DEPRECATEDIN_3_0(int DSA_generate_key(DSA *a)) -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# ifndef OPENSSL_NO_STDIO -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif +DEPRECATEDIN_3_0(int DSAparams_print(BIO *bp, const DSA *x)) +DEPRECATEDIN_3_0(int DSA_print(BIO *bp, const DSA *x, int off)) +# ifndef OPENSSL_NO_STDIO +DEPRECATEDIN_3_0(int DSAparams_print_fp(FILE *fp, const DSA *x)) +DEPRECATEDIN_3_0(int DSA_print_fp(FILE *bp, const DSA *x, int off)) +# endif -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define DSS_prime_checks 64 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSS_prime_checks 64 /* * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only * have one value here we set the number of checks to 64 which is the 128 bit * security level that is the highest level and valid for creating a 3072 bit * DSA key. */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) -# endif +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) +# endif -# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DH /* * Convert DSA structure (key or just parameters) into DH structure (be * careful to avoid small subgroup attacks when using this!) + * + * TODO(3.0): figure out how to remove this monstrosity */ DH *DSA_dup_DH(const DSA *r); -# endif +# endif -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) +# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) +# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) +# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); @@ -192,55 +212,54 @@ const BIGNUM *DSA_get0_priv_key(const DSA *d); void DSA_clear_flags(DSA *d, int flags); int DSA_test_flags(const DSA *d, int flags); void DSA_set_flags(DSA *d, int flags); -ENGINE *DSA_get0_engine(DSA *d); +DEPRECATEDIN_3_0(ENGINE *DSA_get0_engine(DSA *d)) -DSA_METHOD *DSA_meth_new(const char *name, int flags); -void DSA_meth_free(DSA_METHOD *dsam); -DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); -const char *DSA_meth_get0_name(const DSA_METHOD *dsam); -int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); -int DSA_meth_get_flags(const DSA_METHOD *dsam); -int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); -void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); -int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); -DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA *); -int DSA_meth_set_sign(DSA_METHOD *dsam, - DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) - (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -int DSA_meth_set_sign_setup(DSA_METHOD *dsam, - int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA_SIG *, DSA *); -int DSA_meth_set_verify(DSA_METHOD *dsam, - int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) +DEPRECATEDIN_3_0(DSA_METHOD *DSA_meth_new(const char *name, int flags)) +DEPRECATEDIN_3_0(void DSA_meth_free(DSA_METHOD *dsam)) +DEPRECATEDIN_3_0(DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam)) +DEPRECATEDIN_3_0(const char *DSA_meth_get0_name(const DSA_METHOD *dsam)) +DEPRECATEDIN_3_0(int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name)) +DEPRECATEDIN_3_0(int DSA_meth_get_flags(const DSA_METHOD *dsam)) +DEPRECATEDIN_3_0(int DSA_meth_set_flags(DSA_METHOD *dsam, int flags)) +DEPRECATEDIN_3_0(void *DSA_meth_get0_app_data(const DSA_METHOD *dsam)) +DEPRECATEDIN_3_0(int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data)) +DEPRECATEDIN_3_0(DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA *)) +DEPRECATEDIN_3_0(int DSA_meth_set_sign(DSA_METHOD *dsam, + DSA_SIG *(*sign) (const unsigned char *, int, DSA *))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) + (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)) +DEPRECATEDIN_3_0(int DSA_meth_set_sign_setup(DSA_METHOD *dsam, + int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA_SIG *, DSA *)) +DEPRECATEDIN_3_0(int DSA_meth_set_verify(DSA_METHOD *dsam, + int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_mod_exp(DSA_METHOD *dsam, + const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)) +DEPRECATEDIN_3_0(int DSA_meth_set_mod_exp(DSA_METHOD *dsam, int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, - BN_MONT_CTX *)); -int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) + BN_MONT_CTX *))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, + BN_CTX *, BN_MONT_CTX *)) +DEPRECATEDIN_3_0(int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); -int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); -int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); -int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) + const BIGNUM *, BN_CTX *, BN_MONT_CTX *))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *)) +DEPRECATEDIN_3_0(int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *)) +DEPRECATEDIN_3_0(int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) (DSA *, int, const unsigned char *, int, int *, unsigned long *, - BN_GENCB *); -int DSA_meth_set_paramgen(DSA_METHOD *dsam, + BN_GENCB *)) +DEPRECATEDIN_3_0(int DSA_meth_set_paramgen(DSA_METHOD *dsam, int (*paramgen) (DSA *, int, const unsigned char *, int, int *, - unsigned long *, BN_GENCB *)); -int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); - + unsigned long *, BN_GENCB *))) +DEPRECATEDIN_3_0(int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *)) +DEPRECATEDIN_3_0(int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *))) # ifdef __cplusplus } diff --git a/include/openssl/err.h b/include/openssl/err.h index 17a248ca..ef8e895c 100644 --- a/include/openssl/err.h +++ b/include/openssl/err.h @@ -333,6 +333,8 @@ void ERR_print_errors(BIO *bp); void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); int ERR_load_strings(int lib, ERR_STRING_DATA *str); int ERR_load_strings_const(const ERR_STRING_DATA *str); diff --git a/include/openssl/ocsp.h b/include/openssl/ocsp.h index b15d747a..760f32e3 100644 --- a/include/openssl/ocsp.h +++ b/include/openssl/ocsp.h @@ -16,7 +16,7 @@ # define HEADER_OCSP_H # endif -#include +# include /* * These definitions are outside the OPENSSL_NO_OCSP guard because although for @@ -37,30 +37,55 @@ * privilegeWithdrawn (9), * aACompromise (10) } */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 -# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 -# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they are used for the HTTP client. + */ +# include +/* The following functions are used only internally */ +OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *wbio, BIO *rbio, + int method_GET, int maxline, + unsigned long max_resp_len, int timeout, + const char *expected_content_type, + int expect_asn1); +void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); +int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, + const char *server, const char *port, const char *path); +int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, + const char *name, const char *value); +int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const char *content_type, + const ASN1_ITEM *it, ASN1_VALUE *req); +int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); +# ifndef OPENSSL_NO_SOCK +ASN1_VALUE *OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it); +# endif +BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); +void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); +/* End of functions used only internally */ # ifndef OPENSSL_NO_OCSP -# include # include # include # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif /* Various flags and values */ @@ -165,26 +190,6 @@ OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, # ifndef OPENSSL_NO_SOCK int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); # endif -/* The following functions are used only internally */ -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *wbio, BIO *rbio, - int method_GET, int maxline, - unsigned long max_resp_len, int timeout, - const char *expected_content_type, - int expect_asn1); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const char *content_type, - const ASN1_ITEM *it, ASN1_VALUE *req); -# ifndef OPENSSL_NO_SOCK -ASN1_VALUE *OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it); -# endif -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, - const char *server, const char *port, const char *path); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); -/* End of functions used only internally */ /* TODO: remove this (documented but) meanwhile obsolete function? */ int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, const OCSP_REQUEST *req); diff --git a/include/openssl/params.h b/include/openssl/params.h index aec3bc18..a5d2fd4f 100644 --- a/include/openssl/params.h +++ b/include/openssl/params.h @@ -89,11 +89,6 @@ OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, size_t bsize); OSSL_PARAM OSSL_PARAM_construct_end(void); -int OSSL_PARAM_construct_from_text(OSSL_PARAM *to, - const OSSL_PARAM *paramdefs, - const char *key, const char *value, - size_t value_n, - void *buf, size_t *buf_n); int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, const OSSL_PARAM *paramdefs, const char *key, const char *value, diff --git a/include/openssl/rsaerr.h b/include/openssl/rsaerr.h index 91fcc1cf..ef72bc74 100644 --- a/include/openssl/rsaerr.h +++ b/include/openssl/rsaerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff --git a/include/openssl/serializer.h b/include/openssl/serializer.h index c37939f8..ceeeffb2 100644 --- a/include/openssl/serializer.h +++ b/include/openssl/serializer.h @@ -89,6 +89,10 @@ OSSL_SERIALIZER_CTX *OSSL_SERIALIZER_CTX_new_by_EVP_PKEY(const EVP_PKEY *pkey, # define OSSL_SERIALIZER_PrivateKey_TO_PEM_PQ "format=pem,type=private" # define OSSL_SERIALIZER_Parameters_TO_PEM_PQ "format=pem,type=parameters" +# define OSSL_SERIALIZER_PUBKEY_TO_DER_PQ "format=der,type=public" +# define OSSL_SERIALIZER_PrivateKey_TO_DER_PQ "format=der,type=private" +# define OSSL_SERIALIZER_Parameters_TO_DER_PQ "format=der,type=parameters" + /* Corresponding macros for text output */ # define OSSL_SERIALIZER_PUBKEY_TO_TEXT_PQ "format=text,type=public" # define OSSL_SERIALIZER_PrivateKey_TO_TEXT_PQ "format=text,type=private" diff --git a/include/openssl/whrlpool.h b/include/openssl/whrlpool.h index d2a483c6..cc8802f7 100644 --- a/include/openssl/whrlpool.h +++ b/include/openssl/whrlpool.h @@ -53,10 +53,8 @@ DEPRECATEDIN_3_0(int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c)) DEPRECATEDIN_3_0(unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md)) -# if !defined(OPENSSL_NO_DEPRECATED_3_0) -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif # endif diff --git a/include/openssl/x509_vfy.h b/include/openssl/x509_vfy.h index affdc67d..75529b23 100644 --- a/include/openssl/x509_vfy.h +++ b/include/openssl/x509_vfy.h @@ -67,6 +67,7 @@ DEFINE_STACK_OF(X509_VERIFY_PARAM) int X509_STORE_set_depth(X509_STORE *store, int depth); typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); @@ -287,8 +288,9 @@ void X509_STORE_free(X509_STORE *v); int X509_STORE_lock(X509_STORE *ctx); int X509_STORE_unlock(X509_STORE *ctx); int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); diff --git a/include/openssl/x509err.h b/include/openssl/x509err.h index 5b0a6b5e..2653870d 100644 --- a/include/openssl/x509err.h +++ b/include/openssl/x509err.h @@ -107,6 +107,7 @@ int ERR_load_X509_strings(void); # define X509_R_BASE64_DECODE_ERROR 118 # define X509_R_CANT_CHECK_DH_KEY 114 # define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 +# define X509_R_CERTIFICATE_VERIFICATION_FAILED 139 # define X509_R_CRL_ALREADY_DELTA 127 # define X509_R_CRL_VERIFY_FAILURE 131 # define X509_R_IDP_MISMATCH 128 diff --git a/providers/build.info b/providers/build.info index 6d4f6ae8..a58c8eae 100644 --- a/providers/build.info +++ b/providers/build.info @@ -101,6 +101,7 @@ SUBDIRS=fips $FIPSGOAL=fips DEPEND[$FIPSGOAL]=$LIBIMPLEMENTATIONS $LIBFIPS INCLUDE[$FIPSGOAL]=../include +DEFINE[$FIPSGOAL]=FIPS_MODE IF[{- defined $target{shared_defflag} -}] SOURCE[$FIPSGOAL]=fips.ld GENERATE[fips.ld]=../util/providers.num diff --git a/providers/common/include/prov/providercommonerr.h b/providers/common/include/prov/providercommonerr.h index 21d7f54a..6586d656 100644 --- a/providers/common/include/prov/providercommonerr.h +++ b/providers/common/include/prov/providercommonerr.h @@ -57,6 +57,7 @@ int ERR_load_PROV_strings(void); # define PROV_R_BN_ERROR 160 # define PROV_R_BOTH_MODE_AND_MODE_INT 127 # define PROV_R_CIPHER_OPERATION_FAILED 102 +# define PROV_R_FAILED_DURING_DERIVATION 164 # define PROV_R_FAILED_TO_DECRYPT 162 # define PROV_R_FAILED_TO_GENERATE_KEY 121 # define PROV_R_FAILED_TO_GET_PARAMETER 103 diff --git a/providers/common/provider_err.c b/providers/common/provider_err.c index fcb07220..792697c8 100644 --- a/providers/common/provider_err.c +++ b/providers/common/provider_err.c @@ -26,6 +26,8 @@ static const ERR_STRING_DATA PROV_str_reasons[] = { "both mode and mode int"}, {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_CIPHER_OPERATION_FAILED), "cipher operation failed"}, + {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_DURING_DERIVATION), + "failed during derivation"}, {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_DECRYPT), "failed to decrypt"}, {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_GENERATE_KEY), "failed to generate key"}, diff --git a/providers/defltprov.c b/providers/defltprov.c index 8d893228..6740a8e5 100644 --- a/providers/defltprov.c +++ b/providers/defltprov.c @@ -371,6 +371,10 @@ static const OSSL_ALGORITHM deflt_kdfs[] = { static const OSSL_ALGORITHM deflt_keyexch[] = { #ifndef OPENSSL_NO_DH { "DH:dhKeyAgreement", "default=yes", dh_keyexch_functions }, +#endif +#ifndef OPENSSL_NO_EC + { "X25519", "default=yes", x25519_keyexch_functions }, + { "X448", "default=yes", x448_keyexch_functions }, #endif { NULL, NULL, NULL } }; @@ -395,6 +399,10 @@ static const OSSL_ALGORITHM deflt_keymgmt[] = { { "DSA:dsaEncryption", "default=yes", dsa_keymgmt_functions }, #endif { "RSA:rsaEncryption", "default=yes", rsa_keymgmt_functions }, +#ifndef OPENSSL_NO_EC + { "X25519", "default=yes", x25519_keymgmt_functions }, + { "X448", "default=yes", x448_keymgmt_functions }, +#endif { NULL, NULL, NULL } }; diff --git a/providers/fips/fipsprov.c b/providers/fips/fipsprov.c index 0301954c..596ece52 100644 --- a/providers/fips/fipsprov.c +++ b/providers/fips/fipsprov.c @@ -258,8 +258,8 @@ static int dsa_key_signature_test(OPENSSL_CTX *libctx) if (!ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_P, p) || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_Q, q) || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_G, g) - || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_DSA_PUB_KEY, pub) - || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_DSA_PRIV_KEY, priv)) + || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_PUB_KEY, pub) + || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_PRIV_KEY, priv)) goto err; params = ossl_param_bld_to_param(&bld); @@ -407,8 +407,8 @@ static int dh_key_exchange_test(OPENSSL_CTX *libctx) if (!ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_P, p) || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_Q, q) || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_G, g) - || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_DH_PUB_KEY, pub) - || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_DH_PRIV_KEY, priv)) + || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_PUB_KEY, pub) + || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_PRIV_KEY, priv)) goto err; params = ossl_param_bld_to_param(&bld); @@ -416,7 +416,7 @@ static int dh_key_exchange_test(OPENSSL_CTX *libctx) if (!ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_P, p) || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_Q, q) || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_FFC_G, g) - || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_DH_PUB_KEY, pub_peer)) + || !ossl_param_bld_push_BN(&bld, OSSL_PKEY_PARAM_PUB_KEY, pub_peer)) goto err; params_peer = ossl_param_bld_to_param(&bld); @@ -805,6 +805,11 @@ static const OSSL_ALGORITHM fips_signature[] = { { NULL, NULL, NULL } }; +static const OSSL_ALGORITHM fips_asym_cipher[] = { + { "RSA:rsaEncryption", "fips=yes", rsa_asym_cipher_functions }, + { NULL, NULL, NULL } +}; + static const OSSL_ALGORITHM fips_keymgmt[] = { #ifndef OPENSSL_NO_DH { "DH:dhKeyAgreement", "fips=yes", dh_keymgmt_functions }, @@ -812,6 +817,7 @@ static const OSSL_ALGORITHM fips_keymgmt[] = { #ifndef OPENSSL_NO_DSA { "DSA", "fips=yes", dsa_keymgmt_functions }, #endif + { "RSA:rsaEncryption", "default=yes", rsa_keymgmt_functions }, { NULL, NULL, NULL } }; @@ -836,6 +842,8 @@ static const OSSL_ALGORITHM *fips_query(OSSL_PROVIDER *prov, return fips_keyexch; case OSSL_OP_SIGNATURE: return fips_signature; + case OSSL_OP_ASYM_CIPHER: + return fips_asym_cipher; } return NULL; } diff --git a/providers/implementations/asymciphers/build.info b/providers/implementations/asymciphers/build.info index aa050803..b4033d8a 100644 --- a/providers/implementations/asymciphers/build.info +++ b/providers/implementations/asymciphers/build.info @@ -1,4 +1,6 @@ -LIBS=../../../libcrypto -SOURCE[../../../libcrypto]=rsa_enc.c +# We make separate GOAL variables for each algorithm, to make it easy to +# switch each to the Legacy provider when needed. +$RSA_GOAL=../../libimplementations.a +SOURCE[$RSA_GOAL]=rsa_enc.c diff --git a/providers/implementations/asymciphers/rsa_enc.c b/providers/implementations/asymciphers/rsa_enc.c index c72571d6..87349ed6 100644 --- a/providers/implementations/asymciphers/rsa_enc.c +++ b/providers/implementations/asymciphers/rsa_enc.c @@ -118,6 +118,12 @@ static int rsa_encrypt(void *vprsactx, unsigned char *out, size_t *outlen, PROVerr(0, ERR_R_MALLOC_FAILURE); return 0; } + if (prsactx->oaep_md == NULL) { + OPENSSL_free(tbuf); + prsactx->oaep_md = EVP_MD_fetch(prsactx->libctx, "SHA-1", NULL); + PROVerr(0, ERR_R_INTERNAL_ERROR); + return 0; + } ret = RSA_padding_add_PKCS1_OAEP_mgf1(tbuf, rsasize, in, inlen, prsactx->oaep_label, prsactx->oaep_labellen, @@ -194,6 +200,13 @@ static int rsa_decrypt(void *vprsactx, unsigned char *out, size_t *outlen, return 0; } if (prsactx->pad_mode == RSA_PKCS1_OAEP_PADDING) { + if (prsactx->oaep_md == NULL) { + prsactx->oaep_md = EVP_MD_fetch(prsactx->libctx, "SHA-1", NULL); + if (prsactx->oaep_md == NULL) { + PROVerr(0, ERR_R_INTERNAL_ERROR); + return 0; + } + } ret = RSA_padding_check_PKCS1_OAEP_mgf1(out, outsize, tbuf, len, len, prsactx->oaep_label, diff --git a/providers/implementations/exchange/build.info b/providers/implementations/exchange/build.info index fdedb86c..51d32fc0 100644 --- a/providers/implementations/exchange/build.info +++ b/providers/implementations/exchange/build.info @@ -2,7 +2,23 @@ # switch each to the Legacy provider when needed. $DH_GOAL=../../libimplementations.a +$ECX_GOAL=../../libimplementations.a IF[{- !$disabled{dh} -}] SOURCE[$DH_GOAL]=dh_exch.c ENDIF + +IF[{- !$disabled{asm} -}] + $ECDEF_s390x=S390X_EC_ASM + + # Now that we have defined all the arch specific variables, use the + # appropriate one, and define the appropriate macros + IF[$ECASM_{- $target{asm_arch} -}] + $ECDEF=$ECDEF_{- $target{asm_arch} -} + ENDIF +ENDIF + +IF[{- !$disabled{ec} -}] + SOURCE[$ECX_GOAL]=ecx_exch.c + DEFINE[$ECX_GOAL]=$ECDEF +ENDIF diff --git a/providers/implementations/exchange/dh_exch.c b/providers/implementations/exchange/dh_exch.c index 94c23296..418896e4 100644 --- a/providers/implementations/exchange/dh_exch.c +++ b/providers/implementations/exchange/dh_exch.c @@ -92,9 +92,9 @@ static int dh_derive(void *vpdhctx, unsigned char *secret, size_t *secretlen, DH_get0_key(pdhctx->dhpeer, &pub_key, NULL); if (pdhctx->pad) - ret = dh_compute_key_padded(pdhctx->libctx, secret, pub_key, pdhctx->dh); + ret = DH_compute_key_padded(secret, pub_key, pdhctx->dh); else - ret = dh_compute_key(pdhctx->libctx, secret, pub_key, pdhctx->dh); + ret = DH_compute_key(secret, pub_key, pdhctx->dh); if (ret <= 0) return 0; diff --git a/providers/implementations/exchange/ecx_exch.c b/providers/implementations/exchange/ecx_exch.c new file mode 100644 index 00000000..ea126289 --- /dev/null +++ b/providers/implementations/exchange/ecx_exch.c @@ -0,0 +1,223 @@ +/* + * Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include +#include +#include +#include +#include "internal/cryptlib.h" +#include "crypto/ecx.h" +#include "prov/implementations.h" +#include "prov/providercommonerr.h" +#ifdef S390X_EC_ASM +# include "s390x_arch.h" +#endif + +static OSSL_OP_keyexch_newctx_fn x25519_newctx; +static OSSL_OP_keyexch_newctx_fn x448_newctx; +static OSSL_OP_keyexch_init_fn ecx_init; +static OSSL_OP_keyexch_set_peer_fn ecx_set_peer; +static OSSL_OP_keyexch_derive_fn ecx_derive; +static OSSL_OP_keyexch_freectx_fn ecx_freectx; +static OSSL_OP_keyexch_dupctx_fn ecx_dupctx; + +/* + * What's passed as an actual key is defined by the KEYMGMT interface. + * We happen to know that our KEYMGMT simply passes ECX_KEY structures, so + * we use that here too. + */ + +typedef struct { + size_t keylen; + ECX_KEY *key; + ECX_KEY *peerkey; +} PROV_ECX_CTX; + +static void *ecx_newctx(void *provctx, size_t keylen) +{ + PROV_ECX_CTX *ctx = OPENSSL_zalloc(sizeof(PROV_ECX_CTX)); + + if (ctx == NULL) { + ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); + return NULL; + } + + ctx->keylen = keylen; + + return ctx; +} + +static void *x25519_newctx(void *provctx) +{ + return ecx_newctx(provctx, X25519_KEYLEN); +} + +static void *x448_newctx(void *provctx) +{ + return ecx_newctx(provctx, X448_KEYLEN); +} + +static int ecx_init(void *vecxctx, void *vkey) +{ + PROV_ECX_CTX *ecxctx = (PROV_ECX_CTX *)vecxctx; + ECX_KEY *key = vkey; + + if (ecxctx == NULL + || key == NULL + || key->keylen != ecxctx->keylen + || !ecx_key_up_ref(key)) { + ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR); + return 0; + } + + ecx_key_free(ecxctx->key); + ecxctx->key = key; + + return 1; +} + +static int ecx_set_peer(void *vecxctx, void *vkey) +{ + PROV_ECX_CTX *ecxctx = (PROV_ECX_CTX *)vecxctx; + ECX_KEY *key = vkey; + + if (ecxctx == NULL + || key == NULL + || key->keylen != ecxctx->keylen + || !ecx_key_up_ref(key)) { + ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR); + return 0; + } + ecx_key_free(ecxctx->peerkey); + ecxctx->peerkey = key; + + return 1; +} + +static int ecx_derive(void *vecxctx, unsigned char *secret, size_t *secretlen, + size_t outlen) +{ + PROV_ECX_CTX *ecxctx = (PROV_ECX_CTX *)vecxctx; + + if (ecxctx->key == NULL + || ecxctx->key->privkey == NULL + || ecxctx->peerkey == NULL) { + ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY); + return 0; + } + + if (!ossl_assert(ecxctx->keylen == X25519_KEYLEN + || ecxctx->keylen == X448_KEYLEN)) { + ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH); + return 0; + } + + if (secret == NULL) { + *secretlen = ecxctx->keylen; + return 1; + } + if (outlen < ecxctx->keylen) { + ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH); + return 0; + } + + if (ecxctx->keylen == X25519_KEYLEN) { +#ifdef S390X_EC_ASM + if (OPENSSL_s390xcap_P.pcc[1] + & S390X_CAPBIT(S390X_SCALAR_MULTIPLY_X25519)) { + if (s390x_x25519_mul(secret, ecxctx->peerkey->pubkey, + ecxctx->key->privkey) == 0) { + ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_DURING_DERIVATION); + return 0; + } + } else +#endif + if (X25519(secret, ecxctx->key->privkey, ecxctx->peerkey->pubkey) == 0) { + ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_DURING_DERIVATION); + return 0; + } + } else { +#ifdef S390X_EC_ASM + if (OPENSSL_s390xcap_P.pcc[1] + & S390X_CAPBIT(S390X_SCALAR_MULTIPLY_X448)) { + if (s390x_x448_mul(secret, ecxctx->peerkey->pubkey, + ecxctx->key->privkey) == 0) { + ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_DURING_DERIVATION); + return 0; + } + } else +#endif + if (X448(secret, ecxctx->key->privkey, ecxctx->peerkey->pubkey) == 0) { + ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_DURING_DERIVATION); + return 0; + } + } + + *secretlen = ecxctx->keylen; + return 1; +} + +static void ecx_freectx(void *vecxctx) +{ + PROV_ECX_CTX *ecxctx = (PROV_ECX_CTX *)vecxctx; + + ecx_key_free(ecxctx->key); + ecx_key_free(ecxctx->peerkey); + + OPENSSL_free(ecxctx); +} + +static void *ecx_dupctx(void *vecxctx) +{ + PROV_ECX_CTX *srcctx = (PROV_ECX_CTX *)vecxctx; + PROV_ECX_CTX *dstctx; + + dstctx = OPENSSL_zalloc(sizeof(*srcctx)); + if (dstctx == NULL) { + ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); + return NULL; + } + + *dstctx = *srcctx; + if (dstctx->key != NULL && !ecx_key_up_ref(dstctx->key)) { + ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR); + OPENSSL_free(dstctx); + return NULL; + } + + if (dstctx->peerkey != NULL && !ecx_key_up_ref(dstctx->peerkey)) { + ERR_raise(ERR_LIB_PROV, ERR_R_INTERNAL_ERROR); + ecx_key_free(dstctx->key); + OPENSSL_free(dstctx); + return NULL; + } + + return dstctx; +} + +const OSSL_DISPATCH x25519_keyexch_functions[] = { + { OSSL_FUNC_KEYEXCH_NEWCTX, (void (*)(void))x25519_newctx }, + { OSSL_FUNC_KEYEXCH_INIT, (void (*)(void))ecx_init }, + { OSSL_FUNC_KEYEXCH_DERIVE, (void (*)(void))ecx_derive }, + { OSSL_FUNC_KEYEXCH_SET_PEER, (void (*)(void))ecx_set_peer }, + { OSSL_FUNC_KEYEXCH_FREECTX, (void (*)(void))ecx_freectx }, + { OSSL_FUNC_KEYEXCH_DUPCTX, (void (*)(void))ecx_dupctx }, + { 0, NULL } +}; + +const OSSL_DISPATCH x448_keyexch_functions[] = { + { OSSL_FUNC_KEYEXCH_NEWCTX, (void (*)(void))x448_newctx }, + { OSSL_FUNC_KEYEXCH_INIT, (void (*)(void))ecx_init }, + { OSSL_FUNC_KEYEXCH_DERIVE, (void (*)(void))ecx_derive }, + { OSSL_FUNC_KEYEXCH_SET_PEER, (void (*)(void))ecx_set_peer }, + { OSSL_FUNC_KEYEXCH_FREECTX, (void (*)(void))ecx_freectx }, + { OSSL_FUNC_KEYEXCH_DUPCTX, (void (*)(void))ecx_dupctx }, + { 0, NULL } +}; diff --git a/providers/implementations/include/prov/implementations.h b/providers/implementations/include/prov/implementations.h index 417f74af..f4e0dc9b 100644 --- a/providers/implementations/include/prov/implementations.h +++ b/providers/implementations/include/prov/implementations.h @@ -257,9 +257,13 @@ extern const OSSL_DISPATCH kdf_krb5kdf_functions[]; extern const OSSL_DISPATCH dh_keymgmt_functions[]; extern const OSSL_DISPATCH dsa_keymgmt_functions[]; extern const OSSL_DISPATCH rsa_keymgmt_functions[]; +extern const OSSL_DISPATCH x25519_keymgmt_functions[]; +extern const OSSL_DISPATCH x448_keymgmt_functions[]; /* Key Exchange */ extern const OSSL_DISPATCH dh_keyexch_functions[]; +extern const OSSL_DISPATCH x25519_keyexch_functions[]; +extern const OSSL_DISPATCH x448_keyexch_functions[]; /* Signature */ extern const OSSL_DISPATCH dsa_signature_functions[]; diff --git a/providers/implementations/keymgmt/build.info b/providers/implementations/keymgmt/build.info index f4a9d1a5..1e4146d1 100644 --- a/providers/implementations/keymgmt/build.info +++ b/providers/implementations/keymgmt/build.info @@ -4,6 +4,7 @@ $DH_GOAL=../../libimplementations.a $DSA_GOAL=../../libimplementations.a $RSA_GOAL=../../libimplementations.a +$ECX_GOAL=../../libimplementations.a IF[{- !$disabled{dh} -}] SOURCE[$DH_GOAL]=dh_kmgmt.c @@ -12,3 +13,6 @@ IF[{- !$disabled{dsa} -}] SOURCE[$DSA_GOAL]=dsa_kmgmt.c ENDIF SOURCE[$RSA_GOAL]=rsa_kmgmt.c +IF[{- !$disabled{ec} -}] + SOURCE[$ECX_GOAL]=ecx_kmgmt.c +ENDIF diff --git a/providers/implementations/keymgmt/dh_kmgmt.c b/providers/implementations/keymgmt/dh_kmgmt.c index 44791a13..1694421c 100644 --- a/providers/implementations/keymgmt/dh_kmgmt.c +++ b/providers/implementations/keymgmt/dh_kmgmt.c @@ -10,12 +10,13 @@ #include #include #include -#include #include #include "internal/param_build.h" #include "crypto/dh.h" #include "prov/implementations.h" #include "prov/providercommon.h" +#include "prov/provider_ctx.h" +#include "crypto/dh.h" static OSSL_OP_keymgmt_new_fn dh_newdata; static OSSL_OP_keymgmt_free_fn dh_freedata; @@ -86,9 +87,9 @@ static int params_to_key(DH *dh, const OSSL_PARAM params[]) return 0; param_priv_key = - OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_DH_PRIV_KEY); + OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PRIV_KEY); param_pub_key = - OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_DH_PUB_KEY); + OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PUB_KEY); /* * DH documentation says that a public key must be present if a @@ -126,10 +127,10 @@ static int key_to_params(DH *dh, OSSL_PARAM_BLD *tmpl) DH_get0_key(dh, &pub_key, &priv_key); if (priv_key != NULL - && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_DH_PRIV_KEY, priv_key)) + && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_PRIV_KEY, priv_key)) return 0; if (pub_key != NULL - && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_DH_PUB_KEY, pub_key)) + && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_PUB_KEY, pub_key)) return 0; return 1; @@ -137,7 +138,7 @@ static int key_to_params(DH *dh, OSSL_PARAM_BLD *tmpl) static void *dh_newdata(void *provctx) { - return DH_new(); + return dh_new_with_ctx(PROV_LIBRARY_CONTEXT_OF(provctx)); } static void dh_freedata(void *keydata) @@ -214,9 +215,9 @@ static int dh_export(void *keydata, int selection, OSSL_CALLBACK *param_cb, OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_P, NULL, 0), \ OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_G, NULL, 0) # define DH_IMEXPORTABLE_PUBLIC_KEY \ - OSSL_PARAM_BN(OSSL_PKEY_PARAM_DH_PUB_KEY, NULL, 0) + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0) # define DH_IMEXPORTABLE_PRIVATE_KEY \ - OSSL_PARAM_BN(OSSL_PKEY_PARAM_DH_PRIV_KEY, NULL, 0) + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0) static const OSSL_PARAM dh_all_types[] = { DH_IMEXPORTABLE_PARAMETERS, DH_IMEXPORTABLE_PUBLIC_KEY, diff --git a/providers/implementations/keymgmt/dsa_kmgmt.c b/providers/implementations/keymgmt/dsa_kmgmt.c index f5bbc526..1855474c 100644 --- a/providers/implementations/keymgmt/dsa_kmgmt.c +++ b/providers/implementations/keymgmt/dsa_kmgmt.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include @@ -94,9 +100,9 @@ static int params_to_key(DSA *dsa, const OSSL_PARAM params[]) return 0; param_priv_key = - OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_DSA_PRIV_KEY); + OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PRIV_KEY); param_pub_key = - OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_DSA_PUB_KEY); + OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PUB_KEY); /* * DSA documentation says that a public key must be present if a private key @@ -133,10 +139,10 @@ static int key_to_params(DSA *dsa, OSSL_PARAM_BLD *tmpl) DSA_get0_key(dsa, &pub_key, &priv_key); if (priv_key != NULL - && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_DSA_PRIV_KEY, priv_key)) + && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_PRIV_KEY, priv_key)) return 0; if (pub_key != NULL - && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_DSA_PUB_KEY, pub_key)) + && !ossl_param_bld_push_BN(tmpl, OSSL_PKEY_PARAM_PUB_KEY, pub_key)) return 0; return 1; @@ -144,7 +150,7 @@ static int key_to_params(DSA *dsa, OSSL_PARAM_BLD *tmpl) static void *dsa_newdata(void *provctx) { - return DSA_new(); + return dsa_new_with_ctx(PROV_LIBRARY_CONTEXT_OF(provctx)); } static void dsa_freedata(void *keydata) @@ -222,9 +228,9 @@ static int dsa_export(void *keydata, int selection, OSSL_CALLBACK *param_cb, OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_Q, NULL, 0), \ OSSL_PARAM_BN(OSSL_PKEY_PARAM_FFC_G, NULL, 0) # define DSA_IMEXPORTABLE_PUBLIC_KEY \ - OSSL_PARAM_BN(OSSL_PKEY_PARAM_DSA_PUB_KEY, NULL, 0) + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0) # define DSA_IMEXPORTABLE_PRIVATE_KEY \ - OSSL_PARAM_BN(OSSL_PKEY_PARAM_DSA_PRIV_KEY, NULL, 0) + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0) static const OSSL_PARAM dsa_all_types[] = { DSA_IMEXPORTABLE_PARAMETERS, DSA_IMEXPORTABLE_PUBLIC_KEY, diff --git a/providers/implementations/keymgmt/ecx_kmgmt.c b/providers/implementations/keymgmt/ecx_kmgmt.c new file mode 100644 index 00000000..cbb302ef --- /dev/null +++ b/providers/implementations/keymgmt/ecx_kmgmt.c @@ -0,0 +1,231 @@ +/* + * Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include +#include +#include +#include "internal/param_build.h" +#include "crypto/ecx.h" +#include "prov/implementations.h" +#include "prov/providercommon.h" + +static OSSL_OP_keymgmt_new_fn x25519_new_key; +static OSSL_OP_keymgmt_new_fn x448_new_key; +static OSSL_OP_keymgmt_get_params_fn x25519_get_params; +static OSSL_OP_keymgmt_get_params_fn x448_get_params; +static OSSL_OP_keymgmt_gettable_params_fn ecx_gettable_params; +static OSSL_OP_keymgmt_has_fn ecx_has; +static OSSL_OP_keymgmt_import_fn ecx_import; +static OSSL_OP_keymgmt_import_types_fn ecx_imexport_types; +static OSSL_OP_keymgmt_export_fn ecx_export; +static OSSL_OP_keymgmt_export_types_fn ecx_imexport_types; + +static void *x25519_new_key(void *provctx) +{ + return ecx_key_new(X25519_KEYLEN, 0); +} + +static void *x448_new_key(void *provctx) +{ + return ecx_key_new(X448_KEYLEN, 0); +} + +static int ecx_has(void *keydata, int selection) +{ + ECX_KEY *key = keydata; + const int ecx_selections = OSSL_KEYMGMT_SELECT_PUBLIC_KEY + | OSSL_KEYMGMT_SELECT_PRIVATE_KEY; + int ok = 1; + + if ((selection & ~ecx_selections) != 0 + || (selection & ecx_selections) == 0) + return 0; + + if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0) + ok = ok && key->haspubkey; + + if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0) + ok = ok && key->privkey != NULL; + + return ok; +} + +static int ecx_import(void *keydata, int selection, const OSSL_PARAM params[]) +{ + ECX_KEY *key = keydata; + size_t privkeylen = 0, pubkeylen; + const OSSL_PARAM *param_priv_key = NULL, *param_pub_key; + unsigned char *pubkey; + const int ecx_selections = OSSL_KEYMGMT_SELECT_PUBLIC_KEY + | OSSL_KEYMGMT_SELECT_PRIVATE_KEY; + + if (key == NULL) + return 0; + + if ((selection & ~ecx_selections) != 0 + || (selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) == 0) + return 0; + + if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0) + param_priv_key = + OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PRIV_KEY); + param_pub_key = + OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_PUB_KEY); + + /* + * If a private key is present then a public key must also be present. + * Alternatively we've just got a public key. + */ + if (param_pub_key == NULL + || (param_priv_key == NULL + && (selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0)) + return 0; + + if (param_priv_key != NULL + && !OSSL_PARAM_get_octet_string(param_priv_key, + (void **)&key->privkey, key->keylen, + &privkeylen)) + return 0; + + pubkey = key->pubkey; + if (!OSSL_PARAM_get_octet_string(param_pub_key, + (void **)&pubkey, + sizeof(key->pubkey), &pubkeylen)) + return 0; + + if (pubkeylen != key->keylen + || (param_priv_key != NULL && privkeylen != key->keylen)) + return 0; + + key->haspubkey = 1; + + return 1; +} + +static int key_to_params(ECX_KEY *key, OSSL_PARAM_BLD *tmpl) +{ + if (key == NULL) + return 0; + + if (!ossl_param_bld_push_octet_string(tmpl, OSSL_PKEY_PARAM_PUB_KEY, + key->pubkey, key->keylen)) + return 0; + + if (key->privkey != NULL + && !ossl_param_bld_push_octet_string(tmpl, OSSL_PKEY_PARAM_PRIV_KEY, + key->privkey, key->keylen)) + return 0; + + return 1; +} + +static int ecx_export(void *keydata, int selection, OSSL_CALLBACK *param_cb, + void *cbarg) +{ + ECX_KEY *key = keydata; + OSSL_PARAM_BLD tmpl; + OSSL_PARAM *params = NULL; + int ret; + + if (key == NULL) + return 0; + + if ((selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0 + && !key_to_params(key, &tmpl)) + return 0; + + ossl_param_bld_init(&tmpl); + params = ossl_param_bld_to_param(&tmpl); + if (params == NULL) { + ossl_param_bld_free(params); + return 0; + } + + ret = param_cb(params, cbarg); + ossl_param_bld_free(params); + return ret; +} + +static const OSSL_PARAM ecx_key_types[] = { + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PUB_KEY, NULL, 0), + OSSL_PARAM_BN(OSSL_PKEY_PARAM_PRIV_KEY, NULL, 0), + OSSL_PARAM_END +}; +static const OSSL_PARAM *ecx_imexport_types(int selection) +{ + if ((selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0) + return ecx_key_types; + return NULL; +} + +static int ecx_get_params(OSSL_PARAM params[], int bits, int secbits, + int size) +{ + OSSL_PARAM *p; + + if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_BITS)) != NULL + && !OSSL_PARAM_set_int(p, bits)) + return 0; + if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_SECURITY_BITS)) != NULL + && !OSSL_PARAM_set_int(p, secbits)) + return 0; + if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_MAX_SIZE)) != NULL + && !OSSL_PARAM_set_int(p, size)) + return 0; + return 1; +} + +static int x25519_get_params(void *key, OSSL_PARAM params[]) +{ + return ecx_get_params(params, X25519_BITS, X25519_SECURITY_BITS, X25519_KEYLEN); +} + +static int x448_get_params(void *key, OSSL_PARAM params[]) +{ + return ecx_get_params(params, X448_BITS, X448_SECURITY_BITS, X448_KEYLEN); +} + +static const OSSL_PARAM ecx_params[] = { + OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL), + OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL), + OSSL_PARAM_END +}; + +static const OSSL_PARAM *ecx_gettable_params(void) +{ + return ecx_params; +} + +const OSSL_DISPATCH x25519_keymgmt_functions[] = { + { OSSL_FUNC_KEYMGMT_NEW, (void (*)(void))x25519_new_key }, + { OSSL_FUNC_KEYMGMT_FREE, (void (*)(void))ecx_key_free }, + { OSSL_FUNC_KEYMGMT_GET_PARAMS, (void (*) (void))x25519_get_params }, + { OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS, (void (*) (void))ecx_gettable_params }, + { OSSL_FUNC_KEYMGMT_HAS, (void (*)(void))ecx_has }, + { OSSL_FUNC_KEYMGMT_IMPORT, (void (*)(void))ecx_import }, + { OSSL_FUNC_KEYMGMT_IMPORT_TYPES, (void (*)(void))ecx_imexport_types }, + { OSSL_FUNC_KEYMGMT_EXPORT, (void (*)(void))ecx_export }, + { OSSL_FUNC_KEYMGMT_EXPORT_TYPES, (void (*)(void))ecx_imexport_types }, + { 0, NULL } +}; + +const OSSL_DISPATCH x448_keymgmt_functions[] = { + { OSSL_FUNC_KEYMGMT_NEW, (void (*)(void))x448_new_key }, + { OSSL_FUNC_KEYMGMT_FREE, (void (*)(void))ecx_key_free }, + { OSSL_FUNC_KEYMGMT_GET_PARAMS, (void (*) (void))x448_get_params }, + { OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS, (void (*) (void))ecx_gettable_params }, + { OSSL_FUNC_KEYMGMT_HAS, (void (*)(void))ecx_has }, + { OSSL_FUNC_KEYMGMT_IMPORT, (void (*)(void))ecx_import }, + { OSSL_FUNC_KEYMGMT_IMPORT_TYPES, (void (*)(void))ecx_imexport_types }, + { OSSL_FUNC_KEYMGMT_EXPORT, (void (*)(void))ecx_export }, + { OSSL_FUNC_KEYMGMT_EXPORT_TYPES, (void (*)(void))ecx_imexport_types }, + { 0, NULL } +}; diff --git a/providers/implementations/keymgmt/rsa_kmgmt.c b/providers/implementations/keymgmt/rsa_kmgmt.c index 6ab695ea..f43520f8 100644 --- a/providers/implementations/keymgmt/rsa_kmgmt.c +++ b/providers/implementations/keymgmt/rsa_kmgmt.c @@ -18,6 +18,7 @@ #include "internal/param_build.h" #include "prov/implementations.h" #include "prov/providercommon.h" +#include "prov/provider_ctx.h" #include "crypto/rsa.h" static OSSL_OP_keymgmt_new_fn rsa_newdata; @@ -170,7 +171,9 @@ static int key_to_params(RSA *rsa, OSSL_PARAM_BLD *tmpl) static void *rsa_newdata(void *provctx) { - return RSA_new(); + OPENSSL_CTX *libctx = PROV_LIBRARY_CONTEXT_OF(provctx); + + return rsa_new_with_ctx(libctx); } static void rsa_freedata(void *keydata) @@ -321,7 +324,7 @@ static int rsa_get_params(void *key, OSSL_PARAM params[]) && !OSSL_PARAM_set_int(p, RSA_size(rsa))) return 0; -# if 0 /* PSS support pending */ +# if 0 /* TODO(3.0): PSS support pending */ if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_MANDATORY_DIGEST)) != NULL && RSA_get0_pss_params(rsa) != NULL) { @@ -338,9 +341,14 @@ static int rsa_get_params(void *key, OSSL_PARAM params[]) } #endif if ((p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_DEFAULT_DIGEST)) != NULL - && RSA_get0_pss_params(rsa) == NULL) +/* TODO(3.0): PSS support pending */ +#if 0 + && RSA_get0_pss_params(rsa) == NULL +#endif + ) { if (!OSSL_PARAM_set_utf8_string(p, RSA_DEFAULT_MD)) return 0; + } return 1; } diff --git a/providers/implementations/serializers/serializer_dsa.c b/providers/implementations/serializers/serializer_dsa.c index e24d66fc..16ecb0d9 100644 --- a/providers/implementations/serializers/serializer_dsa.c +++ b/providers/implementations/serializers/serializer_dsa.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include "prov/bio.h" /* ossl_prov_bio_printf() */ diff --git a/providers/implementations/serializers/serializer_dsa_param.c b/providers/implementations/serializers/serializer_dsa_param.c index 59549887..bed37fe3 100644 --- a/providers/implementations/serializers/serializer_dsa_param.c +++ b/providers/implementations/serializers/serializer_dsa_param.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include diff --git a/providers/implementations/serializers/serializer_dsa_priv.c b/providers/implementations/serializers/serializer_dsa_priv.c index f3a9ef8f..94ee86dd 100644 --- a/providers/implementations/serializers/serializer_dsa_priv.c +++ b/providers/implementations/serializers/serializer_dsa_priv.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include diff --git a/providers/implementations/serializers/serializer_dsa_pub.c b/providers/implementations/serializers/serializer_dsa_pub.c index 933f1efa..8fab41ec 100644 --- a/providers/implementations/serializers/serializer_dsa_pub.c +++ b/providers/implementations/serializers/serializer_dsa_pub.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include diff --git a/providers/implementations/signature/dsa.c b/providers/implementations/signature/dsa.c index 72cf7192..99183e8f 100644 --- a/providers/implementations/signature/dsa.c +++ b/providers/implementations/signature/dsa.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include @@ -194,8 +200,7 @@ static int dsa_sign(void *vpdsactx, unsigned char *sig, size_t *siglen, if (mdsize != 0 && tbslen != mdsize) return 0; - ret = dsa_sign_int(pdsactx->libctx, 0, tbs, tbslen, sig, &sltmp, - pdsactx->dsa); + ret = dsa_sign_int(0, tbs, tbslen, sig, &sltmp, pdsactx->dsa); if (ret <= 0) return 0; diff --git a/test/build.info b/test/build.info index dcdc345b..f964dec4 100644 --- a/test/build.info +++ b/test/build.info @@ -35,7 +35,7 @@ IF[{- !$disabled{tests} -}] ectest ecstresstest gmdifftest pbelutest \ destest mdc2test \ dhtest enginetest \ - ssltest_old dsatest dsa_no_digest_size_test exptest rsa_test \ + ssltest_old exptest rsa_test \ evp_pkey_provided_test evp_test evp_extra_test evp_fetch_prov_test \ v3nametest v3ext \ crltest danetest bad_dtls_test lhash_test sparse_array_test \ @@ -121,14 +121,6 @@ IF[{- !$disabled{tests} -}] INCLUDE[ssltest_old]=.. ../include ../apps/include DEPEND[ssltest_old]=../libcrypto ../libssl - SOURCE[dsatest]=dsatest.c - INCLUDE[dsatest]=../include ../apps/include - DEPEND[dsatest]=../libcrypto libtestutil.a - - SOURCE[dsa_no_digest_size_test]=dsa_no_digest_size_test.c - INCLUDE[dsa_no_digest_size_test]=../include ../apps/include - DEPEND[dsa_no_digest_size_test]=../libcrypto libtestutil.a - SOURCE[exptest]=exptest.c INCLUDE[exptest]=../include ../apps/include DEPEND[exptest]=../libcrypto libtestutil.a @@ -463,7 +455,7 @@ IF[{- !$disabled{tests} -}] IF[{- !$disabled{cmp} -}] PROGRAMS{noinst}=cmp_asn_test cmp_ctx_test cmp_status_test cmp_hdr_test \ - cmp_protect_test cmp_msg_test + cmp_protect_test cmp_msg_test cmp_vfy_test ENDIF SOURCE[cmp_asn_test]=cmp_asn_test.c cmp_testlib.c @@ -490,6 +482,10 @@ IF[{- !$disabled{tests} -}] INCLUDE[cmp_msg_test]=.. ../include ../apps/include DEPEND[cmp_msg_test]=../libcrypto.a libtestutil.a + SOURCE[cmp_vfy_test]=cmp_status_test.c cmp_testlib.c + INCLUDE[cmp_vfy_test]=.. ../include ../apps/include + DEPEND[cmp_vfy_test]=../libcrypto.a libtestutil.a + # Internal test programs. These are essentially a collection of internal # test routines. Some of them need to reach internal symbols that aren't # available through the shared library (at least on Linux, Solaris, Windows @@ -501,8 +497,9 @@ IF[{- !$disabled{tests} -}] tls13encryptiontest wpackettest ctype_internal_test \ rdrand_sanitytest property_test ideatest \ rsa_sp800_56b_test bn_internal_test ecdsatest \ - rc2test rc4test rc5test hmactest \ - asn1_dsa_internal_test + rc2test rc4test rc5test hmactest ffc_internal_test \ + asn1_dsa_internal_test dsatest dsa_no_digest_size_test + IF[{- !$disabled{poly1305} -}] PROGRAMS{noinst}=poly1305_internal_test @@ -543,10 +540,19 @@ IF[{- !$disabled{tests} -}] INCLUDE[x509_internal_test]=.. ../include ../apps/include DEPEND[x509_internal_test]=../libcrypto.a libtestutil.a + SOURCE[ecdsatest]=ecdsatest.c INCLUDE[ecdsatest]=../include ../apps/include DEPEND[ecdsatest]=../libcrypto.a libtestutil.a + SOURCE[dsatest]=dsatest.c + INCLUDE[dsatest]=../include ../apps/include + DEPEND[dsatest]=../libcrypto.a libtestutil.a + + SOURCE[dsa_no_digest_size_test]=dsa_no_digest_size_test.c + INCLUDE[dsa_no_digest_size_test]=../include ../apps/include + DEPEND[dsa_no_digest_size_test]=../libcrypto.a libtestutil.a + SOURCE[tls13encryptiontest]=tls13encryptiontest.c INCLUDE[tls13encryptiontest]=.. ../include ../apps/include DEPEND[tls13encryptiontest]=../libcrypto ../libssl.a libtestutil.a @@ -635,6 +641,10 @@ IF[{- !$disabled{tests} -}] INCLUDE[keymgmt_internal_test]=.. ../include ../apps/include DEPEND[keymgmt_internal_test]=../libcrypto.a libtestutil.a + SOURCE[ffc_internal_test]=ffc_internal_test.c + INCLUDE[ffc_internal_test]=.. ../include ../apps/include ../crypto/include + DEPEND[ffc_internal_test]=../libcrypto.a libtestutil.a + IF[{- !$disabled{mdc2} -}] PROGRAMS{noinst}=mdc2_internal_test ENDIF diff --git a/test/certs/root-ed448-cert.pem b/test/certs/root-ed448-cert.pem new file mode 100644 index 00000000..48e293d6 --- /dev/null +++ b/test/certs/root-ed448-cert.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBeDCB+aADAgECAgEBMAUGAytlcTAVMRMwEQYDVQQDDApSb290IEVkNDQ4MCAX +DTIwMDIwOTEzMjY1NVoYDzIxMjAwMjEwMTMyNjU1WjAVMRMwEQYDVQQDDApSb290 +IEVkNDQ4MEMwBQYDK2VxAzoAbbhuwNA/rdlgdLSyTJ6WaCVNO1gzccKiKW6pCADM +McMBCNiQqWSt4EIbHpqDc+eWoiKbG6t7tjUAo1MwUTAdBgNVHQ4EFgQUVg2aQ+yh +VRhOuW1l19jtgxfTgj8wHwYDVR0jBBgwFoAUVg2aQ+yhVRhOuW1l19jtgxfTgj8w +DwYDVR0TAQH/BAUwAwEB/zAFBgMrZXEDcwCiXlZXyMubWFqLYiLXfKYrurajBMON +lclLrYr57Syd+nAIlgXiF0rGK2PawoMPXVB3VWWSigEb54AImb6tsW42gC+zC6oq +nkPC2FTLXPvqqgGXUpK/OfhPUP9bWw6mcJaIozlyzJD4AyebN9LDrBqCMwA= +-----END CERTIFICATE----- diff --git a/test/certs/root-ed448-key.pem b/test/certs/root-ed448-key.pem new file mode 100644 index 00000000..e0c36ff4 --- /dev/null +++ b/test/certs/root-ed448-key.pem @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEcCAQAwBQYDK2VxBDsEOQeryQn6L8gItRarrM0pRHxjNdtaIz3BrWU2mwhLZQaq +8Cm6w5gP6aitAIde7Td3nQ55bIGC5roxFQ== +-----END PRIVATE KEY----- diff --git a/test/certs/server-ed448-cert.pem b/test/certs/server-ed448-cert.pem index 740f2755..ba050077 100644 --- a/test/certs/server-ed448-cert.pem +++ b/test/certs/server-ed448-cert.pem @@ -1,14 +1,11 @@ -----BEGIN CERTIFICATE----- -MIICHTCCAQWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290 -IENBMCAXDTE4MDIyNzE1MDcxM1oYDzIxMTgwMjI4MTUwNzEzWjAQMQ4wDAYDVQQD -DAVFZDQ0ODBDMAUGAytlcQM6ABBicYlhG1s3AoG5BFmY3r50lJzjQoER4zwuieEe -QTvKxLEV06vGh79UWO6yQ5FxqmxvM1F/Xw7RAKNfMF0wHQYDVR0OBBYEFAwa1L4m -3pwA8+IEJ7K/4izrjJIHMB8GA1UdIwQYMBaAFHB/Lq6DaFmYBCMqzes+F80k3QFJ -MAkGA1UdEwQCMAAwEAYDVR0RBAkwB4IFRWQ0NDgwDQYJKoZIhvcNAQELBQADggEB -AAugH2aE6VvArnOVjKBtalqtHlx+NCC3+S65sdWc9A9sNgI1ZiN7dn76TKn5d0T7 -NqV8nY1rwQg6WPGrCD6Eh63qhotytqYIxltppb4MOUJcz/Zf0ZwhB5bUfwNB//Ih -5aZT86FpXVuyMnwUTWPcISJqpZiBv95yzZFMpniHFvecvV445ly4TFW5y6VURh40 -Tg4tMgjPTE7ADw+dX4FvnTWY3blxT1GzGxGvqWW4HgP8dOETnjmAwCzN0nUVmH9s -7ybHORcSljcpe0XH6L/K7mbI+r8mVLsAoIzUeDwUdKKJZ2uGEtdhQDmJBp4EjOXE -3qIn3wEQQ6ax4NIwkZihdLI= +MIIBlTCCARWgAwIBAgIBAjAFBgMrZXEwFTETMBEGA1UEAwwKUm9vdCBFZDQ0ODAg +Fw0yMDAyMDkxMzMwMjJaGA8yMTIwMDIxMDEzMzAyMlowEDEOMAwGA1UEAwwFZWQ0 +NDgwQzAFBgMrZXEDOgAQYnGJYRtbNwKBuQRZmN6+dJSc40KBEeM8LonhHkE7ysSx +FdOrxoe/VFjuskORcapsbzNRf18O0QCjdDByMB0GA1UdDgQWBBQMGtS+Jt6cAPPi +BCeyv+Is64ySBzAfBgNVHSMEGDAWgBRWDZpD7KFVGE65bWXX2O2DF9OCPzAJBgNV +HRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMBAGA1UdEQQJMAeCBWVkNDQ4MAUG +AytlcQNzABLGZiaU6JPKa9eQ/VsE4HN9XjSogZBKIEHEWwyxrtGvjWiZ5MOnNJmQ +7mX+Y2eJzfZ6MGHc63IlgPdIPFPzInnnAugw297kUNoLTg9SsGYeVGLbI3PNjwFL +mQ3508f1Jobb8qZnf8YFUZrd85aurgoKAA== -----END CERTIFICATE----- diff --git a/test/certs/setup.sh b/test/certs/setup.sh index bd0b6639..d58d0d78 100755 --- a/test/certs/setup.sh +++ b/test/certs/setup.sh @@ -378,3 +378,8 @@ openssl req -new -nodes -subj "/CN=localhost" \ # CT entry ./mkcert.sh genct server.example embeddedSCTs1-key embeddedSCTs1 embeddedSCTs1_issuer-key embeddedSCTs1_issuer ct-server-key + +OPENSSL_SIGALG=ED448 OPENSSL_KEYALG=ed448 ./mkcert.sh genroot "Root Ed448" \ + root-ed448-key root-ed448-cert +OPENSSL_SIGALG=ED448 OPENSSL_KEYALG=ed448 ./mkcert.sh genee ed448 \ + server-ed448-key server-ed448-cert root-ed448-key root-ed448-cert diff --git a/test/cmp_ctx_test.c b/test/cmp_ctx_test.c index c007cfb3..26c65778 100644 --- a/test/cmp_ctx_test.c +++ b/test/cmp_ctx_test.c @@ -169,7 +169,7 @@ static int execute_CTX_print_errors_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) base_err_msg_size = strlen("INVALID_ARGS") + strlen(" : "); expected_size = base_err_msg_size; while (expected_size < 4096) { /* force split */ - ossl_cmp_add_error_txt(STR_SEP, max_str_literal); + ERR_add_error_txt(STR_SEP, max_str_literal); expected_size += strlen(STR_SEP) + strlen(max_str_literal); } expected_size += base_err_msg_size - 2 * strlen(STR_SEP); @@ -190,12 +190,12 @@ static int test_CTX_print_errors(void) } #endif -static int execute_CTX_reqExtensions_have_SAN_test( - OSSL_CMP_CTX_TEST_FIXTURE *fixture) +static +int execute_CTX_reqExtensions_have_SAN_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) { OSSL_CMP_CTX *ctx = fixture->ctx; const int len = 16; - unsigned char str[16 /* = len */ ]; + unsigned char str[16 /* = len */]; ASN1_OCTET_STRING *data = NULL; X509_EXTENSION *ext = NULL; X509_EXTENSIONS *exts = NULL; @@ -234,29 +234,27 @@ static int test_CTX_reqExtensions_have_SAN(void) return result; } -#ifndef OPENSSL_NO_TRACE static int test_log_line; static int test_log_cb_res = 0; static int test_log_cb(const char *func, const char *file, int line, OSSL_CMP_severity level, const char *msg) { test_log_cb_res = -# ifndef PEDANTIC - (strcmp(func, "execute_cmp_ctx_log_cb_test") == 0 - || strcmp(func, "(unknown function)") == 0) && -# endif - (strcmp(file, OPENSSL_FILE) == 0 || strcmp(file, "(no file)") == 0) - && (line == test_log_line || line == 0) - && (level == OSSL_CMP_LOG_INFO || level == -1) - && strcmp(msg, "ok\n") == 0; +#ifndef PEDANTIC + (TEST_str_eq(func, "execute_cmp_ctx_log_cb_test") + || TEST_str_eq(func, "(unknown function)")) && +#endif + (TEST_str_eq(file, OPENSSL_FILE) + || TEST_str_eq(file, "(no file)")) + && (TEST_int_eq(line, test_log_line) || TEST_int_eq(line, 0)) + && (TEST_int_eq(level, OSSL_CMP_LOG_INFO) || TEST_int_eq(level, -1)) + && TEST_str_eq(msg, "ok"); return 1; } -#endif static int execute_cmp_ctx_log_cb_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) { int res = 1; -#if !defined OPENSSL_NO_TRACE && !defined OPENSSL_NO_STDIO OSSL_CMP_CTX *ctx = fixture->ctx; OSSL_TRACE(ALL, "this general trace message is not shown by default\n"); @@ -267,30 +265,29 @@ static int execute_cmp_ctx_log_cb_test(OSSL_CMP_CTX_TEST_FIXTURE *fixture) if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, NULL))) { res = 0; } else { - OSSL_CMP_err("this should be printed as CMP error message"); - OSSL_CMP_warn("this should be printed as CMP warning message"); - OSSL_CMP_debug("this should not be printed"); + ossl_cmp_err(ctx, "this should be printed as CMP error message"); + ossl_cmp_warn(ctx, "this should be printed as CMP warning message"); + ossl_cmp_debug(ctx, "this should not be printed"); TEST_true(OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_DEBUG)); - OSSL_CMP_debug("this should be printed as CMP debug message"); + ossl_cmp_debug(ctx, "this should be printed as CMP debug message"); TEST_true(OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_INFO)); } if (!TEST_true(OSSL_CMP_CTX_set_log_cb(ctx, test_log_cb))) { res = 0; } else { test_log_line = OPENSSL_LINE + 1; - OSSL_CMP_log2(INFO, "%s%c", "o", 'k'); + ossl_cmp_log2(INFO, ctx, "%s%c", "o", 'k'); if (!TEST_int_eq(test_log_cb_res, 1)) res = 0; OSSL_CMP_CTX_set_log_verbosity(ctx, OSSL_CMP_LOG_ERR); test_log_cb_res = -1; /* callback should not be called at all */ test_log_line = OPENSSL_LINE + 1; - OSSL_CMP_log2(INFO, "%s%c", "o", 'k'); + ossl_cmp_log2(INFO, ctx, "%s%c", "o", 'k'); if (!TEST_int_eq(test_log_cb_res, -1)) res = 0; } OSSL_CMP_log_close(); OSSL_CMP_log_close(); /* multiple calls should be harmless */ -#endif return res; } @@ -330,13 +327,13 @@ typedef OSSL_CMP_CTX CMP_CTX; /* prevents rewriting type name by below macro */ #define DEFINE_SET_GET_BASE_TEST(PREFIX, SETN, GETN, DUP, FIELD, TYPE, ERR, \ DEFAULT, NEW, FREE) \ -static int execute_CTX_##SETN##_##GETN##_##FIELD( \ - OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ +static int \ +execute_CTX_##SETN##_##GETN##_##FIELD(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ { \ CMP_CTX *ctx = fixture->ctx; \ int (*set_fn)(CMP_CTX *ctx, TYPE) = \ (int (*)(CMP_CTX *ctx, TYPE))PREFIX##_##SETN##_##FIELD; \ - /* need type cast in above assignment because TYPE arg sometimes is const */ \ + /* need type cast in above assignment as TYPE arg sometimes is const */ \ TYPE (*get_fn)(const CMP_CTX *ctx) = OSSL_CMP_CTX_##GETN##_##FIELD; \ TYPE val1_to_free = NEW; \ TYPE val1 = val1_to_free; \ @@ -440,7 +437,7 @@ static int execute_CTX_##SETN##_##GETN##_##FIELD( \ TEST_error("third get gave different value"); \ res = 0; \ } \ - } else { \ + } else { \ if (DUP && val3_read == val2_read) { \ TEST_error("third get did not create a new dup"); \ res = 0; \ @@ -489,8 +486,8 @@ static X509_STORE *X509_STORE_new_1(void) return store; } -#define DEFAULT_STORE(x) ((x) == NULL \ - || X509_VERIFY_PARAM_get_flags(X509_STORE_get0_param(x)) == 0) +#define DEFAULT_STORE(x) \ + ((x) == NULL || X509_VERIFY_PARAM_get_flags(X509_STORE_get0_param(x)) == 0) #define IS_NEG(x) ((x) < 0) #define IS_0(x) ((x) == 0) /* for any type */ @@ -501,7 +498,7 @@ static X509_STORE *X509_STORE_new_1(void) #define DEFINE_SET_GET_TEST(OSSL_CMP, CTX, N, M, DUP, FIELD, TYPE) \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, DUP, FIELD, \ - TYPE*, NULL, IS_0, TYPE##_new(), TYPE##_free) + TYPE *, NULL, IS_0, TYPE##_new(), TYPE##_free) #define DEFINE_SET_GET_SK_TEST_DEFAULT(OSSL_CMP, CTX, N, M, FIELD, ELEM_TYPE, \ DEFAULT, NEW, FREE) \ @@ -518,7 +515,7 @@ static X509_STORE *X509_STORE_new_1(void) #define DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, N, M, DUP, FIELD, TYPE, \ DEFAULT) \ DEFINE_SET_GET_BASE_TEST(OSSL_CMP##_##CTX, set##N, get##M, DUP, FIELD, \ - TYPE*, NULL, DEFAULT, TYPE##_new(), TYPE##_free) + TYPE *, NULL, DEFAULT, TYPE##_new(), TYPE##_free) #define DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, N, DUP, FIELD, TYPE, DEFAULT) \ static TYPE *OSSL_CMP_CTX_get0_##FIELD(const CMP_CTX *ctx) \ { \ @@ -549,7 +546,7 @@ typedef OSSL_HTTP_bio_cb_t OSSL_cmp_http_cb_t; OSSL_cmp_##FIELD##_t, NULL, IS_0, \ test_##FIELD, DROP) #define DEFINE_SET_GET_P_VOID_TEST(FIELD) \ - DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, FIELD, void*, \ + DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, FIELD, void *, \ NULL, IS_0, ((void *)1), DROP) #define DEFINE_SET_GET_INT_TEST_DEFAULT(OSSL_CMP, CTX, FIELD, DEFAULT) \ @@ -579,7 +576,7 @@ typedef OSSL_HTTP_bio_cb_t OSSL_cmp_http_cb_t; static int OSSL_CMP_CTX_##SETN##_##FIELD##_str(CMP_CTX *ctx, char *val)\ { \ return OSSL_CMP_CTX_##SETN##_##FIELD(ctx, (unsigned char *)val, \ - strlen(val)); \ + strlen(val)); \ } \ \ static char *OSSL_CMP_CTX_get1_##FIELD##_str(const CMP_CTX *ctx) \ @@ -684,7 +681,7 @@ static int execute_CTX_##PUSHN##_##ELEM(OSSL_CMP_CTX_TEST_FIXTURE *fixture) \ res = 0; \ } \ } \ - /* this does not check that all remaining fields and elems are untouched */\ + /* this does not check if all remaining fields and elems are untouched */ \ \ if (!TEST_int_eq(ERR_peek_error(), 0)) \ res = 0; \ @@ -702,7 +699,7 @@ static int test_CTX_##PUSHN##_##ELEM(void) \ } \ #define DEFINE_PUSH_TEST(N, DUP, FIELD, ELEM, TYPE) \ - DEFINE_PUSH_BASE_TEST(push##N, DUP, FIELD, ELEM, TYPE*, TYPE, \ + DEFINE_PUSH_BASE_TEST(push##N, DUP, FIELD, ELEM, TYPE *, TYPE, \ IS_0, TYPE##_new(), TYPE##_free) void cleanup_tests(void) @@ -715,9 +712,7 @@ DEFINE_SET_GET_ARG_FN(set, get, option, 16, int) DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set, get, 0, option_16, int, -1, IS_0, \ 1 /* true */, DROP) -#ifndef OPENSSL_NO_TRACE DEFINE_SET_CB_TEST(log_cb) -#endif DEFINE_SET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, serverPath, char, IS_0) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, serverName, char) @@ -733,7 +728,7 @@ DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, srvCert, X509) DEFINE_SET_TEST(ossl_cmp, ctx, 0, 0, validatedSrvCert, X509) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, expected_sender, X509_NAME) DEFINE_SET_GET_BASE_TEST(OSSL_CMP_CTX, set0, get0, 0, trustedStore, - X509_STORE*, NULL, + X509_STORE *, NULL, DEFAULT_STORE, X509_STORE_new_1(), X509_STORE_free) DEFINE_SET_GET_SK_X509_TEST(OSSL_CMP, CTX, 1, 0, untrusted_certs) @@ -743,9 +738,9 @@ DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 0, pkey, EVP_PKEY) DEFINE_SET_TEST(OSSL_CMP, CTX, 1, 1, recipient, X509_NAME) DEFINE_PUSH_TEST(0, 0, geninfo_ITAVs, geninfo_ITAV, OSSL_CMP_ITAV) DEFINE_SET_SK_TEST(OSSL_CMP, CTX, 1, extraCertsOut, X509) -DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 1, EVP_PKEY*) /* priv == 1 */ +DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 1, EVP_PKEY *) /* priv == 1 */ DEFINE_SET_GET_TEST(OSSL_CMP, CTX, 0, 0, 0, newPkey_1, EVP_PKEY) -DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 0, EVP_PKEY*) /* priv == 0 */ +DEFINE_SET_GET_ARG_FN(set0, get0, newPkey, 0, EVP_PKEY *) /* priv == 0 */ DEFINE_SET_GET_TEST(OSSL_CMP, CTX, 0, 0, 0, newPkey_0, EVP_PKEY) DEFINE_SET_GET1_STR_FN(set1, referenceValue) DEFINE_SET_GET_TEST_DEFAULT(OSSL_CMP, CTX, 1, 1, 1, referenceValue_str, char, @@ -788,21 +783,18 @@ int setup_tests(void) /* various CMP options: */ ADD_TEST(test_CTX_set_get_option_16); /* CMP-specific callback for logging and outputting the error queue: */ -#ifndef OPENSSL_NO_TRACE ADD_TEST(test_CTX_set_get_log_cb); -#endif /* * also tests OSSL_CMP_log_open(), OSSL_CMP_CTX_set_log_verbosity(), - * OSSL_CMP_err(), OSSL_CMP_warn(), * OSSL_CMP_debug(), - * OSSL_CMP_log2(), ossl_cmp_log_parse_metadata(), and OSSL_CMP_log_close() + * ossl_cmp_err(), ossl_cmp_warn(), * ossl_cmp_debug(), + * ossl_cmp_log2(), ossl_cmp_log_parse_metadata(), and OSSL_CMP_log_close() * with OSSL_CMP_severity OSSL_CMP_LOG_ERR/WARNING/DEBUG/INFO: */ ADD_TEST(test_cmp_ctx_log_cb); #if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT) /* * also tests OSSL_CMP_CTX_set_log_cb(), OSSL_CMP_print_errors_cb(), - * ossl_cmp_add_error_txt(), and the macros - * ossl_cmp_add_error_data and ossl_cmp_add_error_line: + * and the macros ossl_cmp_add_error_data and ossl_cmp_add_error_line: */ ADD_TEST(test_CTX_print_errors); #endif diff --git a/test/cmp_hdr_test.c b/test/cmp_hdr_test.c index a9b2aff7..c12b72f2 100644 --- a/test/cmp_hdr_test.c +++ b/test/cmp_hdr_test.c @@ -65,8 +65,9 @@ static int test_HDR_set_get_pvno(void) return result; } -#define X509_NAME_ADD(n, rd, s) X509_NAME_add_entry_by_txt((n), (rd), \ - MBSTRING_ASC, (unsigned char *)(s), -1, -1, 0) +#define X509_NAME_ADD(n, rd, s) \ + X509_NAME_add_entry_by_txt((n), (rd), MBSTRING_ASC, (unsigned char *)(s), \ + -1, -1, 0) static int execute_HDR_get0_senderNonce_test(CMP_HDR_TEST_FIXTURE *fixture) { @@ -112,8 +113,8 @@ static int execute_HDR_set1_sender_test(CMP_HDR_TEST_FIXTURE *fixture) if (!TEST_int_eq(fixture->hdr->sender->type, GEN_DIRNAME)) return 0; - if (!TEST_int_eq( - X509_NAME_cmp(fixture->hdr->sender->d.directoryName, x509name), 0)) + if (!TEST_int_eq(X509_NAME_cmp(fixture->hdr->sender->d.directoryName, + x509name), 0)) return 0; X509_NAME_free(x509name); @@ -142,8 +143,8 @@ static int execute_HDR_set1_recipient_test(CMP_HDR_TEST_FIXTURE *fixture) if (!TEST_int_eq(fixture->hdr->recipient->type, GEN_DIRNAME)) return 0; - if (!TEST_int_eq( - X509_NAME_cmp(fixture->hdr->recipient->d.directoryName, x509name),0)) + if (!TEST_int_eq(X509_NAME_cmp(fixture->hdr->recipient->d.directoryName, + x509name), 0)) return 0; X509_NAME_free(x509name); @@ -188,7 +189,7 @@ static int test_HDR_update_messageTime(void) static int execute_HDR_set1_senderKID_test(CMP_HDR_TEST_FIXTURE *fixture) { - ASN1_OCTET_STRING* senderKID = ASN1_OCTET_STRING_new(); + ASN1_OCTET_STRING *senderKID = ASN1_OCTET_STRING_new(); if (!TEST_ptr(senderKID)) return 0; @@ -198,8 +199,8 @@ static int execute_HDR_set1_senderKID_test(CMP_HDR_TEST_FIXTURE *fixture) return 0; if (!TEST_int_eq(ossl_cmp_hdr_set1_senderKID(fixture->hdr, senderKID), 1)) return 0; - if (!TEST_int_eq( - ASN1_OCTET_STRING_cmp(fixture->hdr->senderKID, senderKID), 0)) + if (!TEST_int_eq(ASN1_OCTET_STRING_cmp(fixture->hdr->senderKID, + senderKID), 0)) return 0; ASN1_OCTET_STRING_free(senderKID); @@ -216,7 +217,7 @@ static int test_HDR_set1_senderKID(void) static int execute_HDR_push0_freeText_test(CMP_HDR_TEST_FIXTURE *fixture) { - ASN1_UTF8STRING* text = ASN1_UTF8STRING_new(); + ASN1_UTF8STRING *text = ASN1_UTF8STRING_new(); if (!TEST_ptr(text)) return 0; @@ -224,11 +225,10 @@ static int execute_HDR_push0_freeText_test(CMP_HDR_TEST_FIXTURE *fixture) if (!ASN1_STRING_set(text, "A free text", -1)) return 0; - if (!TEST_int_eq( - ossl_cmp_hdr_push0_freeText(fixture->hdr, text), 1)) + if (!TEST_int_eq(ossl_cmp_hdr_push0_freeText(fixture->hdr, text), 1)) return 0; - if (!TEST_true(text == sk_ASN1_UTF8STRING_value( - fixture->hdr->freeText, 0))) + + if (!TEST_true(text == sk_ASN1_UTF8STRING_value(fixture->hdr->freeText, 0))) return 0; return 1; @@ -244,7 +244,8 @@ static int test_HDR_push0_freeText(void) static int execute_HDR_push1_freeText_test(CMP_HDR_TEST_FIXTURE *fixture) { - ASN1_UTF8STRING* text = ASN1_UTF8STRING_new(); + ASN1_UTF8STRING *text = ASN1_UTF8STRING_new(); + ASN1_UTF8STRING *pushed_text; if (!TEST_ptr(text)) return 0; @@ -252,11 +253,11 @@ static int execute_HDR_push1_freeText_test(CMP_HDR_TEST_FIXTURE *fixture) if (!ASN1_STRING_set(text, "A free text", -1)) return 0; - if (!TEST_int_eq( - ossl_cmp_hdr_push1_freeText(fixture->hdr, text), 1)) + if (!TEST_int_eq(ossl_cmp_hdr_push1_freeText(fixture->hdr, text), 1)) return 0; - if (!TEST_int_eq(ASN1_STRING_cmp( - sk_ASN1_UTF8STRING_value(fixture->hdr->freeText, 0), text), 0)) + + pushed_text = sk_ASN1_UTF8STRING_value(fixture->hdr->freeText, 0); + if (!TEST_int_eq(ASN1_STRING_cmp(text, pushed_text), 0)) return 0; ASN1_UTF8STRING_free(text); @@ -279,11 +280,12 @@ execute_HDR_generalInfo_push0_item_test(CMP_HDR_TEST_FIXTURE *fixture) if (!TEST_ptr(itav)) return 0; - if (!TEST_int_eq( - ossl_cmp_hdr_generalInfo_push0_item(fixture->hdr, itav), 1)) + if (!TEST_int_eq(ossl_cmp_hdr_generalInfo_push0_item(fixture->hdr, itav), + 1)) return 0; - if (!TEST_true(itav == sk_OSSL_CMP_ITAV_value( - fixture->hdr->generalInfo, 0))) + + if (!TEST_true(itav == sk_OSSL_CMP_ITAV_value(fixture->hdr->generalInfo, + 0))) return 0; return 1; @@ -302,10 +304,11 @@ execute_HDR_generalInfo_push1_items_test(CMP_HDR_TEST_FIXTURE *fixture) { const char oid[] = "1.2.3.4"; char buf[20]; - OSSL_CMP_ITAV *itav; - STACK_OF(OSSL_CMP_ITAV) *itavs = NULL; + OSSL_CMP_ITAV *itav, *pushed_itav; + STACK_OF(OSSL_CMP_ITAV) *itavs = NULL, *ginfo; ASN1_INTEGER *asn1int = ASN1_INTEGER_new(); ASN1_TYPE *val = ASN1_TYPE_new(); + ASN1_TYPE *pushed_val; if (!TEST_ptr(asn1int)) return 0; @@ -318,17 +321,17 @@ execute_HDR_generalInfo_push1_items_test(CMP_HDR_TEST_FIXTURE *fixture) itav = OSSL_CMP_ITAV_create(OBJ_txt2obj(oid, 1), val); OSSL_CMP_ITAV_push0_stack_item(&itavs, itav); - if (!TEST_int_eq( - ossl_cmp_hdr_generalInfo_push1_items(fixture->hdr, itavs), 1)) + if (!TEST_int_eq(ossl_cmp_hdr_generalInfo_push1_items(fixture->hdr, itavs), + 1)) return 0; - OBJ_obj2txt(buf, sizeof(buf), OSSL_CMP_ITAV_get0_type( - sk_OSSL_CMP_ITAV_value(fixture->hdr->generalInfo, 0)), 0); + ginfo = fixture->hdr->generalInfo; + pushed_itav = sk_OSSL_CMP_ITAV_value(ginfo, 0); + OBJ_obj2txt(buf, sizeof(buf), OSSL_CMP_ITAV_get0_type(pushed_itav), 0); if (!TEST_int_eq(memcmp(oid, buf, sizeof(oid)), 0)) return 0; - if (!TEST_int_eq(ASN1_TYPE_cmp(itav->infoValue.other, - OSSL_CMP_ITAV_get0_value( - sk_OSSL_CMP_ITAV_value(fixture->hdr->generalInfo, 0))), 0)) + pushed_val = OSSL_CMP_ITAV_get0_value(sk_OSSL_CMP_ITAV_value(ginfo, 0)); + if (!TEST_int_eq(ASN1_TYPE_cmp(itav->infoValue.other, pushed_val), 0)) return 0; sk_OSSL_CMP_ITAV_pop_free(itavs, OSSL_CMP_ITAV_free); @@ -362,35 +365,36 @@ static int test_HDR_set_and_check_implicit_confirm(void) static int execute_HDR_init_test(CMP_HDR_TEST_FIXTURE *fixture) { - ASN1_OCTET_STRING *header_nonce = NULL; - ASN1_OCTET_STRING *ctx_nonce = NULL; - int res = 0; + ASN1_OCTET_STRING *header_nonce, *header_transactionID; + ASN1_OCTET_STRING *ctx_nonce; if (!TEST_int_eq(fixture->expected, ossl_cmp_hdr_init(fixture->cmp_ctx, fixture->hdr))) - goto err; - if (fixture->expected != 0) { - if (!TEST_int_eq(ossl_cmp_hdr_get_pvno(fixture->hdr), OSSL_CMP_PVNO) - || !TEST_true(0 == ASN1_OCTET_STRING_cmp( - ossl_cmp_hdr_get0_senderNonce(fixture->hdr), - fixture->cmp_ctx->senderNonce)) - || !TEST_true(0 == ASN1_OCTET_STRING_cmp( - OSSL_CMP_HDR_get0_transactionID(fixture->hdr), - fixture->cmp_ctx->transactionID))) - goto err; - header_nonce = OSSL_CMP_HDR_get0_recipNonce(fixture->hdr); - ctx_nonce = fixture->cmp_ctx->recipNonce; - if (ctx_nonce != NULL - && (!TEST_ptr(header_nonce) - || !TEST_int_eq(0, ASN1_OCTET_STRING_cmp(header_nonce, - ctx_nonce)))) - goto err; - } + return 0; + if (fixture->expected == 0) + return 1; - res = 1; + if (!TEST_int_eq(ossl_cmp_hdr_get_pvno(fixture->hdr), OSSL_CMP_PVNO)) + return 0; - err: - return res; + header_nonce = ossl_cmp_hdr_get0_senderNonce(fixture->hdr); + if (!TEST_int_eq(0, ASN1_OCTET_STRING_cmp(header_nonce, + fixture->cmp_ctx->senderNonce))) + return 0; + header_transactionID = OSSL_CMP_HDR_get0_transactionID(fixture->hdr); + if (!TEST_true(0 == ASN1_OCTET_STRING_cmp(header_transactionID, + fixture->cmp_ctx->transactionID))) + return 0; + + header_nonce = OSSL_CMP_HDR_get0_recipNonce(fixture->hdr); + ctx_nonce = fixture->cmp_ctx->recipNonce; + if (ctx_nonce != NULL + && (!TEST_ptr(header_nonce) + || !TEST_int_eq(0, ASN1_OCTET_STRING_cmp(header_nonce, + ctx_nonce)))) + return 0; + + return 1; } static int test_HDR_init(void) diff --git a/test/cmp_msg_test.c b/test/cmp_msg_test.c index 7fa06192..8f958658 100644 --- a/test/cmp_msg_test.c +++ b/test/cmp_msg_test.c @@ -122,7 +122,7 @@ static int execute_pkimessage_create_test(CMP_MSG_TEST_FIXTURE *fixture) (fixture->cmp_ctx, fixture->bodytype)); } -static int set1_newPkey(OSSL_CMP_CTX *ctx, EVP_PKEY* pkey) +static int set1_newPkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey) { if (!EVP_PKEY_up_ref(pkey)) return 0; @@ -321,7 +321,7 @@ static int test_cmp_create_error_msg(void) OSSL_CMP_PKIFAILUREINFO_systemFailure, NULL); fixture->err_code = -1; - fixture->expected = 1; /* Expected: Message creation is successful */ + fixture->expected = 1; /* expected: message creation is successful */ if (!TEST_true(set1_newPkey(fixture->cmp_ctx, newkey))) { tear_down(fixture); fixture = NULL; @@ -430,7 +430,7 @@ static int execute_rp_create(CMP_MSG_TEST_FIXTURE *fixture) goto err; if (!X509_NAME_add_entry_by_txt(issuer, "CN", MBSTRING_ASC, - (unsigned char*)"The Issuer", -1, -1, 0) + (unsigned char *)"The Issuer", -1, -1, 0) || !ASN1_INTEGER_set(serial, 99) || (cid = OSSL_CRMF_CERTID_gen(issuer, serial)) == NULL || (rpmsg = ossl_cmp_rp_new(fixture->cmp_ctx, si, cid, 1)) == NULL) @@ -439,8 +439,8 @@ static int execute_rp_create(CMP_MSG_TEST_FIXTURE *fixture) if (!TEST_ptr(ossl_cmp_revrepcontent_get_CertId(rpmsg->body->value.rp, 0))) goto err; - if (!TEST_ptr(ossl_cmp_revrepcontent_get_pkistatusinfo(rpmsg->body->value.rp, - 0))) + if (!TEST_ptr(ossl_cmp_revrepcontent_get_pkistatusinfo(rpmsg->body-> + value.rp, 0))) goto err; res = 1; @@ -468,11 +468,11 @@ static int execute_pollrep_create(CMP_MSG_TEST_FIXTURE *fixture) pollrep = ossl_cmp_pollRep_new(fixture->cmp_ctx, 77, 2000); if (!TEST_ptr(pollrep)) return 0; - if (!TEST_ptr(ossl_cmp_pollrepcontent_get0_pollrep( - pollrep->body->value.pollRep, 77))) + if (!TEST_ptr(ossl_cmp_pollrepcontent_get0_pollrep(pollrep->body-> + value.pollRep, 77))) goto err; - if (!TEST_ptr_null(ossl_cmp_pollrepcontent_get0_pollrep( - pollrep->body->value.pollRep, 88))) + if (!TEST_ptr_null(ossl_cmp_pollrepcontent_get0_pollrep(pollrep->body-> + value.pollRep, 88))) goto err; res = 1; diff --git a/test/cmp_protect_test.c b/test/cmp_protect_test.c index 84258498..5d5df89a 100644 --- a/test/cmp_protect_test.c +++ b/test/cmp_protect_test.c @@ -20,7 +20,7 @@ typedef struct test_fixture { OSSL_CMP_CTX *cmp_ctx; /* for protection tests */ OSSL_CMP_MSG *msg; - OSSL_CMP_PKISI *si; /* for error and response messages */ + OSSL_CMP_PKISI *si; /* for error and response messages */ ASN1_OCTET_STRING *secret; EVP_PKEY *privkey; EVP_PKEY *pubkey; @@ -86,7 +86,8 @@ static int execute_calc_protection_pbmac_test(CMP_PROTECT_TEST_FIXTURE *fixture) ASN1_BIT_STRING *protection = ossl_cmp_calc_protection(fixture->msg, fixture->secret, NULL); int res = TEST_ptr(protection) - && TEST_true(ASN1_STRING_cmp(protection, fixture->msg->protection) == 0); + && TEST_true(ASN1_STRING_cmp(protection, + fixture->msg->protection) == 0); ASN1_BIT_STRING_free(protection); return res; @@ -386,7 +387,7 @@ static int execute_X509_STORE_test(CMP_PROTECT_TEST_FIXTURE *fixture) fixture->certs, fixture->callback_arg))) goto err; - sk = ossl_cmp_X509_STORE_get1_certs(store); + sk = X509_STORE_get1_all_certs(store); if (!TEST_int_eq(0, STACK_OF_X509_cmp(sk, fixture->chain))) goto err; res = 1; @@ -400,7 +401,7 @@ static int execute_X509_STORE_test(CMP_PROTECT_TEST_FIXTURE *fixture) static int test_X509_STORE(void) { SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up); - fixture->callback_arg = 0; /* self-signed allowed */ + fixture->callback_arg = 0; /* self-issued allowed */ if (!TEST_ptr(fixture->certs = sk_X509_new_null()) || !sk_X509_push(fixture->certs, endentity1) || !sk_X509_push(fixture->certs, endentity2) @@ -414,12 +415,12 @@ static int test_X509_STORE(void) return result; } -static int test_X509_STORE_only_self_signed(void) +static int test_X509_STORE_only_self_issued(void) { SETUP_TEST_FIXTURE(CMP_PROTECT_TEST_FIXTURE, set_up); fixture->certs = sk_X509_new_null(); fixture->chain = sk_X509_new_null(); - fixture->callback_arg = 1; /* only self-signed */ + fixture->callback_arg = 1; /* only self-issued */ if (!TEST_true(sk_X509_push(fixture->certs, endentity1)) || !TEST_true(sk_X509_push(fixture->certs, endentity2)) || !TEST_true(sk_X509_push(fixture->certs, root)) @@ -521,7 +522,7 @@ int setup_tests(void) #endif ADD_TEST(test_X509_STORE); - ADD_TEST(test_X509_STORE_only_self_signed); + ADD_TEST(test_X509_STORE_only_self_issued); return 1; } diff --git a/test/cmp_vfy_test.c b/test/cmp_vfy_test.c new file mode 100644 index 00000000..41ddad86 --- /dev/null +++ b/test/cmp_vfy_test.c @@ -0,0 +1,636 @@ +/* + * Copyright 2007-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "cmp_testlib.h" +#include "../crypto/crmf/crmf_local.h" /* for manipulating POPO signature */ + +static const char *server_f; +static const char *client_f; +static const char *endentity1_f; +static const char *endentity2_f; +static const char *root_f; +static const char *intermediate_f; +static const char *ir_protected_f; +static const char *ir_unprotected_f; +static const char *ir_rmprotection_f; +static const char *ip_waiting_f; +static const char *instacert_f; +static const char *instaca_f; +static const char *ir_protected_0_extracerts; +static const char *ir_protected_2_extracerts; + +typedef struct test_fixture { + const char *test_case_name; + int expected; + OSSL_CMP_CTX *cmp_ctx; + OSSL_CMP_MSG *msg; + X509 *cert; + ossl_cmp_allow_unprotected_cb_t allow_unprotected_cb; + int additional_arg; +} CMP_VFY_TEST_FIXTURE; + +static void tear_down(CMP_VFY_TEST_FIXTURE *fixture) +{ + OSSL_CMP_MSG_free(fixture->msg); + OSSL_CMP_CTX_free(fixture->cmp_ctx); + OPENSSL_free(fixture); +} + +static int print_to_bio_out(const char *func, const char *file, int line, + OSSL_CMP_severity level, const char *msg) +{ + return OSSL_CMP_print_to_bio(bio_out, func, file, line, level, msg); +} + +static time_t test_time_valid = 0, test_time_after_expiration = 0; + +static CMP_VFY_TEST_FIXTURE *set_up(const char *const test_case_name) +{ + X509_STORE *ts = X509_STORE_new(); + CMP_VFY_TEST_FIXTURE *fixture; + + if (!TEST_ptr(fixture = OPENSSL_zalloc(sizeof(*fixture)))) + return NULL; + fixture->test_case_name = test_case_name; + if (ts == NULL + || !TEST_ptr(fixture->cmp_ctx = OSSL_CMP_CTX_new()) + || !OSSL_CMP_CTX_set0_trustedStore(fixture->cmp_ctx, ts) + || !OSSL_CMP_CTX_set_log_cb(fixture->cmp_ctx, print_to_bio_out)) { + tear_down(fixture); + X509_STORE_free(ts); + return NULL; + } + X509_VERIFY_PARAM_set_time(X509_STORE_get0_param(ts), test_time_valid); + X509_STORE_set_verify_cb(ts, OSSL_CMP_print_cert_verify_cb); + return fixture; +} + +static X509 *srvcert = NULL; +static X509 *clcert = NULL; +/* chain */ +static X509 *endentity1 = NULL, *endentity2 = NULL, + *intermediate = NULL, *root = NULL; +/* INSTA chain */ +static X509 *insta_cert = NULL, *instaca_cert = NULL; + +static unsigned char rand_data[OSSL_CMP_TRANSACTIONID_LENGTH]; +static OSSL_CMP_MSG *ir_unprotected, *ir_rmprotection; + +static int flip_bit(ASN1_BIT_STRING *bitstr) +{ + int bit_num = 7; + int bit = ASN1_BIT_STRING_get_bit(bitstr, bit_num); + + return ASN1_BIT_STRING_set_bit(bitstr, bit_num, !bit); +} + +static int execute_verify_popo_test(CMP_VFY_TEST_FIXTURE *fixture) +{ + if ((fixture->msg = load_pkimsg(ir_protected_f)) == NULL) + return 0; + if (fixture->expected == 0) { + const OSSL_CRMF_MSGS *reqs = fixture->msg->body->value.ir; + const OSSL_CRMF_MSG *req = sk_OSSL_CRMF_MSG_value(reqs, 0); + if (req == NULL || !flip_bit(req->popo->value.signature->signature)) + return 0; + } + return TEST_int_eq(fixture->expected, + ossl_cmp_verify_popo(fixture->msg, + fixture->additional_arg)); +} + +static int test_verify_popo(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 1; + EXECUTE_TEST(execute_verify_popo_test, tear_down); + return result; +} + +static int test_verify_popo_bad(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 0; + EXECUTE_TEST(execute_verify_popo_test, tear_down); + return result; +} + +static int execute_validate_msg_test(CMP_VFY_TEST_FIXTURE *fixture) +{ + return TEST_int_eq(fixture->expected, + OSSL_CMP_validate_msg(fixture->cmp_ctx, fixture->msg)); +} + +static int execute_validate_cert_path_test(CMP_VFY_TEST_FIXTURE *fixture) +{ + X509_STORE *ts = OSSL_CMP_CTX_get0_trustedStore(fixture->cmp_ctx); + int res = TEST_int_eq(fixture->expected, + OSSL_CMP_validate_cert_path(fixture->cmp_ctx, + ts, fixture->cert)); + + OSSL_CMP_CTX_print_errors(fixture->cmp_ctx); + return res; +} + +static int test_validate_msg_mac_alg_protection(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + /* secret value belonging to cmp-test/CMP_IP_waitingStatus_PBM.der */ + const unsigned char sec_1[] = { + '9', 'p', 'p', '8', '-', 'b', '3', '5', 'i', '-', 'X', 'd', '3', + 'Q', '-', 'u', 'd', 'N', 'R' + }; + + fixture->expected = 1; + if (!TEST_true(OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx, sec_1, + sizeof(sec_1))) + || !TEST_ptr(fixture->msg = load_pkimsg(ip_waiting_f))) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int test_validate_msg_mac_alg_protection_bad(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + const unsigned char sec_bad[] = { + '9', 'p', 'p', '8', '-', 'b', '3', '5', 'i', '-', 'X', 'd', '3', + 'Q', '-', 'u', 'd', 'N', 'r' + }; + fixture->expected = 0; + + if (!TEST_true(OSSL_CMP_CTX_set1_secretValue(fixture->cmp_ctx, sec_bad, + sizeof(sec_bad))) + || !TEST_ptr(fixture->msg = load_pkimsg(ip_waiting_f))) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int add_trusted(OSSL_CMP_CTX *ctx, X509 *cert) +{ + return X509_STORE_add_cert(OSSL_CMP_CTX_get0_trustedStore(ctx), cert); +} + +static int add_untrusted(OSSL_CMP_CTX *ctx, X509 *cert) +{ + return ossl_cmp_sk_X509_add1_cert(OSSL_CMP_CTX_get0_untrusted_certs(ctx), + cert, 0, 0); +} + +static int test_validate_msg_signature_partial_chain(int expired) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + X509_STORE *ts = OSSL_CMP_CTX_get0_trustedStore(fixture->cmp_ctx); + + fixture->expected = !expired; + if (ts == NULL + || !TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f)) + || !add_trusted(fixture->cmp_ctx, srvcert)) { + tear_down(fixture); + fixture = NULL; + } else { + X509_VERIFY_PARAM *vpm = X509_STORE_get0_param(ts); + X509_VERIFY_PARAM_set_flags(vpm, X509_V_FLAG_PARTIAL_CHAIN); + if (expired) + X509_VERIFY_PARAM_set_time(vpm, test_time_after_expiration); + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int test_validate_msg_signature_trusted_ok(void) +{ + return test_validate_msg_signature_partial_chain(0); +} + +static int test_validate_msg_signature_trusted_expired(void) +{ + return test_validate_msg_signature_partial_chain(1); +} + +static int test_validate_msg_signature_srvcert_wrong(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 0; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f)) + || !TEST_true(OSSL_CMP_CTX_set1_srvCert(fixture->cmp_ctx, clcert))) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int test_validate_msg_signature_srvcert(int bad_sig) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = !bad_sig; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f)) + || !TEST_true(OSSL_CMP_CTX_set1_srvCert(fixture->cmp_ctx, srvcert)) + || (bad_sig && !flip_bit(fixture->msg->protection))) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int test_validate_msg_signature_bad(void) +{ + return test_validate_msg_signature_srvcert(1); +} + +static int test_validate_msg_signature_sender_cert_srvcert(void) +{ + return test_validate_msg_signature_srvcert(0); +} + +static int test_validate_msg_signature_sender_cert_untrusted(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 1; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_0_extracerts)) + || !add_trusted(fixture->cmp_ctx, instaca_cert) + || !add_untrusted(fixture->cmp_ctx, insta_cert)) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int test_validate_msg_signature_sender_cert_trusted(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 1; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_0_extracerts)) + || !add_trusted(fixture->cmp_ctx, instaca_cert) + || !add_trusted(fixture->cmp_ctx, insta_cert)) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int test_validate_msg_signature_sender_cert_extracert(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 1; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_2_extracerts)) + || !add_trusted(fixture->cmp_ctx, instaca_cert)) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + + +static int test_validate_msg_signature_sender_cert_absent(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 0; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_0_extracerts))) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + + +static int test_validate_with_sender(X509_NAME *name, int expected) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = expected; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_protected_f)) + || !TEST_true(OSSL_CMP_CTX_set1_expected_sender(fixture->cmp_ctx, name)) + || !TEST_true(OSSL_CMP_CTX_set1_srvCert(fixture->cmp_ctx, srvcert))) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static int test_validate_msg_signature_expected_sender(void) +{ + return test_validate_with_sender(X509_get_subject_name(srvcert), 1); +} + +static int test_validate_msg_signature_unexpected_sender(void) +{ + return test_validate_with_sender(X509_get_subject_name(root), 0); +} + +static int test_validate_msg_unprotected_request(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + fixture->expected = 0; + if (!TEST_ptr(fixture->msg = load_pkimsg(ir_unprotected_f))) { + tear_down(fixture); + fixture = NULL; + } + EXECUTE_TEST(execute_validate_msg_test, tear_down); + return result; +} + +static void setup_path(CMP_VFY_TEST_FIXTURE **fixture, X509 *wrong, int expired) +{ + (*fixture)->cert = endentity2; + (*fixture)->expected = wrong == NULL && !expired; + if (expired) { + X509_STORE *ts = OSSL_CMP_CTX_get0_trustedStore((*fixture)->cmp_ctx); + X509_VERIFY_PARAM *vpm = X509_STORE_get0_param(ts); + X509_VERIFY_PARAM_set_time(vpm, test_time_after_expiration); + } + if (!add_trusted((*fixture)->cmp_ctx, wrong == NULL ? root : wrong) + || !add_untrusted((*fixture)->cmp_ctx, endentity1) + || !add_untrusted((*fixture)->cmp_ctx, intermediate)) { + tear_down((*fixture)); + (*fixture) = NULL; + } +} + +static int test_validate_cert_path_ok(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_path(&fixture, NULL, 0); + EXECUTE_TEST(execute_validate_cert_path_test, tear_down); + return result; +} + +static int test_validate_cert_path_wrong_anchor(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_path(&fixture, srvcert /* wrong/non-root cert */, 0); + EXECUTE_TEST(execute_validate_cert_path_test, tear_down); + return result; +} + +static int test_validate_cert_path_expired(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_path(&fixture, NULL, 1); + EXECUTE_TEST(execute_validate_cert_path_test, tear_down); + return result; +} + +static int execute_MSG_check_received_test(CMP_VFY_TEST_FIXTURE *fixture) +{ + const OSSL_CMP_PKIHEADER *hdr = OSSL_CMP_MSG_get0_header(fixture->msg); + const ASN1_OCTET_STRING *tid = OSSL_CMP_HDR_get0_transactionID(hdr); + + if (!TEST_int_eq(fixture->expected, + ossl_cmp_msg_check_received(fixture->cmp_ctx, + fixture->msg, + fixture->allow_unprotected_cb, + fixture->additional_arg))) + return 0; + + if (fixture->expected < 0) /* error expected aready during above check */ + return 1; + return + TEST_int_eq(0, + ASN1_OCTET_STRING_cmp(ossl_cmp_hdr_get0_senderNonce(hdr), + fixture->cmp_ctx->recipNonce)) + && TEST_int_eq(0, + ASN1_OCTET_STRING_cmp(tid, + fixture->cmp_ctx->transactionID)); +} + +static int allow_unprotected(const OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg, + int invalid_protection, int allow) +{ + return allow; +} + +static void setup_check_received(CMP_VFY_TEST_FIXTURE **fixture, int expected, + ossl_cmp_allow_unprotected_cb_t cb, int arg, + const unsigned char *trid_data, + const unsigned char *nonce_data) +{ + OSSL_CMP_CTX *ctx = (*fixture)->cmp_ctx; + int nonce_len = OSSL_CMP_SENDERNONCE_LENGTH; + + (*fixture)->expected = expected; + (*fixture)->allow_unprotected_cb = cb; + (*fixture)->additional_arg = arg; + (*fixture)->msg = OSSL_CMP_MSG_dup(ir_rmprotection); + if ((*fixture)->msg == NULL + || (nonce_data != NULL + && !ossl_cmp_asn1_octet_string_set1_bytes(&ctx->senderNonce, + nonce_data, nonce_len))) { + tear_down((*fixture)); + (*fixture) = NULL; + } + else if (trid_data != NULL) { + ASN1_OCTET_STRING *trid = ASN1_OCTET_STRING_new(); + if (trid == NULL + || !ASN1_OCTET_STRING_set(trid, trid_data, + OSSL_CMP_TRANSACTIONID_LENGTH) + || !OSSL_CMP_CTX_set1_transactionID(ctx, trid)) { + tear_down((*fixture)); + (*fixture) = NULL; + } + ASN1_OCTET_STRING_free(trid); + } +} + +static int test_MSG_check_received_no_protection_no_cb(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_check_received(&fixture, -1, NULL, 0, NULL, NULL); + EXECUTE_TEST(execute_MSG_check_received_test, tear_down); + return result; +} + +static int test_MSG_check_received_no_protection_restrictive_cb(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_check_received(&fixture, -1, allow_unprotected, 0, NULL, NULL); + EXECUTE_TEST(execute_MSG_check_received_test, tear_down); + return result; +} + +static int test_MSG_check_received_no_protection_permissive_cb(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_check_received(&fixture, OSSL_CMP_PKIBODY_IP, allow_unprotected, 1, + NULL, NULL); + EXECUTE_TEST(execute_MSG_check_received_test, tear_down); + return result; +} + +static int test_MSG_check_received_check_transaction_id(void) +{ + /* Transaction id belonging to CMP_IR_rmprotection.der */ + const unsigned char trans_id[OSSL_CMP_TRANSACTIONID_LENGTH] = { + 0x39, 0xB6, 0x90, 0x28, 0xC4, 0xBC, 0x7A, 0xF6, + 0xBE, 0xC6, 0x4A, 0x88, 0x97, 0xA6, 0x95, 0x0B + }; + + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_check_received(&fixture, OSSL_CMP_PKIBODY_IP, allow_unprotected, 1, + trans_id, NULL); + EXECUTE_TEST(execute_MSG_check_received_test, tear_down); + return result; +} + +static int test_MSG_check_received_check_transaction_id_bad(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_check_received(&fixture, -1, allow_unprotected, 1, rand_data, NULL); + EXECUTE_TEST(execute_MSG_check_received_test, tear_down); + return result; +} + +static int test_MSG_check_received_check_recipient_nonce(void) +{ + /* Recipient nonce belonging to CMP_IP_ir_rmprotection.der */ + const unsigned char rec_nonce[OSSL_CMP_SENDERNONCE_LENGTH] = { + 0x48, 0xF1, 0x71, 0x1F, 0xE5, 0xAF, 0x1C, 0x8B, + 0x21, 0x97, 0x5C, 0x84, 0x74, 0x49, 0xBA, 0x32 + }; + + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_check_received(&fixture, OSSL_CMP_PKIBODY_IP, allow_unprotected, 1, + NULL, rec_nonce); + EXECUTE_TEST(execute_MSG_check_received_test, tear_down); + return result; +} + +static int test_MSG_check_received_check_recipient_nonce_bad(void) +{ + SETUP_TEST_FIXTURE(CMP_VFY_TEST_FIXTURE, set_up); + setup_check_received(&fixture, -1, allow_unprotected, 1, NULL, rand_data); + EXECUTE_TEST(execute_MSG_check_received_test, tear_down); + return result; +} + +void cleanup_tests(void) +{ + X509_free(srvcert); + X509_free(clcert); + X509_free(endentity1); + X509_free(endentity2); + X509_free(intermediate); + X509_free(root); + X509_free(insta_cert); + X509_free(instaca_cert); + OSSL_CMP_MSG_free(ir_unprotected); + OSSL_CMP_MSG_free(ir_rmprotection); + return; +} + +int setup_tests(void) +{ + /* Set test time stamps */ + struct tm ts = { 0 }; + + ts.tm_year = 2018 - 1900; /* 2018 */ + ts.tm_mon = 1; /* February */ + ts.tm_mday = 18; /* 18th */ + test_time_valid = mktime(&ts); /* February 18th 2018 */ + ts.tm_year += 10; /* February 18th 2028 */ + test_time_after_expiration = mktime(&ts); + + RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH); + if (!TEST_ptr(server_f = test_get_argument(0)) + || !TEST_ptr(client_f = test_get_argument(1)) + || !TEST_ptr(endentity1_f = test_get_argument(2)) + || !TEST_ptr(endentity2_f = test_get_argument(3)) + || !TEST_ptr(root_f = test_get_argument(4)) + || !TEST_ptr(intermediate_f = test_get_argument(5)) + || !TEST_ptr(ir_protected_f = test_get_argument(6)) + || !TEST_ptr(ir_unprotected_f = test_get_argument(7)) + || !TEST_ptr(ip_waiting_f = test_get_argument(8)) + || !TEST_ptr(ir_rmprotection_f = test_get_argument(9)) + || !TEST_ptr(instacert_f = test_get_argument(10)) + || !TEST_ptr(instaca_f = test_get_argument(11)) + || !TEST_ptr(ir_protected_0_extracerts = test_get_argument(12)) + || !TEST_ptr(ir_protected_2_extracerts = test_get_argument(13))) { + TEST_error("usage: cmp_vfy_test server.crt client.crt " + "EndEntity1.crt EndEntity2.crt " + "Root_CA.crt Intermediate_CA.crt " + "CMP_IR_protected.der CMP_IR_unprotected.der " + "IP_waitingStatus_PBM.der IR_rmprotection.der " + "insta.cert.pem insta_ca.cert.pem " + "IR_protected_0_extraCerts.der " + "IR_protected_2_extraCerts.der\n"); + return 0; + } + + /* Load certificates for cert chain */ + if (!TEST_ptr(endentity1 = load_pem_cert(endentity1_f)) + || !TEST_ptr(endentity2 = load_pem_cert(endentity2_f)) + || !TEST_ptr(root = load_pem_cert(root_f)) + || !TEST_ptr(intermediate = load_pem_cert(intermediate_f))) + goto err; + + if (!TEST_ptr(insta_cert = load_pem_cert(instacert_f)) + || !TEST_ptr(instaca_cert = load_pem_cert(instaca_f))) + goto err; + + /* Load certificates for message validation */ + if (!TEST_ptr(srvcert = load_pem_cert(server_f)) + || !TEST_ptr(clcert = load_pem_cert(client_f))) + goto err; + if (!TEST_int_eq(1, RAND_bytes(rand_data, OSSL_CMP_TRANSACTIONID_LENGTH))) + goto err; + if (!TEST_ptr(ir_unprotected = load_pkimsg(ir_unprotected_f)) + || !TEST_ptr(ir_rmprotection = load_pkimsg(ir_rmprotection_f))) + goto err; + + /* Message validation tests */ + ADD_TEST(test_verify_popo); + ADD_TEST(test_verify_popo_bad); + ADD_TEST(test_validate_msg_signature_trusted_ok); + ADD_TEST(test_validate_msg_signature_trusted_expired); + ADD_TEST(test_validate_msg_signature_srvcert_wrong); + ADD_TEST(test_validate_msg_signature_bad); + ADD_TEST(test_validate_msg_signature_sender_cert_srvcert); + ADD_TEST(test_validate_msg_signature_sender_cert_untrusted); + ADD_TEST(test_validate_msg_signature_sender_cert_trusted); + ADD_TEST(test_validate_msg_signature_sender_cert_extracert); + ADD_TEST(test_validate_msg_signature_sender_cert_absent); + ADD_TEST(test_validate_msg_signature_expected_sender); + ADD_TEST(test_validate_msg_signature_unexpected_sender); + ADD_TEST(test_validate_msg_unprotected_request); + ADD_TEST(test_validate_msg_mac_alg_protection); + ADD_TEST(test_validate_msg_mac_alg_protection_bad); + + /* Cert path validation tests */ + ADD_TEST(test_validate_cert_path_ok); + ADD_TEST(test_validate_cert_path_expired); + ADD_TEST(test_validate_cert_path_wrong_anchor); + + ADD_TEST(test_MSG_check_received_no_protection_no_cb); + ADD_TEST(test_MSG_check_received_no_protection_restrictive_cb); + ADD_TEST(test_MSG_check_received_no_protection_permissive_cb); + ADD_TEST(test_MSG_check_received_check_transaction_id); + ADD_TEST(test_MSG_check_received_check_transaction_id_bad); + ADD_TEST(test_MSG_check_received_check_recipient_nonce); + ADD_TEST(test_MSG_check_received_check_recipient_nonce_bad); + + return 1; + + err: + cleanup_tests(); + return 0; + +} diff --git a/test/curve448_internal_test.c b/test/curve448_internal_test.c index 054948d2..953b56c0 100644 --- a/test/curve448_internal_test.c +++ b/test/curve448_internal_test.c @@ -10,6 +10,7 @@ #include #include #include +#include "crypto/ecx.h" #include "curve448_local.h" #include "testutil.h" diff --git a/test/dsa_no_digest_size_test.c b/test/dsa_no_digest_size_test.c index 81a563ad..3ccf39ca 100644 --- a/test/dsa_no_digest_size_test.c +++ b/test/dsa_no_digest_size_test.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include diff --git a/test/dsatest.c b/test/dsatest.c index 23991fa0..288efb71 100644 --- a/test/dsatest.c +++ b/test/dsatest.c @@ -7,6 +7,12 @@ * https://www.openssl.org/source/license.html */ +/* + * DSA low level APIs are deprecated for public use, but still ok for + * internal use. + */ +#include "internal/deprecated.h" + #include #include #include diff --git a/test/evp_extra_test.c b/test/evp_extra_test.c index 024ef6ad..5d3847e9 100644 --- a/test/evp_extra_test.c +++ b/test/evp_extra_test.c @@ -1263,11 +1263,14 @@ static int test_EVP_PKEY_CTX_get_set_params(void) || !TEST_ptr(p) || !TEST_ptr(q) || !TEST_ptr(g) - || !TEST_ptr(pub) - || !DSA_set0_pqg(dsa, p, q, g) - || !DSA_set0_key(dsa, pub, priv)) + || !DSA_set0_pqg(dsa, p, q, g)) goto err; - p = q = g = pub = priv = NULL; + p = q = g = NULL; + if (!TEST_ptr(pub) + || !TEST_ptr(priv) + || !DSA_set0_key(dsa, pub, priv)) + goto err; + pub = priv = NULL; pkey = EVP_PKEY_new(); if (!TEST_ptr(pkey) diff --git a/test/evp_pkey_provided_test.c b/test/evp_pkey_provided_test.c index a39fa0a7..3c1c090b 100644 --- a/test/evp_pkey_provided_test.c +++ b/test/evp_pkey_provided_test.c @@ -178,8 +178,8 @@ static int test_fromdata_dh(void) 0x2, /* G */ }; OSSL_PARAM fromdata_params[] = { - OSSL_PARAM_ulong(OSSL_PKEY_PARAM_DH_PRIV_KEY, &key_numbers[PRIV_KEY]), - OSSL_PARAM_ulong(OSSL_PKEY_PARAM_DH_PUB_KEY, &key_numbers[PUB_KEY]), + OSSL_PARAM_ulong(OSSL_PKEY_PARAM_PRIV_KEY, &key_numbers[PRIV_KEY]), + OSSL_PARAM_ulong(OSSL_PKEY_PARAM_PUB_KEY, &key_numbers[PUB_KEY]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_FFC_P, &key_numbers[FFC_P]), OSSL_PARAM_ulong(OSSL_PKEY_PARAM_FFC_G, &key_numbers[FFC_G]), OSSL_PARAM_END diff --git a/test/ffc_internal_test.c b/test/ffc_internal_test.c new file mode 100644 index 00000000..e74dc1bd --- /dev/null +++ b/test/ffc_internal_test.c @@ -0,0 +1,650 @@ +/* + * Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019-2020, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include +#include + +#include "internal/nelem.h" +#include +#include +#include +#include +#include +#include "testutil.h" + +#include "internal/ffc.h" + +#ifndef OPENSSL_NO_DSA +static const unsigned char dsa_2048_224_sha224_p[] = { + 0x93, 0x57, 0x93, 0x62, 0x1b, 0x9a, 0x10, 0x9b, 0xc1, 0x56, 0x0f, 0x24, + 0x71, 0x76, 0x4e, 0xd3, 0xed, 0x78, 0x78, 0x7a, 0xbf, 0x89, 0x71, 0x67, + 0x8e, 0x03, 0xd8, 0x5b, 0xcd, 0x22, 0x8f, 0x70, 0x74, 0xff, 0x22, 0x05, + 0x07, 0x0c, 0x4c, 0x60, 0xed, 0x41, 0xe1, 0x9e, 0x9c, 0xaa, 0x3e, 0x19, + 0x5c, 0x3d, 0x80, 0x58, 0xb2, 0x7f, 0x5f, 0x89, 0xec, 0xb5, 0x19, 0xdb, + 0x06, 0x11, 0xe9, 0x78, 0x5c, 0xf9, 0xa0, 0x9e, 0x70, 0x62, 0x14, 0x7b, + 0xda, 0x92, 0xbf, 0xb2, 0x6b, 0x01, 0x6f, 0xb8, 0x68, 0x9c, 0x89, 0x36, + 0x89, 0x72, 0x79, 0x49, 0x93, 0x3d, 0x14, 0xb2, 0x2d, 0xbb, 0xf0, 0xdf, + 0x94, 0x45, 0x0b, 0x5f, 0xf1, 0x75, 0x37, 0xeb, 0x49, 0xb9, 0x2d, 0xce, + 0xb7, 0xf4, 0x95, 0x77, 0xc2, 0xe9, 0x39, 0x1c, 0x4e, 0x0c, 0x40, 0x62, + 0x33, 0x0a, 0xe6, 0x29, 0x6f, 0xba, 0xef, 0x02, 0xdd, 0x0d, 0xe4, 0x04, + 0x01, 0x70, 0x40, 0xb9, 0xc9, 0x7e, 0x2f, 0x10, 0x37, 0xe9, 0xde, 0xb0, + 0xf6, 0xeb, 0x71, 0x7f, 0x9c, 0x35, 0x16, 0xf3, 0x0d, 0xc4, 0xe8, 0x02, + 0x37, 0x6c, 0xdd, 0xb3, 0x8d, 0x2d, 0x1e, 0x28, 0x13, 0x22, 0x89, 0x40, + 0xe5, 0xfa, 0x16, 0x67, 0xd6, 0xda, 0x12, 0xa2, 0x38, 0x83, 0x25, 0xcc, + 0x26, 0xc1, 0x27, 0x74, 0xfe, 0xf6, 0x7a, 0xb6, 0xa1, 0xe4, 0xe8, 0xdf, + 0x5d, 0xd2, 0x9c, 0x2f, 0xec, 0xea, 0x08, 0xca, 0x48, 0xdb, 0x18, 0x4b, + 0x12, 0xee, 0x16, 0x9b, 0xa6, 0x00, 0xa0, 0x18, 0x98, 0x7d, 0xce, 0x6c, + 0x6d, 0xf8, 0xfc, 0x95, 0x51, 0x1b, 0x0a, 0x40, 0xb6, 0xfc, 0xe5, 0xe2, + 0xb0, 0x26, 0x53, 0x4c, 0xd7, 0xfe, 0xaa, 0x6d, 0xbc, 0xdd, 0xc0, 0x61, + 0x65, 0xe4, 0x89, 0x44, 0x18, 0x6f, 0xd5, 0x39, 0xcf, 0x75, 0x6d, 0x29, + 0xcc, 0xf8, 0x40, 0xab +}; +static const unsigned char dsa_2048_224_sha224_q[] = { + 0xf2, 0x5e, 0x4e, 0x9a, 0x15, 0xa8, 0x13, 0xdf, 0xa3, 0x17, 0x90, 0xc6, + 0xd6, 0x5e, 0xb1, 0xfb, 0x31, 0xf8, 0xb5, 0xb1, 0x4b, 0xa7, 0x6d, 0xde, + 0x57, 0x76, 0x6f, 0x11 +}; +static const unsigned char dsa_2048_224_sha224_seed[] = { + 0xd2, 0xb1, 0x36, 0xd8, 0x5b, 0x8e, 0xa4, 0xb2, 0x6a, 0xab, 0x4e, 0x85, + 0x8b, 0x49, 0xf9, 0xdd, 0xe6, 0xa1, 0xcd, 0xad, 0x49, 0x52, 0xe9, 0xb3, + 0x36, 0x17, 0x06, 0xcf +}; +static const unsigned char dsa_2048_224_sha224_bad_seed[] = { + 0xd2, 0xb1, 0x36, 0xd8, 0x5b, 0x8e, 0xa4, 0xb2, 0x6a, 0xab, 0x4e, 0x85, + 0x8b, 0x49, 0xf9, 0xdd, 0xe6, 0xa1, 0xcd, 0xad, 0x49, 0x52, 0xe9, 0xb3, + 0x36, 0x17, 0x06, 0xd0 +}; +static int dsa_2048_224_sha224_counter = 2878; + +static const unsigned char dsa_3072_256_sha512_p[] = { + 0x9a, 0x82, 0x8b, 0x8d, 0xea, 0xd0, 0x56, 0x23, 0x88, 0x2d, 0x5d, 0x41, + 0x42, 0x4c, 0x13, 0x5a, 0x15, 0x81, 0x59, 0x02, 0xc5, 0x00, 0x82, 0x28, + 0x01, 0xee, 0x8f, 0x99, 0xfd, 0x6a, 0x95, 0xf2, 0x0f, 0xae, 0x34, 0x77, + 0x29, 0xcc, 0xc7, 0x50, 0x0e, 0x03, 0xef, 0xb0, 0x4d, 0xe5, 0x10, 0x00, + 0xa8, 0x7b, 0xce, 0x8c, 0xc6, 0xb2, 0x01, 0x74, 0x23, 0x1b, 0x7f, 0xe8, + 0xf9, 0x71, 0x28, 0x39, 0xcf, 0x18, 0x04, 0xb2, 0x95, 0x61, 0x2d, 0x11, + 0x71, 0x6b, 0xdd, 0x0d, 0x0b, 0xf0, 0xe6, 0x97, 0x52, 0x29, 0x9d, 0x45, + 0xb1, 0x23, 0xda, 0xb0, 0xd5, 0xcb, 0x51, 0x71, 0x8e, 0x40, 0x9c, 0x97, + 0x13, 0xea, 0x1f, 0x4b, 0x32, 0x5d, 0x27, 0x74, 0x81, 0x8d, 0x47, 0x8a, + 0x08, 0xce, 0xf4, 0xd1, 0x28, 0xa2, 0x0f, 0x9b, 0x2e, 0xc9, 0xa3, 0x0e, + 0x5d, 0xde, 0x47, 0x19, 0x6d, 0x5f, 0x98, 0xe0, 0x8e, 0x7f, 0x60, 0x8f, + 0x25, 0xa7, 0xa4, 0xeb, 0xb9, 0xf3, 0x24, 0xa4, 0x9e, 0xc1, 0xbd, 0x14, + 0x27, 0x7c, 0x27, 0xc8, 0x4f, 0x5f, 0xed, 0xfd, 0x86, 0xc8, 0xf1, 0xd7, + 0x82, 0xe2, 0xeb, 0xe5, 0xd2, 0xbe, 0xb0, 0x65, 0x28, 0xab, 0x99, 0x9e, + 0xcd, 0xd5, 0x22, 0xf8, 0x1b, 0x3b, 0x01, 0xe9, 0x20, 0x3d, 0xe4, 0x98, + 0x22, 0xfe, 0xfc, 0x09, 0x7e, 0x95, 0x20, 0xda, 0xb6, 0x12, 0x2c, 0x94, + 0x5c, 0xea, 0x74, 0x71, 0xbd, 0x19, 0xac, 0x78, 0x43, 0x02, 0x51, 0xb8, + 0x5f, 0x06, 0x1d, 0xea, 0xc8, 0xa4, 0x3b, 0xc9, 0x78, 0xa3, 0x2b, 0x09, + 0xdc, 0x76, 0x74, 0xc4, 0x23, 0x14, 0x48, 0x2e, 0x84, 0x2b, 0xa3, 0x82, + 0xc1, 0xba, 0x0b, 0x39, 0x2a, 0x9f, 0x24, 0x7b, 0xd6, 0xc2, 0xea, 0x5a, + 0xb6, 0xbd, 0x15, 0x82, 0x21, 0x85, 0xe0, 0x6b, 0x12, 0x4f, 0x8d, 0x64, + 0x75, 0xeb, 0x7e, 0xa1, 0xdb, 0xe0, 0x9d, 0x25, 0xae, 0x3b, 0xe9, 0x9b, + 0x21, 0x7f, 0x9a, 0x3d, 0x66, 0xd0, 0x52, 0x1d, 0x39, 0x8b, 0xeb, 0xfc, + 0xec, 0xbe, 0x72, 0x20, 0x5a, 0xdf, 0x1b, 0x00, 0xf1, 0x0e, 0xed, 0xc6, + 0x78, 0x6f, 0xc9, 0xab, 0xe4, 0xd6, 0x81, 0x8b, 0xcc, 0xf6, 0xd4, 0x6a, + 0x31, 0x62, 0x08, 0xd9, 0x38, 0x21, 0x8f, 0xda, 0x9e, 0xb1, 0x2b, 0x9c, + 0xc0, 0xbe, 0xf7, 0x9a, 0x43, 0x2d, 0x07, 0x59, 0x46, 0x0e, 0xd5, 0x23, + 0x4e, 0xaa, 0x4a, 0x04, 0xc2, 0xde, 0x33, 0xa6, 0x34, 0xba, 0xac, 0x4f, + 0x78, 0xd8, 0xca, 0x76, 0xce, 0x5e, 0xd4, 0xf6, 0x85, 0x4c, 0x6a, 0x60, + 0x08, 0x5d, 0x0e, 0x34, 0x8b, 0xf2, 0xb6, 0xe3, 0xb7, 0x51, 0xca, 0x43, + 0xaa, 0x68, 0x7b, 0x0a, 0x6e, 0xea, 0xce, 0x1e, 0x2c, 0x34, 0x8e, 0x0f, + 0xe2, 0xcc, 0x38, 0xf2, 0x9a, 0x98, 0xef, 0xe6, 0x7f, 0xf6, 0x62, 0xbb +}; +static const unsigned char dsa_3072_256_sha512_q[] = { + 0xc1, 0xdb, 0xc1, 0x21, 0x50, 0x49, 0x63, 0xa3, 0x77, 0x6d, 0x4c, 0x92, + 0xed, 0x58, 0x9e, 0x98, 0xea, 0xac, 0x7a, 0x90, 0x13, 0x24, 0xf7, 0xcd, + 0xd7, 0xe6, 0xd4, 0x8f, 0xf0, 0x45, 0x4b, 0xf7 +}; +static const unsigned char dsa_3072_256_sha512_seed[] = { + 0x35, 0x24, 0xb5, 0x59, 0xd5, 0x27, 0x58, 0x10, 0xf6, 0xa2, 0x7c, 0x9a, + 0x0d, 0xc2, 0x70, 0x8a, 0xb0, 0x41, 0x4a, 0x84, 0x0b, 0xfe, 0x66, 0xf5, + 0x3a, 0xbf, 0x4a, 0xa9, 0xcb, 0xfc, 0xa6, 0x22 +}; +static int dsa_3072_256_sha512_counter = 1604; + +static const unsigned char dsa_2048_224_sha256_p[] = { + 0xe9, 0x13, 0xbc, 0xf2, 0x14, 0x5d, 0xf9, 0x79, 0xd6, 0x6d, 0xf5, 0xc5, + 0xbe, 0x7b, 0x6f, 0x90, 0x63, 0xd0, 0xfd, 0xee, 0x4f, 0xc4, 0x65, 0x83, + 0xbf, 0xec, 0xc3, 0x2c, 0x5d, 0x30, 0xc8, 0xa4, 0x3b, 0x2f, 0x3b, 0x29, + 0x43, 0x69, 0xfb, 0x6e, 0xa9, 0xa4, 0x07, 0x6c, 0xcd, 0xb0, 0xd2, 0xd9, + 0xd3, 0xe6, 0xf4, 0x87, 0x16, 0xb7, 0xe5, 0x06, 0xb9, 0xba, 0xd6, 0x87, + 0xbc, 0x01, 0x9e, 0xba, 0xc2, 0xcf, 0x39, 0xb6, 0xec, 0xdc, 0x75, 0x07, + 0xc1, 0x39, 0x2d, 0x6a, 0x95, 0x31, 0x97, 0xda, 0x54, 0x20, 0x29, 0xe0, + 0x1b, 0xf9, 0x74, 0x65, 0xaa, 0xc1, 0x47, 0xd3, 0x9e, 0xb4, 0x3c, 0x1d, + 0xe0, 0xdc, 0x2d, 0x21, 0xab, 0x12, 0x3b, 0xa5, 0x51, 0x1e, 0xc6, 0xbc, + 0x6b, 0x4c, 0x22, 0xd1, 0x7c, 0xc6, 0xce, 0xcb, 0x8c, 0x1d, 0x1f, 0xce, + 0x1c, 0xe2, 0x75, 0x49, 0x6d, 0x2c, 0xee, 0x7f, 0x5f, 0xb8, 0x74, 0x42, + 0x5c, 0x96, 0x77, 0x13, 0xff, 0x80, 0xf3, 0x05, 0xc7, 0xfe, 0x08, 0x3b, + 0x25, 0x36, 0x46, 0xa2, 0xc4, 0x26, 0xb4, 0xb0, 0x3b, 0xd5, 0xb2, 0x4c, + 0x13, 0x29, 0x0e, 0x47, 0x31, 0x66, 0x7d, 0x78, 0x57, 0xe6, 0xc2, 0xb5, + 0x9f, 0x46, 0x17, 0xbc, 0xa9, 0x9a, 0x49, 0x1c, 0x0f, 0x45, 0xe0, 0x88, + 0x97, 0xa1, 0x30, 0x7c, 0x42, 0xb7, 0x2c, 0x0a, 0xce, 0xb3, 0xa5, 0x7a, + 0x61, 0x8e, 0xab, 0x44, 0xc1, 0xdc, 0x70, 0xe5, 0xda, 0x78, 0x2a, 0xb4, + 0xe6, 0x3c, 0xa0, 0x58, 0xda, 0x62, 0x0a, 0xb2, 0xa9, 0x3d, 0xaa, 0x49, + 0x7e, 0x7f, 0x9a, 0x19, 0x67, 0xee, 0xd6, 0xe3, 0x67, 0x13, 0xe8, 0x6f, + 0x79, 0x50, 0x76, 0xfc, 0xb3, 0x9d, 0x7e, 0x9e, 0x3e, 0x6e, 0x47, 0xb1, + 0x11, 0x5e, 0xc8, 0x83, 0x3a, 0x3c, 0xfc, 0x82, 0x5c, 0x9d, 0x34, 0x65, + 0x73, 0xb4, 0x56, 0xd5 +}; +static const unsigned char dsa_2048_224_sha256_q[] = { + 0xb0, 0xdf, 0xa1, 0x7b, 0xa4, 0x77, 0x64, 0x0e, 0xb9, 0x28, 0xbb, 0xbc, + 0xd4, 0x60, 0x02, 0xaf, 0x21, 0x8c, 0xb0, 0x69, 0x0f, 0x8a, 0x7b, 0xc6, + 0x80, 0xcb, 0x0a, 0x45 +}; +static const unsigned char dsa_2048_224_sha256_g[] = { + 0x11, 0x7c, 0x5f, 0xf6, 0x99, 0x44, 0x67, 0x5b, 0x69, 0xa3, 0x83, 0xef, + 0xb5, 0x85, 0xa2, 0x19, 0x35, 0x18, 0x2a, 0xf2, 0x58, 0xf4, 0xc9, 0x58, + 0x9e, 0xb9, 0xe8, 0x91, 0x17, 0x2f, 0xb0, 0x60, 0x85, 0x95, 0xa6, 0x62, + 0x36, 0xd0, 0xff, 0x94, 0xb9, 0xa6, 0x50, 0xad, 0xa6, 0xf6, 0x04, 0x28, + 0xc2, 0xc9, 0xb9, 0x75, 0xf3, 0x66, 0xb4, 0xeb, 0xf6, 0xd5, 0x06, 0x13, + 0x01, 0x64, 0x82, 0xa9, 0xf1, 0xd5, 0x41, 0xdc, 0xf2, 0x08, 0xfc, 0x2f, + 0xc4, 0xa1, 0x21, 0xee, 0x7d, 0xbc, 0xda, 0x5a, 0xa4, 0xa2, 0xb9, 0x68, + 0x87, 0x36, 0xba, 0x53, 0x9e, 0x14, 0x4e, 0x76, 0x5c, 0xba, 0x79, 0x3d, + 0x0f, 0xe5, 0x99, 0x1c, 0x27, 0xfc, 0xaf, 0x10, 0x63, 0x87, 0x68, 0x0e, + 0x3e, 0x6e, 0xaa, 0xf3, 0xdf, 0x76, 0x7e, 0x02, 0x9a, 0x41, 0x96, 0xa1, + 0x6c, 0xbb, 0x67, 0xee, 0x0c, 0xad, 0x72, 0x65, 0xf1, 0x70, 0xb0, 0x39, + 0x9b, 0x54, 0x5f, 0xd7, 0x6c, 0xc5, 0x9a, 0x90, 0x53, 0x18, 0xde, 0x5e, + 0x62, 0x89, 0xb9, 0x2f, 0x66, 0x59, 0x3a, 0x3d, 0x10, 0xeb, 0xa5, 0x99, + 0xf6, 0x21, 0x7d, 0xf2, 0x7b, 0x42, 0x15, 0x1c, 0x55, 0x79, 0x15, 0xaa, + 0xa4, 0x17, 0x2e, 0x48, 0xc3, 0xa8, 0x36, 0xf5, 0x1a, 0x97, 0xce, 0xbd, + 0x72, 0xef, 0x1d, 0x50, 0x5b, 0xb1, 0x60, 0x0a, 0x5c, 0x0b, 0xa6, 0x21, + 0x38, 0x28, 0x4e, 0x89, 0x33, 0x1d, 0xb5, 0x7e, 0x5c, 0xf1, 0x6b, 0x2c, + 0xbd, 0xad, 0x84, 0xb2, 0x8e, 0x96, 0xe2, 0x30, 0xe7, 0x54, 0xb8, 0xc9, + 0x70, 0xcb, 0x10, 0x30, 0x63, 0x90, 0xf4, 0x45, 0x64, 0x93, 0x09, 0x38, + 0x6a, 0x47, 0x58, 0x31, 0x04, 0x1a, 0x18, 0x04, 0x1a, 0xe0, 0xd7, 0x0b, + 0x3c, 0xbe, 0x2a, 0x9c, 0xec, 0xcc, 0x0d, 0x0c, 0xed, 0xde, 0x54, 0xbc, + 0xe6, 0x93, 0x59, 0xfc +}; + +static int ffc_params_validate_g_unverified_test(void) +{ + int ret = 0, res; + FFC_PARAMS params; + BIGNUM *p = NULL, *q = NULL, *g = NULL; + BIGNUM *p1 = NULL, *g1 = NULL; + + ffc_params_init(¶ms); + + if (!TEST_ptr(p = BN_bin2bn(dsa_2048_224_sha256_p, + sizeof(dsa_2048_224_sha256_p), NULL))) + goto err; + p1 = p; + if (!TEST_ptr(q = BN_bin2bn(dsa_2048_224_sha256_q, + sizeof(dsa_2048_224_sha256_q), NULL))) + goto err; + if (!TEST_ptr(g = BN_bin2bn(dsa_2048_224_sha256_g, + sizeof(dsa_2048_224_sha256_g), NULL))) + goto err; + g1 = g; + + /* Fail if g is NULL */ + ffc_params_set0_pqg(¶ms, p, q, NULL); + p = NULL; + q = NULL; + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha256(), + FFC_PARAMS_VALIDATE_G, &res, + NULL))) + goto err; + + ffc_params_set0_pqg(¶ms, p, q, g); + g = NULL; + if (!TEST_true(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha256(), + FFC_PARAMS_VALIDATE_G, &res, + NULL))) + goto err; + + /* incorrect g */ + BN_add_word(g1, 1); + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha256(), + FFC_PARAMS_VALIDATE_G, &res, + NULL))) + goto err; + + /* fail if g < 2 */ + BN_set_word(g1, 1); + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha256(), + FFC_PARAMS_VALIDATE_G, &res, + NULL))) + goto err; + + BN_copy(g1, p1); + /* Fail if g >= p */ + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha256(), + FFC_PARAMS_VALIDATE_G, &res, + NULL))) + goto err; + + ret = 1; +err: + ffc_params_cleanup(¶ms); + BN_free(p); + BN_free(q); + BN_free(g); + return ret; +} + +static int ffc_params_validate_pq_test(void) +{ + int ret = 0, res = -1; + FFC_PARAMS params; + BIGNUM *p = NULL, *q = NULL; + + ffc_params_init(¶ms); + if (!TEST_ptr(p = BN_bin2bn(dsa_2048_224_sha224_p, + sizeof(dsa_2048_224_sha224_p), + NULL))) + goto err; + if (!TEST_ptr(q = BN_bin2bn(dsa_2048_224_sha224_q, + sizeof(dsa_2048_224_sha224_q), + NULL))) + goto err; + + /* No p */ + ffc_params_set0_pqg(¶ms, NULL, q, NULL); + q = NULL; + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha224(), + FFC_PARAMS_VALIDATE_PQ, &res, + NULL))) + goto err; + + /* Test valid case */ + ffc_params_set0_pqg(¶ms, p, NULL, NULL); + p = NULL; + ffc_params_set_validate_params(¶ms, dsa_2048_224_sha224_seed, + sizeof(dsa_2048_224_sha224_seed), + dsa_2048_224_sha224_counter); + if (!TEST_true(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha224(), + FFC_PARAMS_VALIDATE_PQ, &res, + NULL))) + goto err; + + /* Bad counter - so p is not prime */ + ffc_params_set_validate_params(¶ms, dsa_2048_224_sha224_seed, + sizeof(dsa_2048_224_sha224_seed), + 1); + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha224(), + FFC_PARAMS_VALIDATE_PQ, &res, + NULL))) + goto err; + + /* seedlen smaller than N */ + ffc_params_set_validate_params(¶ms, dsa_2048_224_sha224_seed, + sizeof(dsa_2048_224_sha224_seed)-1, + dsa_2048_224_sha224_counter); + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha224(), + FFC_PARAMS_VALIDATE_PQ, &res, + NULL))) + goto err; + + /* Provided seed doesnt produce a valid prime q */ + ffc_params_set_validate_params(¶ms, dsa_2048_224_sha224_bad_seed, + sizeof(dsa_2048_224_sha224_bad_seed), + dsa_2048_224_sha224_counter); + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha224(), + FFC_PARAMS_VALIDATE_PQ, &res, + NULL))) + goto err; + + if (!TEST_ptr(p = BN_bin2bn(dsa_3072_256_sha512_p, + sizeof(dsa_3072_256_sha512_p), NULL))) + goto err; + if (!TEST_ptr(q = BN_bin2bn(dsa_3072_256_sha512_q, + sizeof(dsa_3072_256_sha512_q), + NULL))) + goto err; + + + ffc_params_set0_pqg(¶ms, p, q, NULL); + p = q = NULL; + ffc_params_set_validate_params(¶ms, dsa_3072_256_sha512_seed, + sizeof(dsa_3072_256_sha512_seed), + dsa_3072_256_sha512_counter); + /* Q doesn't div P-1 */ + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + EVP_sha512(), + FFC_PARAMS_VALIDATE_PQ, &res, + NULL))) + goto err; + + /* Bad L/N for FIPS DH */ + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DH, + EVP_sha512(), + FFC_PARAMS_VALIDATE_PQ, &res, + NULL))) + goto err; + + ret = 1; +err: + ffc_params_cleanup(¶ms); + BN_free(p); + BN_free(q); + return ret; +} +#endif /* OPENSSL_NO_DSA */ + +#ifndef OPENSSL_NO_DH +static int ffc_params_gen_test(void) +{ + int ret = 0, res = -1; + FFC_PARAMS params; + + ffc_params_init(¶ms); + if (!TEST_true(ffc_params_FIPS186_4_generate(NULL, ¶ms, FFC_PARAM_TYPE_DH, + 2048, 256, NULL, &res, NULL))) + goto err; + if (!TEST_true(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DH, + NULL, + FFC_PARAMS_VALIDATE_ALL, &res, + NULL))) + goto err; + + ret = 1; +err: + ffc_params_cleanup(¶ms); + return ret; +} + +static int ffc_params_gen_canonicalg_test(void) +{ + int ret = 0, res = -1; + FFC_PARAMS params; + + ffc_params_init(¶ms); + params.gindex = 1; + if (!TEST_true(ffc_params_FIPS186_4_generate(NULL, ¶ms, FFC_PARAM_TYPE_DH, + 2048, 256, NULL, &res, NULL))) + goto err; + if (!TEST_true(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DH, + NULL, + FFC_PARAMS_VALIDATE_ALL, &res, + NULL))) + goto err; + + if (!TEST_true(ffc_params_print(bio_out, ¶ms, 4))) + goto err; + + ret = 1; +err: + ffc_params_cleanup(¶ms); + return ret; +} + +static int ffc_params_fips186_2_gen_validate_test(void) +{ + int ret = 0, res = -1; + FFC_PARAMS params; + BIGNUM *bn = NULL; + + ffc_params_init(¶ms); + if (!TEST_ptr(bn = BN_new())) + goto err; + if (!TEST_true(ffc_params_FIPS186_2_generate(NULL, ¶ms, FFC_PARAM_TYPE_DH, + 1024, 160, NULL, &res, NULL))) + goto err; + if (!TEST_true(ffc_params_FIPS186_2_validate(¶ms, FFC_PARAM_TYPE_DH, + NULL, + FFC_PARAMS_VALIDATE_ALL, &res, + NULL))) + goto err; + /* FIPS 186-4 L,N pair test will fail for DH */ + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DH, + NULL, + FFC_PARAMS_VALIDATE_ALL, &res, + NULL))) + goto err; + if (!TEST_int_eq(res, FFC_CHECK_BAD_LN_PAIR)) + goto err; + + /* + * The fips186-2 generation should produce a different q compared to + * fips 186-4 given the same seed value. So validation of q will fail. + */ + if (!TEST_false(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + NULL, + FFC_PARAMS_VALIDATE_ALL, &res, + NULL))) + goto err; + /* As the params are randomly generated the error is one of the following */ + if (!TEST_true(res == FFC_CHECK_Q_MISMATCH || res == FFC_CHECK_Q_NOT_PRIME)) + goto err; + + /* Partially valid g test will still pass */ + if (!TEST_int_eq(ffc_params_FIPS186_4_validate(¶ms, FFC_PARAM_TYPE_DSA, + NULL, + FFC_PARAMS_VALIDATE_G, &res, + NULL), 2)) + goto err; + + if (!TEST_true(ffc_params_print(bio_out, ¶ms, 4))) + goto err; + + ret = 1; +err: + BN_free(bn); + ffc_params_cleanup(¶ms); + return ret; +} + +extern FFC_PARAMS *dh_get0_params(DH *dh); + +static int ffc_public_validate_test(void) +{ + int ret = 0, res = -1; + FFC_PARAMS *params; + BIGNUM *pub = NULL; + DH *dh = NULL; + + if (!TEST_ptr(pub = BN_new())) + goto err; + + if (!TEST_ptr(dh = DH_new_by_nid(NID_ffdhe2048))) + goto err; + params = dh_get0_params(dh); + + if (!TEST_true(BN_set_word(pub, 1))) + goto err; + BN_set_negative(pub, 1); + /* Fail if public key is negative */ + if (!TEST_false(ffc_validate_public_key(params, pub, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_SMALL, res)) + goto err; + if (!TEST_true(BN_set_word(pub, 0))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_SMALL, res)) + goto err; + /* Fail if public key is zero */ + if (!TEST_false(ffc_validate_public_key(params, pub, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_SMALL, res)) + goto err; + /* Fail if public key is 1 */ + if (!TEST_false(ffc_validate_public_key(params, BN_value_one(), &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_SMALL, res)) + goto err; + if (!TEST_true(BN_add_word(pub, 2))) + goto err; + /* Pass if public key >= 2 */ + if (!TEST_true(ffc_validate_public_key(params, pub, &res))) + goto err; + + if (!TEST_ptr(BN_copy(pub, params->p))) + goto err; + /* Fail if public key = p */ + if (!TEST_false(ffc_validate_public_key(params, pub, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_LARGE, res)) + goto err; + + if (!TEST_true(BN_sub_word(pub, 1))) + goto err; + /* Fail if public key = p - 1 */ + if (!TEST_false(ffc_validate_public_key(params, pub, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PUBKEY_TOO_LARGE, res)) + goto err; + + if (!TEST_true(BN_sub_word(pub, 1))) + goto err; + /* Fail if public key is not related to p & q */ + if (!TEST_false(ffc_validate_public_key(params, pub, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PUBKEY_INVALID, res)) + goto err; + + if (!TEST_true(BN_sub_word(pub, 5))) + goto err; + /* Pass if public key is valid */ + if (!TEST_true(ffc_validate_public_key(params, pub, &res))) + goto err; + + ret = 1; +err: + DH_free(dh); + BN_free(pub); + return ret; +} + +static int ffc_private_validate_test(void) +{ + int ret = 0, res = -1; + FFC_PARAMS *params; + BIGNUM *priv = NULL; + DH *dh = NULL; + + if (!TEST_ptr(priv = BN_new())) + goto err; + + if (!TEST_ptr(dh = DH_new_by_nid(NID_ffdhe2048))) + goto err; + params = dh_get0_params(dh); + + if (!TEST_true(BN_set_word(priv, 1))) + goto err; + BN_set_negative(priv, 1); + /* Fail if priv key is negative */ + if (!TEST_false(ffc_validate_private_key(params->q, priv, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PRIVKEY_TOO_SMALL, res)) + goto err; + + if (!TEST_true(BN_set_word(priv, 0))) + goto err; + /* Fail if priv key is zero */ + if (!TEST_false(ffc_validate_private_key(params->q, priv, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PRIVKEY_TOO_SMALL, res)) + goto err; + + /* Pass if priv key >= 1 */ + if (!TEST_true(ffc_validate_private_key(params->q, BN_value_one(), &res))) + goto err; + + if (!TEST_ptr(BN_copy(priv, params->q))) + goto err; + /* Fail if priv key = upper */ + if (!TEST_false(ffc_validate_private_key(params->q, priv, &res))) + goto err; + if (!TEST_int_eq(FFC_ERROR_PRIVKEY_TOO_LARGE, res)) + goto err; + + if (!TEST_true(BN_sub_word(priv, 1))) + goto err; + /* Pass if priv key <= upper - 1 */ + if (!TEST_true(ffc_validate_private_key(params->q, priv, &res))) + goto err; + + ret = 1; +err: + DH_free(dh); + BN_free(priv); + return ret; +} + +static int ffc_private_gen_test(int index) +{ + int ret = 0, res = -1, N; + FFC_PARAMS *params; + BIGNUM *priv = NULL; + DH *dh = NULL; + BN_CTX *ctx = NULL; + + if (!TEST_ptr(ctx = BN_CTX_new_ex(NULL))) + goto err; + + if (!TEST_ptr(priv = BN_new())) + goto err; + + if (!TEST_ptr(dh = DH_new_by_nid(NID_ffdhe2048))) + goto err; + params = dh_get0_params(dh); + + N = BN_num_bits(params->q); + /* Fail since N < 2*s - where s = 112*/ + if (!TEST_false(ffc_generate_private_key_fips(ctx, params, 220, 112, priv))) + goto err; + /* fail since N > len(q) */ + if (!TEST_false(ffc_generate_private_key_fips(ctx, params, N + 1, 112, priv))) + goto err; + /* pass since 2s <= N <= len(q) */ + if (!TEST_true(ffc_generate_private_key_fips(ctx, params, N, 112, priv))) + goto err; + /* pass since N = len(q) */ + if (!TEST_true(ffc_validate_private_key(params->q, priv, &res))) + goto err; + /* pass since 2s <= N < len(q) */ + if (!TEST_true(ffc_generate_private_key_fips(ctx, params, N / 2, 112, priv))) + goto err; + if (!TEST_true(ffc_validate_private_key(params->q, priv, &res))) + goto err; + + /* N and s are ignored in this case */ + if (!TEST_true(ffc_generate_private_key(ctx, params, 0, 0, priv))) + goto err; + if (!TEST_true(ffc_validate_private_key(params->q, priv, &res))) + goto err; + + ret = 1; +err: + DH_free(dh); + BN_free(priv); + BN_CTX_free(ctx); + return ret; +} +#endif /* OPENSSL_NO_DH */ + +int setup_tests(void) +{ +#ifndef OPENSSL_NO_DSA + ADD_TEST(ffc_params_validate_pq_test); + ADD_TEST(ffc_params_validate_g_unverified_test); +#endif /* OPENSSL_NO_DSA */ +#ifndef OPENSSL_NO_DH + ADD_TEST(ffc_params_gen_test); + ADD_TEST(ffc_params_gen_canonicalg_test); + ADD_TEST(ffc_params_fips186_2_gen_validate_test); + ADD_TEST(ffc_public_validate_test); + ADD_TEST(ffc_private_validate_test); + ADD_ALL_TESTS(ffc_private_gen_test, 10); +#endif /* OPENSSL_NO_DH */ + return 1; +} diff --git a/test/param_build_test.c b/test/param_build_test.c index 6d54946c..9ac76d01 100644 --- a/test/param_build_test.c +++ b/test/param_build_test.c @@ -190,128 +190,9 @@ err: return res; } -static int template_static_params_test(int n) -{ - unsigned char data[1000], secure[500]; - OSSL_PARAM_BLD bld; - OSSL_PARAM params[20], *p; - BIGNUM *bn = NULL, *bn_r = NULL; - BIGNUM *bn0 = NULL, *bn0_r = NULL; - const size_t bn_bytes = 200; - unsigned int i; - char *utf = NULL; - int res = 0; - - ossl_param_bld_init(&bld); - if (!TEST_true(ossl_param_bld_push_uint(&bld, "i", 6)) - || !TEST_ptr(bn = (n & 1) == 0 ? BN_new() : BN_secure_new()) - || !TEST_true(BN_set_word(bn, 1337)) - || !TEST_false(ossl_param_bld_push_BN_pad(&bld, "bn", bn, 0)) - || !TEST_false(ossl_param_bld_push_BN_pad(&bld, "bn", bn, 1)) - || !TEST_true(ossl_param_bld_push_BN_pad(&bld, "bn", bn, bn_bytes)) - || !TEST_ptr(bn0 = BN_new()) - || !TEST_true(ossl_param_bld_push_BN_pad(&bld, "bn0", bn0, 0)) - || !TEST_true(ossl_param_bld_push_utf8_string(&bld, "utf8_s", "bar", - 0)) - || !TEST_ptr(ossl_param_bld_to_param_ex(&bld, params, - OSSL_NELEM(params), - data, sizeof(data), - secure, sizeof(secure))) - /* Check unsigned int */ - || !TEST_ptr(p = OSSL_PARAM_locate(params, "i")) - || !TEST_true(OSSL_PARAM_get_uint(p, &i)) - || !TEST_str_eq(p->key, "i") - || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER) - || !TEST_size_t_eq(p->data_size, sizeof(int)) - || !TEST_uint_eq(i, 6) - /* Check BIGNUM */ - || !TEST_ptr(p = OSSL_PARAM_locate(params, "bn")) - || !TEST_true(OSSL_PARAM_get_BN(p, &bn_r)) - || !TEST_str_eq(p->key, "bn") - || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER) - || !TEST_size_t_eq(p->data_size, bn_bytes) - || !TEST_uint_eq((unsigned int)BN_get_word(bn_r), 1337) - /* Check BIGNUM zero */ - || !TEST_ptr(p = OSSL_PARAM_locate(params, "bn0")) - || !TEST_true(OSSL_PARAM_get_BN(p, &bn0_r)) - || !TEST_str_eq(p->key, "bn0") - || !TEST_uint_eq(p->data_type, OSSL_PARAM_UNSIGNED_INTEGER) - || !TEST_size_t_eq(p->data_size, 0) - || !TEST_uint_eq((unsigned int)BN_get_word(bn0_r), 0) - /* Check UTF8 string */ - || !TEST_ptr(p = OSSL_PARAM_locate(params, "utf8_s")) - || !TEST_str_eq(p->data, "bar") - || !TEST_true(OSSL_PARAM_get_utf8_string(p, &utf, 0)) - || !TEST_str_eq(utf, "bar")) - goto err; - res = 1; -err: - OPENSSL_free(utf); - BN_free(bn); - BN_free(bn_r); - BN_free(bn0); - BN_free(bn0_r); - return res; -} - -static int template_static_fail_test(int n) -{ - unsigned char data[10000], secure[500]; - OSSL_PARAM_BLD bld; - OSSL_PARAM prms[20]; - BIGNUM *bn = NULL; - int res = 0; - - ossl_param_bld_init(&bld); - if (!TEST_true(ossl_param_bld_push_uint(&bld, "i", 6)) - || !TEST_ptr(bn = (n & 1) == 0 ? BN_new() : BN_secure_new()) - || !TEST_true(BN_hex2bn(&bn, "ABCDEF78901234567890ABCDEF0987987654321")) - || !TEST_true(ossl_param_bld_push_BN(&bld, "bn", bn)) - || !TEST_true(ossl_param_bld_push_utf8_string(&bld, "utf8_s", "abc", - 1000)) - /* No OSSL_PARAMS */ - || !TEST_ptr_null(ossl_param_bld_to_param_ex(&bld, NULL, 0, data, - sizeof(data), secure, - sizeof(secure))) - /* Short OSSL_PARAMS */ - || !TEST_ptr_null(ossl_param_bld_to_param_ex(&bld, prms, 2, - data, sizeof(data), - secure, sizeof(secure))) - /* No normal data */ - || !TEST_ptr_null(ossl_param_bld_to_param_ex(&bld, prms, - OSSL_NELEM(prms), - NULL, 0, secure, - sizeof(secure))) - /* Not enough normal data */ - || !TEST_ptr_null(ossl_param_bld_to_param_ex(&bld, prms, - OSSL_NELEM(prms), - data, 50, secure, - sizeof(secure)))) - goto err; - if ((n & 1) == 1) { - /* No secure data */ - if (!TEST_ptr_null(ossl_param_bld_to_param_ex(&bld, prms, - OSSL_NELEM(prms), - data, sizeof(data), - NULL, 0)) - /* Not enough secure data */ - || !TEST_ptr_null(ossl_param_bld_to_param_ex(&bld, prms, - OSSL_NELEM(prms), - data, sizeof(data), - secure, 4))) - goto err; - } - res = 1; -err: - BN_free(bn); - return res; -} - int setup_tests(void) { ADD_TEST(template_public_test); ADD_TEST(template_private_test); - ADD_ALL_TESTS(template_static_params_test, 2); - ADD_ALL_TESTS(template_static_fail_test, 2); return 1; } diff --git a/test/recipes/03-test_internal_ffc.t b/test/recipes/03-test_internal_ffc.t new file mode 100644 index 00000000..aa64213b --- /dev/null +++ b/test/recipes/03-test_internal_ffc.t @@ -0,0 +1,11 @@ +#! /usr/bin/env perl +# Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +use OpenSSL::Test::Simple; + +simple_test("test_internal_ffc", "ffc_internal_test"); diff --git a/test/recipes/15-test_dsa.t b/test/recipes/15-test_dsa.t index eb22ed87..1495724e 100644 --- a/test/recipes/15-test_dsa.t +++ b/test/recipes/15-test_dsa.t @@ -16,25 +16,37 @@ use OpenSSL::Test::Utils; setup("test_dsa"); -plan tests => 6; +plan skip_all => 'DSA is not supported in this build' if disabled('dsa'); +plan tests => 7; require_ok(srctop_file('test','recipes','tconversion.pl')); -ok(run(test(["dsatest"])), "running dsatest"); -ok(run(test(["dsa_no_digest_size_test"])), "running dsa_no_digest_size_test"); + SKIP: { + skip "Skipping initial dsa tests", 2 + if disabled('deprecated-3.0'); + + ok(run(test(["dsatest"])), "running dsatest"); + ok(run(test(["dsa_no_digest_size_test"])), + "running dsa_no_digest_size_test"); +} SKIP: { - skip "Skipping dsa conversion test", 3 - if disabled("dsa"); + skip "Skipping dsa conversion test using 'openssl dsa'", 2 + if disabled('deprecated-3.0'); - subtest 'dsa conversions -- private key' => sub { - tconversion("dsa", srctop_file("test","testdsa.pem")); + subtest "dsa conversions using 'openssl dsa' -- private key" => sub { + tconversion("dsa", srctop_file("test","testdsa.pem")); }; - subtest 'dsa conversions -- private key PKCS#8' => sub { - tconversion("dsa", srctop_file("test","testdsa.pem"), "pkey"); - }; - subtest 'dsa conversions -- public key' => sub { - tconversion("msb", srctop_file("test","testdsapub.pem"), "dsa", - "-pubin", "-pubout"); + subtest "dsa conversions using 'openssl dsa' -- public key" => sub { + tconversion("msb", srctop_file("test","testdsapub.pem"), "dsa", + "-pubin", "-pubout"); }; } + +subtest "dsa conversions using 'openssl pkey' -- private key PKCS#8" => sub { + tconversion("dsa", srctop_file("test","testdsa.pem"), "pkey"); +}; +subtest "dsa conversions using 'openssl pkey' -- public key" => sub { + tconversion("dsa", srctop_file("test","testdsapub.pem"), "pkey", + "-pubin", "-pubout"); +}; diff --git a/test/recipes/30-test_evp.t b/test/recipes/30-test_evp.t index 11e4b9ca..575a471d 100644 --- a/test/recipes/30-test_evp.t +++ b/test/recipes/30-test_evp.t @@ -31,9 +31,9 @@ my @configs = ( $defaultcnf ); # Only add the FIPS config if the FIPS module has been built push @configs, 'fips.cnf' unless $no_fips; -my @files = qw( evpciph.txt evpdigest.txt ); +my @files = qw( evpciph.txt evpdigest.txt evppkey.txt); my @defltfiles = qw( evpencod.txt evpkdf.txt evppkey_kdf.txt evpmac.txt - evppbe.txt evppkey.txt evppkey_ecc.txt evpcase.txt evpccmcavs.txt ); + evppbe.txt evppkey_ecc.txt evpcase.txt evpccmcavs.txt ); my @ideafiles = qw( evpciph_idea.txt ); push @defltfiles, @ideafiles unless disabled("idea"); diff --git a/test/recipes/30-test_evp_data/evppkey.txt b/test/recipes/30-test_evp_data/evppkey.txt index 9b3e5140..1ca16572 100644 --- a/test/recipes/30-test_evp_data/evppkey.txt +++ b/test/recipes/30-test_evp_data/evppkey.txt @@ -131,34 +131,40 @@ PrivPubKeyPair = DSA-1024:DSA-1024-PUBLIC Title = RSA tests Sign = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad Verify = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad Output = "0123456789ABCDEF1234" # Leading zero in the signature Verify = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = 00c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad Result = VERIFY_ERROR VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = 00c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad Result = KEYOP_ERROR # Digest too long Sign = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF12345" Output = 00 @@ -166,6 +172,7 @@ Result = KEYOP_ERROR # Digest too short Sign = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF12345" Output = 00 @@ -173,6 +180,7 @@ Result = KEYOP_ERROR # Mismatched digest Verify = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1233" Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad @@ -180,6 +188,7 @@ Result = VERIFY_ERROR # Corrupted signature Verify = RSA-2048 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1233" Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ae @@ -187,6 +196,7 @@ Result = VERIFY_ERROR # parameter is not NULL Verify = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = "0123456789ABCDEF1234" Output = 3ec3fc29eb6e122bd7aa361cd09fe1bcbe85311096a7b9e4799cedfb2351ce0ab7fe4e75b4f6b37f67edd9c60c800f9ab941c0c157d7d880ca9de40c951d60fd293ae220d4bc510b1572d6e85a1bbbd8605b52e05f1c64fafdae59a1c2fbed214b7844d0134619de62851d5a0522e32e556e5950f3f97b8150e3f0dffee612c924201c27cd9bc8b423a71533380c276d3d59fcba35a2e80a1a192ec266a6c2255012cd86a349fe90a542b355fa3355b04da6cdf1df77f0e7bd44a90e880e1760266d233e465226f5db1c68857847d82072861ee266ddfc2e596845b77e1803274a579835ab5e4975d81d20b7df9cec7795489e4a2bdb8c1cf6a6b359945ac92c @@ -194,65 +204,76 @@ Result = VERIFY_ERROR # embedded digest too long Verify = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = "0123456789ABCDEF1234" Output = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d Result = VERIFY_ERROR VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d Result = KEYOP_ERROR # embedded digest too short Verify = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = "0123456789ABCDEF1234" Output = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d Result = VERIFY_ERROR VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d Result = KEYOP_ERROR # Garbage after DigestInfo Verify = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = "0123456789ABCDEF1234" Output = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274 Result = VERIFY_ERROR VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274 Result = KEYOP_ERROR # invalid tag for parameter Verify = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = "0123456789ABCDEF1234" Output = 49525db4d44c755e560cba980b1d85ea604b0e077fcadd4ba44072a3487bbddb835016200a7d8739cce2dc3223d9c20cbdd25059ab02277f1f21318efd18e21038ec89aa9d40680987129e8b41ba33bceb86518bdf47268b921cce2037acabca6575d832499538d6f40cdba0d40bd7f4d8ea6ca6e2eec87f294efc971407857f5d7db09f6a7b31e301f571c6d82a5e3d08d2bb3a36e673d28b910f5bec57f0fcc4d968fd7c94d0b9226dec17f5192ad8b42bcab6f26e1bea1fdc3b958199acb00f14ebcb2a352f3afcedd4c09000128a603bbeb9696dea13040445253972d46237a25c7845e3b464e6984c2348ea1f1210a9ff0b00d2d72b50db00c009bb39f9 Result = VERIFY_ERROR VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:sha1 Input = 49525db4d44c755e560cba980b1d85ea604b0e077fcadd4ba44072a3487bbddb835016200a7d8739cce2dc3223d9c20cbdd25059ab02277f1f21318efd18e21038ec89aa9d40680987129e8b41ba33bceb86518bdf47268b921cce2037acabca6575d832499538d6f40cdba0d40bd7f4d8ea6ca6e2eec87f294efc971407857f5d7db09f6a7b31e301f571c6d82a5e3d08d2bb3a36e673d28b910f5bec57f0fcc4d968fd7c94d0b9226dec17f5192ad8b42bcab6f26e1bea1fdc3b958199acb00f14ebcb2a352f3afcedd4c09000128a603bbeb9696dea13040445253972d46237a25c7845e3b464e6984c2348ea1f1210a9ff0b00d2d72b50db00c009bb39f9 Result = KEYOP_ERROR # MD5/SHA-1 combination Verify = RSA-2048 +Availablein = default Ctrl = digest:MD5-SHA1 Input = "0123456789ABCDEF0123456789ABCDEF0123" Output = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:MD5-SHA1 Input = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d Output = "0123456789ABCDEF0123456789ABCDEF0123" # MD5/SHA-1 combination, digest mismatch Verify = RSA-2048 +Availablein = default Ctrl = digest:MD5-SHA1 Input = "000000000000000000000000000000000000" Output = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d @@ -260,18 +281,21 @@ Result = VERIFY_ERROR # MD5/SHA-1 combination, wrong signature digest length Verify = RSA-2048 +Availablein = default Ctrl = digest:MD5-SHA1 Input = "0123456789ABCDEF0123456789ABCDEF0123" Output = 6c13511f97ffb8137545fce551a43cf2b5b3dbdd5c3ceaaccd4620a6a373f3c38cc523d95bbdd810c852743b981bc4393c6b0cdfb0da5e77a8cc0108b05ff95e0f4dd7a0125b7390af1408dca6ddefac3b05b768de7b0c3df3c74e5f102f62743d67813beee1777036078da4cff5b29f49f01a6df3a2e709c37a83737108517687fe754d9ee908cb36c55e88f67c0b537108707347d16049f5dfac3d400ea367222d36627937a7f822f451c3d2c2dbc9e2202bffd3dc1b22213e17270a6b657619c6f44cbf66b077d548cfc9e1a114f8b853412470f2bf8d828f04d0d9f1aef260d216acb0911329fb5bdc48c2be3b198bf6f96e1c3fb116ad4430140d0640d4 Result = VERIFY_ERROR VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:MD5-SHA1 Input = 6c13511f97ffb8137545fce551a43cf2b5b3dbdd5c3ceaaccd4620a6a373f3c38cc523d95bbdd810c852743b981bc4393c6b0cdfb0da5e77a8cc0108b05ff95e0f4dd7a0125b7390af1408dca6ddefac3b05b768de7b0c3df3c74e5f102f62743d67813beee1777036078da4cff5b29f49f01a6df3a2e709c37a83737108517687fe754d9ee908cb36c55e88f67c0b537108707347d16049f5dfac3d400ea367222d36627937a7f822f451c3d2c2dbc9e2202bffd3dc1b22213e17270a6b657619c6f44cbf66b077d548cfc9e1a114f8b853412470f2bf8d828f04d0d9f1aef260d216acb0911329fb5bdc48c2be3b198bf6f96e1c3fb116ad4430140d0640d4 Result = KEYOP_ERROR # MD5/SHA-1 combination, wrong input digest length Verify = RSA-2048 +Availablein = default Ctrl = digest:MD5-SHA1 Input = "0123456789ABCDEF0123456789ABCDEF012" Output = 7b80e0d4d2a6b7f4b018ce164bc0be21a0604b1b05e91c6204372458b05a0e4dbf0b36b3f80dbf04b278ad1fcf7ff6d982d5ca5d98b13b68240d846d400b8db6675b1a5fcbe2256322c5f691378bc941785326030fa835d240e334e2a4d35b17c1149b59dbb6e6d53b44326ebfc371f754449d36bad3722c1878af1699bb0a00c28e37162f99aba550b7c333228a70c906e3701c519a460a14fac29ff164ca9413efd19b431b31a9ad2988662cdbda9cdcff85f294b4be2cf072caceb1d3f52642edafea2e1d1e495061f18b5b3a130d2242cec830e44d506590e5df69bb974879a35e6bdc1ad00e3e31b362f2f5cdeabd8a0dfddfdb66a7c43993a3e189b80d @@ -279,6 +303,7 @@ Result = VERIFY_ERROR # MD5/SHA-1 combination, wrong input and signature digest length Verify = RSA-2048 +Availablein = default Ctrl = digest:MD5-SHA1 Input = "0123456789ABCDEF0123456789ABCDEF012" Output = 6c13511f97ffb8137545fce551a43cf2b5b3dbdd5c3ceaaccd4620a6a373f3c38cc523d95bbdd810c852743b981bc4393c6b0cdfb0da5e77a8cc0108b05ff95e0f4dd7a0125b7390af1408dca6ddefac3b05b768de7b0c3df3c74e5f102f62743d67813beee1777036078da4cff5b29f49f01a6df3a2e709c37a83737108517687fe754d9ee908cb36c55e88f67c0b537108707347d16049f5dfac3d400ea367222d36627937a7f822f451c3d2c2dbc9e2202bffd3dc1b22213e17270a6b657619c6f44cbf66b077d548cfc9e1a114f8b853412470f2bf8d828f04d0d9f1aef260d216acb0911329fb5bdc48c2be3b198bf6f96e1c3fb116ad4430140d0640d4 @@ -286,28 +311,33 @@ Result = VERIFY_ERROR # DigestInfo-wrapped MDC-2 signature Verify = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = "0123456789ABCDEF" Output = 3a46e5e80635d3b5586187b44b08fd02ca0bd36a637a8afeb46a1c1eb18d05b3196e00edf85378109015bcd3d0cfcefc2919c5b8e3ac42884b360188b1395ed34df7d2749f36b91c320d290311d78b36f390481eff42ace0275385c05176d022e4b625cf0ed85082d4b25da9e8a86011f6ac1cb8d8b812cc2bbd6c240caa8445aa74f8e971c935dbf3447df0411eb9e5cdee0851d1e0fea7041916c77efc09dc54e8dd4b7ba8f8d85ef43d4f12abde99886f4ebd5f021fc1b476cc23dc6a94fbbe77c954eee496fb6b4b5c534daa4e819143ce8de511a8bcb65759750c17edaca6fb31ac271c1ca3a27705f780ae86c67009e76fcba9067dde3556ff59c44111 VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = 3a46e5e80635d3b5586187b44b08fd02ca0bd36a637a8afeb46a1c1eb18d05b3196e00edf85378109015bcd3d0cfcefc2919c5b8e3ac42884b360188b1395ed34df7d2749f36b91c320d290311d78b36f390481eff42ace0275385c05176d022e4b625cf0ed85082d4b25da9e8a86011f6ac1cb8d8b812cc2bbd6c240caa8445aa74f8e971c935dbf3447df0411eb9e5cdee0851d1e0fea7041916c77efc09dc54e8dd4b7ba8f8d85ef43d4f12abde99886f4ebd5f021fc1b476cc23dc6a94fbbe77c954eee496fb6b4b5c534daa4e819143ce8de511a8bcb65759750c17edaca6fb31ac271c1ca3a27705f780ae86c67009e76fcba9067dde3556ff59c44111 Output = "0123456789ABCDEF" # Legacy OCTET STRING MDC-2 signature Verify = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = "0123456789ABCDEF" Output = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e Output = "0123456789ABCDEF" # Legacy OCTET STRING MDC-2 signature, digest mismatch Verify = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = "0000000000000000" Output = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e @@ -315,6 +345,7 @@ Result = VERIFY_ERROR # Legacy OCTET STRING MDC-2 signature, wrong input digest length Verify = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = "0123456789ABCDE" Output = 6cde46bbfc6a3b772c3d884640709be9f2fb70fcf199c14eaff7811369ea99733f984a9c48cd372578fa37cedeef24c93286d6d64f438df051e625ab2e125a7d9974a76240873e43efc3acbcbdccc2ee63769cdbf983b334ccb982273315c222b3bbdc3e928ac8a141a7412f1f794cfcabcc069a2ae4975d7bb68bea145d789634c9e0b02d324b5efd599c9bf2b1d32d077aba59aa0ad4a82cbbb90eaa9214e4f57104cf049c4139e2ddecf6edf219cd986f4d79cf25128c58667562c9d22be0291430d6cc7dad977d56e08315fcec133ea95d8db550f89735b4d5f233eaff0c86fce2b99f3f508e920f882c31f3e13f8775a3c8fa585c4f4c69eca89f648b7e @@ -322,18 +353,21 @@ Result = VERIFY_ERROR # Legacy OCTET STRING MDC-2 signature, wrong signature digest length Verify = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = "0123456789ABCDEF" Output = 08da512483ece70be57f28a75271612800ae30ffbadc62609bc88b80d497a1fc13c300fdfcab6dc80cf55373c10adcc249ae80479b87fa3e391a2cd4a74babd1c22a4976812d544dcd6729b161bbc48fd067cf635b05f9edaddaeb6f67f2117d6b54a23c5e6f08a246abfe0356a67d7f3929306515e6d9962f8ce205120ecdcd2d4e3783cd0b4a1f0196a1b13924d0d3649233312695c3c336ae04e0b1efddabcc878b57622db60f6f747a1124c38426dacf1425c92d304c2bb1052f987c1dd73e4cc4b20d23396d4f05f52f98cf5065c3fb7dc319425f1f6f1878b87f57afbd24fbff98909494581aadd04d80a639b85ce8684ea58409d8dbbbaacf256bb5c4 Result = VERIFY_ERROR VerifyRecover = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = 08da512483ece70be57f28a75271612800ae30ffbadc62609bc88b80d497a1fc13c300fdfcab6dc80cf55373c10adcc249ae80479b87fa3e391a2cd4a74babd1c22a4976812d544dcd6729b161bbc48fd067cf635b05f9edaddaeb6f67f2117d6b54a23c5e6f08a246abfe0356a67d7f3929306515e6d9962f8ce205120ecdcd2d4e3783cd0b4a1f0196a1b13924d0d3649233312695c3c336ae04e0b1efddabcc878b57622db60f6f747a1124c38426dacf1425c92d304c2bb1052f987c1dd73e4cc4b20d23396d4f05f52f98cf5065c3fb7dc319425f1f6f1878b87f57afbd24fbff98909494581aadd04d80a639b85ce8684ea58409d8dbbbaacf256bb5c4 Result = KEYOP_ERROR # Legacy OCTET STRING MDC-2 signature, wrong input and signature digest length Verify = RSA-2048 +Availablein = default Ctrl = digest:MDC2 Input = "0123456789ABCDE" Output = 08da512483ece70be57f28a75271612800ae30ffbadc62609bc88b80d497a1fc13c300fdfcab6dc80cf55373c10adcc249ae80479b87fa3e391a2cd4a74babd1c22a4976812d544dcd6729b161bbc48fd067cf635b05f9edaddaeb6f67f2117d6b54a23c5e6f08a246abfe0356a67d7f3929306515e6d9962f8ce205120ecdcd2d4e3783cd0b4a1f0196a1b13924d0d3649233312695c3c336ae04e0b1efddabcc878b57622db60f6f747a1124c38426dacf1425c92d304c2bb1052f987c1dd73e4cc4b20d23396d4f05f52f98cf5065c3fb7dc319425f1f6f1878b87f57afbd24fbff98909494581aadd04d80a639b85ce8684ea58409d8dbbbaacf256bb5c4 @@ -342,6 +376,7 @@ Result = VERIFY_ERROR # Verify using public key Verify = RSA-2048-PUBLIC +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad @@ -377,6 +412,7 @@ Result = KEYOP_INIT_ERROR Reason = operation not supported for this keytype Sign = RSA-2048 +Availablein = default Ctrl = rsa_mgf1_md:sha1 Result = PKEY_CTRL_INVALID Reason = invalid mgf1 md @@ -459,6 +495,7 @@ PrivPubKeyPair = RSA-PSS:RSA-PSS-BAD2 # Zero salt length makes output deterministic Sign = RSA-2048 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:0 Ctrl = digest:sha256 @@ -467,6 +504,7 @@ Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DD # Verify of above signature Verify = RSA-2048-PUBLIC +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:0 Ctrl = digest:sha256 @@ -475,6 +513,7 @@ Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DD # Verify using salt length auto detect Verify = RSA-2048-PUBLIC +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:auto Input="0123456789ABCDEF0123" @@ -482,6 +521,7 @@ Output = 6BF7EDC63A0BA184EEEC7F3020FEC8F5EBF38C2B76481881F48BCCE5796E7AB294548BA # Digest too short Verify = RSA-2048-PUBLIC +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:0 Ctrl = digest:sha256 @@ -491,6 +531,7 @@ Result = VERIFY_ERROR # Digest too long Verify = RSA-2048-PUBLIC +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:0 Ctrl = digest:sha256 @@ -500,6 +541,7 @@ Result = VERIFY_ERROR # Wrong salt length Verify = RSA-2048 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:2 Ctrl = digest:sha256 @@ -509,6 +551,7 @@ Result = VERIFY_ERROR # Wrong MGF1 digest Verify = RSA-2048 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:0 Ctrl = digest:sha256 @@ -520,11 +563,13 @@ Result = VERIFY_ERROR # Verify using default parameters Verify = RSA-PSS-DEFAULT +Availablein = default Input="0123456789ABCDEF0123" Output = 3EFE09D88509027D837BFA5F8471CF7B69E6DF395DD999BB9CA42021F15722D9AC76670507C6BCFB73F64FB2211B611B8F140E76EBDB064BD762FDBA89D019E304A0D6B274E1C2FE1DF50005598A0306AF805416094E2A5BA60BC72BDE38CE061E853ED40F14967A8B9CA4DC739B462F89558F12FDF2D8D19FBEF16AD66FE2DDDA8BEE983ECBD873064244849D8D94B5B33F45E076871A47ED653E73257A2BE2DB3C0878094B0D2B6B682C8007DFD989425FB39A1FEEC9EED5876414601A49176EC344F5E3EDEE81CA2DDD29B7364F4638112CB3A547E2BC170E28CB66BDABE863754BE8AD5BA230567B575266F4B6B4CF81F28310ABF05351CC9E2DB85D00BF # Verify using default parameters, explicitly setting parameters Verify = RSA-PSS-DEFAULT +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:20 Ctrl = digest:sha1 @@ -533,6 +578,7 @@ Output = 3EFE09D88509027D837BFA5F8471CF7B69E6DF395DD999BB9CA42021F15722D9AC76670 # Verify explicitly setting parameters "digest" salt length Verify = RSA-PSS-DEFAULT +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_pss_saltlen:digest Ctrl = digest:sha1 @@ -547,37 +593,44 @@ Output = 6BF7EDC63A0BA184EEEC7F3020FEC8F5EBF38C2B76481881F48BCCE5796E7AB294548BA # Verify using maximum salt length Verify = RSA-PSS-DEFAULT +Availablein = default Ctrl = rsa_pss_saltlen:max Input="0123456789ABCDEF0123" Output = 4470DCFE812DEE2E58E4301D4ED274AB348FE040B724B2CD1D8CD0914BFF375F0B86FCB32BFA8AEA9BD22BD7C4F1ADD4F3D215A5CFCC99055BAFECFC23800E9BECE19A08C66BEBC5802122D13A732E5958FC228DCC0B49B5B4B1154F032D8FA2F3564AA949C1310CC9266B0C47F86D449AC9D2E7678347E7266E2D7C888CCE1ADF44A109A293F8516AE2BD94CE220F26E137DB8E7A66BB9FCE052CDC1D0BE24D8CEBB20D10125F26B069F117044B9E1D16FDDAABCA5340AE1702F37D0E1C08A2E93801C0A41035C6C73DA02A0E32227EAFB0B85E79107B59650D0EE7DC32A6772CCCE90F06369B2880FE87ED76997BA61F5EA818091EE88F8B0D6F24D02A3FC6 # Attempt to change salt length below minimum Verify = RSA-PSS-DEFAULT +Availablein = default Ctrl = rsa_pss_saltlen:0 Result = PKEY_CTRL_ERROR # Attempt to change padding mode Verify = RSA-PSS-DEFAULT +Availablein = default Ctrl = rsa_padding_mode:pkcs1 Result = PKEY_CTRL_INVALID # Attempt to change digest Verify = RSA-PSS-DEFAULT +Availablein = default Ctrl = digest:sha256 Result = PKEY_CTRL_ERROR # Illegal decrypt Decrypt = RSA-PSS +Availablein = default Result = KEYOP_INIT_ERROR Reason = operation not supported for this keytype # Invalid key: rejected when we try to init Verify = RSA-PSS-BAD +Availablein = default Result = KEYOP_INIT_ERROR Reason = invalid salt length # Invalid key: rejected when we try to init Verify = RSA-PSS-BAD2 +Availablein = default Result = KEYOP_INIT_ERROR Reason = invalid salt length @@ -585,12 +638,14 @@ Reason = invalid salt length Title = EC tests Verify = P-256 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8 # Digest too long Verify = P-256 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF12345" Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8 @@ -598,6 +653,7 @@ Result = VERIFY_ERROR # Digest too short Verify = P-256 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF123" Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8 @@ -605,6 +661,7 @@ Result = VERIFY_ERROR # Digest invalid Verify = P-256 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1235" Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8 @@ -612,6 +669,7 @@ Result = VERIFY_ERROR # Invalid signature Verify = P-256 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec7 @@ -619,6 +677,7 @@ Result = VERIFY_ERROR # Garbage after signature Verify = P-256 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec800 @@ -626,21 +685,25 @@ Result = VERIFY_ERROR # BER signature Verify = P-256 +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = 3080022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec80000 Result = VERIFY_ERROR Verify = P-256-PUBLIC +Availablein = default Ctrl = digest:SHA1 Input = "0123456789ABCDEF1234" Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8 Derive=P-256 +Availablein = default PeerKey=P-256-Peer-PUBLIC SharedSecret=E3CC07DFBDDE76A1139811DB9FF5FAF9D17EF39944F1E77D1F6A208524BF7B1B Derive=P-256-Peer +Availablein = default PeerKey=P-256-PUBLIC SharedSecret=E3CC07DFBDDE76A1139811DB9FF5FAF9D17EF39944F1E77D1F6A208524BF7B1B @@ -738,28 +801,34 @@ PrivPubKeyPair = Bob-25519:Bob-25519-PUBLIC PrivPubKeyPair = Bob-25519-Raw:Bob-25519-PUBLIC-Raw Derive=Alice-25519 +Availablein = default PeerKey=Bob-25519-PUBLIC SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742 Derive=Bob-25519 +Availablein = default PeerKey=Alice-25519-PUBLIC SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742 Derive=Alice-25519-Raw +Availablein = default PeerKey=Bob-25519-PUBLIC-Raw SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742 Derive=Bob-25519-Raw +Availablein = default PeerKey=Alice-25519-PUBLIC-Raw SharedSecret=4A5D9D5BA4CE2DE1728E3BF480350F25E07E21C947D19E3376F09B3C1E161742 # Illegal sign/verify operations with X25519 key Sign=Alice-25519 +Availablein = default Result = KEYOP_INIT_ERROR Reason = operation not supported for this keytype Verify=Alice-25519 +Availablein = default Result = KEYOP_INIT_ERROR Reason = operation not supported for this keytype @@ -810,33 +879,40 @@ PrivPubKeyPair = Bob-448-Raw:Bob-448-PUBLIC-Raw PublicKeyRaw=Bob-448-PUBLIC-Raw-NonCanonical:X448:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff Derive=Alice-448 +Availablein = default PeerKey=Bob-448-PUBLIC SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d Derive=Bob-448 +Availablein = default PeerKey=Alice-448-PUBLIC SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d Derive=Alice-448-Raw +Availablein = default PeerKey=Bob-448-PUBLIC-Raw SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d Derive=Bob-448-Raw +Availablein = default PeerKey=Alice-448-PUBLIC-Raw SharedSecret=07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d # Self-generated non-canonical Derive=Alice-448-Raw +Availablein = default PeerKey=Bob-448-PUBLIC-Raw-NonCanonical SharedSecret=66e2e682b1f8e68c809f1bb3e406bd826921d9c1a5bfbfcbab7ae72feecee63660eabd54934f3382061d17607f581a90bdac917a064959fb # Illegal sign/verify operations with X448 key Sign=Alice-448 +Availablein = default Result = KEYOP_INIT_ERROR Reason = operation not supported for this keytype Verify=Alice-448 +Availablein = default Result = KEYOP_INIT_ERROR Reason = operation not supported for this keytype @@ -854,36 +930,42 @@ CAltWyuLbfXWce9jd8CSHLI8Jwpw4lmOb/idGfEFrMLT8Ms18pKA4Thrb2TE7yLh -----END PUBLIC KEY----- Verify=RSA-PSS-1 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=cd8b6538cb8e8de566b68bd067569dbf1ee2718e Output=9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c Verify=RSA-PSS-1 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=e35befc17a1d160b9ce35fbd8eb16e7ee491d3fd Output=3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843 Verify=RSA-PSS-1 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=0652ec67bcee30f9d2699122b91c19abdba89f91 Output=666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1 Verify=RSA-PSS-1 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=39c21c4cceda9c1adf839c744e1212a6437575ec Output=4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87 Verify=RSA-PSS-1 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=36dae913b77bd17cae6e7b09453d24544cebb33c Output=1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad Verify=RSA-PSS-1 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=45eef191f4f79c31fe5d2ede7e5098994e929d2d @@ -898,36 +980,42 @@ PRdqAX7cYf0ybEszyQIDAQAB -----END PUBLIC KEY----- Verify=RSA-PSS-2 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=5c81a3e2a658246628cd0ee8b00bb4c012bc9739 Output=014c5ba5338328ccc6e7a90bf1c0ab3fd606ff4796d3c12e4b639ed9136a5fec6c16d8884bdd99cfdc521456b0742b736868cf90de099adb8d5ffd1deff39ba4007ab746cefdb22d7df0e225f54627dc65466131721b90af445363a8358b9f607642f78fab0ab0f43b7168d64bae70d8827848d8ef1e421c5754ddf42c2589b5b3 Verify=RSA-PSS-2 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=27f71611446aa6eabf037f7dedeede3203244991 Output=010991656cca182b7f29d2dbc007e7ae0fec158eb6759cb9c45c5ff87c7635dd46d150882f4de1e9ae65e7f7d9018f6836954a47c0a81a8a6b6f83f2944d6081b1aa7c759b254b2c34b691da67cc0226e20b2f18b42212761dcd4b908a62b371b5918c5742af4b537e296917674fb914194761621cc19a41f6fb953fbcbb649dea Verify=RSA-PSS-2 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=03ecc2c33e93f05fc7224fcc0d461356cb897217 Output=007f0030018f53cdc71f23d03659fde54d4241f758a750b42f185f87578520c30742afd84359b6e6e8d3ed959dc6fe486bedc8e2cf001f63a7abe16256a1b84df0d249fc05d3194ce5f0912742dbbf80dd174f6c51f6bad7f16cf3364eba095a06267dc3793803ac7526aebe0a475d38b8c2247ab51c4898df7047dc6adf52c6c4 Verify=RSA-PSS-2 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=246c727b4b9494849dddb068d582e179ac20999c Output=009cd2f4edbe23e12346ae8c76dd9ad3230a62076141f16c152ba18513a48ef6f010e0e37fd3df10a1ec629a0cb5a3b5d2893007298c30936a95903b6ba85555d9ec3673a06108fd62a2fda56d1ce2e85c4db6b24a81ca3b496c36d4fd06eb7c9166d8e94877c42bea622b3bfe9251fdc21d8d5371badad78a488214796335b40b Verify=RSA-PSS-2 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=e8617ca3ea66ce6a58ede2d11af8c3ba8a6ba912 Output=00ec430824931ebd3baa43034dae98ba646b8c36013d1671c3cf1cf8260c374b19f8e1cc8d965012405e7e9bf7378612dfcc85fce12cda11f950bd0ba8876740436c1d2595a64a1b32efcfb74a21c873b3cc33aaf4e3dc3953de67f0674c0453b4fd9f604406d441b816098cb106fe3472bc251f815f59db2e4378a3addc181ecf Verify=RSA-PSS-2 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=7a6fdc1a4e434ecbc35d657ad49a2f4fafd43bc8 @@ -942,42 +1030,49 @@ nQ6tsIdYbKSJM9o8yVPZW9DtUN4Q3ctnNhB9bIMcf2Y+gzykwJfnAM4PuUX4j7hf -----END PUBLIC KEY----- Verify=RSA-PSS-3 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=3552be69dd74bdc56d2cf8c38ef7bafe269040fe Output=0088b135fb1794b6b96c4a3e678197f8cac52b64b2fe907d6f27de761124964a99a01a882740ecfaed6c01a47464bb05182313c01338a8cd097214cd68ca103bd57d3bc9e816213e61d784f182467abf8a01cf253e99a156eaa8e3e1f90e3c6e4e3aa2d83ed0345b89fafc9c26077c14b6ac51454fa26e446e3a2f153b2b16797f Verify=RSA-PSS-3 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=609143ff7240e55c062aba8b9e4426a781919bc9 Output=02a5f0a858a0864a4f65017a7d69454f3f973a2999839b7bbc48bf78641169179556f595fa41f6ff18e286c2783079bc0910ee9cc34f49ba681124f923dfa88f426141a368a5f5a930c628c2c3c200e18a7644721a0cbec6dd3f6279bde3e8f2be5e2d4ee56f97e7ceaf33054be7042bd91a63bb09f897bd41e81197dee99b11af Verify=RSA-PSS-3 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=0afd22f879a9cda7c584f4135f8f1c961db114c0 Output=0244bcd1c8c16955736c803be401272e18cb990811b14f72db964124d5fa760649cbb57afb8755dbb62bf51f466cf23a0a1607576e983d778fceffa92df7548aea8ea4ecad2c29dd9f95bc07fe91ecf8bee255bfe8762fd7690aa9bfa4fa0849ef728c2c42c4532364522df2ab7f9f8a03b63f7a499175828668f5ef5a29e3802c Verify=RSA-PSS-3 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=405dd56d395ef0f01b555c48f748cc32b210650b Output=0196f12a005b98129c8df13c4cb16f8aa887d3c40d96df3a88e7532ef39cd992f273abc370bc1be6f097cfebbf0118fd9ef4b927155f3df22b904d90702d1f7ba7a52bed8b8942f412cd7bd676c9d18e170391dcd345c06a730964b3f30bcce0bb20ba106f9ab0eeb39cf8a6607f75c0347f0af79f16afa081d2c92d1ee6f836b8 Verify=RSA-PSS-3 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=a2c313b0440c8a0c47233b87f0a160c61af3eae7 Output=021eca3ab4892264ec22411a752d92221076d4e01c0e6f0dde9afd26ba5acf6d739ef987545d16683e5674c9e70f1de649d7e61d48d0caeb4fb4d8b24fba84a6e3108fee7d0705973266ac524b4ad280f7ae17dc59d96d3351586b5a3bdb895d1e1f7820ac6135d8753480998382ba32b7349559608c38745290a85ef4e9f9bd83 Verify=RSA-PSS-3 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=f1bf6ca7b4bbdbb6bf20a4bf55728725d177154a Output=012fafec862f56e9e92f60ab0c77824f4299a0ca734ed26e0644d5d222c7f0bde03964f8e70a5cb65ed44e44d56ae0edf1ff86ca032cc5dd4404dbb76ab854586c44eed8336d08d457ce6c03693b45c0f1efef93624b95b8ec169c616d20e5538ebc0b6737a6f82b4bc0570924fc6b35759a3348426279f8b3d7744e2d222426ce PublicKey=RSA-PSS-4 +Availablein = default -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQVK23iGRH7+b1fgNo8Gz1KwozcH YNFhzvEmuRvn+JxCG2Km7B2jwxHXXtUOCrX/8/0zisw6qKTnfuJjaay4G6kA+oP1 @@ -986,36 +1081,42 @@ iEjIuVlAdAvnv3w3BQIDAQAB -----END PUBLIC KEY----- Verify=RSA-PSS-4 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=f8b0abf70fec0bca74f0accbc24f75e6e90d3bfd Output=0323d5b7bf20ba4539289ae452ae4297080feff4518423ff4811a817837e7d82f1836cdfab54514ff0887bddeebf40bf99b047abc3ecfa6a37a3ef00f4a0c4a88aae0904b745c846c4107e8797723e8ac810d9e3d95dfa30ff4966f4d75d13768d20857f2b1406f264cfe75e27d7652f4b5ed3575f28a702f8c4ed9cf9b2d44948 Verify=RSA-PSS-4 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=04a10944bfe11ab801e77889f3fd3d7f4ff0b629 Output=049d0185845a264d28feb1e69edaec090609e8e46d93abb38371ce51f4aa65a599bdaaa81d24fba66a08a116cb644f3f1e653d95c89db8bbd5daac2709c8984000178410a7c6aa8667ddc38c741f710ec8665aa9052be929d4e3b16782c1662114c5414bb0353455c392fc28f3db59054b5f365c49e1d156f876ee10cb4fd70598 Verify=RSA-PSS-4 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=ba01243db223eb97fb86d746c3148adaaa0ca344 Output=03fbc410a2ced59500fb99f9e2af2781ada74e13145624602782e2994813eefca0519ecd253b855fb626a90d771eae028b0c47a199cbd9f8e3269734af4163599090713a3fa910fa0960652721432b971036a7181a2bc0cab43b0b598bc6217461d7db305ff7e954c5b5bb231c39e791af6bcfa76b147b081321f72641482a2aad Verify=RSA-PSS-4 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=934bb0d38d6836daec9de82a9648d4593da67cd2 Output=0486644bc66bf75d28335a6179b10851f43f09bded9fac1af33252bb9953ba4298cd6466b27539a70adaa3f89b3db3c74ab635d122f4ee7ce557a61e59b82ffb786630e5f9db53c77d9a0c12fab5958d4c2ce7daa807cd89ba2cc7fcd02ff470ca67b229fcce814c852c73cc93bea35be68459ce478e9d4655d121c8472f371d4f Verify=RSA-PSS-4 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=ec35d81abd1cceac425a935758b683465c8bd879 Output=022a80045353904cb30cbb542d7d4990421a6eec16a8029a8422adfd22d6aff8c4cc0294af110a0c067ec86a7d364134459bb1ae8ff836d5a8a2579840996b320b19f13a13fad378d931a65625dae2739f0c53670b35d9d3cbac08e733e4ec2b83af4b9196d63e7c4ff1ddeae2a122791a125bfea8deb0de8ccf1f4ffaf6e6fb0a Verify=RSA-PSS-4 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=72ce251d17b04dd3970d6ff1fbe3624899e9e941 @@ -1030,36 +1131,42 @@ pLDMjaMl7YqmdrDQ9ibgp38HaSFwrKyAgvQvqn3HzRI+cw4xqHmFIEyry+ZnDUOi -----END PUBLIC KEY----- Verify=RSA-PSS-5 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=d98b7061943510bc3dd9162f7169aabdbdcd0222 Output=0ba373f76e0921b70a8fbfe622f0bf77b28a3db98e361051c3d7cb92ad0452915a4de9c01722f6823eeb6adf7e0ca8290f5de3e549890ac2a3c5950ab217ba58590894952de96f8df111b2575215da6c161590c745be612476ee578ed384ab33e3ece97481a252f5c79a98b5532ae00cdd62f2ecc0cd1baefe80d80b962193ec1d Verify=RSA-PSS-5 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=7ae8e699f754988f4fd645e463302e49a2552072 Output=08180de825e4b8b014a32da8ba761555921204f2f90d5f24b712908ff84f3e220ad17997c0dd6e706630ba3e84add4d5e7ab004e58074b549709565d43ad9e97b5a7a1a29e85b9f90f4aafcdf58321de8c5974ef9abf2d526f33c0f2f82e95d158ea6b81f1736db8d1af3d6ac6a83b32d18bae0ff1b2fe27de4c76ed8c7980a34e Verify=RSA-PSS-5 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=8d46c7c05534c1ba2cc7624500d48a4531604bff Output=05e0fdbdf6f756ef733185ccfa8ced2eb6d029d9d56e35561b5db8e70257ee6fd019d2f0bbf669fe9b9821e78df6d41e31608d58280f318ee34f559941c8df13287574bac000b7e58dc4f414ba49fb127f9d0f8936638c76e85356c994f79750f7fa3cf4fd482df75e3fb9978cd061f7abb17572e6e63e0bde12cbdcf18c68b979 Verify=RSA-PSS-5 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=ee3de96783fd0a157c8b20bf5566124124dcfe65 Output=0bc989853bc2ea86873271ce183a923ab65e8a53100e6df5d87a24c4194eb797813ee2a187c097dd872d591da60c568605dd7e742d5af4e33b11678ccb63903204a3d080b0902c89aba8868f009c0f1c0cb85810bbdd29121abb8471ff2d39e49fd92d56c655c8e037ad18fafbdc92c95863f7f61ea9efa28fea401369d19daea1 Verify=RSA-PSS-5 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=1204df0b03c2724e2709c23fc71789a21b00ae4c Output=0aefa943b698b9609edf898ad22744ac28dc239497cea369cbbd84f65c95c0ad776b594740164b59a739c6ff7c2f07c7c077a86d95238fe51e1fcf33574a4ae0684b42a3f6bf677d91820ca89874467b2c23add77969c80717430d0efc1d3695892ce855cb7f7011630f4df26def8ddf36fc23905f57fa6243a485c770d5681fcd Verify=RSA-PSS-5 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=29926bc3280c841f601acd0d6f17ea38023eddbc @@ -1074,36 +1181,42 @@ nJnpaUMfYcuMTcaY0QIDAQAB -----END PUBLIC KEY----- Verify=RSA-PSS-6 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=ab464e8cb65ae5fdea47a53fa84b234d6bfd52f6 Output=04c0cfacec04e5badbece159a5a1103f69b3f32ba593cb4cc4b1b7ab455916a96a27cd2678ea0f46ba37f7fc9c86325f29733b389f1d97f43e7201c0f348fc45fe42892335362eee018b5b161f2f9393031225c713012a576bc88e23052489868d9010cbf033ecc568e8bc152bdc59d560e41291915d28565208e22aeec9ef85d1 Verify=RSA-PSS-6 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=92d0bcae82b641f578f040f5151be8eda6d42299 Output=0a2314250cf52b6e4e908de5b35646bcaa24361da8160fb0f9257590ab3ace42b0dc3e77ad2db7c203a20bd952fbb56b1567046ecfaa933d7b1000c3de9ff05b7d989ba46fd43bc4c2d0a3986b7ffa13471d37eb5b47d64707bd290cfd6a9f393ad08ec1e3bd71bb5792615035cdaf2d8929aed3be098379377e777ce79aaa4773 Verify=RSA-PSS-6 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=3569bd8fd2e28f2443375efa94f186f6911ffc2b Output=086df6b500098c120f24ff8423f727d9c61a5c9007d3b6a31ce7cf8f3cbec1a26bb20e2bd4a046793299e03e37a21b40194fb045f90b18bf20a47992ccd799cf9c059c299c0526854954aade8a6ad9d97ec91a1145383f42468b231f4d72f23706d9853c3fa43ce8ace8bfe7484987a1ec6a16c8daf81f7c8bf42774707a9df456 Verify=RSA-PSS-6 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=7abbb7b42de335730a0b641f1e314b6950b84f98 Output=0b5b11ad549863ffa9c51a14a1106c2a72cc8b646e5c7262509786105a984776534ca9b54c1cc64bf2d5a44fd7e8a69db699d5ea52087a4748fd2abc1afed1e5d6f7c89025530bdaa2213d7e030fa55df6f34bcf1ce46d2edf4e3ae4f3b01891a068c9e3a44bbc43133edad6ecb9f35400c4252a5762d65744b99cb9f4c559329f Verify=RSA-PSS-6 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=55b7eb27be7a787a59eb7e5fac468db8917a7725 Output=02d71fa9b53e4654fefb7f08385cf6b0ae3a817942ebf66c35ac67f0b069952a3ce9c7e1f1b02e480a9500836de5d64cdb7ecde04542f7a79988787e24c2ba05f5fd482c023ed5c30e04839dc44bed2a3a3a4fee01113c891a47d32eb8025c28cb050b5cdb576c70fe76ef523405c08417faf350b037a43c379339fcb18d3a356b Verify=RSA-PSS-6 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=de2fa0367ef49083ff89b9905d3fd646fcc12c38 @@ -1118,36 +1231,42 @@ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgTfJ2kpmyMQIuNon0MnXn4zLHq/B -----END PUBLIC KEY----- Verify=RSA-PSS-7 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=8be4afbdd76bd8d142c5f4f46dba771ee5d6d29d Output=187f390723c8902591f0154bae6d4ecbffe067f0e8b795476ea4f4d51ccc810520bb3ca9bca7d0b1f2ea8a17d873fa27570acd642e3808561cb9e975ccfd80b23dc5771cdb3306a5f23159dacbd3aa2db93d46d766e09ed15d900ad897a8d274dc26b47e994a27e97e2268a766533ae4b5e42a2fcaf755c1c4794b294c60555823 Verify=RSA-PSS-7 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=402140dc605b2f5c5ec0d15bce9f9ba8857fe117 Output=10fd89768a60a67788abb5856a787c8561f3edcf9a83e898f7dc87ab8cce79429b43e56906941a886194f137e591fe7c339555361fbbe1f24feb2d4bcdb80601f3096bc9132deea60ae13082f44f9ad41cd628936a4d51176e42fc59cb76db815ce5ab4db99a104aafea68f5d330329ebf258d4ede16064bd1d00393d5e1570eb8 Verify=RSA-PSS-7 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=3e885205892ff2b6b37c2c4eb486c4bf2f9e7f20 Output=2b31fde99859b977aa09586d8e274662b25a2a640640b457f594051cb1e7f7a911865455242926cf88fe80dfa3a75ba9689844a11e634a82b075afbd69c12a0df9d25f84ad4945df3dc8fe90c3cefdf26e95f0534304b5bdba20d3e5640a2ebfb898aac35ae40f26fce5563c2f9f24f3042af76f3c7072d687bbfb959a88460af1 Verify=RSA-PSS-7 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=1fc2201d0c442a4736cd8b2cd00c959c47a3bf42 Output=32c7ca38ff26949a15000c4ba04b2b13b35a3810e568184d7ecabaa166b7ffabddf2b6cf4ba07124923790f2e5b1a5be040aea36fe132ec130e1f10567982d17ac3e89b8d26c3094034e762d2e031264f01170beecb3d1439e05846f25458367a7d9c02060444672671e64e877864559ca19b2074d588a281b5804d23772fbbe19 Verify=RSA-PSS-7 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=e4351b66819e5a31501f89acc7faf57030e9aac5 Output=07eb651d75f1b52bc263b2e198336e99fbebc4f332049a922a10815607ee2d989db3a4495b7dccd38f58a211fb7e193171a3d891132437ebca44f318b280509e52b5fa98fcce8205d9697c8ee4b7ff59d4c59c79038a1970bd2a0d451ecdc5ef11d9979c9d35f8c70a6163717607890d586a7c6dc01c79f86a8f28e85235f8c2f1 Verify=RSA-PSS-7 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=49f6cc58365e514e1a3f301f4de16f9fb5347ff2 @@ -1162,36 +1281,42 @@ R1PbPO4O4Gx9+uix1TtZUyGPnM7qaVsIZo7eqtztlGOx15DV6/J+kRW0bK1NmiuO -----END PUBLIC KEY----- Verify=RSA-PSS-8 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=a1dd230d8ead860199b6277c2ecfe3d95f6d9160 Output=0262ac254bfa77f3c1aca22c5179f8f040422b3c5bafd40a8f21cf0fa5a667ccd5993d42dbafb409c520e25fce2b1ee1e716577f1efa17f3da28052f40f0419b23106d7845aaf01125b698e7a4dfe92d3967bb00c4d0d35ba3552ab9a8b3eef07c7fecdbc5424ac4db1e20cb37d0b2744769940ea907e17fbbca673b20522380c5 Verify=RSA-PSS-8 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=f6e68e53c602c5c65fa67b5aa6d786e5524b12ab Output=2707b9ad5115c58c94e932e8ec0a280f56339e44a1b58d4ddcff2f312e5f34dcfe39e89c6a94dcee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6c86ee68396e8b3a14c9c8f34b178eb741f9d3f121109bf5c8172fada2e768f9ea1433032c004a8aa07eb990000a48dc94c8bac8aabe2b09b1aa46c0a2aa0e12f63fbba775ba7e Verify=RSA-PSS-8 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=d6f9fcd3ae27f32bb2c7c93536782eba52af1f76 Output=2ad20509d78cf26d1b6c406146086e4b0c91a91c2bd164c87b966b8faa42aa0ca446022323ba4b1a1b89706d7f4c3be57d7b69702d168ab5955ee290356b8c4a29ed467d547ec23cbadf286ccb5863c6679da467fc9324a151c7ec55aac6db4084f82726825cfe1aa421bc64049fb42f23148f9c25b2dc300437c38d428aa75f96 Verify=RSA-PSS-8 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=7ff2a53ce2e2d900d468e498f230a5f5dd0020de Output=1e24e6e58628e5175044a9eb6d837d48af1260b0520e87327de7897ee4d5b9f0df0be3e09ed4dea8c1454ff3423bb08e1793245a9df8bf6ab3968c8eddc3b5328571c77f091cc578576912dfebd164b9de5454fe0be1c1f6385b328360ce67ec7a05f6e30eb45c17c48ac70041d2cab67f0a2ae7aafdcc8d245ea3442a6300ccc7 Verify=RSA-PSS-8 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=4eb309f7022ba0b03bb78601b12931ec7c1be8d3 Output=33341ba3576a130a50e2a5cf8679224388d5693f5accc235ac95add68e5eb1eec31666d0ca7a1cda6f70a1aa762c05752a51950cdb8af3c5379f18cfe6b5bc55a4648226a15e912ef19ad77adeea911d67cfefd69ba43fa4119135ff642117ba985a7e0100325e9519f1ca6a9216bda055b5785015291125e90dcd07a2ca9673ee Verify=RSA-PSS-8 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=65033bc2f67d6aba7d526acb873b8d9241e5e4d9 @@ -1207,36 +1332,42 @@ swU7R97S7NSkyu/WFIM9yLtiLzF+0Ha4BX/o3j+ESArV6D5KYZBKTySPs5cCc1fh -----END PUBLIC KEY----- Verify=RSA-PSS-9 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=2715a49b8b0012cd7aee84c116446e6dfe3faec0 Output=586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e Verify=RSA-PSS-9 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=2dac956d53964748ac364d06595827c6b4f143cd Output=80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958 Verify=RSA-PSS-9 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=28d98c46cccafbd3bc04e72f967a54bd3ea12298 Output=484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca Verify=RSA-PSS-9 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=0866d2ff5a79f25ef668cd6f31b42dee421e4c0e Output=84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e Verify=RSA-PSS-9 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=6a5b4be4cd36cc97dfde9995efbf8f097a4a991a Output=82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c Verify=RSA-PSS-9 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=b9dfd1df76a461c51e6576c6c8ed0a923d1c50e7 @@ -1254,36 +1385,42 @@ BQIDAQAB -----END PUBLIC KEY----- Verify=RSA-PSS-10 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=9596bb630cf6a8d4ea4600422b9eba8b13675dd4 Output=82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666 Verify=RSA-PSS-10 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=b503319399277fd6c1c8f1033cbf04199ea21716 Output=14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3 Verify=RSA-PSS-10 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=50aaede8536b2c307208b275a67ae2df196c7628 Output=6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb Verify=RSA-PSS-10 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=aa0b72b8b371ddd10c8ae474425ccccf8842a294 Output=34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb Verify=RSA-PSS-10 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=fad3902c9750622a2bc672622c48270cc57d3ea8 Output=7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc Verify=RSA-PSS-10 +Availablein = default Ctrl = rsa_padding_mode:pss Ctrl = rsa_mgf1_md:sha1 Input=122196deb5d122bd8c6fc781ff6924d7c695aade @@ -1926,11 +2063,13 @@ PrivPubKeyPair = BOB_secp112r2:BOB_secp112r2_PUB # ECDH Alice with Bob peer Derive=ALICE_secp112r2 +Availablein = default PeerKey=BOB_secp112r2_PUB SharedSecret=6bed2c55e233e9214d5898c4c12a # ECDH Bob with Alice peer Derive=BOB_secp112r2 +Availablein = default PeerKey=ALICE_secp112r2_PUB SharedSecret=6bed2c55e233e9214d5898c4c12a @@ -1968,11 +2107,13 @@ PrivPubKeyPair = BOB_secp128r1:BOB_secp128r1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp128r1 +Availablein = default PeerKey=BOB_secp128r1_PUB SharedSecret=91ded46ac404afdbd708fdcc1cac6842 # ECDH Bob with Alice peer Derive=BOB_secp128r1 +Availablein = default PeerKey=ALICE_secp128r1_PUB SharedSecret=91ded46ac404afdbd708fdcc1cac6842 @@ -2010,11 +2151,13 @@ PrivPubKeyPair = BOB_secp128r2:BOB_secp128r2_PUB # ECDH Alice with Bob peer Derive=ALICE_secp128r2 +Availablein = default PeerKey=BOB_secp128r2_PUB SharedSecret=dc32faa978008a694672076b756a1e4b # ECDH Bob with Alice peer Derive=BOB_secp128r2 +Availablein = default PeerKey=ALICE_secp128r2_PUB SharedSecret=dc32faa978008a694672076b756a1e4b @@ -2054,11 +2197,13 @@ PrivPubKeyPair = BOB_secp160k1:BOB_secp160k1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp160k1 +Availablein = default PeerKey=BOB_secp160k1_PUB SharedSecret=5457d367346cc3e82031784f95ebcd856de0c735 # ECDH Bob with Alice peer Derive=BOB_secp160k1 +Availablein = default PeerKey=ALICE_secp160k1_PUB SharedSecret=5457d367346cc3e82031784f95ebcd856de0c735 @@ -2098,11 +2243,13 @@ PrivPubKeyPair = BOB_secp160r1:BOB_secp160r1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp160r1 +Availablein = default PeerKey=BOB_secp160r1_PUB SharedSecret=87856536b6a295ea94d3e483d69c6212d5c7afcf # ECDH Bob with Alice peer Derive=BOB_secp160r1 +Availablein = default PeerKey=ALICE_secp160r1_PUB SharedSecret=87856536b6a295ea94d3e483d69c6212d5c7afcf @@ -2142,11 +2289,13 @@ PrivPubKeyPair = BOB_secp160r2:BOB_secp160r2_PUB # ECDH Alice with Bob peer Derive=ALICE_secp160r2 +Availablein = default PeerKey=BOB_secp160r2_PUB SharedSecret=5481e282c47cbd37c84873847c4fc2f31fc15a1a # ECDH Bob with Alice peer Derive=BOB_secp160r2 +Availablein = default PeerKey=ALICE_secp160r2_PUB SharedSecret=5481e282c47cbd37c84873847c4fc2f31fc15a1a @@ -2186,11 +2335,13 @@ PrivPubKeyPair = BOB_secp192k1:BOB_secp192k1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp192k1 +Availablein = default PeerKey=BOB_secp192k1_PUB SharedSecret=6a4daca0412284172e8fcaafa0d9df76257d899752bf0f23 # ECDH Bob with Alice peer Derive=BOB_secp192k1 +Availablein = default PeerKey=ALICE_secp192k1_PUB SharedSecret=6a4daca0412284172e8fcaafa0d9df76257d899752bf0f23 @@ -2230,11 +2381,13 @@ PrivPubKeyPair = BOB_secp224k1:BOB_secp224k1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp224k1 +Availablein = default PeerKey=BOB_secp224k1_PUB SharedSecret=80b65e65fe29c779213dd31189d371ff57b0b2bf08c6458ed142399a # ECDH Bob with Alice peer Derive=BOB_secp224k1 +Availablein = default PeerKey=ALICE_secp224k1_PUB SharedSecret=80b65e65fe29c779213dd31189d371ff57b0b2bf08c6458ed142399a @@ -2274,11 +2427,13 @@ PrivPubKeyPair = BOB_secp224r1:BOB_secp224r1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp224r1 +Availablein = default PeerKey=BOB_secp224r1_PUB SharedSecret=34ea06d16d82f0d1725de47f3639ac0c23db7d7ed68f01488539a2a5 # ECDH Bob with Alice peer Derive=BOB_secp224r1 +Availablein = default PeerKey=ALICE_secp224r1_PUB SharedSecret=34ea06d16d82f0d1725de47f3639ac0c23db7d7ed68f01488539a2a5 @@ -2318,11 +2473,13 @@ PrivPubKeyPair = BOB_secp256k1:BOB_secp256k1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp256k1 +Availablein = default PeerKey=BOB_secp256k1_PUB SharedSecret=af43b52790082fd87afb1d14b883c12d12bb9e554080d1f8e527920676e31f3e # ECDH Bob with Alice peer Derive=BOB_secp256k1 +Availablein = default PeerKey=ALICE_secp256k1_PUB SharedSecret=af43b52790082fd87afb1d14b883c12d12bb9e554080d1f8e527920676e31f3e @@ -2366,11 +2523,13 @@ PrivPubKeyPair = BOB_secp384r1:BOB_secp384r1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp384r1 +Availablein = default PeerKey=BOB_secp384r1_PUB SharedSecret=2006ed49acbb991b8fbf8a15c3f263542496eaefe1e2952591b72fb929463eac7a403a5419cebbfb73734918eaed59fd # ECDH Bob with Alice peer Derive=BOB_secp384r1 +Availablein = default PeerKey=ALICE_secp384r1_PUB SharedSecret=2006ed49acbb991b8fbf8a15c3f263542496eaefe1e2952591b72fb929463eac7a403a5419cebbfb73734918eaed59fd @@ -2420,11 +2579,13 @@ PrivPubKeyPair = BOB_secp521r1:BOB_secp521r1_PUB # ECDH Alice with Bob peer Derive=ALICE_secp521r1 +Availablein = default PeerKey=BOB_secp521r1_PUB SharedSecret=018c8f33e544a0fa8854dcd96bdba75b7687d1c42b2ff1bf0a06d49c424fee96d8a7f3af3119dcbfabc1c147477c50f7c72971956f9bb17ddec6d02b2187f06cf4be # ECDH Bob with Alice peer Derive=BOB_secp521r1 +Availablein = default PeerKey=ALICE_secp521r1_PUB SharedSecret=018c8f33e544a0fa8854dcd96bdba75b7687d1c42b2ff1bf0a06d49c424fee96d8a7f3af3119dcbfabc1c147477c50f7c72971956f9bb17ddec6d02b2187f06cf4be @@ -2464,11 +2625,13 @@ PrivPubKeyPair = BOB_prime192v1:BOB_prime192v1_PUB # ECDH Alice with Bob peer Derive=ALICE_prime192v1 +Availablein = default PeerKey=BOB_prime192v1_PUB SharedSecret=be2a779b587f8f5d7c9d8f006e0a6d0e996c9c63c255f861 # ECDH Bob with Alice peer Derive=BOB_prime192v1 +Availablein = default PeerKey=ALICE_prime192v1_PUB SharedSecret=be2a779b587f8f5d7c9d8f006e0a6d0e996c9c63c255f861 @@ -2508,11 +2671,13 @@ PrivPubKeyPair = BOB_prime192v2:BOB_prime192v2_PUB # ECDH Alice with Bob peer Derive=ALICE_prime192v2 +Availablein = default PeerKey=BOB_prime192v2_PUB SharedSecret=9b37033a48af7fe1825c062625f8b57d4b3ac48c12bec69c # ECDH Bob with Alice peer Derive=BOB_prime192v2 +Availablein = default PeerKey=ALICE_prime192v2_PUB SharedSecret=9b37033a48af7fe1825c062625f8b57d4b3ac48c12bec69c @@ -2552,11 +2717,13 @@ PrivPubKeyPair = BOB_prime192v3:BOB_prime192v3_PUB # ECDH Alice with Bob peer Derive=ALICE_prime192v3 +Availablein = default PeerKey=BOB_prime192v3_PUB SharedSecret=7133f1d99b0e03ed9c4d78d3be40598cf419cd588283ac29 # ECDH Bob with Alice peer Derive=BOB_prime192v3 +Availablein = default PeerKey=ALICE_prime192v3_PUB SharedSecret=7133f1d99b0e03ed9c4d78d3be40598cf419cd588283ac29 @@ -2596,11 +2763,13 @@ PrivPubKeyPair = BOB_prime239v1:BOB_prime239v1_PUB # ECDH Alice with Bob peer Derive=ALICE_prime239v1 +Availablein = default PeerKey=BOB_prime239v1_PUB SharedSecret=2ef92070f7a5fa14c8a67a8aa3080b4c4a597eafaa81d3f698599ac0be1e # ECDH Bob with Alice peer Derive=BOB_prime239v1 +Availablein = default PeerKey=ALICE_prime239v1_PUB SharedSecret=2ef92070f7a5fa14c8a67a8aa3080b4c4a597eafaa81d3f698599ac0be1e @@ -2640,11 +2809,13 @@ PrivPubKeyPair = BOB_prime239v2:BOB_prime239v2_PUB # ECDH Alice with Bob peer Derive=ALICE_prime239v2 +Availablein = default PeerKey=BOB_prime239v2_PUB SharedSecret=5bdab282dc371ee88ade318a6aad2b329ec3ea957e0df18b7a691c1bf703 # ECDH Bob with Alice peer Derive=BOB_prime239v2 +Availablein = default PeerKey=ALICE_prime239v2_PUB SharedSecret=5bdab282dc371ee88ade318a6aad2b329ec3ea957e0df18b7a691c1bf703 @@ -2684,11 +2855,13 @@ PrivPubKeyPair = BOB_prime239v3:BOB_prime239v3_PUB # ECDH Alice with Bob peer Derive=ALICE_prime239v3 +Availablein = default PeerKey=BOB_prime239v3_PUB SharedSecret=78e80ae760061178bd005e9e3634333971468bc6d3f82baee238c5ed32f9 # ECDH Bob with Alice peer Derive=BOB_prime239v3 +Availablein = default PeerKey=ALICE_prime239v3_PUB SharedSecret=78e80ae760061178bd005e9e3634333971468bc6d3f82baee238c5ed32f9 @@ -2728,11 +2901,13 @@ PrivPubKeyPair = BOB_prime256v1:BOB_prime256v1_PUB # ECDH Alice with Bob peer Derive=ALICE_prime256v1 +Availablein = default PeerKey=BOB_prime256v1_PUB SharedSecret=390021fbca00d959c1adaf7e9cedef0e65a582489eab9adbe739ef66bf82adb4 # ECDH Bob with Alice peer Derive=BOB_prime256v1 +Availablein = default PeerKey=ALICE_prime256v1_PUB SharedSecret=390021fbca00d959c1adaf7e9cedef0e65a582489eab9adbe739ef66bf82adb4 @@ -2770,11 +2945,13 @@ PrivPubKeyPair = BOB_sect113r1:BOB_sect113r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect113r1 +Availablein = default PeerKey=BOB_sect113r1_PUB SharedSecret=015405437add26b8841c62a9016c85 # ECDH Bob with Alice peer Derive=BOB_sect113r1 +Availablein = default PeerKey=ALICE_sect113r1_PUB SharedSecret=015405437add26b8841c62a9016c85 @@ -2812,11 +2989,13 @@ PrivPubKeyPair = BOB_sect113r2:BOB_sect113r2_PUB # ECDH Alice with Bob peer Derive=ALICE_sect113r2 +Availablein = default PeerKey=BOB_sect113r2_PUB SharedSecret=014231c5e9e28d451aa44a755407e1 # ECDH Bob with Alice peer Derive=BOB_sect113r2 +Availablein = default PeerKey=ALICE_sect113r2_PUB SharedSecret=014231c5e9e28d451aa44a755407e1 @@ -2854,11 +3033,13 @@ PrivPubKeyPair = BOB_sect131r1:BOB_sect131r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect131r1 +Availablein = default PeerKey=BOB_sect131r1_PUB SharedSecret=009e4acc8c1ba3a129a9ad83a733d7d702 # ECDH Bob with Alice peer Derive=BOB_sect131r1 +Availablein = default PeerKey=ALICE_sect131r1_PUB SharedSecret=009e4acc8c1ba3a129a9ad83a733d7d702 @@ -2896,11 +3077,13 @@ PrivPubKeyPair = BOB_sect131r2:BOB_sect131r2_PUB # ECDH Alice with Bob peer Derive=ALICE_sect131r2 +Availablein = default PeerKey=BOB_sect131r2_PUB SharedSecret=03cbec3a3050c7f13d4801ad692d61c417 # ECDH Bob with Alice peer Derive=BOB_sect131r2 +Availablein = default PeerKey=ALICE_sect131r2_PUB SharedSecret=03cbec3a3050c7f13d4801ad692d61c417 @@ -2940,11 +3123,13 @@ PrivPubKeyPair = BOB_sect163k1:BOB_sect163k1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect163k1 +Availablein = default PeerKey=BOB_sect163k1_PUB SharedSecret=07bfdf00759b383aa7741ae4634400f8ddf2047092 # ECDH Bob with Alice peer Derive=BOB_sect163k1 +Availablein = default PeerKey=ALICE_sect163k1_PUB SharedSecret=07bfdf00759b383aa7741ae4634400f8ddf2047092 @@ -2984,11 +3169,13 @@ PrivPubKeyPair = BOB_sect163r1:BOB_sect163r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect163r1 +Availablein = default PeerKey=BOB_sect163r1_PUB SharedSecret=02355c765bbc07fcc44bb1496e490912f6df56e6d4 # ECDH Bob with Alice peer Derive=BOB_sect163r1 +Availablein = default PeerKey=ALICE_sect163r1_PUB SharedSecret=02355c765bbc07fcc44bb1496e490912f6df56e6d4 @@ -3028,11 +3215,13 @@ PrivPubKeyPair = BOB_sect163r2:BOB_sect163r2_PUB # ECDH Alice with Bob peer Derive=ALICE_sect163r2 +Availablein = default PeerKey=BOB_sect163r2_PUB SharedSecret=040df54e6df412790ef5c0fafbbfcba5136b872951 # ECDH Bob with Alice peer Derive=BOB_sect163r2 +Availablein = default PeerKey=ALICE_sect163r2_PUB SharedSecret=040df54e6df412790ef5c0fafbbfcba5136b872951 @@ -3072,11 +3261,13 @@ PrivPubKeyPair = BOB_sect193r1:BOB_sect193r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect193r1 +Availablein = default PeerKey=BOB_sect193r1_PUB SharedSecret=00458b4c5ad122de5a377bea0adf1ab87bcb961b24ed764f47 # ECDH Bob with Alice peer Derive=BOB_sect193r1 +Availablein = default PeerKey=ALICE_sect193r1_PUB SharedSecret=00458b4c5ad122de5a377bea0adf1ab87bcb961b24ed764f47 @@ -3116,11 +3307,13 @@ PrivPubKeyPair = BOB_sect193r2:BOB_sect193r2_PUB # ECDH Alice with Bob peer Derive=ALICE_sect193r2 +Availablein = default PeerKey=BOB_sect193r2_PUB SharedSecret=019d1f316d204a9cd1b9632cebb4accddb204158be3e435891 # ECDH Bob with Alice peer Derive=BOB_sect193r2 +Availablein = default PeerKey=ALICE_sect193r2_PUB SharedSecret=019d1f316d204a9cd1b9632cebb4accddb204158be3e435891 @@ -3160,11 +3353,13 @@ PrivPubKeyPair = BOB_sect233k1:BOB_sect233k1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect233k1 +Availablein = default PeerKey=BOB_sect233k1_PUB SharedSecret=00a5e5f2e992f4360d530dd365d14f5c6013212e14f4ea258c91c71f1512 # ECDH Bob with Alice peer Derive=BOB_sect233k1 +Availablein = default PeerKey=ALICE_sect233k1_PUB SharedSecret=00a5e5f2e992f4360d530dd365d14f5c6013212e14f4ea258c91c71f1512 @@ -3204,11 +3399,13 @@ PrivPubKeyPair = BOB_sect233r1:BOB_sect233r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect233r1 +Availablein = default PeerKey=BOB_sect233r1_PUB SharedSecret=01625f3fcd367ee7cd74c67cca02dccfce6c3b19ef07e358ed943d17a8e2 # ECDH Bob with Alice peer Derive=BOB_sect233r1 +Availablein = default PeerKey=ALICE_sect233r1_PUB SharedSecret=01625f3fcd367ee7cd74c67cca02dccfce6c3b19ef07e358ed943d17a8e2 @@ -3248,11 +3445,13 @@ PrivPubKeyPair = BOB_sect239k1:BOB_sect239k1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect239k1 +Availablein = default PeerKey=BOB_sect239k1_PUB SharedSecret=4d1c9a8ae73f754d0a593d6e426114f4f67d7c8082ccc4e04a72b0d2aff8 # ECDH Bob with Alice peer Derive=BOB_sect239k1 +Availablein = default PeerKey=ALICE_sect239k1_PUB SharedSecret=4d1c9a8ae73f754d0a593d6e426114f4f67d7c8082ccc4e04a72b0d2aff8 @@ -3294,11 +3493,13 @@ PrivPubKeyPair = BOB_sect283k1:BOB_sect283k1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect283k1 +Availablein = default PeerKey=BOB_sect283k1_PUB SharedSecret=02f2e682c2f60d7261624f3661a5e85fca920443b72aa4dd5a540082e65e552302d8f825 # ECDH Bob with Alice peer Derive=BOB_sect283k1 +Availablein = default PeerKey=ALICE_sect283k1_PUB SharedSecret=02f2e682c2f60d7261624f3661a5e85fca920443b72aa4dd5a540082e65e552302d8f825 @@ -3340,11 +3541,13 @@ PrivPubKeyPair = BOB_sect283r1:BOB_sect283r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect283r1 +Availablein = default PeerKey=BOB_sect283r1_PUB SharedSecret=05778bc1afcf38d7dddb2150cacbfe4d38dc588968fd8b2e859c28ae2629d3435f89f6cc # ECDH Bob with Alice peer Derive=BOB_sect283r1 +Availablein = default PeerKey=ALICE_sect283r1_PUB SharedSecret=05778bc1afcf38d7dddb2150cacbfe4d38dc588968fd8b2e859c28ae2629d3435f89f6cc @@ -3390,11 +3593,13 @@ PrivPubKeyPair = BOB_sect409k1:BOB_sect409k1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect409k1 +Availablein = default PeerKey=BOB_sect409k1_PUB SharedSecret=01523ec40ad40226a57281a4c423801ae9495dcf736eddd667023b1390977d018ce79313fb99c503f39cbee80f5c1968f3bd02e0 # ECDH Bob with Alice peer Derive=BOB_sect409k1 +Availablein = default PeerKey=ALICE_sect409k1_PUB SharedSecret=01523ec40ad40226a57281a4c423801ae9495dcf736eddd667023b1390977d018ce79313fb99c503f39cbee80f5c1968f3bd02e0 @@ -3440,11 +3645,13 @@ PrivPubKeyPair = BOB_sect409r1:BOB_sect409r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect409r1 +Availablein = default PeerKey=BOB_sect409r1_PUB SharedSecret=019dc849870dc6f79978aca8e1fc6aa6836c8fcb25bbfe3d5ab41ea53eae2c7329952280efb30f9097a31a774191e476dbd842d5 # ECDH Bob with Alice peer Derive=BOB_sect409r1 +Availablein = default PeerKey=ALICE_sect409r1_PUB SharedSecret=019dc849870dc6f79978aca8e1fc6aa6836c8fcb25bbfe3d5ab41ea53eae2c7329952280efb30f9097a31a774191e476dbd842d5 @@ -3494,11 +3701,13 @@ PrivPubKeyPair = BOB_sect571k1:BOB_sect571k1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect571k1 +Availablein = default PeerKey=BOB_sect571k1_PUB SharedSecret=05a423515fcc91b3171c83edd5c4085ff729a8ff0a3fa1578ebf769523ded0f5c1e387cf63109f2fbd95e117345b788b4577fdc6b6e727230bfc73eae0d4e851cb6f6e616eddb13e # ECDH Bob with Alice peer Derive=BOB_sect571k1 +Availablein = default PeerKey=ALICE_sect571k1_PUB SharedSecret=05a423515fcc91b3171c83edd5c4085ff729a8ff0a3fa1578ebf769523ded0f5c1e387cf63109f2fbd95e117345b788b4577fdc6b6e727230bfc73eae0d4e851cb6f6e616eddb13e @@ -3548,11 +3757,13 @@ PrivPubKeyPair = BOB_sect571r1:BOB_sect571r1_PUB # ECDH Alice with Bob peer Derive=ALICE_sect571r1 +Availablein = default PeerKey=BOB_sect571r1_PUB SharedSecret=004b397e564055e2c7d87648183c948655ccb0ebb20bd441f9b11635cf461cb5815ff060eab33091b9f7aed67bec8ba1bb7b22437ece3c92c7cf76124408fb951595dfb4a512b2ae # ECDH Bob with Alice peer Derive=BOB_sect571r1 +Availablein = default PeerKey=ALICE_sect571r1_PUB SharedSecret=004b397e564055e2c7d87648183c948655ccb0ebb20bd441f9b11635cf461cb5815ff060eab33091b9f7aed67bec8ba1bb7b22437ece3c92c7cf76124408fb951595dfb4a512b2ae @@ -3592,11 +3803,13 @@ PrivPubKeyPair = BOB_c2pnb163v1:BOB_c2pnb163v1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb163v1 +Availablein = default PeerKey=BOB_c2pnb163v1_PUB SharedSecret=05939a47cb503656e684f433001e45776c7620e13b # ECDH Bob with Alice peer Derive=BOB_c2pnb163v1 +Availablein = default PeerKey=ALICE_c2pnb163v1_PUB SharedSecret=05939a47cb503656e684f433001e45776c7620e13b @@ -3636,11 +3849,13 @@ PrivPubKeyPair = BOB_c2pnb163v2:BOB_c2pnb163v2_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb163v2 +Availablein = default PeerKey=BOB_c2pnb163v2_PUB SharedSecret=0779fb5f6ac7892f2f342b785d71244e0b03ca562d # ECDH Bob with Alice peer Derive=BOB_c2pnb163v2 +Availablein = default PeerKey=ALICE_c2pnb163v2_PUB SharedSecret=0779fb5f6ac7892f2f342b785d71244e0b03ca562d @@ -3680,11 +3895,13 @@ PrivPubKeyPair = BOB_c2pnb163v3:BOB_c2pnb163v3_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb163v3 +Availablein = default PeerKey=BOB_c2pnb163v3_PUB SharedSecret=02bf68863a8798e72cdc9cd3b9ce731f12654bfa81 # ECDH Bob with Alice peer Derive=BOB_c2pnb163v3 +Availablein = default PeerKey=ALICE_c2pnb163v3_PUB SharedSecret=02bf68863a8798e72cdc9cd3b9ce731f12654bfa81 @@ -3724,11 +3941,13 @@ PrivPubKeyPair = BOB_c2pnb176v1:BOB_c2pnb176v1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb176v1 +Availablein = default PeerKey=BOB_c2pnb176v1_PUB SharedSecret=b204734417542df762e09013d6ba958940837a2aa25a # ECDH Bob with Alice peer Derive=BOB_c2pnb176v1 +Availablein = default PeerKey=ALICE_c2pnb176v1_PUB SharedSecret=b204734417542df762e09013d6ba958940837a2aa25a @@ -3768,11 +3987,13 @@ PrivPubKeyPair = BOB_c2tnb191v1:BOB_c2tnb191v1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb191v1 +Availablein = default PeerKey=BOB_c2tnb191v1_PUB SharedSecret=7a30d30acd3b067f38bb3be9e8cdef739483df26455e36e1 # ECDH Bob with Alice peer Derive=BOB_c2tnb191v1 +Availablein = default PeerKey=ALICE_c2tnb191v1_PUB SharedSecret=7a30d30acd3b067f38bb3be9e8cdef739483df26455e36e1 @@ -3812,11 +4033,13 @@ PrivPubKeyPair = BOB_c2tnb191v2:BOB_c2tnb191v2_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb191v2 +Availablein = default PeerKey=BOB_c2tnb191v2_PUB SharedSecret=5ec2b6ccd193620dbad302c4ad8f8909a40698bf454d7534 # ECDH Bob with Alice peer Derive=BOB_c2tnb191v2 +Availablein = default PeerKey=ALICE_c2tnb191v2_PUB SharedSecret=5ec2b6ccd193620dbad302c4ad8f8909a40698bf454d7534 @@ -3856,11 +4079,13 @@ PrivPubKeyPair = BOB_c2tnb191v3:BOB_c2tnb191v3_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb191v3 +Availablein = default PeerKey=BOB_c2tnb191v3_PUB SharedSecret=39093dc8a2e6724a6206ed41bb99490d527d80c902c41891 # ECDH Bob with Alice peer Derive=BOB_c2tnb191v3 +Availablein = default PeerKey=ALICE_c2tnb191v3_PUB SharedSecret=39093dc8a2e6724a6206ed41bb99490d527d80c902c41891 @@ -3900,11 +4125,13 @@ PrivPubKeyPair = BOB_c2pnb208w1:BOB_c2pnb208w1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb208w1 +Availablein = default PeerKey=BOB_c2pnb208w1_PUB SharedSecret=59bf3c91bd168d4d4d900d9ce155933045e0fd16dcf0511bb5af # ECDH Bob with Alice peer Derive=BOB_c2pnb208w1 +Availablein = default PeerKey=ALICE_c2pnb208w1_PUB SharedSecret=59bf3c91bd168d4d4d900d9ce155933045e0fd16dcf0511bb5af @@ -3944,11 +4171,13 @@ PrivPubKeyPair = BOB_c2tnb239v1:BOB_c2tnb239v1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb239v1 +Availablein = default PeerKey=BOB_c2tnb239v1_PUB SharedSecret=78c42256900725df9a47bb042cef7dad9f639b32e3010738a144e7472d1a # ECDH Bob with Alice peer Derive=BOB_c2tnb239v1 +Availablein = default PeerKey=ALICE_c2tnb239v1_PUB SharedSecret=78c42256900725df9a47bb042cef7dad9f639b32e3010738a144e7472d1a @@ -3988,11 +4217,13 @@ PrivPubKeyPair = BOB_c2tnb239v2:BOB_c2tnb239v2_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb239v2 +Availablein = default PeerKey=BOB_c2tnb239v2_PUB SharedSecret=4ba2ecfa8ec7a375594d1673886cccf96d7763c55611b3c9008a35160192 # ECDH Bob with Alice peer Derive=BOB_c2tnb239v2 +Availablein = default PeerKey=ALICE_c2tnb239v2_PUB SharedSecret=4ba2ecfa8ec7a375594d1673886cccf96d7763c55611b3c9008a35160192 @@ -4032,11 +4263,13 @@ PrivPubKeyPair = BOB_c2tnb239v3:BOB_c2tnb239v3_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb239v3 +Availablein = default PeerKey=BOB_c2tnb239v3_PUB SharedSecret=47ad60e5480375fccd9246c93ab04da8e5da83e1dbf5f177f10a47cb54a0 # ECDH Bob with Alice peer Derive=BOB_c2tnb239v3 +Availablein = default PeerKey=ALICE_c2tnb239v3_PUB SharedSecret=47ad60e5480375fccd9246c93ab04da8e5da83e1dbf5f177f10a47cb54a0 @@ -4076,11 +4309,13 @@ PrivPubKeyPair = BOB_c2pnb272w1:BOB_c2pnb272w1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb272w1 +Availablein = default PeerKey=BOB_c2pnb272w1_PUB SharedSecret=3ae063b2bed6ba8aa28ff35e9bd2673f22ee8087860c86b89429a5b52538216632a3 # ECDH Bob with Alice peer Derive=BOB_c2pnb272w1 +Availablein = default PeerKey=ALICE_c2pnb272w1_PUB SharedSecret=3ae063b2bed6ba8aa28ff35e9bd2673f22ee8087860c86b89429a5b52538216632a3 @@ -4124,11 +4359,13 @@ PrivPubKeyPair = BOB_c2pnb304w1:BOB_c2pnb304w1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb304w1 +Availablein = default PeerKey=BOB_c2pnb304w1_PUB SharedSecret=6df88b20de9f095c7632234291ea4658a9265cd2293424e11ed56705b09a069f09dc4e055eb7 # ECDH Bob with Alice peer Derive=BOB_c2pnb304w1 +Availablein = default PeerKey=ALICE_c2pnb304w1_PUB SharedSecret=6df88b20de9f095c7632234291ea4658a9265cd2293424e11ed56705b09a069f09dc4e055eb7 @@ -4172,11 +4409,13 @@ PrivPubKeyPair = BOB_c2tnb359v1:BOB_c2tnb359v1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb359v1 +Availablein = default PeerKey=BOB_c2tnb359v1_PUB SharedSecret=1d3f3396492d130caea54233c79833e90a072fe883071bb08cec671ce0319f0bc39c68dda0199952152a5c3563 # ECDH Bob with Alice peer Derive=BOB_c2tnb359v1 +Availablein = default PeerKey=ALICE_c2tnb359v1_PUB SharedSecret=1d3f3396492d130caea54233c79833e90a072fe883071bb08cec671ce0319f0bc39c68dda0199952152a5c3563 @@ -4220,11 +4459,13 @@ PrivPubKeyPair = BOB_c2pnb368w1:BOB_c2pnb368w1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2pnb368w1 +Availablein = default PeerKey=BOB_c2pnb368w1_PUB SharedSecret=d191710b156d1b1d14242843a7f0abf28060bbb9e655655b53852a8b0f250ef1eee37d59364d9791c8e1bc526cbb # ECDH Bob with Alice peer Derive=BOB_c2pnb368w1 +Availablein = default PeerKey=ALICE_c2pnb368w1_PUB SharedSecret=d191710b156d1b1d14242843a7f0abf28060bbb9e655655b53852a8b0f250ef1eee37d59364d9791c8e1bc526cbb @@ -4270,11 +4511,13 @@ PrivPubKeyPair = BOB_c2tnb431r1:BOB_c2tnb431r1_PUB # ECDH Alice with Bob peer Derive=ALICE_c2tnb431r1 +Availablein = default PeerKey=BOB_c2tnb431r1_PUB SharedSecret=4c4d7d387843ff5152f22f101b0609238819357fae2ccc9097b818e383ef6809cb46671fb514009d4d1d3d0119fba265107302e95748 # ECDH Bob with Alice peer Derive=BOB_c2tnb431r1 +Availablein = default PeerKey=ALICE_c2tnb431r1_PUB SharedSecret=4c4d7d387843ff5152f22f101b0609238819357fae2ccc9097b818e383ef6809cb46671fb514009d4d1d3d0119fba265107302e95748 @@ -4312,11 +4555,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls1:BOB_wap-wsg-idm-ecid-wtls1_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls1 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls1_PUB SharedSecret=0000fc6e280987e8b9bf6e3c7fa003 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls1 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls1_PUB SharedSecret=0000fc6e280987e8b9bf6e3c7fa003 @@ -4356,11 +4601,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls3:BOB_wap-wsg-idm-ecid-wtls3_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls3 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls3_PUB SharedSecret=00cf1d850f396436be68f1e5502935853ed054511f # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls3 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls3_PUB SharedSecret=00cf1d850f396436be68f1e5502935853ed054511f @@ -4398,11 +4645,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls4:BOB_wap-wsg-idm-ecid-wtls4_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls4 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls4_PUB SharedSecret=01076232302ca32b5f3daf075e5213 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls4 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls4_PUB SharedSecret=01076232302ca32b5f3daf075e5213 @@ -4442,11 +4691,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls5:BOB_wap-wsg-idm-ecid-wtls5_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls5 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls5_PUB SharedSecret=066091c591278f5b949106052b2546aacc20917c20 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls5 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls5_PUB SharedSecret=066091c591278f5b949106052b2546aacc20917c20 @@ -4484,11 +4735,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls6:BOB_wap-wsg-idm-ecid-wtls6_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls6 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls6_PUB SharedSecret=8d184455748c56115ba2183070b0 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls6 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls6_PUB SharedSecret=8d184455748c56115ba2183070b0 @@ -4528,11 +4781,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls7:BOB_wap-wsg-idm-ecid-wtls7_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls7 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls7_PUB SharedSecret=990eda6a0406caef965018b97c94d0faa200f6e4 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls7 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls7_PUB SharedSecret=990eda6a0406caef965018b97c94d0faa200f6e4 @@ -4570,11 +4825,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls8:BOB_wap-wsg-idm-ecid-wtls8_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls8 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls8_PUB SharedSecret=7524c547bd6b26644ce70571cb06 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls8 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls8_PUB SharedSecret=7524c547bd6b26644ce70571cb06 @@ -4614,11 +4871,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls9:BOB_wap-wsg-idm-ecid-wtls9_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls9 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls9_PUB SharedSecret=5ca1d9eed44def2c390fd5bbb16ca2c3a09eb7b1 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls9 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls9_PUB SharedSecret=5ca1d9eed44def2c390fd5bbb16ca2c3a09eb7b1 @@ -4658,11 +4917,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls10:BOB_wap-wsg-idm-ecid-wtls10_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls10 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls10_PUB SharedSecret=0199de137bc263e25b543994d6315b5a3f1e38e7e1f60662cb5cbaab5f98 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls10 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls10_PUB SharedSecret=0199de137bc263e25b543994d6315b5a3f1e38e7e1f60662cb5cbaab5f98 @@ -4702,11 +4963,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls11:BOB_wap-wsg-idm-ecid-wtls11_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls11 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls11_PUB SharedSecret=01ee4b517d8a64be5ee32e10152c7bbcb8cde73a3da8e9643bce173011f7 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls11 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls11_PUB SharedSecret=01ee4b517d8a64be5ee32e10152c7bbcb8cde73a3da8e9643bce173011f7 @@ -4746,11 +5009,13 @@ PrivPubKeyPair = BOB_wap-wsg-idm-ecid-wtls12:BOB_wap-wsg-idm-ecid-wtls12_PUB # ECDH Alice with Bob peer Derive=ALICE_wap-wsg-idm-ecid-wtls12 +Availablein = default PeerKey=BOB_wap-wsg-idm-ecid-wtls12_PUB SharedSecret=c75a8283a73312de82c8f99d41a9173a43b8f921e8161dd140131b36 # ECDH Bob with Alice peer Derive=BOB_wap-wsg-idm-ecid-wtls12 +Availablein = default PeerKey=ALICE_wap-wsg-idm-ecid-wtls12_PUB SharedSecret=c75a8283a73312de82c8f99d41a9173a43b8f921e8161dd140131b36 @@ -4790,11 +5055,13 @@ PrivPubKeyPair = BOB_brainpoolP160r1:BOB_brainpoolP160r1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP160r1 +Availablein = default PeerKey=BOB_brainpoolP160r1_PUB SharedSecret=e4fe5ae99a60d17b597f5705a719cea6709c63b9 # ECDH Bob with Alice peer Derive=BOB_brainpoolP160r1 +Availablein = default PeerKey=ALICE_brainpoolP160r1_PUB SharedSecret=e4fe5ae99a60d17b597f5705a719cea6709c63b9 @@ -4834,11 +5101,13 @@ PrivPubKeyPair = BOB_brainpoolP160t1:BOB_brainpoolP160t1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP160t1 +Availablein = default PeerKey=BOB_brainpoolP160t1_PUB SharedSecret=199a218458b71a4e13f05a599fc17bc76f30ea2f # ECDH Bob with Alice peer Derive=BOB_brainpoolP160t1 +Availablein = default PeerKey=ALICE_brainpoolP160t1_PUB SharedSecret=199a218458b71a4e13f05a599fc17bc76f30ea2f @@ -4878,11 +5147,13 @@ PrivPubKeyPair = BOB_brainpoolP192r1:BOB_brainpoolP192r1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP192r1 +Availablein = default PeerKey=BOB_brainpoolP192r1_PUB SharedSecret=7ce122b49afdfd1adde6cdfaa13dc7180d6d4e70322c8773 # ECDH Bob with Alice peer Derive=BOB_brainpoolP192r1 +Availablein = default PeerKey=ALICE_brainpoolP192r1_PUB SharedSecret=7ce122b49afdfd1adde6cdfaa13dc7180d6d4e70322c8773 @@ -4922,11 +5193,13 @@ PrivPubKeyPair = BOB_brainpoolP192t1:BOB_brainpoolP192t1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP192t1 +Availablein = default PeerKey=BOB_brainpoolP192t1_PUB SharedSecret=1a5444c2600d9d21d6a450d158fd25272ade262ab519790b # ECDH Bob with Alice peer Derive=BOB_brainpoolP192t1 +Availablein = default PeerKey=ALICE_brainpoolP192t1_PUB SharedSecret=1a5444c2600d9d21d6a450d158fd25272ade262ab519790b @@ -4966,11 +5239,13 @@ PrivPubKeyPair = BOB_brainpoolP224r1:BOB_brainpoolP224r1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP224r1 +Availablein = default PeerKey=BOB_brainpoolP224r1_PUB SharedSecret=419e446a66968fcc372126cff4d637505c848c3a9b82503f2d441215 # ECDH Bob with Alice peer Derive=BOB_brainpoolP224r1 +Availablein = default PeerKey=ALICE_brainpoolP224r1_PUB SharedSecret=419e446a66968fcc372126cff4d637505c848c3a9b82503f2d441215 @@ -5010,11 +5285,13 @@ PrivPubKeyPair = BOB_brainpoolP224t1:BOB_brainpoolP224t1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP224t1 +Availablein = default PeerKey=BOB_brainpoolP224t1_PUB SharedSecret=8f83465fb6353912a51c2809ea30b19b73b3e391c0422650e0f20b58 # ECDH Bob with Alice peer Derive=BOB_brainpoolP224t1 +Availablein = default PeerKey=ALICE_brainpoolP224t1_PUB SharedSecret=8f83465fb6353912a51c2809ea30b19b73b3e391c0422650e0f20b58 @@ -5054,11 +5331,13 @@ PrivPubKeyPair = BOB_brainpoolP256r1:BOB_brainpoolP256r1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP256r1 +Availablein = default PeerKey=BOB_brainpoolP256r1_PUB SharedSecret=78ed4b7bb4ed808813f8c27132fe04f5d805365549b754994d83b002416b6ba0 # ECDH Bob with Alice peer Derive=BOB_brainpoolP256r1 +Availablein = default PeerKey=ALICE_brainpoolP256r1_PUB SharedSecret=78ed4b7bb4ed808813f8c27132fe04f5d805365549b754994d83b002416b6ba0 @@ -5098,11 +5377,13 @@ PrivPubKeyPair = BOB_brainpoolP256t1:BOB_brainpoolP256t1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP256t1 +Availablein = default PeerKey=BOB_brainpoolP256t1_PUB SharedSecret=287a8f19e6f06476b222805eb11907c536fa6ea02b8877ea6d5323f9fabccdd8 # ECDH Bob with Alice peer Derive=BOB_brainpoolP256t1 +Availablein = default PeerKey=ALICE_brainpoolP256t1_PUB SharedSecret=287a8f19e6f06476b222805eb11907c536fa6ea02b8877ea6d5323f9fabccdd8 @@ -5146,11 +5427,13 @@ PrivPubKeyPair = BOB_brainpoolP320r1:BOB_brainpoolP320r1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP320r1 +Availablein = default PeerKey=BOB_brainpoolP320r1_PUB SharedSecret=13a56c63c2dafe3e053534d5bf32c7eb4a0733bf356510725d378c5cbcf6974240719e3e53b352bb # ECDH Bob with Alice peer Derive=BOB_brainpoolP320r1 +Availablein = default PeerKey=ALICE_brainpoolP320r1_PUB SharedSecret=13a56c63c2dafe3e053534d5bf32c7eb4a0733bf356510725d378c5cbcf6974240719e3e53b352bb @@ -5194,11 +5477,13 @@ PrivPubKeyPair = BOB_brainpoolP320t1:BOB_brainpoolP320t1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP320t1 +Availablein = default PeerKey=BOB_brainpoolP320t1_PUB SharedSecret=170d1f5fc4248700be75499eac813fac642df1311ab005e10796cc2ef43b82f8d788eb232d580243 # ECDH Bob with Alice peer Derive=BOB_brainpoolP320t1 +Availablein = default PeerKey=ALICE_brainpoolP320t1_PUB SharedSecret=170d1f5fc4248700be75499eac813fac642df1311ab005e10796cc2ef43b82f8d788eb232d580243 @@ -5242,11 +5527,13 @@ PrivPubKeyPair = BOB_brainpoolP384r1:BOB_brainpoolP384r1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP384r1 +Availablein = default PeerKey=BOB_brainpoolP384r1_PUB SharedSecret=0b3ad57e83759760d94904d9ea266b538120c6db2b5046217aa1ecd924828b949d335c8ce8a5b36bac7556bf6058c40a # ECDH Bob with Alice peer Derive=BOB_brainpoolP384r1 +Availablein = default PeerKey=ALICE_brainpoolP384r1_PUB SharedSecret=0b3ad57e83759760d94904d9ea266b538120c6db2b5046217aa1ecd924828b949d335c8ce8a5b36bac7556bf6058c40a @@ -5290,11 +5577,13 @@ PrivPubKeyPair = BOB_brainpoolP384t1:BOB_brainpoolP384t1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP384t1 +Availablein = default PeerKey=BOB_brainpoolP384t1_PUB SharedSecret=0fde85a61157cdd898196f291802ebd57bb2e39d98c4e6ad9bb3e2e0375e1df9bf7dadb8df7db1fea32818ef2c88babc # ECDH Bob with Alice peer Derive=BOB_brainpoolP384t1 +Availablein = default PeerKey=ALICE_brainpoolP384t1_PUB SharedSecret=0fde85a61157cdd898196f291802ebd57bb2e39d98c4e6ad9bb3e2e0375e1df9bf7dadb8df7db1fea32818ef2c88babc @@ -5342,11 +5631,13 @@ PrivPubKeyPair = BOB_brainpoolP512r1:BOB_brainpoolP512r1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP512r1 +Availablein = default PeerKey=BOB_brainpoolP512r1_PUB SharedSecret=80751feb09215a9da32f9f8c97133f53f0286a89969bd00d7f365da7f7736f45e634a35012d71b22f09bd89760ab0d2b0d426133cd9a379da9739d0f5f2e0360 # ECDH Bob with Alice peer Derive=BOB_brainpoolP512r1 +Availablein = default PeerKey=ALICE_brainpoolP512r1_PUB SharedSecret=80751feb09215a9da32f9f8c97133f53f0286a89969bd00d7f365da7f7736f45e634a35012d71b22f09bd89760ab0d2b0d426133cd9a379da9739d0f5f2e0360 @@ -5394,11 +5685,13 @@ PrivPubKeyPair = BOB_brainpoolP512t1:BOB_brainpoolP512t1_PUB # ECDH Alice with Bob peer Derive=ALICE_brainpoolP512t1 +Availablein = default PeerKey=BOB_brainpoolP512t1_PUB SharedSecret=0afecb44d108c9bf2bc159fcc613a1429e3906d5d201d579adc2167058e972ef85fc13d837f3566a2ff3a881e47bfe36b722baf4a9f865097fe11e171189a944 # ECDH Bob with Alice peer Derive=BOB_brainpoolP512t1 +Availablein = default PeerKey=ALICE_brainpoolP512t1_PUB SharedSecret=0afecb44d108c9bf2bc159fcc613a1429e3906d5d201d579adc2167058e972ef85fc13d837f3566a2ff3a881e47bfe36b722baf4a9f865097fe11e171189a944 @@ -5481,10 +5774,12 @@ PrivPubKeyPair = SECP224R1_RFC5114-Peer:SECP224R1_RFC5114-Peer-PUBLIC Derive=SECP224R1_RFC5114 +Availablein = default PeerKey=SECP224R1_RFC5114-Peer-PUBLIC SharedSecret=52272F50F46F4EDC9151569092F46DF2D96ECC3B6DC1714A4EA949FA Derive=SECP224R1_RFC5114-Peer +Availablein = default PeerKey=SECP224R1_RFC5114-PUBLIC SharedSecret=52272F50F46F4EDC9151569092F46DF2D96ECC3B6DC1714A4EA949FA @@ -5522,10 +5817,12 @@ PrivPubKeyPair = PRIME256V1_RFC5114-Peer:PRIME256V1_RFC5114-Peer-PUBLIC Derive=PRIME256V1_RFC5114 +Availablein = default PeerKey=PRIME256V1_RFC5114-Peer-PUBLIC SharedSecret=DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788 Derive=PRIME256V1_RFC5114-Peer +Availablein = default PeerKey=PRIME256V1_RFC5114-PUBLIC SharedSecret=DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788 @@ -5567,10 +5864,12 @@ PrivPubKeyPair = SECP384R1_RFC5114-Peer:SECP384R1_RFC5114-Peer-PUBLIC Derive=SECP384R1_RFC5114 +Availablein = default PeerKey=SECP384R1_RFC5114-Peer-PUBLIC SharedSecret=5EA1FC4AF7256D2055981B110575E0A8CAE53160137D904C59D926EB1B8456E427AA8A4540884C37DE159A58028ABC0E Derive=SECP384R1_RFC5114-Peer +Availablein = default PeerKey=SECP384R1_RFC5114-PUBLIC SharedSecret=5EA1FC4AF7256D2055981B110575E0A8CAE53160137D904C59D926EB1B8456E427AA8A4540884C37DE159A58028ABC0E @@ -5618,10 +5917,12 @@ PrivPubKeyPair = SECP521R1_RFC5114-Peer:SECP521R1_RFC5114-Peer-PUBLIC Derive=SECP521R1_RFC5114 +Availablein = default PeerKey=SECP521R1_RFC5114-Peer-PUBLIC SharedSecret=00CDEA89621CFA46B132F9E4CFE2261CDE2D4368EB5656634C7CC98C7A00CDE54ED1866A0DD3E6126C9D2F845DAFF82CEB1DA08F5D87521BB0EBECA77911169C20CC Derive=SECP521R1_RFC5114-Peer +Availablein = default PeerKey=SECP521R1_RFC5114-PUBLIC SharedSecret=00CDEA89621CFA46B132F9E4CFE2261CDE2D4368EB5656634C7CC98C7A00CDE54ED1866A0DD3E6126C9D2F845DAFF82CEB1DA08F5D87521BB0EBECA77911169C20CC @@ -5660,10 +5961,12 @@ PrivPubKeyPair = PRIME256V1_RFC5903-Peer:PRIME256V1_RFC5903-Peer-PUBLIC Derive=PRIME256V1_RFC5903 +Availablein = default PeerKey=PRIME256V1_RFC5903-Peer-PUBLIC SharedSecret=D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE Derive=PRIME256V1_RFC5903-Peer +Availablein = default PeerKey=PRIME256V1_RFC5903-PUBLIC SharedSecret=D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE @@ -5705,10 +6008,12 @@ PrivPubKeyPair = SECP384R1_RFC5903-Peer:SECP384R1_RFC5903-Peer-PUBLIC Derive=SECP384R1_RFC5903 +Availablein = default PeerKey=SECP384R1_RFC5903-Peer-PUBLIC SharedSecret=11187331C279962D93D604243FD592CB9D0A926F422E47187521287E7156C5C4D603135569B9E9D09CF5D4A270F59746 Derive=SECP384R1_RFC5903-Peer +Availablein = default PeerKey=SECP384R1_RFC5903-PUBLIC SharedSecret=11187331C279962D93D604243FD592CB9D0A926F422E47187521287E7156C5C4D603135569B9E9D09CF5D4A270F59746 @@ -5756,10 +6061,12 @@ PrivPubKeyPair = SECP521R1_RFC5903-Peer:SECP521R1_RFC5903-Peer-PUBLIC Derive=SECP521R1_RFC5903 +Availablein = default PeerKey=SECP521R1_RFC5903-Peer-PUBLIC SharedSecret=01144C7D79AE6956BC8EDB8E7C787C4521CB086FA64407F97894E5E6B2D79B04D1427E73CA4BAA240A34786859810C06B3C715A3A8CC3151F2BEE417996D19F3DDEA Derive=SECP521R1_RFC5903-Peer +Availablein = default PeerKey=SECP521R1_RFC5903-PUBLIC SharedSecret=01144C7D79AE6956BC8EDB8E7C787C4521CB086FA64407F97894E5E6B2D79B04D1427E73CA4BAA240A34786859810C06B3C715A3A8CC3151F2BEE417996D19F3DDEA @@ -5798,10 +6105,12 @@ PrivPubKeyPair = BRAINPOOLP256R1_RFC7027-Peer:BRAINPOOLP256R1_RFC7027-Peer-PUBLI Derive=BRAINPOOLP256R1_RFC7027 +Availablein = default PeerKey=BRAINPOOLP256R1_RFC7027-Peer-PUBLIC SharedSecret=89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B Derive=BRAINPOOLP256R1_RFC7027-Peer +Availablein = default PeerKey=BRAINPOOLP256R1_RFC7027-PUBLIC SharedSecret=89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B @@ -5843,10 +6152,12 @@ PrivPubKeyPair = BRAINPOOLP384R1_RFC7027-Peer:BRAINPOOLP384R1_RFC7027-Peer-PUBLI Derive=BRAINPOOLP384R1_RFC7027 +Availablein = default PeerKey=BRAINPOOLP384R1_RFC7027-Peer-PUBLIC SharedSecret=0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42 Derive=BRAINPOOLP384R1_RFC7027-Peer +Availablein = default PeerKey=BRAINPOOLP384R1_RFC7027-PUBLIC SharedSecret=0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42 @@ -5892,10 +6203,12 @@ PrivPubKeyPair = BRAINPOOLP512R1_RFC7027-Peer:BRAINPOOLP512R1_RFC7027-Peer-PUBLI Derive=BRAINPOOLP512R1_RFC7027 +Availablein = default PeerKey=BRAINPOOLP512R1_RFC7027-Peer-PUBLIC SharedSecret=A7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1F Derive=BRAINPOOLP512R1_RFC7027-Peer +Availablein = default PeerKey=BRAINPOOLP512R1_RFC7027-PUBLIC SharedSecret=A7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1F @@ -5929,6 +6242,7 @@ hXzA375dfGH6yIsRgRveMo6KDRK/AanSBLUj Derive=KAS-ECC-CDH_P-192_C0 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=803d8ab2e5b6e6fca715737c3a82f7ce3c783124f6d51cd0 @@ -5957,6 +6271,7 @@ MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE3rVxL6AnrI0vIsRVzLc6keF7ZRK1 Derive=KAS-ECC-CDH_P-192_C1 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=c208847568b98835d7312cef1f97f7aa298283152313c29d @@ -5985,6 +6300,7 @@ Y8IPCp+Nxno+YO9tZLUiGF0D3x/Arf1CR4J5 Derive=KAS-ECC-CDH_P-192_C2 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=87229107047a3b611920d6e3b2c0c89bea4f49412260b8dd @@ -6013,6 +6329,7 @@ OC6IBMUJe6ZkXhYgbPtw9wUmVZR91EoX8fnV Derive=KAS-ECC-CDH_P-192_C3 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=eec0bed8fc55e1feddc82158fd6dc0d48a4d796aaf47d46c @@ -6041,6 +6358,7 @@ GNWUVCwxTkFCfAgnigjOjXMF87W4Scctiv9z Derive=KAS-ECC-CDH_P-192_C4 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=716e743b1b37a2cd8479f0a3d5a74c10ba2599be18d7e2f4 @@ -6069,6 +6387,7 @@ zUUWNo7sDVv7hHch32qv8OXUjERPdL+c2KWn Derive=KAS-ECC-CDH_P-192_C5 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=f67053b934459985a315cb017bf0302891798d45d0e19508 @@ -6097,6 +6416,7 @@ SfbQvFLZHiNDY7wy7gtnePJc2MGEdRD0NIuU Derive=KAS-ECC-CDH_P-192_C6 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=75822971193edd472bf30151a782619c55ad0b279c9303dd @@ -6125,6 +6445,7 @@ AR0h4crNa3vRftjdtQtq7gZUw18tDt3Bz/z2 Derive=KAS-ECC-CDH_P-192_C7 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=67cba2cbb69ee78bf1abafb0e6fbe33fa2094c128d59652d @@ -6153,6 +6474,7 @@ Dc7RIJiZgb6q8ABtiKlueXGi+jozukYEf8e6 Derive=KAS-ECC-CDH_P-192_C8 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=cf99a2770a386ca0137d1eca0a226e484297ac3c513f3631 @@ -6181,6 +6503,7 @@ scYrbKZT8IJy4DhvyUIfvVgAk9euYwG8qUR2 Derive=KAS-ECC-CDH_P-192_C9 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=576331e2b4fb38a112810e1529834de8307fb0a0d2756877 @@ -6209,6 +6532,7 @@ MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEU5vED+IKD7JniItkewPqr27CDAKh Derive=KAS-ECC-CDH_P-192_C10 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=902f4501916a0dd945554c3a37b3d780d375a6da713197c4 @@ -6237,6 +6561,7 @@ liUPmfvfnZfdiK1BAjXaw25bks4oJLjlh6gs Derive=KAS-ECC-CDH_P-192_C11 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=46e4de335054d429863218ae33636fc9b89c628b64b506c7 @@ -6265,6 +6590,7 @@ N2IgE10wtctmDu+HZP/HRPFcG11twGukQW03 Derive=KAS-ECC-CDH_P-192_C12 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1bfe9e5a20ac7a38d8f605b425bb9030be31ef97c101c76c @@ -6293,6 +6619,7 @@ SD3D4ci6Y+H0cdsjGF9Q2chx7eohJVs6Y7S3 Derive=KAS-ECC-CDH_P-192_C13 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0e8c493a4adc445dc9288a3b9b272599224054592d7265b3 @@ -6321,6 +6648,7 @@ q3fxWNZ0mjqSPcgEQPJmH9NbZRYX5lKUtGN1 Derive=KAS-ECC-CDH_P-192_C14 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0f1991086b455ded6a1c4146f7bf59fe9b495de566ebc6bf @@ -6349,6 +6677,7 @@ drUD4ebjizcra+4P9bNQLYNzXjssJoJeTw/M Derive=KAS-ECC-CDH_P-192_C15 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=b30f2127c34df35aaa91dbf0bbe15798e799a03ed11698c1 @@ -6377,6 +6706,7 @@ E40RMSJfM4ZO1I2gb6RakTtGz0JVd0LjUIXm Derive=KAS-ECC-CDH_P-192_C16 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=64a5c246599d3e8177a2402a1110eb81e6c456ab4edb5127 @@ -6405,6 +6735,7 @@ NbzJN8KXynA/d8UrsGLYzpcduECXugx1OkGP Derive=KAS-ECC-CDH_P-192_C17 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=017b8ca53c82fab163da2ab783966a39e061b32c8cfa334d @@ -6433,6 +6764,7 @@ zo5dRJVS73V4vpYjb+XtnQZDwLtsWpE0sBCN Derive=KAS-ECC-CDH_P-192_C18 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=340ef3db3dbebdd91c62c3d4e1a3da2c7c52a3338b865259 @@ -6461,6 +6793,7 @@ mDv1DzURBIGRme8HyaYFHSB1jzr3kCfqZqU/ Derive=KAS-ECC-CDH_P-192_C19 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=2162144921df5103d0e6a650fb13fd246f4738d0896ce92f @@ -6489,6 +6822,7 @@ zzB4siynJDdUXhDW1PBSQi64mLc3pLhUPuVQ Derive=KAS-ECC-CDH_P-192_C20 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=4c69e7feed4b11159adfc16a6047a92572ea44e0740b23af @@ -6517,6 +6851,7 @@ yAPfcTlsnPCLzZGFTj5uQtjGV84PJ6t3qdxL Derive=KAS-ECC-CDH_P-192_C21 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=46072acefd67bff50de355ca7a31fa6be59f26e467587259 @@ -6545,6 +6880,7 @@ FPF4plSpqooaCALyzg7ooPTr6W3uGzdGSx/y Derive=KAS-ECC-CDH_P-192_C22 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ec5580eabca9f3389d2b427ddf6e49e26d629afd03fa766e @@ -6573,6 +6909,7 @@ w0cYEClVe+uk/xmSvSHCPLSCX22ucOMxj9HK Derive=KAS-ECC-CDH_P-192_C23 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=7f3929dd3cbf7673bc30d859d90b880307475f800660ea32 @@ -6601,6 +6938,7 @@ oiH8RkZJ1siMqJYUSIocx7hEK7Qvn7MCCj12 Derive=KAS-ECC-CDH_P-192_C24 +Availablein = default PeerKey=KAS-ECC-CDH_P-192_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=72e88f3ea67d46d46dbf83926e7e2a6b85b54536741e6d2c @@ -6629,6 +6967,7 @@ q6rigIggksy7p5MPQZqKT5uxaXi7w4OHKZklWaby4tc= Derive=KAS-ECC-CDH_P-224_C0 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=7d96f9a3bd3c05cf5cc37feb8b9d5209d5c2597464dec3e9983743e8 @@ -6657,6 +6996,7 @@ ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEE7/NT46UQjk8q4+0a58FZsImsis3B2l2 Derive=KAS-ECC-CDH_P-224_C1 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ee93ce06b89ff72009e858c68eb708e7bc79ee0300f73bed69bbca09 @@ -6685,6 +7025,7 @@ ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEdW3YBrnZw02JlpHstFt3GvRo7ABEhqD9 Derive=KAS-ECC-CDH_P-224_C2 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=3fcc01e34d4449da2a974b23fc36f9566754259d39149790cfa1ebd3 @@ -6713,6 +7054,7 @@ T5khxPebJtMOSRp3NpbMLHm08FlrxbnuuvOU0WL7hoQ= Derive=KAS-ECC-CDH_P-224_C3 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=49129628b23afcef48139a3f6f59ff5e9811aa746aa4ff33c24bb940 @@ -6741,6 +7083,7 @@ xksiOYPeKa49rTGtwCNsbefxRWHKLqCDxScMeKLmy8A= Derive=KAS-ECC-CDH_P-224_C4 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=fcdc69a40501d308a6839653a8f04309ec00233949522902ffa5eac6 @@ -6769,6 +7112,7 @@ cKAjOH0tG2KqBG35NA+cN6CHoGsyz38IoiP5koEqgos= Derive=KAS-ECC-CDH_P-224_C5 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=827e9025cb62e0e837c596063f3b9b5a0f7afd8d8783200086d61ec1 @@ -6797,6 +7141,7 @@ ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMUoLJt0xwkiEXXzBe2HK1GCCWb7YWljR Derive=KAS-ECC-CDH_P-224_C6 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=335ba51228d94acbed851ca7821c801d5cb1c7975d7aa90a7159f8fa @@ -6825,6 +7170,7 @@ C0YD5Wr+hnOpbEupkArYWZXmMeQ2xsyIosK0e3xIhrg= Derive=KAS-ECC-CDH_P-224_C7 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=8c2e627594206b34f7356d3426eb3d79f518ef843fbe94014cceace3 @@ -6853,6 +7199,7 @@ hNT1J9y+51tRV1H47irjVeiv1d4hxiqTmmUHtTjLxK8= Derive=KAS-ECC-CDH_P-224_C8 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=632abb662728dbc994508873d5c527ca5ef923c0d31fa6c47ef4c825 @@ -6881,6 +7228,7 @@ oigGWYKlj/YbyQAZu8u1h104Y9sLwqH6NLCtTeGoP5k= Derive=KAS-ECC-CDH_P-224_C9 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=34641141aab05ef58bd376d609345901fb8f63477c6be9097f037f1f @@ -6909,6 +7257,7 @@ ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEc8xkU3LKLnFjfNqUPYFI8zgqtt0PLhpJ Derive=KAS-ECC-CDH_P-224_C10 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=4f74ac8507501a32bfc5a78d8271c200e835966e187e8d00011a8c75 @@ -6937,6 +7286,7 @@ zg9FEtKiL81m0avtx2dmgyfFy5xZkEMnYjnPPIUWryQ= Derive=KAS-ECC-CDH_P-224_C11 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ad09c9ae4d2324ea81bb555b200d3c003e22a6870ee03b52df49e4de @@ -6965,6 +7315,7 @@ sq+iKg7J5l7JfiGDc+f8EVwidNW4KaYNk/ceAdWBNsM= Derive=KAS-ECC-CDH_P-224_C12 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ef029c28c68064b8abd2965a38c404fb5e944ace57e8638daba9d3cd @@ -6993,6 +7344,7 @@ E2UG4N8SPZinogu985Q98uNWNCL4wM901TqqvdfJc7o= Derive=KAS-ECC-CDH_P-224_C13 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=f83c16661dfcbad021cc3b5a5af51d9a18db4653866b3ff90787ce3e @@ -7021,6 +7373,7 @@ ks39ylB4euLy8VuIvBD3tfCu4UGDc/FhU669H7pUKI0= Derive=KAS-ECC-CDH_P-224_C14 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=f51258c63f232e55a66aa25ebd597b2018d1052c02eeb63866758005 @@ -7049,6 +7402,7 @@ uE98JHCWkI5GFSZr5ZpTzWVVFQVv+SNwpicaXTgj1wQ= Derive=KAS-ECC-CDH_P-224_C15 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=7fdc969a186ff18429f2a276dac43beea21182d82ce2e5a0876552b1 @@ -7077,6 +7431,7 @@ xHlAwd858eqISIxV1VOBYIeLnO0YqIfqJh3XEtFAJP8= Derive=KAS-ECC-CDH_P-224_C16 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=3d60ab6db2b3ffe2d29ccff46d056e54230cf34982e241556ed2920c @@ -7105,6 +7460,7 @@ k0zzwDoenzinuQtzF9Jrn2MRBjq1iyaM9Imy5QOG1dY= Derive=KAS-ECC-CDH_P-224_C17 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=9116d72786f4db5df7a8b43078c6ab9160d423513d35ea5e2559306d @@ -7133,6 +7489,7 @@ ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJiNjL98L2FaAWmmqGG1BM+9ZBOH2Valy Derive=KAS-ECC-CDH_P-224_C18 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=207c53dcefac789aaa0276d9200b3a940ce5f2296f4cb2e81a185d3d @@ -7161,6 +7518,7 @@ p3qBUk6/Mj//BOtHcGmgrGizRfaxrhNO/DGUDlE8uZ8= Derive=KAS-ECC-CDH_P-224_C19 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=10e467da34f48ad7072005bccd6da1b2ba3f71eafa1c393842f91d74 @@ -7189,6 +7547,7 @@ u5nmkdrRHdXs6M/Z+XyaUm5KFQbmNVlp7oeCb8OLzSQ= Derive=KAS-ECC-CDH_P-224_C20 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=82fd2f9c60c4f999ac00bbe64bfc11da8ff8cda2e499fced65230bb1 @@ -7217,6 +7576,7 @@ wOU09+ETtvLBZZ0H8nFuZKg8GLvONE3SEh/oUWjq4IU= Derive=KAS-ECC-CDH_P-224_C21 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=530f7e7fc932613b29c981f261cb036cba3f1df3864e0e1cba2685a2 @@ -7245,6 +7605,7 @@ tG5mpVzJsllxixvIsUT95jOolGFv/VmjptXY6ULHy7c= Derive=KAS-ECC-CDH_P-224_C22 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=49f6fd0139248ef4df2db05d1319bd5b1489e249827a45a8a5f12427 @@ -7273,6 +7634,7 @@ vDN0dynua4ScYCXVd9vMVfvRcBj07bwu8QWwBNYle80= Derive=KAS-ECC-CDH_P-224_C23 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=8f7e34e597ae8093b98270a74a8dfcdbed457f42f43df487c5487161 @@ -7301,6 +7663,7 @@ DGqd9PkcNtiB/puAR6NTBxNVShr0wlxajmVNzc9ony4= Derive=KAS-ECC-CDH_P-224_C24 +Availablein = default PeerKey=KAS-ECC-CDH_P-224_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=71954e2261e8510be1a060733671d2e9d0a2d012eb4e09556d697d2a @@ -7329,6 +7692,7 @@ Tfa0LOfMg4gz0ofbceUJ4/2bBg3bILpcUdzFlI1G+/ZA3+BEF4LKuF+krA== Derive=KAS-ECC-CDH_P-256_C0 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b @@ -7357,6 +7721,7 @@ XKpQGX5Y1DqGp66ynYToERl/Jeuo9RlAkstv9EDibUQhARNyRh9XknHNow== Derive=KAS-ECC-CDH_P-256_C1 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=057d636096cb80b67a8c038c890e887d1adfa4195e9b3ce241c8a778c59cda67 @@ -7385,6 +7750,7 @@ Rk13RDY2RA7n/sPvSKOrJuICILzaLBhRB2g52uiOrpYoaaSXv3PLZvr1Ng== Derive=KAS-ECC-CDH_P-256_C2 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=2d457b78b4614132477618a5b077965ec90730a8c81a1c75d6d4ec68005d67ec @@ -7413,6 +7779,7 @@ HdUY7/DDz/K3Be1CIpT/RgA0Kdc5ozIGyHUlUsi6VKJw3vwG4iHg/q9qxA== Derive=KAS-ECC-CDH_P-256_C3 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=96441259534b80f6aee3d287a6bb17b5094dd4277d9e294f8fe73e48bf2a0024 @@ -7441,6 +7808,7 @@ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQRktKBPnlWHmodb1PIvBpDOhmcg1 Derive=KAS-ECC-CDH_P-256_C4 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=19d44c8d63e8e8dd12c22a87b8cd4ece27acdde04dbf47f7f27537a6999a8e62 @@ -7469,6 +7837,7 @@ VXS/jltxAKMFJ5Lyz2tgHgoFlF4zVVC/ZI14L0YYbHcsDyDTzQ1rjKFLLw== Derive=KAS-ECC-CDH_P-256_C5 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=664e45d5bba4ac931cd65d52017e4be9b19a515f669bea4703542a2c525cd3d3 @@ -7497,6 +7866,7 @@ gdNKkLY1O8pu66dA+b6tOcLyvMJgL3W4pz7Hvf/Lzq0VnQF0xsTTxTV/BQ== Derive=KAS-ECC-CDH_P-256_C6 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ca342daa50dc09d61be7c196c85e60a80c5cb04931746820be548cdde055679d @@ -7525,6 +7895,7 @@ HNDiELBGQSziJLv23gr6IOk+B4RnwFPSQZA+2tc0xrQDunWMK1/wTJ1CKQ== Derive=KAS-ECC-CDH_P-256_C7 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=35aa9b52536a461bfde4e85fc756be928c7de97923f0416c7a3ac8f88b3d4489 @@ -7553,6 +7924,7 @@ MjG9k7fbffNvnrnYBJpDV5z6kLgJOpRBbL77+TOG8Vs/bhkLbjRV/t/mmg== Derive=KAS-ECC-CDH_P-256_C8 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=605c16178a9bc875dcbff54d63fe00df699c03e8a888e9e94dfbab90b25f39b4 @@ -7581,6 +7953,7 @@ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4Jm/Kk1VdGC1VEQwu/baEQBNEny1 Derive=KAS-ECC-CDH_P-256_C9 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=f96e40a1b72840854bb62bc13c40cc2795e373d4e715980b261476835a092e0b @@ -7609,6 +7982,7 @@ OHeKZFyCSM/wFlgzu98bF3LYBZ31aLBh8/ESLyio2BkWfJe+RI49w/sMPA== Derive=KAS-ECC-CDH_P-256_C10 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=8388fa79c4babdca02a8e8a34f9e43554976e420a4ad273c81b26e4228e9d3a3 @@ -7637,6 +8011,7 @@ IYPM78rvJ5e3Z01i9X8xTj80ldxOCZAS9eC6cXcPlmCh6tpUEEzf3nckPg== Derive=KAS-ECC-CDH_P-256_C11 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=72877cea33ccc4715038d4bcbdfe0e43f42a9e2c0c3b017fc2370f4b9acbda4a @@ -7665,6 +8040,7 @@ icR5YQGJcEHRTsvD3vS1/gT67goRkyIp//VjY3v97g55xt7q9En4VAHFxA== Derive=KAS-ECC-CDH_P-256_C12 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=e4e7408d85ff0e0e9c838003f28cdbd5247cdce31f32f62494b70e5f1bc36307 @@ -7693,6 +8069,7 @@ uqOS7Yl4DfzNtHHN9OkXD7kEMCuP2TqCC6jMftTv06by1rBbgLL/Ku5Odw== Derive=KAS-ECC-CDH_P-256_C13 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ed56bcf695b734142c24ecb1fc1bb64d08f175eb243a31f37b3d9bb4407f3b96 @@ -7721,6 +8098,7 @@ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEScUDumxPpgUYLhhrXoERPwdbwR3P Derive=KAS-ECC-CDH_P-256_C14 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=bc5c7055089fc9d6c89f83c1ea1ada879d9934b2ea28fcf4e4a7e984b28ad2cf @@ -7749,6 +8127,7 @@ kWLCpFMSQBY2spwJrtcjKyjgYJQXQbaCi836K8ScyETzdzYRUE+Co5Clrg== Derive=KAS-ECC-CDH_P-256_C15 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=9a4e8e657f6b0e097f47954a63c75d74fcba71a30d83651e3e5a91aa7ccd8343 @@ -7777,6 +8156,7 @@ t7tjzsE/r5sJmVRsqzGwZBnlIh/KAU+4TshwYiobErq1rkNoKqfqc+oI0A== Derive=KAS-ECC-CDH_P-256_C16 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=3ca1fc7ad858fb1a6aba232542f3e2a749ffc7203a2374a3f3d3267f1fc97b78 @@ -7805,6 +8185,7 @@ ebCMO/h9/Sgo12ffp7//1MdmuGq+r1yZtuUMuczJ2dALf/x4BLBJG2e8Aw== Derive=KAS-ECC-CDH_P-256_C17 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1aaabe7ee6e4a6fa732291202433a237df1b49bc53866bfbe00db96a0f58224f @@ -7833,6 +8214,7 @@ gMiIbs2F/cHtdkRWPEwgQZ8HvBfQU5+t4YVeNIOVFbiSwPXSZWH5f6BNGg== Derive=KAS-ECC-CDH_P-256_C18 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=430e6a4fba4449d700d2733e557f66a3bf3d50517c1271b1ddae1161b7ac798c @@ -7861,6 +8243,7 @@ aF6V4u69RkUF8B/p3dWDqWNaZnd31bio8xsPeeuhLHUCNBC1S4Vn3dwPOA== Derive=KAS-ECC-CDH_P-256_C19 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1ce9e6740529499f98d1f1d71329147a33df1d05e4765b539b11cf615d6974d3 @@ -7889,6 +8272,7 @@ gbp0tOnENh9ZXk6/fS8gVuckIe85PwwPKw4AEw48rEq7zAAoYWjoXsVQUQ== Derive=KAS-ECC-CDH_P-256_C20 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=4690e3743c07d643f1bc183636ab2a9cb936a60a802113c49bb1b3f2d0661660 @@ -7917,6 +8301,7 @@ eOBPNbO+7SIqDrYJQgzloZ13xv4e5YfmpJ+6+PKA6N8DPXVAMwLlon2yrg== Derive=KAS-ECC-CDH_P-256_C21 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=30c2261bd0004e61feda2c16aa5e21ffa8d7e7f7dbf6ec379a43b48e4b36aeb0 @@ -7945,6 +8330,7 @@ n5ZAskJkseUk/LFcbo7PH30wI4k7exyh5NF4ly7iojB1fdxWT/439cWjIQ== Derive=KAS-ECC-CDH_P-256_C22 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=2adae4a138a239dcd93c243a3803c3e4cf96e37fe14e6a9b717be9599959b11c @@ -7973,6 +8359,7 @@ fZYlyNMj1RHJLebpwYTfdclV4C4C5AD/5F948znhr+bQVvsyRfRwDOYG7w== Derive=KAS-ECC-CDH_P-256_C23 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=2e277ec30f5ea07d6ce513149b9479b96e07f4b6913b1b5c11305c1444a1bc0b @@ -8001,6 +8388,7 @@ MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENWxaREwEmlL+4K3rfl2CrlqoMDC/ Derive=KAS-ECC-CDH_P-256_C24 +Availablein = default PeerKey=KAS-ECC-CDH_P-256_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1e51373bd2c6044c129c436e742a55be2a668a85ae08441b6756445df5493857 @@ -8032,6 +8420,7 @@ Hv7fJDRRkV7QkFoysGCZK0aMZHZvyEN6 Derive=KAS-ECC-CDH_P-384_C0 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=5f9d29dc5e31a163060356213669c8ce132e22f57c9a04f40ba7fcead493b457e5621e766c40a2e3d4d6a04b25e533f1 @@ -8063,6 +8452,7 @@ hghXpoFTq2LlJewFMNgbWqFYl5gehYdX Derive=KAS-ECC-CDH_P-384_C1 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=a23742a2c267d7425fda94b93f93bbcc24791ac51cd8fd501a238d40812f4cbfc59aac9520d758cf789c76300c69d2ff @@ -8094,6 +8484,7 @@ l7VdoPYaPt2stKzbFEQcshSwSghEwC+j Derive=KAS-ECC-CDH_P-384_C2 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=3d2e640f350805eed1ff43b40a72b2abed0a518bcebe8f2d15b111b6773223da3c3489121db173d414b5bd5ad7153435 @@ -8125,6 +8516,7 @@ Umqi6Se1syLJWhoDPCKctncMlXzTFI3X Derive=KAS-ECC-CDH_P-384_C3 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=6a42cfc392aba0bfd3d17b7ccf062b91fc09bbf3417612d02a90bdde62ae40c54bb2e56e167d6b70db670097eb8db854 @@ -8156,6 +8548,7 @@ qX84kQBdH7OIWPVgPehA5ZHfpPbn1Inh Derive=KAS-ECC-CDH_P-384_C4 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ce7ba454d4412729a32bb833a2d1fd2ae612d4667c3a900e069214818613447df8c611de66da200db7c375cf913e4405 @@ -8187,6 +8580,7 @@ kkmXfgv+SmJiYi8T1Co8Q9Zr27MEA8NF Derive=KAS-ECC-CDH_P-384_C5 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ba69f0acdf3e1ca95caaac4ecaf475bbe51b54777efce01ca381f45370e486fe87f9f419b150c61e329a286d1aa265ec @@ -8218,6 +8612,7 @@ Cgf9oJl/SCUEYC9Z4QvFy0drg9Ck915x Derive=KAS-ECC-CDH_P-384_C6 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1a6688ee1d6e59865d8e3ada37781d36bb0c2717eef92e61964d3927cb765c2965ea80f7f63e58c322ba0397faeaf62b @@ -8249,6 +8644,7 @@ INQ48k5n5gwusEYyBGefo1avRM6pyev1 Derive=KAS-ECC-CDH_P-384_C7 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=d06a568bf2336b90cbac325161be7695eacb2295f599500d787f072612aca313ee5d874f807ddef6c1f023fe2b6e7cd0 @@ -8280,6 +8676,7 @@ UBEsPPDwKEToiKNWnf73goqKiEWJqgVe Derive=KAS-ECC-CDH_P-384_C8 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=bb3b1eda9c6560d82ff5bee403339f1e80342338a991344853b56b24f109a4d94b92f654f0425edd4c205903d7586104 @@ -8311,6 +8708,7 @@ V/jRsSmjvV9j9AyvO9BTPjil9XdwdP+e Derive=KAS-ECC-CDH_P-384_C9 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1e97b60add7cb35c7403dd884c0a75795b7683fff8b49f9d8672a8206bfdcf0a106b8768f983258c74167422e44e4d14 @@ -8342,6 +8740,7 @@ aja12tM94AR09mcPUiIU3XlSFAqwp+to Derive=KAS-ECC-CDH_P-384_C10 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1023478840e54775bfc69293a3cf97f5bc914726455c66538eb5623e218feef7df4befa23e09d77145ad577db32b41f9 @@ -8373,6 +8772,7 @@ zUwwkVIwWJhKJdjyHagyYZJFbGoPpfYM Derive=KAS-ECC-CDH_P-384_C11 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=6ad6b9dc8a6cf0d3691c501cbb967867f6e4bbb764b60dbff8fcff3ed42dbba39d63cf325b4b4078858495ddee75f954 @@ -8404,6 +8804,7 @@ D6dJnWoHKDquKvoz/quX3spAvGBsTYdk Derive=KAS-ECC-CDH_P-384_C12 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=cc9e063566d46b357b3fcae21827377331e5e290a36e60cd7c39102b828ae0b918dc5a02216b07fe6f1958d834e42437 @@ -8435,6 +8836,7 @@ Sw9NmzjAaNrvonEUJVuaQdCEzEoa2FRW Derive=KAS-ECC-CDH_P-384_C13 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=deff7f03bd09865baf945e73edff6d5122c03fb561db87dec8662e09bed4340b28a9efe118337bb7d3d4f7f568635ff9 @@ -8466,6 +8868,7 @@ RVDsbDtvAzuW2yrKPWrGqrBSzpKVla6l Derive=KAS-ECC-CDH_P-384_C14 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=c8b1038f735ad3bb3e4637c3e47eab487637911a6b7950a4e461948329d3923b969e5db663675623611a457fcda35a71 @@ -8497,6 +8900,7 @@ TXdlGDGVrtP5E2QbkMgaMG6/DYkThhMW Derive=KAS-ECC-CDH_P-384_C15 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=d337eaa32b9f716b8747b005b97a553c59dab0c51df41a2d49039cdae705aa75c7b9e7bc0b6a0e8c578c902bc4fff23e @@ -8528,6 +8932,7 @@ MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEkKNHN9RbGqZfdOC9Blm8EY+OS3dLdhlE Derive=KAS-ECC-CDH_P-384_C16 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=32d292b695a4488e42a7b7922e1ae537d76a3d21a0b2e36875f60e9f6d3e8779c2afb3a413b9dd79ae18e70b47d337c1 @@ -8559,6 +8964,7 @@ cMQntO5JYqvfgXO7rYGHR3KSX9MvCxWf Derive=KAS-ECC-CDH_P-384_C17 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=1220e7e6cad7b25df98e5bbdcc6c0b65ca6c2a50c5ff6c41dca71e475646fd489615979ca92fb4389aeadefde79a24f1 @@ -8590,6 +8996,7 @@ gkfwivdSkpFXtYMPHiYGdGa9+otlFFoz Derive=KAS-ECC-CDH_P-384_C18 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=793bb9cd22a93cf468faf804a38d12b78cb12189ec679ddd2e9aa21fa9a5a0b049ab16a23574fe04c1c3c02343b91beb @@ -8621,6 +9028,7 @@ APTIc4OKQME16zuruSk70QAb8+ze578m1BbbbhuHu7dCd4ijtsenqywWWx42b5YI Derive=KAS-ECC-CDH_P-384_C19 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=012d191cf7404a523678c6fc075de8285b243720a903047708bb33e501e0dbee5bcc40d7c3ef6c6da39ea24d830da1e8 @@ -8652,6 +9060,7 @@ uUmWlSfXmh3FkpXvfSvKZ0PozXewTRtYC6rq3H4Z10qKBEUaE18b4bAv4pn53AC/ Derive=KAS-ECC-CDH_P-384_C20 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=ad0fd3ddffe8884b9263f3c15fe1f07f2a5a22ffdc7e967085eea45f0cd959f20f18f522763e28bcc925e496a52dda98 @@ -8683,6 +9092,7 @@ zHIoTpi+lWLjWSb7T0ip++yv5ykwnotv Derive=KAS-ECC-CDH_P-384_C21 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=dc4ca392dc15e20185f2c6a8ea5ec31dfc96f56153a47394b3072b13d0015f5d4ae13beb3bed54d65848f9b8383e6c95 @@ -8714,6 +9124,7 @@ rA0RvbLuIC6dOHLo0CjAiZB0bF4d3pmJ Derive=KAS-ECC-CDH_P-384_C22 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=d765b208112d2b9ed5ad10c4046e2e3b0dbf57c469329519e239ac28b25c7d852bf757d5de0ee271cadd021d86cfd347 @@ -8745,6 +9156,7 @@ YO8G0cqnNoHQYInDO8QkazqjDbzSQ1sS Derive=KAS-ECC-CDH_P-384_C23 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=d3778850aeb58804fbe9dfe6f38b9fa8e20c2ca4e0dec335aafceca0333e3f2490b53c0c1a14a831ba37c4b9d74be0f2 @@ -8776,6 +9188,7 @@ k3LAhzoFjVdUSxAuzOcissyrsaYDd0/V Derive=KAS-ECC-CDH_P-384_C24 +Availablein = default PeerKey=KAS-ECC-CDH_P-384_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=81e1e71575bb4505498de097350186430a6242fa6c57b85a5f984a23371123d2d1424eefbf804258392bc723e4ef1e35 @@ -8811,6 +9224,7 @@ SLbD5SJJeVWk88MC9nY= Derive=KAS-ECC-CDH_P-521_C0 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=005fc70477c3e63bc3954bd0df3ea0d1f41ee21746ed95fc5e1fdf90930d5e136672d72cc770742d1711c3c3a4c334a0ad9759436a4d3c5bf6e74b9578fac148c831 @@ -8846,6 +9260,7 @@ ZkAikRLer6DNi7DQibA= Derive=KAS-ECC-CDH_P-521_C1 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=000b3920ac830ade812c8f96805da2236e002acbbf13596a9ab254d44d0e91b6255ebf1229f366fb5a05c5884ef46032c26d42189273ca4efa4c3db6bd12a6853759 @@ -8881,6 +9296,7 @@ zDwI6Rwdjt2Rz2/oRfg= Derive=KAS-ECC-CDH_P-521_C2 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=006b380a6e95679277cfee4e8353bf96ef2a1ebdd060749f2f046fe571053740bbcc9a0b55790bc9ab56c3208aa05ddf746a10a3ad694daae00d980d944aabc6a08f @@ -8916,6 +9332,7 @@ RbTrfJUcO5yM9SUwuiM= Derive=KAS-ECC-CDH_P-521_C3 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00fbbcd0b8d05331fef6086f22a6cce4d35724ab7a2f49dd8458d0bfd57a0b8b70f246c17c4468c076874b0dff7a0336823b19e98bf1cec05e4beffb0591f97713c6 @@ -8951,6 +9368,7 @@ ecWwa1kSc3KZfUIa3B4= Derive=KAS-ECC-CDH_P-521_C4 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0145cfa38f25943516c96a5fd4bfebb2f645d10520117aa51971eff442808a23b4e23c187e639ff928c3725fbd1c0c2ad0d4aeb207bc1a6fb6cb6d467888dc044b3c @@ -8986,6 +9404,7 @@ m4Cp0csHlnNlSXfF+pQ= Derive=KAS-ECC-CDH_P-521_C5 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=005c5721e96c273319fd60ecc46b5962f698e974b429f28fe6962f4ac656be2eb8674c4aafc037eab48ece612953b1e8d861016b6ad0c79805784c67f73ada96f351 @@ -9021,6 +9440,7 @@ WAZGkTRBVPOW267RiLY= Derive=KAS-ECC-CDH_P-521_C6 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01736d9717429b4f412e903febe2f9e0fffd81355d6ce2c06ff3f66a3be15ceec6e65e308347593f00d7f33591da4043c30763d72749f72cdceebe825e4b34ecd570 @@ -9056,6 +9476,7 @@ Lrp2kQ/tM8dhgEUVAR+rUOOzd6vYqKBF2IbSI40sJorBtuyIvXG3unjiwzwVLkv3 Derive=KAS-ECC-CDH_P-521_C7 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=018f2ae9476c771726a77780208dedfefa205488996b18fecc50bfd4c132753f5766b2cd744afa9918606de2e016effc63622e9029e76dc6e3f0c69f7aeced565c2c @@ -9091,6 +9512,7 @@ U+FXP/YL4VB0Z9Qx+7I= Derive=KAS-ECC-CDH_P-521_C8 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0105a346988b92ed8c7a25ce4d79d21bc86cfcc7f99c6cd19dbb4a39f48ab943b79e4f0647348da0b80bd864b85c6b8d92536d6aa544dc7537a00c858f8b66319e25 @@ -9126,6 +9548,7 @@ LZcZfZL1hfV0i8JnLus= Derive=KAS-ECC-CDH_P-521_C9 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=004531b3d2c6cd12f21604c8610e6723dbf4daf80b5a459d6ba5814397d1c1f7a21d7c114be964e27376aaebe3a7bc3d6af7a7f8c7befb611afe487ff032921f750f @@ -9161,6 +9584,7 @@ IMb3g5NPkmw/tptAxAk= Derive=KAS-ECC-CDH_P-521_C10 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0100c8935969077bae0ba89ef0df8161d975ec5870ac811ae7e65ca5394efba4f0633d41bf79ea5e5b9496bbd7aae000b0594baa82ef8f244e6984ae87ae1ed124b7 @@ -9196,6 +9620,7 @@ RIM19pTjzaSuDMcbGy8qIG+oAtcmLxmYPERnT+FTJ6yqwfpAQkw5WmVWy4FnMSUn Derive=KAS-ECC-CDH_P-521_C11 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=017f36af19303841d13a389d95ec0b801c7f9a679a823146c75c17bc44256e9ad422a4f8b31f14647b2c7d317b933f7c2946c4b8abd1d56d620fab1b5ff1a3adc71f @@ -9231,6 +9656,7 @@ SGvtkgDK3a3f5P+ONWI= Derive=KAS-ECC-CDH_P-521_C12 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00062f9fc29ae1a68b2ee0dcf956cbd38c88ae5f645eaa546b00ebe87a7260bf724be20d34b9d02076655c933d056b21e304c24ddb1dedf1dd76de611fc4a2340336 @@ -9266,6 +9692,7 @@ H2BqRAukvU5aEbi45U8= Derive=KAS-ECC-CDH_P-521_C13 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0128ab09bfec5406799e610f772ba17e892249fa8e0e7b18a04b9197034b250b48294f1867fb9641518f92766066a07a8b917b0e76879e1011e51ccbd9f540c54d4f @@ -9301,6 +9728,7 @@ pYQjWs6nV9vxPVO1g2Q= Derive=KAS-ECC-CDH_P-521_C14 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0101e462e9d9159968f6440e956f11dcf2227ae4aea81667122b6af9239a291eb5d6cf5a4087f358525fcacfa46bb2db01a75af1ba519b2d31da33eda87a9d565748 @@ -9336,6 +9764,7 @@ eRXDhFnLIKuFrsTkUFI= Derive=KAS-ECC-CDH_P-521_C15 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0141d6a4b719ab67eaf04a92c0a41e2dda78f4354fb90bdc35202cc7699b9b04d49616f82255debf7bbec045ae58f982a66905fcfae69d689785e38c868eb4a27e7b @@ -9371,6 +9800,7 @@ iLmv4mpPb+7VYLIY5rs= Derive=KAS-ECC-CDH_P-521_C16 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00345e26e0abb1aac12b75f3a9cf41efe1c336396dffa4a067a4c2cfeb878c68b2b045faa4e5b4e6fa4678f5b603c351903b14bf9a6a70c439257199a640890b61d1 @@ -9406,6 +9836,7 @@ aSaCg/UmWGXbV6efe/c= Derive=KAS-ECC-CDH_P-521_C17 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=006fe9de6fb8e672e7fd150fdc5e617fabb0d43906354ccfd224757c7276f7a1010091b17ed072074f8d10a5ec971eb35a5cb7076603b7bc38d432cbc059f80f9488 @@ -9441,6 +9872,7 @@ GbRwzfZz7B/Dk9NCbiA= Derive=KAS-ECC-CDH_P-521_C18 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01e4e759ecedce1013baf73e6fcc0b92451d03bdd50489b78871c333114990c9ba6a9b2fc7b1a2d9a1794c1b60d9279af6f146f0bbfb0683140403bfa4ccdb524a29 @@ -9476,6 +9908,7 @@ chR3tIbp/0A3KXfD9lw= Derive=KAS-ECC-CDH_P-521_C19 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0163c9191d651039a5fe985a0eea1eba018a40ab1937fcd2b61220820ee8f2302e9799f6edfc3f5174f369d672d377ea8954a8d0c8b851e81a56fda95212a6578f0e @@ -9511,6 +9944,7 @@ YskWKWLn8OveyTaTXQ6qgT6CJtQNf2EZv9lAYCOAyGch5h2xgw9R4TnyEAALzsDY Derive=KAS-ECC-CDH_P-521_C20 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=015d613e267a36342e0d125cdad643d80d97ed0600afb9e6b9545c9e64a98cc6da7c5aaa3a8da0bdd9dd3b97e9788218a80abafc106ef065c8f1c4e1119ef58d298b @@ -9546,6 +9980,7 @@ N4o05cdLZyTE1ApxmSM= Derive=KAS-ECC-CDH_P-521_C21 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=014d6082a3b5ced1ab8ca265a8106f302146c4acb8c30bb14a4c991e3c82a9731288bdb91e0e85bda313912d06384fc44f2153fb13506fa9cf43c9aab5750988c943 @@ -9581,6 +10016,7 @@ fgiD8MTrfq94J6YiBcw= Derive=KAS-ECC-CDH_P-521_C22 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0020c00747cb8d492fd497e0fec54644bf027d418ab686381f109712a99cabe328b9743d2225836f9ad66e5d7fed1de247e0da92f60d5b31f9e47672e57f710598f4 @@ -9616,6 +10052,7 @@ c7UvBOShb8b1JHGHrss= Derive=KAS-ECC-CDH_P-521_C23 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00c2bfafcd7fbd3e2fd1c750fdea61e70bd4787a7e68468c574ee99ebc47eedef064e8944a73bcb7913dbab5d93dca660d216c553622362794f7a2acc71022bdb16f @@ -9651,6 +10088,7 @@ jO3E/cFGPadtzUttGkY= Derive=KAS-ECC-CDH_P-521_C24 +Availablein = default PeerKey=KAS-ECC-CDH_P-521_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01aaf24e5d47e4080c18c55ea35581cd8da30f1a079565045d2008d51b12d0abb4411cda7a0785b15d149ed301a3697062f42da237aa7f07e0af3fd00eb1800d9c41 @@ -9679,6 +10117,7 @@ JRuNoCHLrCgfEj969PrFs9u4 Derive=KAS-ECC-CDH_K-163_C0 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04325bff38f1b0c83c27f554a6c972a80f14bc23bc @@ -9707,6 +10146,7 @@ Qd+UCNkfDgId+PBSa4BjAxSV Derive=KAS-ECC-CDH_K-163_C1 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=05f9ac3a3dd88429600958386c55bef4b1aa5f0c24 @@ -9735,6 +10175,7 @@ Hpwf6EUmgHaplYA6bUnNB1VU Derive=KAS-ECC-CDH_K-163_C2 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=022e0290eda5d348894129f7455d1c766d32d5c2c2 @@ -9763,6 +10204,7 @@ HSWSovY5O26GxU35Cblf4NWo Derive=KAS-ECC-CDH_K-163_C3 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=037f659f430009fcdae4e9f6e6316b0f5dbb268212 @@ -9791,6 +10233,7 @@ VyZnGDmNivZtKXF5hHji830o Derive=KAS-ECC-CDH_K-163_C4 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00503bbb9b62f50ae7a8dfd74a1741826f09290651 @@ -9819,6 +10262,7 @@ YcvZ2hsjpgA94OX3xKBlpcK4 Derive=KAS-ECC-CDH_K-163_C5 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=012cf17799fdefa2940b18d56e80d44414c5b13884 @@ -9847,6 +10291,7 @@ lyq6yRvoWnCeugf10WIVrmAt Derive=KAS-ECC-CDH_K-163_C6 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=062a2f926ab435ac14e05d44c27b46b6820b713aee @@ -9875,6 +10320,7 @@ gdf8A8qL/fEYac6ijPoOX19k Derive=KAS-ECC-CDH_K-163_C7 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0399b9294e895486bdefbaad7a729353ce09586357 @@ -9903,6 +10349,7 @@ lcOk6Kb+Ic0eTNTKOBLA1pKl Derive=KAS-ECC-CDH_K-163_C8 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=022325a9a769a902c2e64c80a1d35429ced42ae0a4 @@ -9931,6 +10378,7 @@ YAqtyyX9QCTtPoRbK7+AcoDm Derive=KAS-ECC-CDH_K-163_C9 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=051392d5377016358405030b48744003db66440a2d @@ -9959,6 +10407,7 @@ Is4oyhViD3tAofJrQjTJVr3B Derive=KAS-ECC-CDH_K-163_C10 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=045dac076e79de2fc631315465d3ef6245f26647e5 @@ -9987,6 +10436,7 @@ tFSvlCCoEfHhX3dNpa4aQLRZ Derive=KAS-ECC-CDH_K-163_C11 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=014f7a46847ed6a7ff605b0e52c616e4ad3f0d5029 @@ -10015,6 +10465,7 @@ NABbV4zXp6aSm9P2zimUO17Z Derive=KAS-ECC-CDH_K-163_C12 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00eacabc34555956995623e60482e5c118e34e2094 @@ -10043,6 +10494,7 @@ CQZ8DuLI9Vt+hNp6OR8Ir3UE Derive=KAS-ECC-CDH_K-163_C13 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0414a622645107f115576f51cdf39d1393a2d7851f @@ -10071,6 +10523,7 @@ d+GZwTLRisVBsRd0jSMZ23/l Derive=KAS-ECC-CDH_K-163_C14 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=056be002daff11c4066e10acd046a85e170fa4c122 @@ -10099,6 +10552,7 @@ MEAwEAYHKoZIzj0CAQYFK4EEAAEDLAAEBD0l0t6Sk7hNNRozyxpS9ZMKTIt2A9JZ Derive=KAS-ECC-CDH_K-163_C15 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=021fef8e473daeda8ef6bf07814d7b9b613e3076a3 @@ -10127,6 +10581,7 @@ PsKrOUL49q1gqVaVW1iQZrhW Derive=KAS-ECC-CDH_K-163_C16 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03a287fd1cca68db47a3c74c12627fc3728568dd66 @@ -10155,6 +10610,7 @@ Z3xGpo6WSBGpzF5OU+px4jEp Derive=KAS-ECC-CDH_K-163_C17 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=029558b41b8b92387bc22c868f51bb7acb6e4ee2e3 @@ -10183,6 +10639,7 @@ MoE5NkGlGNHc7/q+6LKb3hQC Derive=KAS-ECC-CDH_K-163_C18 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0530020c8f6362312bfbe5c1c605b40dc2e032e81c @@ -10211,6 +10668,7 @@ jZYqv+3uYuq0fDtFeaHlFoM2 Derive=KAS-ECC-CDH_K-163_C19 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0521673006a1d9608911d54536e122d809e919d804 @@ -10239,6 +10697,7 @@ ImKyfBhd3iayx31aT01Q3Jko Derive=KAS-ECC-CDH_K-163_C20 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0460579beca16cccce314ff3040de4785336fc358c @@ -10267,6 +10726,7 @@ ihdcl3aKn3K4JLmakfXPjj2W Derive=KAS-ECC-CDH_K-163_C21 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=05ba66964483fe473ccbd00c37ad3ba40cc5969f62 @@ -10295,6 +10755,7 @@ x3zERImF0XlGNrwdWC89EBoz Derive=KAS-ECC-CDH_K-163_C22 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0277c4a76e1613b2ede699a675c1645a786075009e @@ -10323,6 +10784,7 @@ HMQYW2iiYOMbSwDAOkQD9lwl Derive=KAS-ECC-CDH_K-163_C23 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03c6481dac387af39e8c09a553068ac496eea03691 @@ -10351,6 +10813,7 @@ jlKMqIewW9JWTfk775v2YNp4 Derive=KAS-ECC-CDH_K-163_C24 +Availablein = default PeerKey=KAS-ECC-CDH_K-163_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=07b5d096d06d41c3ad6458cc93417e6facc99bc7b8 @@ -10379,6 +10842,7 @@ z3RqDyAvAMEwoavpK8TJd8gAd3mWzMULkN+ZGi6B3VFcGIWZ Derive=KAS-ECC-CDH_K-233_C0 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00a822b141ca1f5ad32899e68c54d1fec3df8100df485ebf1c5868a9ac89 @@ -10407,6 +10871,7 @@ dWdDO9pFAGidTQAG66BU3Gn8wHhngPtfdNOYkhNQTi9uZmmA Derive=KAS-ECC-CDH_K-233_C1 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01662682bec2dfae05e38587c8e6a4d18aef4cb3416989c47c11bbe2810f @@ -10435,6 +10900,7 @@ U5A/s7+jAMzoMKUV1pCrmBSVea00gThIWeVl0H+mH1Dr1mmi Derive=KAS-ECC-CDH_K-233_C2 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00215d511cb95e0e073ee999908a7a844afd75c9acb7a9d724f7fd322b01 @@ -10463,6 +10929,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAI2ADTdnq/VzFpV1TuiCm4WP9OtgSkSK Derive=KAS-ECC-CDH_K-233_C3 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01394e02c70104f2a5308b2d101b02c70ef2d13540602b8e8f82dc6d569f @@ -10491,6 +10958,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAUo+EhrdelJn9crSBLP0khUIR4ayP42U Derive=KAS-ECC-CDH_K-233_C4 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=008556a4c3a8906ddbcb946099ca5dbe7bdb6cd8f37fbb50c96fcefed32d @@ -10519,6 +10987,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAIlmeIj4QlxaYjE0Yi8eqdmvNt+XcsQQ Derive=KAS-ECC-CDH_K-233_C5 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=004ea6e0e34ec7c9bbad47f0f6f8ec0608e736d91e0e56cf3e5cffe8c370 @@ -10547,6 +11016,7 @@ jnpLg5nVAM2Y8nBMdJTm0gN150UoyPVvhn6d12MpgULqAXJL Derive=KAS-ECC-CDH_K-233_C6 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0160d0b9b92a4acd089738fd489ae39734551e888fd05a020ce26498270a @@ -10575,6 +11045,7 @@ eir11GKYAGxPJ6SbUaifbQlgFguluP7AjdLNS8kJpJCuvk97 Derive=KAS-ECC-CDH_K-233_C7 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0038381b342efaa70bb79adb76ceb775de5f45f863559ecaee1ddbbd0313 @@ -10603,6 +11074,7 @@ i7lKCNljAb6/Bn+FEm0RSTIWIWQgGxN0vxhAqhHV4lBjnQYI Derive=KAS-ECC-CDH_K-233_C8 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0122169f1dff445ec663270375dfe914016c38ce6c2d40d0b8098abc60ac @@ -10631,6 +11103,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAHY+KGvlB0C3+L14+nC8rIgN89c3HrM/ Derive=KAS-ECC-CDH_K-233_C9 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0054d47c9d0a9fee258122326be25daf35f0ba0b8449e16b4623a8c0fd7e @@ -10659,6 +11132,7 @@ BUyJTaVSAMNlBWNQVTUDPHpsRI1zv6CPuDcCNMf9usGzTaoi Derive=KAS-ECC-CDH_K-233_C10 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0071aed39f5c44a7ff72db3e0f8284da39dfb2d894f278d2006f9d2686e3 @@ -10687,6 +11161,7 @@ l5aJ8f84AYwJY/8Oo3BIyfb0dkTyp8jFA4Y8J88h7m4KMiTq Derive=KAS-ECC-CDH_K-233_C11 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01ca68ead4eddc8847a3a661cc6628e076bdd4b45047ece72245d094dd3b @@ -10715,6 +11190,7 @@ jFm12Pv6AYG5WpZavRbsJDDCbdBxmE6FSpZ/8RTueDG9MUsq Derive=KAS-ECC-CDH_K-233_C12 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=017a893b2e090780ff8daaf3588f9dfc0ac4dfe1f1e263697a9d1f398ab3 @@ -10743,6 +11219,7 @@ hlk1hdcZAe9lyvFXldFKC+icrHxoAyO8WYA7qHTLKWhnLLip Derive=KAS-ECC-CDH_K-233_C13 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0041fa5fdf495b885699249b7746334b76c59e1c917bfc1ae371b96941f4 @@ -10771,6 +11248,7 @@ newpvIhiAWYiLvpdup6FjCRdu12maCOatbpyhhj7hakN3HYK Derive=KAS-ECC-CDH_K-233_C14 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=015f5adba59d1ee01696cecce4b63e78e68508303ee496ff5abcea25ad3b @@ -10799,6 +11277,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAM9AKuvD5CR6mrQ9qXVRdqgQ4BH5/Zd9 Derive=KAS-ECC-CDH_K-233_C15 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=003d5c29b3753e89ce5064575393392b377ca657a0b73872c82165fc43ae @@ -10827,6 +11306,7 @@ qI/wkhNtAV7XaXpLjJnQFHgo9shh/8nPsPM9zp0UsHMeHaJi Derive=KAS-ECC-CDH_K-233_C16 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=007c01f906caa590898a09f46b6f5383658e7fee656aca0f111f22939960 @@ -10855,6 +11335,7 @@ Y4R0Sg8/AZ/0iq4MJS7ajTQLJcTdoBovIaqjXTm68DZpahEB Derive=KAS-ECC-CDH_K-233_C17 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=019eece7d3fafc9274d361c6fafd9efd9ee485cbacb3baaf6834feb4df6a @@ -10883,6 +11364,7 @@ cLSHPaeFAH8yHivE4pporCPHfO3Tu83gv3uSon/6dklpiJgd Derive=KAS-ECC-CDH_K-233_C18 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01e4b7e89fb1b51179b8792f5cd581c3917e11246d3846f6344ee82eed66 @@ -10911,6 +11393,7 @@ bVhTJwyYABQ8i+21TbB9+PZwg8WaCqfNig76QvQv1i5ELgti Derive=KAS-ECC-CDH_K-233_C19 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0145710c3ab0780ec233424d4e28b38d29f886965bbcac49fa300e1ed886 @@ -10939,6 +11422,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAJnrkc2phiAQPDIF1kieaK1+V9ClHcUC Derive=KAS-ECC-CDH_K-233_C20 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=006941a2a531083563dd886b06c0860770a4724bb04a4ebb2afb1ba2636b @@ -10967,6 +11451,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEANzKoitDOR3AUll6470HxuXwIfOemHdW Derive=KAS-ECC-CDH_K-233_C21 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=001d754ee5351d4582974734072abac23376e24348370934e7b864db0f52 @@ -10995,6 +11480,7 @@ cGzU8yy2AHZR4HQsDYPUtoVS6ber7DZEupdVz/5tTlaUOmub Derive=KAS-ECC-CDH_K-233_C22 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=011346b83791e4bea7f6ba6b1265e5050895d84027c106f77353418f75d7 @@ -11023,6 +11509,7 @@ y0VzlmTFAX2P3nu8Vo/cgCo+NFXzzzVgLfcGhMis3aFloCZW Derive=KAS-ECC-CDH_K-233_C23 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00b4938ed1ed012a9a53892ed9949397cdc4e4a612d54dcf80cdb039f47b @@ -11051,6 +11538,7 @@ ZDKXz2lbAPOnRpVeEt0LcZGe2/I7IyLKsyjdCb34e8r9zSiE Derive=KAS-ECC-CDH_K-233_C24 +Availablein = default PeerKey=KAS-ECC-CDH_K-233_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01b3d2578bde3066a253db5322c85cf9487ce77b67ece955e281b0d7d0e7 @@ -11080,6 +11568,7 @@ OhS70JfgErVpTCKgBnWCW0AgLpW+fatagmFH4EuMUaCbADRXfB8x+MFqcMjhyFuJ Derive=KAS-ECC-CDH_K-283_C0 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0745552817b5d729310b7dbebae687648714a9ae695dad20ca1ab6111c3d054670f21132 @@ -11109,6 +11598,7 @@ Iwm5lIe3Qtci6LelAhc2KAH9bS0oblzfN1zQrlabcAAFMS436ONbFZLvubXq9Hs6 Derive=KAS-ECC-CDH_K-283_C1 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=02eb0c1ceb6179232e91cff91fc8a30553c6ed7e0a71deb1bda0a10735a84593dd903636 @@ -11138,6 +11628,7 @@ XB1qKd6IYsTJntU6AyLllgafkWVoyiSM7Vfv6QU0r0qfkKT0D3l+RSlnAxcmv0HX Derive=KAS-ECC-CDH_K-283_C2 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04a9dd2cf5076814e5329c518c4f27b429dbe01d46682d476e7e78880de368b064236ba9 @@ -11167,6 +11658,7 @@ XK6pOb4z0WrJREXHB3EmMHkLBa4E2NfZ8jZdrprSTExhs+sgwKeYfmpMSw9ZjDcf Derive=KAS-ECC-CDH_K-283_C3 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=044e2cd2bc164d21cf4b9833c0aa62ed059282e62b82f4500aeb422d17e1f6e7e8bbd500 @@ -11196,6 +11688,7 @@ tYjWo4XaZPWi9Gg4ArTLFYH54rN463pPZPWn1DILLKPTR0cm9nDDiDu42kfz10W+ Derive=KAS-ECC-CDH_K-283_C4 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04d4f04d2fcf1bcd8150eaded90e467d3d38f753b6fb54eed8f9d29cd3dcc7be2c83de11 @@ -11225,6 +11718,7 @@ tUDyLJB2E/3MsMjaB9QGX5kMj8N9EA7OOPv1dM5ETcNzVeBwK4DR6xvdZwmX6PJx Derive=KAS-ECC-CDH_K-283_C5 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01c343540541604f68ddbd63c483760d824ded5c18be7e56e6d36a9ac6d25772afb0a90a @@ -11254,6 +11748,7 @@ TR5+MamuNlohgUFfBK+fLPklQuH/j/KPjnyOgJWE4kOkkClJp2WihJhsdQsbBsia Derive=KAS-ECC-CDH_K-283_C6 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=05e38079815477b8a79096ce339c4a255f8b213be74715ea61ef7dd0c0b5f161d9de7521 @@ -11283,6 +11778,7 @@ MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBb/SiVouZjZtt6g3iMcrzkj3m1yVJKCK Derive=KAS-ECC-CDH_K-283_C7 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0531ccf51d1096982f7c2ec513a92bf51c7ac5069cb15c5e2a053ceae7e5550908a19101 @@ -11312,6 +11808,7 @@ UdxS7U6MGk6gb4cCASLTdzsJNOkA+6fr/hrV7VvsD7Gp3c9O62HL7QQAdDE8CzFw Derive=KAS-ECC-CDH_K-283_C8 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=06ffe79d2b7664ee2d8303ffe0ceca8c49a581fcdb49c4af6a060ff204eea74f4cf39cef @@ -11341,6 +11838,7 @@ gXnpN6yGys2sUQlQAHzYdRZ/BqL7moGeLL2s78Fsrg7vLLsLLUm+rhCdt1PJUGFw Derive=KAS-ECC-CDH_K-283_C9 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0311c430db78b6203e27b52988e1e9dae890c655dac4acefa7ee9612bec32e3e5f52be55 @@ -11370,6 +11868,7 @@ A6XikJ3jwzO9BqXhAapPQIRPJBPx/L3tADsdFcnx33VI3iorv3G1FmV62NjHfPct Derive=KAS-ECC-CDH_K-283_C10 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0701d92ed8687138014b4379f1c34677e1744f6ae8c89958a5962f14408d587b95472db3 @@ -11399,6 +11898,7 @@ GYmyzNmTkbbGs6E9BU6pWiNPZYlxlbyXsD+m0kbqWrX0HaIsCO2BeqfASt83KYKz Derive=KAS-ECC-CDH_K-283_C11 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04f2301ed85a5c91c31a7fd125854904340a55e34976a20743bd33d95e476450f301ee62 @@ -11428,6 +11928,7 @@ mHJSmI2grJYnV3y+BCFehxUSnMdjAXkXAdxf4avNZytqoZukx+Uy7nqRPupg28nQ Derive=KAS-ECC-CDH_K-283_C12 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0643900f337ed362815f181e0628ed5184dad3e66a1f030e947f116696312d835f7f6e7b @@ -11457,6 +11958,7 @@ MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEBbsgvqT9hdAWJonFUAVAAUCbbHEtNWpS Derive=KAS-ECC-CDH_K-283_C13 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=063b1a3db331f91abd0af837db9d5f040620d1ddd7fccf8b58e0df43698351ea1942548e @@ -11486,6 +11988,7 @@ MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAQo8okNbE1/+oIeSt/GbTuGBIHwpvhzh Derive=KAS-ECC-CDH_K-283_C14 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0516da1d64bc4b25ce4763e6438257d62fb1ffdeae16d68701d63b603ad53e8587927669 @@ -11515,6 +12018,7 @@ AGtEaTXiN7/Mw5TYA7Zs5s8BUH1GLu7/9iEb1MVgcBFsaQdGj3x2/gEUC/DV+3t5 Derive=KAS-ECC-CDH_K-283_C15 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=049c68c333b96705eee4a3def0d568b0d4faf24df2fc2f1bf40da0af0946240c38e97f74 @@ -11544,6 +12048,7 @@ DMZcyAwShFCPSXibApY7NW8kNOwkm8tlie3k3jbOzTRQ5vXkd7/NwpraSu8PRaxT Derive=KAS-ECC-CDH_K-283_C16 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04dd44c1a30edac2e39a5bc9902625880a18516385c90a9cc6b94c4f111e0260863ccab2 @@ -11573,6 +12078,7 @@ j4rCbPswYp+M+wk+BrOiSypLB3dw05a78VSvQe7jUDVzpt6a/g9tGLAvyXYcoWQ9 Derive=KAS-ECC-CDH_K-283_C17 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0049c165339e9aeb2b516684b442921f1fef3091cf781e03fb3f56e93af1f3d6e500c81f @@ -11602,6 +12108,7 @@ TXBJFTZ5C4dBzdNyAywP/72i+oY8udFcNlRQINW7JNkw2vL+pFVffCTWrvuywB2S Derive=KAS-ECC-CDH_K-283_C18 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0645d7f4c5479baff5bc0cba654a3dcfda56c0e9d19f50f9d8d8c6357c09a140effbf223 @@ -11631,6 +12138,7 @@ MF4wEAYHKoZIzj0CAQYFK4EEABADSgAEAkq7FV5JEkKC6jLltURiGum1E6oEdto7 Derive=KAS-ECC-CDH_K-283_C19 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=028017c2a0240fd746ee72a0bcae1e53e05b7af254298094c381e735523854ea5fdd4f5c @@ -11660,6 +12168,7 @@ H5FCBQZ9ZLGkyFMUAqq9uB/+0sABrLtNC3vlOTBOMuQx4C34sZKtdO0bSwYGv8kL Derive=KAS-ECC-CDH_K-283_C20 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=02603c00998deba52db12814b1f77b2120cbc1dca59009c0d6ea40dcbcabca32c50380d8 @@ -11689,6 +12198,7 @@ HcDhLMOPdouD2v/uARLH1KN/7IQicaCoItN2N+btVRkHEwAa7+EbBvfh004A/N7L Derive=KAS-ECC-CDH_K-283_C21 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=026a719bff31da4b4ebaed7bd043064f9c3930b5774c4a99809332c808aacba4b9e3733a @@ -11718,6 +12228,7 @@ vlJetaagOxlmVxmpApaG+Ed/tcdp77CCyz8aDHnbVcsmTiESwOd557VY9wBFgWoQ Derive=KAS-ECC-CDH_K-283_C22 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=048c48c993040619536f45482c494a39b32e75fe69e478ba06e376228b79eb83d3ff9168 @@ -11747,6 +12258,7 @@ Q94L62h3pUfD7dRYBCGzBR3TY5bSD/zXzzT8oCJRbdS/+sc/yZWunqgUzg5AJ/fG Derive=KAS-ECC-CDH_K-283_C23 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=05d85b16bb2a0d32c73d1402838bdfa512d744fa88c74d3d90cf714c2480e03363d5c6ec @@ -11776,6 +12288,7 @@ WgXdlCYrYDWW+L/xA+jjngjM5V4b7S3+DS+MFBsGQB26A37LOEdEkwyBeNFGQWMk Derive=KAS-ECC-CDH_K-283_C24 +Availablein = default PeerKey=KAS-ECC-CDH_K-283_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=066abb838b5f12b6fc15ceb745600686bc2d5773e53469c2ee920cfba5459a1cab20d153 @@ -11808,6 +12321,7 @@ iFQAfUsMS0zNaNUfr6dji75VXWC3Te8hfGpjxbQGj7c= Derive=KAS-ECC-CDH_K-409_C0 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0176bc5c4036ce5125493a58dd265f04d190f028366f7799f70aedf29ac67b5b37c37238593377a47944f5b639f43856dbd560ec @@ -11840,6 +12354,7 @@ PICqUQpu3/hSxinmBk3118YA/Zjljo6MZiu0uWyLqQU= Derive=KAS-ECC-CDH_K-409_C1 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00575d9e7f70a4a1c5c807b6b5d6b7330bdd764db2aa60f3bfe497e6bfe90f038fb4f6acf7ac06efc3d157c3dc907b2ae093c6a2 @@ -11872,6 +12387,7 @@ ll2gsdKjzBbDHSVdzpiGk3styUHqsNi+i7zRWqbtltY= Derive=KAS-ECC-CDH_K-409_C2 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00ce87aa5e7700384df59d3f1075d282c1aa511391c42ef609b8de1264eca8f7737df91565c73ee884ea882d47c56d979141f0f2 @@ -11904,6 +12420,7 @@ DUf9QE8S1XhJ2Dl81NLG0rS5D4ZEA9Ss0Woyt/9Id7Q= Derive=KAS-ECC-CDH_K-409_C3 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00691dd6b5177702d6a0b1f8b07f3b018478680de7ee079272ff75659335c96afcea7650caa01f996aa37946b78e14a83e579fb4 @@ -11936,6 +12453,7 @@ GLx2g9IkC6aEds55AieAsvpU4PfHZSi3f6Yx/lq7W5U= Derive=KAS-ECC-CDH_K-409_C4 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0136f5c04cf9a56db24ad99bd286feb800aea38d44f819be1c2a9dba15c635c4e122893570233a4c5754a41499eafa39a35aa57e @@ -11968,6 +12486,7 @@ ad6OgYf6nD0bXdom8QtGnNSSXKN+CZRBV1fmiV5YgUU= Derive=KAS-ECC-CDH_K-409_C5 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=004f684f9d559d16485f0023bf012006265ed81f06fbc1441334a559e5500a3f77603565013694023e0d8f44fd12dcf69eb8d654 @@ -12000,6 +12519,7 @@ lkY21QIWh8KFxH1A55/38LtWqTrFYL6Ny5cPWLI7EKc= Derive=KAS-ECC-CDH_K-409_C6 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00137894f637460a63576824536944cddb42dfe63169c84040a0345ad7516ec4f1ad00bb4de20ea6ea43824b9b0f74dfa6881cfc @@ -12032,6 +12552,7 @@ RW6UQWV0lccq12D7NIMl+Jt6VASiwhwqoHcRvPXzBBI= Derive=KAS-ECC-CDH_K-409_C7 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00f03b0b43a351311689eb1d3fc457013f294a7d02ad850c72e4ff9b64ce68a47beb49bc5bcbdc828534f8c8a5e13de5fe522eb0 @@ -12064,6 +12585,7 @@ ndWRwC4gLKBAS7yfY5HXOuAR2smWUVXSZQE5/i5U7Gc= Derive=KAS-ECC-CDH_K-409_C8 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=018f55b81f15f862aed042f37433050ac61718c9939d432b2a20e12d647f99753b8dd5127cf8963247fe7e1d5ade1442229bc646 @@ -12096,6 +12618,7 @@ dvgXiqYAaed6lIrPp00sd6doUWWamBlwVNqNRAC5jhNJf3dgcnEcQsGNv8jrjIUj Derive=KAS-ECC-CDH_K-409_C9 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=002b560d1949297dc7e1bbe8ce49a595762924afcf0271e9c493c18ad5cbfcea5f3900c7b793ae5dd44f48884b0bc3b52c66e05a @@ -12128,6 +12651,7 @@ GXkjZAlQXYz1jYHf08eT5ZVDp4AxTzzY7hdmTcLkY54= Derive=KAS-ECC-CDH_K-409_C10 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=000b43cb539bb4bb42f195ffdbcdeb482b69301c0155a840cd381f55c465a8e57ec51d6555871537b56bf84a1544cae2b2b8eb38 @@ -12160,6 +12684,7 @@ ufmQNNAswPl3ap9sL5t9UB91vhhZmwiMTFiBxmFG5bk= Derive=KAS-ECC-CDH_K-409_C11 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0113dd2cf8732ceb8a893e149f13d52026e5d829322d0f1233a624fd6b74d56e7e6374d70942a25152ce5073831660333fb3e070 @@ -12192,6 +12717,7 @@ MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAPVJxH3I6S/s04tXUIlYgORJ8eMavgux Derive=KAS-ECC-CDH_K-409_C12 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00c8e62ac25c11e86b98642e4ec7adde9d9436f9337369fb065abc9ea784f90b8b8bebae35da92185486191dd9f49370b1148ce6 @@ -12224,6 +12750,7 @@ MH4wEAYHKoZIzj0CAQYFK4EEACQDagAEAEEeXUyW413ptUHaX6xpEzZGLIgtjozk Derive=KAS-ECC-CDH_K-409_C13 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=012505746f1a40ef75f950595211ce04f87f1daffffdf8c12600a9e2994c8c1d8b19c0e0559adf9a94762cb983569de6d0d8baca @@ -12256,6 +12783,7 @@ I4mwhm2zuH5cgCXnm7T0+Zb6Y1KrnLIBcu941v/KkG8= Derive=KAS-ECC-CDH_K-409_C14 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=019a71ab576546e2351aa92b6075e8229813e6a2cb3647147b192b4597f1217223e7197d846c0d65ea0d4aa4c503bd000ba312ba @@ -12288,6 +12816,7 @@ zmBHvZ+9QNiVMBlqRpOuWV1plWUDudKrSqvnyVihTGk= Derive=KAS-ECC-CDH_K-409_C15 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=014f4b7ea93c9dd846d2228c2b6a8dfe616057232b7af845a570cb6cacf9feef2d8ef4fafb285b38e63cce0a09b4d82dbe43a390 @@ -12320,6 +12849,7 @@ QGlHgcDYsnweSUQrmbq5Pvlmb+oU1IQ+5LxbBFrFDBE= Derive=KAS-ECC-CDH_K-409_C16 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=001fe2ed30ad4143c5eeb0b7622e6aa49e4e4d51c1ddc467b3fc54215dae931be0b6b6443e716895acb6570cdc21fcbdae46e5d6 @@ -12352,6 +12882,7 @@ yrV4G+CijScznpRw4WbH9oXy6pFDMQ3KGzq44cjmBZI= Derive=KAS-ECC-CDH_K-409_C17 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01610efb48fd22261921f7484ed6382fceb6bdf28f3bc2340a175b7971b93ed5ff357ed55e5307bbf42e40a5b3fabdaed0ce19a2 @@ -12384,6 +12915,7 @@ lGzd/jfoVkO40XnKi5UpEG+cXzqVqIGSJfnX1Kcw/SI= Derive=KAS-ECC-CDH_K-409_C18 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=008d990982aac8d5371b867de21e09064fef30e73321337dc24f19ad5ddb6c4ad217136b7c61e360a73fa7571d526c8f514a06d4 @@ -12416,6 +12948,7 @@ YuqNd3uc30Zcu1kQfnCZJxToy/rHYpbV7emcSNOKiXM= Derive=KAS-ECC-CDH_K-409_C19 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0155dc98729c8c1bc65eb8a3ec09135f46bfa313bf56aa3169e312db8991abda338f8ac7a75bce42884068efb7e6e625939d2b88 @@ -12448,6 +12981,7 @@ zOgyxNZeJrrnq45fnHSz1CGlKOVZd4qye1mq4akW1Os= Derive=KAS-ECC-CDH_K-409_C20 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0109e85c684d027a625ec5e6df952e2f20a14ed5b092d1b1b38435251303844d230fffc53d84b923555e1e1cbebe20b5d68c3bc6 @@ -12480,6 +13014,7 @@ wIsVwLSKesOe7QPg7pfhZM+qWrx3RBLL//lKnqKpY2o= Derive=KAS-ECC-CDH_K-409_C21 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01ae814e02c4684c21dd7e58a65ec51ec68c37e59e299ce65608186c0acce08e41c8320b1941a611fe66b1921b558d7f402d0eb0 @@ -12512,6 +13047,7 @@ twrJXFjmIUa+tiu2aP1X+SA45Fhc3h+R7oxSUmr+sbU= Derive=KAS-ECC-CDH_K-409_C22 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0140e7db3f6415d884822ccc7316a329dfed177b76c0117abd722feca889bee4e14e65d26c6cc935c0e94205f05fc1a7abfb0348 @@ -12544,6 +13080,7 @@ SpCaIX+zXeZliCM9re9wNv+dnyTro3cuL6MDe7rmPP4= Derive=KAS-ECC-CDH_K-409_C23 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=002ec4deac3e83d60ad39969f2f93b49f31875831ecd51ea5c37ca48de081c0c8cc660edc53a222f3043447f9cb752763be7494a @@ -12576,6 +13113,7 @@ hJleBotyRwOuCO1xoyszSYensx1sJjcVKRcyfTeszTM= Derive=KAS-ECC-CDH_K-409_C24 +Availablein = default PeerKey=KAS-ECC-CDH_K-409_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01c9cc05d19f96c4d233039cfbc43ab68d657bb507f46a353091fe98fc0f422a8e7593c195d326977a2be6bbd2cb44eb1fe81650 @@ -12611,6 +13149,7 @@ EReH5X0JAsDLEyoZCm5i85hRHAwsTNUNRXA= Derive=KAS-ECC-CDH_K-571_C0 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=003198a6b5d6cce847e24348a6a6ceff7a89ed3794d7acedc4e858c80ad04a74dbc02c7038e05ab26b2a299ec92ee0d2c7e66a81872a5157fbc5d4d37ad598d6ddee995ed28a2d74 @@ -12646,6 +13185,7 @@ JmMCsewubiwjdbRksKUCxQU7WzSL0IF4xyxgMQXQRoGWpGldwmfW4QnxsSdEU7bv Derive=KAS-ECC-CDH_K-571_C1 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00577147459262e5ad42f222827f20ed574b2118924205bcdbd339ce20cfb085d072fd70f4ca1f5768fafaeb5710f7ccbea4fc2ae5377b0cff20a889a2201739139bf788a9bf2d7d @@ -12681,6 +13221,7 @@ IcoGLPca8KL441xNf5MSvTSoRqOA9j8NxylMGIdxAzV+INHw7v8xKpk96yoez8gK Derive=KAS-ECC-CDH_K-571_C2 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=014662b261d0bc2168642bfa4f80c4b3fe8176f604ad3703f443ec7aaa3dcf3c5465b869a8fcea60b8f55ce7118806c5d28a04848bd961db0061209b59bc02979acce9324d7c0c31 @@ -12716,6 +13257,7 @@ OO+VPHT7KP19ik7Fo2MZzMRKGaqIIB3ay/g= Derive=KAS-ECC-CDH_K-571_C3 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=051ec4db0622b7b1c798366453c70f959376ea3942aed2e931ff62a4019eb12ba5ff119214c8bfd8bdb66e62b562400f2d3d48a84b1b3baad3667f735ad4d0f183bdb91aaedcf1f1 @@ -12751,6 +13293,7 @@ uhWA3HTidR18zZGMRrS+aHWk5MKQ2VnCPBI= Derive=KAS-ECC-CDH_K-571_C4 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=05b355eb5c47d8027b6c5301d2463b99c636db207792e2975ab1a53c1cbb131280288432a79a3b47271d6a2bd777298baf8a675f66be9dc72c3588d299df8b52e7840322b43c2071 @@ -12786,6 +13329,7 @@ MrZc/0enma9PfIY44tf4WUjEPxBTTJgMy2I= Derive=KAS-ECC-CDH_K-571_C5 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=052bd78bf1326c6d91840a351d4874d36b147139882356c595b8607f9998773092a99adf70adeed19e122d4d2fec16285f000161145135d96355cba039a96335e7716724c249f88b @@ -12821,6 +13365,7 @@ ns11isTQhNTI14IZ9vrZTTQa132szau1Sis= Derive=KAS-ECC-CDH_K-571_C6 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0226c28e5a6bc735935f9df2c1b02d096d4dee41ffb95a67905aab8de1b2d8c66e2bb471293091438d3f05df7e48003e58a958b72f839f7f2e2c54287fa3cadcd41a2542ae4ec03a @@ -12856,6 +13401,7 @@ JGNdrMvX/DDSByB5e8KRNixVsCSssr3PPVk= Derive=KAS-ECC-CDH_K-571_C7 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=051a3deb052d3e99bb6ab6c6b284db2c998e9bee543e02e57f1b13fe9fafbfe53a89658c58eb947dbd178aea2f6cb28e305c9867bd65bb26f71793f90c984ca11113e1a8dbc8f7d1 @@ -12891,6 +13437,7 @@ tgpuU3qHU4DSW8R8e/I2TdaKZvIdD1eGakI= Derive=KAS-ECC-CDH_K-571_C8 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00697c751ddbca7034fb4d3fc1b2618daf78cdae464e8332d1215020c8f896f4864c7a6f2c61a363f730f58fd3bdb4f78a90b40aeb83b4fbc1d8d37cf6a27a6f722c68a82979fa16 @@ -12926,6 +13473,7 @@ ITS8BB9mki/MTjk44MbTAutCIAZ4qXE58pE= Derive=KAS-ECC-CDH_K-571_C9 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0322517da30e010aeaa2ec9bad2745d8e67f906294ecd6b1d16808be3837f79070d0e1bbbd617f4b8b031d3b51ea2acc59de408a130138c78571f8800fa907caf550d23323d1c818 @@ -12961,6 +13509,7 @@ M3jOO8grAH9t5PfLltrfVaTIc0o385pcLyU= Derive=KAS-ECC-CDH_K-571_C10 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=000911ec1cf82a22c849b401dfe56453a06f4af32644ea8b63135b68a979236d05968eeadca7f0cd339d295cc58967a7f38cfad6e947a71295733e42ca3c1ba9b4ff6195607bb530 @@ -12996,6 +13545,7 @@ SnQHPh/t9i6MgSg2IrU+ss2ye2TDwd142gyQ3Ww8d2rRRjAuQ6ulQTebyPO93C4Z Derive=KAS-ECC-CDH_K-571_C11 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0724c979affb3ab8d307529759bae5fa67319d441851e5817fef014350e3014e068428c9dac395c5e7b9e5b8877457b3e4625ef49ede4ae3626755eefc3fb3cf09c23e8a5a9f8c25 @@ -13031,6 +13581,7 @@ g+v443loVzY6jgT4dCoJ1+yhY4bWD9fIWN8= Derive=KAS-ECC-CDH_K-571_C12 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=005a526588a3a2ce08b20925e83987eb0a1e68f997102df7f9af83823ac8e06abbd29c04cb1f974ba9c9ac49b48b5af37679a39b532d359cdec3d41b3f80a1ee12c80276256b738d @@ -13066,6 +13617,7 @@ j7pN9nq2ojm335lyJjBLcxZdli9OHS0Y3p8= Derive=KAS-ECC-CDH_K-571_C13 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=049db68dc9fb4cfbad8247ca4fe7c573c0640abead8f319194d665ecaf4f04b61f84f5df0d8a6386f6df04ca1a685a7394567eba5deb9f739b1e623ed6507021593f0e22e2dfc3f6 @@ -13101,6 +13653,7 @@ m5IFcRkIW8fLICPSP4gQFCD59Qjw25T4377dXL6IzsgKnccI32zM34FddbFGKA18 Derive=KAS-ECC-CDH_K-571_C14 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0343c45daab4f91e02ef9bd6e1cd157b00ab0ab0a3e0d9734918a1d896cdf7cc1212bf74d7bb9bf96bd4abf42df325756c407217f44a5950c2b66af820692742ed7ebe14e48d2d88 @@ -13136,6 +13689,7 @@ tIy98S65gm1o/SzxcdTWHD8nXUSUfU30x1I= Derive=KAS-ECC-CDH_K-571_C15 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04a565cb3e15236a7f6c413afeb419c082427b10a6d07ff87e81740716433c06b3254414381e4ff9860340dd6201ab6621d162cd12047a5515ab1d65f20c97eb3d7132642f8ad58a @@ -13171,6 +13725,7 @@ HgFAevSrmJ/B0Sc7qKGCxGGFbV7/5wXX3+U= Derive=KAS-ECC-CDH_K-571_C16 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=047265831f1f589b5f30806e2fb80aa7844cbf32b6993384beaac7d992b327b97dfd0bb89ca09e711507e846ed4ad003e7115fa8843b23d38f320e43b5eb506bde48fbd7af4983b9 @@ -13206,6 +13761,7 @@ LSvddaH7TFeWpMVpZKo+Q/PaJsc37dnLCRA= Derive=KAS-ECC-CDH_K-571_C17 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=059b62c25c96955b8fb4deddcf90ebe6845ee71ea357739273d6d67f21a0c47d154add9d5d4d2b657fe1988ad614b0b4902faa92fe999abd754ad33cd6b92fe2f6a68a6f2c1eeb27 @@ -13241,6 +13797,7 @@ KykFJchoJYO1X37OxZuSCEb3XRHQIen/sgAYY59quTAiRywZLTmOFQzcYwoR/PlC Derive=KAS-ECC-CDH_K-571_C18 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=02777c72853b76b29f69d3aa27a1659789a025af0633d833b22b57bf328d231ebd128bf96a4c8a7ffd2ee7a51e5ebb7a8e5bca20e4ad49671a2123dfbc0d6c40594e04765186de06 @@ -13276,6 +13833,7 @@ InIH1mSfPZHnv1+N5hG9lxgYEG3y43k1u0ZM2edGlinGrn5/KyJAJ2yw7tt6JtDH Derive=KAS-ECC-CDH_K-571_C19 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=02c2ec1632e83416182a9a438f7360b88061bab84f5bded3dd8a0c87baf44507df94fdcf99353b107e61cfcfc8af071b3aa8cec7b34a542bf2ab8ea0bd9db67d66b428c9a6c14458 @@ -13311,6 +13869,7 @@ T7TQh6gWuFRE2IK+wqwl5C/eeOvMp5pv3fA= Derive=KAS-ECC-CDH_K-571_C20 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=07e1d202a54d34020939f7aed56931f21b206761e4fc79b9a7b320f81077be322ae7809446b5b3ea701618ecdb0a1796ab80407a281bdbcb4d580131b61f8743bfef7a4d9c5941f1 @@ -13346,6 +13905,7 @@ yqRtIhB/1t9TEItT/gu5a8l0wDqMZSj5eS0= Derive=KAS-ECC-CDH_K-571_C21 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=07f49ee5d822b17e3f1ec9946fad8d0a0a6b327242afe675806b3e6b7541745e21cd1b70df926af057a9f8deae4cb9a1edc782014426152e8aa4cf6a4080dad4678dc8ff0d9e1af9 @@ -13381,6 +13941,7 @@ a6gSNaTcZzgjf879OBK3q0NskmxQxgDm6Qc= Derive=KAS-ECC-CDH_K-571_C22 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=058cd5608dd9d64d4d822baeca123358a4d7e56d3777ecdf569a149c2f85ed35479eaeaababd0b026dc3b56aedafedfc8491040413f85b669d8512a3ef7bc8fe8706b5c7585370aa @@ -13416,6 +13977,7 @@ Anh7FosfofS2dJZFQGxDj40xbWcPHg2LAwE= Derive=KAS-ECC-CDH_K-571_C23 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03bf7a59bbdd688682c45664d20c19cb2d24fcca6772120cbeed1cde762d449ebf22855627eb6b2be6e7f7c0f0034d02686f2a4488549f8cb198e02b46972bcb88914bea66dd6400 @@ -13451,6 +14013,7 @@ doXKrRXTvCcOQ0Iq2HTnHkCKcabIqQ0q2Xg= Derive=KAS-ECC-CDH_K-571_C24 +Availablein = default PeerKey=KAS-ECC-CDH_K-571_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=06d410e9ba6b8b87b00d0f676de8ba27f6afe7e308c2e992f318fc14cba0a447316ad86e8e6c1d3345d8e4035735232c2c597e760b8800a89a521567b09408f9c7be279c137c963f @@ -13479,6 +14042,7 @@ lhVBhEpKozdpp7znEPZkClYM Derive=KAS-ECC-CDH_B-163_C0 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0100fb42d177ffe6c31378e2e04e0da7376ffe8765 @@ -13507,6 +14071,7 @@ i7dJm/iV93+PyDAdbhx6n2GR Derive=KAS-ECC-CDH_B-163_C1 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0681c9e59eb7eba769f5b6f2b06ddf1efd12997995 @@ -13535,6 +14100,7 @@ P07ccUsNC6pb/F2LxqwECJ3k Derive=KAS-ECC-CDH_B-163_C2 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01e0749a21fc508f76dade85435bbbe12c448bd8c4 @@ -13563,6 +14129,7 @@ knq1eWlhIwlVdayUmwen0dS8 Derive=KAS-ECC-CDH_B-163_C3 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0320398f7acf791e0d602d7b94742cce58e9fddbac @@ -13591,6 +14158,7 @@ MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEA4DbPfKxwBVKjoyzBK7NWB018xXNBxU0 Derive=KAS-ECC-CDH_B-163_C4 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03e4de43de85223d818e5be6549c29cdfa1afe1782 @@ -13619,6 +14187,7 @@ TOwQVyhS4fYZIi4vXsTg+lqm Derive=KAS-ECC-CDH_B-163_C5 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=037b178aab014d5abab305e37deed7f4798cdb862c @@ -13647,6 +14216,7 @@ yPJknC3c2cJLZDQzsU2QfFkD Derive=KAS-ECC-CDH_B-163_C6 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00958b2aaa6061222dd248a6b9700fb6839dacdc99 @@ -13675,6 +14245,7 @@ EHqJpzYM0uIXU01t8pjMS8RY Derive=KAS-ECC-CDH_B-163_C7 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0393387e1dab35748f20d506a0e2b4dc0ee6c3ff39 @@ -13703,6 +14274,7 @@ vbfBMnyZszgg2+GK4RT7Q1lJ Derive=KAS-ECC-CDH_B-163_C8 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0212358d3f8bce69b662447333b3edbbc9b2f7e805 @@ -13731,6 +14303,7 @@ YrbdHTFt7b0PHVML7W5VazrY Derive=KAS-ECC-CDH_B-163_C9 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=023472fa59846f7be07cf060cdd69a9fbb27d4fe44 @@ -13759,6 +14332,7 @@ MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB5P0sxFy7uZvJ2nrMF0DtcP3z/+LAfPs Derive=KAS-ECC-CDH_B-163_C10 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0173a056c4c9ef6707cd23928999c4680f42b71f7c @@ -13787,6 +14361,7 @@ adFKzIMzUzqIwuiCSGOkeuAn Derive=KAS-ECC-CDH_B-163_C11 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03d34f411a297d7c990fa4a83b5f54759607f9d33f @@ -13815,6 +14390,7 @@ t79Aie8CzQpd0Phr2HmKRMVs Derive=KAS-ECC-CDH_B-163_C12 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=06120aed8d4c1e506710e2cfb98ca2022e642ca89f @@ -13871,6 +14447,7 @@ f1Qmo0Eacn7dwpo+wilVg2jR Derive=KAS-ECC-CDH_B-163_C14 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03da9c0879219e48c3df56174898fab9ee5b0a6bcd @@ -13899,6 +14476,7 @@ H2kTkU/+FVnHwRTGMbtrKWF+ Derive=KAS-ECC-CDH_B-163_C15 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=05b33fe3874d32aed99919265cc0074902e538fe54 @@ -13927,6 +14505,7 @@ MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEA1Pi2kWrfEkwKAw+20upABLVbfYvAmkx Derive=KAS-ECC-CDH_B-163_C16 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=053dbce9826af4d290036feb46875e975b7848a9c4 @@ -13955,6 +14534,7 @@ mDvsayiJyCEb8jEUm1vrzHXg Derive=KAS-ECC-CDH_B-163_C17 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00d49b971cab937f40908913fe259849679ca076d9 @@ -13983,6 +14563,7 @@ lT982scdBS5VhVdGtD1EGBuR Derive=KAS-ECC-CDH_B-163_C18 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0483ad0b7f8a716273f624b8979c19126705266e4b @@ -14011,6 +14592,7 @@ tlFDgyuc79XZzmnsTbLt0Geq Derive=KAS-ECC-CDH_B-163_C19 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00f69dcb547119fc9b8c454335aab184c3ada5f1c6 @@ -14039,6 +14621,7 @@ VoalOMJaAr6pL0IYQCG16iWT Derive=KAS-ECC-CDH_B-163_C20 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01bc5ee5261b2bba55b10cbaa6cc3c97b98d00ffea @@ -14067,6 +14650,7 @@ MEAwEAYHKoZIzj0CAQYFK4EEAA8DLAAEB3L0LScqBX3g/5Jsn5RgXGZ10hUmBgLn Derive=KAS-ECC-CDH_B-163_C21 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=008574d838d3de87965fc1b4343fe4f078588c4ea1 @@ -14095,6 +14679,7 @@ LT9jjUl45MpYylpO8ZxezOqN Derive=KAS-ECC-CDH_B-163_C22 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04579b477a92ed961cfdb2014407e88e7716452a4b @@ -14123,6 +14708,7 @@ K92ZC9eeY+c1shKCrhtepmZI Derive=KAS-ECC-CDH_B-163_C23 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=035a8c10e64403c52ef8d17c5f4dead0df81fb1f21 @@ -14151,6 +14737,7 @@ L7KsJETpKHVONlX9YuOkJWTo Derive=KAS-ECC-CDH_B-163_C24 +Availablein = default PeerKey=KAS-ECC-CDH_B-163_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=000142615e3607ac148c4de8f334be849235d01cdb @@ -14179,6 +14766,7 @@ DpDw9oaiASp59lIyMIohyYwBVVzK/H3OFcj+0wJadgy9bCMn Derive=KAS-ECC-CDH_B-233_C0 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00e9f3d8c4f1bec0f920e763ea1bb7415899f01734609e7547dc425ec946 @@ -14207,6 +14795,7 @@ vGTkeiKtAMvYuV+J5CESi8c6Q8XMJU44ZwlquJ14iy7TuQqW Derive=KAS-ECC-CDH_B-233_C1 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00f1fbecfadb158d62eb1109c085124fad67a8795b58815eb396c95db4b9 @@ -14235,6 +14824,7 @@ HT0bI1KWAISXFSGHqLOylYodCi7s/0SSJRgHy/0D1fJoW8o3 Derive=KAS-ECC-CDH_B-233_C2 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=019ea831c51d88a7cf754495a1c474082ed481c8eb83190a77defb09d479 @@ -14263,6 +14853,7 @@ MmXz65ZXAbCUtIAvOXZj0OaC+r8clMTiFOSDJ7le78uSt3H9 Derive=KAS-ECC-CDH_B-233_C3 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00088425fb04c2ce408f08d81385a322703a077bf00ba0791e4e79b80419 @@ -14291,6 +14882,7 @@ L9CdtAJ+AHA5Htqnbw45cDlMrAM4BhBYhYw8c9XLUS5TJjBP Derive=KAS-ECC-CDH_B-233_C4 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=019b5efb23bc18a4f18c22fe2fd5cdbd02372cabde5e5c9f4b4f9a49438f @@ -14319,6 +14911,7 @@ S2BkJTmpAFGO48GuVGQE3x7M1pqmhWQx0ciIHPBXjP9OuMEb Derive=KAS-ECC-CDH_B-233_C5 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01f36d9519c3d47f030eeac3338db583b96fefa551a4b56cc5567f2d9d7a @@ -14347,6 +14940,7 @@ YqDue8V0Aa6jysID+MeAR1omCbKXDMhvlupAEcNI2oJiszSq Derive=KAS-ECC-CDH_B-233_C6 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00e54b1c916ff3ba1aa0b2b99f0ebde4f1a4cc6a10d959bb2f7f4c777b84 @@ -14375,6 +14969,7 @@ ApqdO5QpALdnF0opILYvHwL6eQl4RdUdk+DIEEQQgxot1Vw8 Derive=KAS-ECC-CDH_B-233_C7 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00bc0dcf7585753cc79aa412d2740b4b2d1c644fc9755cb0550286bcf68e @@ -14403,6 +14998,7 @@ UkhvCVWGAHNx4ogUX8JaWpy18qOGA08vMoxuqiTIsJboqx8M Derive=KAS-ECC-CDH_B-233_C8 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01b7ef3148be331115321b1c2a68832fdfb991b26224a60dddce3e060d27 @@ -14431,6 +15027,7 @@ tgofelHlAC4vtnLXK/ePfP7cQNNybGtPtYVBfHR2tlXjK707 Derive=KAS-ECC-CDH_B-233_C9 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0041249865c913b287a253150b207e2682efd96057cb0709e9bbb48c0fc9 @@ -14459,6 +15056,7 @@ CTFiC6mWASjQC3dYmaWKWbyyq3nWCeLc2pjmUju2cWhVT4Tm Derive=KAS-ECC-CDH_B-233_C10 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01cf480fbc2be2c2c4448c88890972c7ff9cbe08a75e26c3809596b8b5c0 @@ -14487,6 +15085,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEATV25wDzY2f7dBhC8jGInzaCKqspM8JF Derive=KAS-ECC-CDH_B-233_C11 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01ce8abf3c8ccfa30e5f35ddb75f5e106aab1e67086156a1ededa1717b77 @@ -14515,6 +15114,7 @@ wb89+ZpTAZrxExvkfeCIcINdoUlG/tcwNBefgJKY0BSbFt02 Derive=KAS-ECC-CDH_B-233_C12 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0025df759a20312361b9f6767efe8e8d69979e34639469a91fed9fce04f8 @@ -14543,6 +15143,7 @@ dHD8zHkfAV3piINdaBLwvdcAeolZceGgb00izhMDyfVe/mR8 Derive=KAS-ECC-CDH_B-233_C13 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00437ab4a53756ff678a1f580c0fd1f33b23021d62060808453b4aabe627 @@ -14571,6 +15172,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAQUTYgruDQR4hyQ46Zsj6kkAFT+TZusX Derive=KAS-ECC-CDH_B-233_C14 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01ebd55823c57d1fc7b36cf1ed2051ead64db6d114014d3407186f50d957 @@ -14599,6 +15201,7 @@ HT1Emy/vAZMXVM5c9Vehwazt/l6aewuR+BZD2oWGpoZYhfBC Derive=KAS-ECC-CDH_B-233_C15 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=006d07f6e08b11a060ccec43b07ca7d9eaf6c3ece06f4785519284bf6f0a @@ -14627,6 +15230,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAEhFzmYbHq40wWmfG/443IfvKLiwp3cf Derive=KAS-ECC-CDH_B-233_C16 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00aea594f092b4052f7564b2e5651bcf43ef7e336a064d6bfb1a89cf5e51 @@ -14655,6 +15259,7 @@ GqgDoDKiAezfw5QLfQYYzWMVRBdR9mPfdNNWSS75NLS6KyrR Derive=KAS-ECC-CDH_B-233_C17 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0099d6d076e14ccfee15ed7e7ef384bfee12deba8c9ae8f6cca3486a1494 @@ -14683,6 +15288,7 @@ XqfSXIZ8ANligeB1benapV0u9lc7sv4t0Jtx2RGRpaBDuuDz Derive=KAS-ECC-CDH_B-233_C18 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01b1e977c43afd203132c085b95db0e2046a4b6ac2c046ee9ad665050578 @@ -14711,6 +15317,7 @@ DHG8n089AV/sgQzbF5/NHOjk3BokmeQN6KSkmpQg8A5WEQz0 Derive=KAS-ECC-CDH_B-233_C19 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=000e4cb704355cba1b40cee3da102cb048519a91b4c789b3757cfdd933aa @@ -14739,6 +15346,7 @@ BYldeRr8AU9haYOtCOdFMVxHZ7CuIab9imKcJYznrvpMF6jg Derive=KAS-ECC-CDH_B-233_C20 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00d8c13bc5e819c6101daef3f6fb5be6bccecf233c4b7fc65054e8e8d3bc @@ -14767,6 +15375,7 @@ qWvD6ellANGz0ONdYX4J4HjFcaX0HqIt/REtZ6lNjfu6Zump Derive=KAS-ECC-CDH_B-233_C21 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0129af50fa085133771753f297a313bba0d2f5882e7634b7ef5adce760ff @@ -14795,6 +15404,7 @@ QIFZLdb2AWJ3rrPhysASGwfZN4o6DLxlZ7SEI5KeNtyFXp0a Derive=KAS-ECC-CDH_B-233_C22 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0077c4ea1095fadc4cb4190a3fd530c7d15325e5d79b8e8a2b708e2344cf @@ -14823,6 +15433,7 @@ MFIwEAYHKoZIzj0CAQYFK4EEABsDPgAEAV9yPamjjC2lBiwX0Lg3Ui98aceT95wX Derive=KAS-ECC-CDH_B-233_C23 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00d9eb3c79cf442595dad03ed4a38daf358b97d5dfc01cb61ff200a47958 @@ -14851,6 +15462,7 @@ ll0n0qxwAMd4Tu+InEccnSaz4N4krStL+Lu6b+GPUaQSGIBY Derive=KAS-ECC-CDH_B-233_C24 +Availablein = default PeerKey=KAS-ECC-CDH_B-233_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0124c19cffc0b9549bfa378a548e8ce11ee7fca28d2d898de49ae1f2ff61 @@ -14880,6 +15492,7 @@ fRpiyck+pNH/MA4TAmUTL3tMZLdLkXntDy4hH0Mo1iVAUCL1VBcNqTK4D998GqsS Derive=KAS-ECC-CDH_B-283_C0 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=065194e26090e74047ee75f13f9769d20e1b52189650011e283daa090732cc53755dc366 @@ -14909,6 +15522,7 @@ ZEgW3LhEOCyUTMIfAp0oD01MDF/XD34kCVlQEovqPK48pG9qX3C3Of4amQJogE44 Derive=KAS-ECC-CDH_B-283_C1 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=075c535cc70de19c92d7314afa2f33200903431f6990ad40ac31dadaf4e492a799b75b05 @@ -14938,6 +15552,7 @@ dC7g8CfMtBV6KKIjBZhut/EJqh+FVuuivciOSRO2Xv+5ROrmOWNsun4B3DcYvLNh Derive=KAS-ECC-CDH_B-283_C2 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=02956f63d48a49a330e2068955cc2886dbfd5bf72a81b10ed83f2d758dd315eca172927d @@ -14967,6 +15582,7 @@ MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEBzsJKipNfJoXu4jnW0Cp5OQ7mYE89haC Derive=KAS-ECC-CDH_B-283_C3 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=068a3f6938c44b797524377508585842c6a7f1af5ffe9131dd3ff786ae56e1739345d3d7 @@ -14996,6 +15612,7 @@ c/v0sclX+Mu9kRO8Ah/79i+yUx2znvLQvc4NnBQckunNymJ8qjm1k/xKAhDo7kgf Derive=KAS-ECC-CDH_B-283_C4 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=019b48d5eeaeb05b58801ae8f345ad9bacb91daac885e506949b849ebc67bcbfa308aab7 @@ -15025,6 +15642,7 @@ E0w94BTNx2A1NHzAAzQdgHSfGl7J96xiUjhP79OLbyu83Bj+vobBYPXnjAA/Bm4G Derive=KAS-ECC-CDH_B-283_C5 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=061b3bef1766460f6296ed47d39ebf5a710d202d2b7e7cac0f0d3b235405eece99aa30d7 @@ -15054,6 +15672,7 @@ vnSeIXr8ThunnnYPAr9RxE+DYcMFTK1kD5JEb+OCCwY89LsiyhfAonT9RvUFBPvs Derive=KAS-ECC-CDH_B-283_C6 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=055d579458860a3dd92ac6570847632f04460755c22a4c432cf4dde9611d2ce1608ca185 @@ -15083,6 +15702,7 @@ JrcbMqwGwLrmtMuiAelzP6nSmWEmlCDbJO3A1a4oXXjJrhSzixAZ8TZS8ZAnfcR/ Derive=KAS-ECC-CDH_B-283_C7 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=054fa7c6c84fb89e5892d9194540860ea31ae2b6e37a86971344230ea512a3f6c0569216 @@ -15112,6 +15732,7 @@ ch81gOBiZf9TihlLBrdkwf92mFSWuURRt1bE8w/fxjjYmQMSu+zL+9c+jFqFWtt1 Derive=KAS-ECC-CDH_B-283_C8 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0353ff03afda3772984aadc4000e1275656607154b06c3a59c664945fa6fde1c255ffa86 @@ -15141,6 +15762,7 @@ awijCIvMUO4yA+JjBYFbV5/13sb6yXe6cIizM79MAjHaAhh07gDXH+JdP01QpXrD Derive=KAS-ECC-CDH_B-283_C9 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=050795ba093d2e02398c358951f20c9e3b4f60628a96a4d0c46cb8fc0005e5331b38a09a @@ -15170,6 +15792,7 @@ dU0LFRNhFX+BJFkwBzA02kFnl9qVo4Nu7yex+icfWaQ0hI6YC60v3VP/0eNm/2kX Derive=KAS-ECC-CDH_B-283_C10 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=02ab08d63cdb4be2502558e67eab27570f2d029e7f981d153b973080585d01e42f7187d9 @@ -15199,6 +15822,7 @@ l7wf63zKMQAi4iE9B767bA4EbVr9v6h+qYyn9V6c27BV0MxUm0RY1pmL27NFF3OI Derive=KAS-ECC-CDH_B-283_C11 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0599757e3ffeb484b32d3b47828b6823d46786d35477082ceacf3a5a11552394fe58f53b @@ -15228,6 +15852,7 @@ r16vB1MoCWaraTeQABs50dhytl4xJRwfWE5P4+111TrZDoNv6QyNuU/nfO8LynIE Derive=KAS-ECC-CDH_B-283_C12 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=005e331af55e96153d8a7b906a4a19016a26381977b49f80b9d70db099053c6a3b8e80d5 @@ -15257,6 +15882,7 @@ O53qDozv2garwyyPBY3Ezxv5hdG1ZpcIR8umuKT0DH5ipYCLByC7uM3ztFMeOAvn Derive=KAS-ECC-CDH_B-283_C13 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=07e132ea71a16c7cc261b9d6ff6fc52cc490da616b07d92f9e591fc1e630d3442572338f @@ -15286,6 +15912,7 @@ QsDGUmO0dpgeXzFXBEvKaT6dOxp/pq1C2382saZXEtCe87txXiZAoYL0NmIGhsCk Derive=KAS-ECC-CDH_B-283_C14 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=010f26817098ce1bbd6743784d6fb65e60699c14933a2c8d854027aa58b58db9e66a53a7 @@ -15315,6 +15942,7 @@ MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEAW60u7PDhuD0L7A3vuR4xMDb++Vcxo4z Derive=KAS-ECC-CDH_B-283_C15 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00bdd8ccd1b40c5bc2efc1c105999350fefaf784710914ff639582f1277678699491140c @@ -15344,6 +15972,7 @@ hhDi1dfdozdaYH+bBRM5ONyZFE0W6nUlw/5OMuMg7QdbllJ+E7KpnJ8nrenvnty2 Derive=KAS-ECC-CDH_B-283_C16 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=014a83e747c90aec6101c0a752d92eef7475b00051ecad3d7c2e50cf4eba1ef3c80b8c94 @@ -15373,6 +16002,7 @@ vh3SBd+TCrHJG7H4AMLiHhIGzUu1tiKr6Xyj8lLLxo0FSnf466utWT+xhjMGkov3 Derive=KAS-ECC-CDH_B-283_C17 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00afd29e352779a39021536ea50c24fa264c599f8f8fe8f2ccf0615a6547a064d7c1a150 @@ -15402,6 +16032,7 @@ Ho9YV6EgvonXdlPpBzfMBJaQ+XCCSnsMICJDloLJ2C9PI+SOXwf+qWJnyjvU1zCl Derive=KAS-ECC-CDH_B-283_C18 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0477990f17d65589289c28e54a56a83bc05ef4ea6863c5ebe840925c9fbef64ccd6e69a4 @@ -15431,6 +16062,7 @@ Fb+ySySCgedaPGWUBE7unHArxMHiEMfMIUUkWSVorA+f1n1uoCtNw++0LPuyJj2s Derive=KAS-ECC-CDH_B-283_C19 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=067a661346fe052ca27f3f03e75bbdfc8fe6d0d85c62c8f79525252aa241ae9de97d56c3 @@ -15460,6 +16092,7 @@ CnN/BxiWCG2gsUzZB9HLDOGcmKY6r3sxTx9XIOMohwUzhKwPXrabbEcajj09Fudv Derive=KAS-ECC-CDH_B-283_C20 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=06476b0620eef165941a4507e6d798d6f150ab29333c0552281b629170d3291b2f9b3f41 @@ -15489,6 +16122,7 @@ UtWY/h0o/IkbMbSHAbjcZxPKRT6RsuxOTR+DSwjuvH6IhsOkWOcJJSQsSyK/CyBT Derive=KAS-ECC-CDH_B-283_C21 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0746719f2ad08f8a8d6d6fbf15723f336285ce75d3a2fcbd5a0c54c577517a22bc264161 @@ -15518,6 +16152,7 @@ lejerX+ga1eDl/HxAX6iL2tUdPD18PTq1UFyBkBRU40+IypTDfyl8qDcZ3Rsi7Ha Derive=KAS-ECC-CDH_B-283_C22 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03cda4b5f44b5d3dc248310f994419fbcbd665115d1876046652251ad4aeeb1dcf184288 @@ -15547,6 +16182,7 @@ yuN63YTaeuctwweOAN1ji/kFP61qpP8tMwuKSiC/4wIPQLlpIwLQsKPC2HeFbsRq Derive=KAS-ECC-CDH_B-283_C23 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=015c892f95768a96ab5a4f9523b7fd466e101f63b88ad8f1fecb3027cd70aa00735dcc90 @@ -15576,6 +16212,7 @@ MF4wEAYHKoZIzj0CAQYFK4EEABEDSgAEANCO04VqvvfUpiJDyS1uZwzrOvMjV/25 Derive=KAS-ECC-CDH_B-283_C24 +Availablein = default PeerKey=KAS-ECC-CDH_B-283_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01adf5a96358e18d69fd383b4dc7b20dd646b68a5c9f1417bcf426240ca22b8f32bdf1a4 @@ -15608,6 +16245,7 @@ KNCO02/mQKr4WqAPte3VkFo4s8eWG3cit3uNy0S7JfU= Derive=KAS-ECC-CDH_B-409_C0 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01d48a586be9285fa38dd3e70b0330b0ffebd327ceefef88fdc1521ef2fd61cbc9124e03b0c926e70fa56acb3edb54c3c48fab2b @@ -15640,6 +16278,7 @@ CO1IL9auEDdDExynFgJrFqHkliMfmRzcj220R/X5X44= Derive=KAS-ECC-CDH_B-409_C1 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01856c92b46d671d8a7f6cc468efb60a61093d006c95bb931c1fccc336d4a8490fe17fe163c972bac39fe728f24534a0c34d2d21 @@ -15672,6 +16311,7 @@ UO1oA88FRkt0paHeIhE+I8AYxc7ZGG3bmBxini6ds+4= Derive=KAS-ECC-CDH_B-409_C2 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01972e225e08b47512e92c0da9a1bdddb1802be402222cac5788b322e101feeb06b66b2fe726c1cd8aec92e02f37d15f4c97e64d @@ -15704,6 +16344,7 @@ oX5bmbLZCWG1Spn+1Tq6S9oaQHStPSP5yREgV5W1RQs= Derive=KAS-ECC-CDH_B-409_C3 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00b6661a866abbf1843dea8f220e360fe7cd7d9e85c316138fd2532a57d7d2a6bfe6e5518019c603a2d0e338ac6a8690093c2883 @@ -15736,6 +16377,7 @@ qkOAX7UoAfc74+mzKAiYSq677Xvl455RM1sN/zR4KUg= Derive=KAS-ECC-CDH_B-409_C4 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=010889037c707d90b833d03256ff2e8a5ffce16fb3613486221494a4fee82e74625a93d966c2028d0930115494f9456cec4d2b6d @@ -15768,6 +16410,7 @@ K6yPGjYujG1jWN+VkwYAQn38HrFBGP0SObZ7aQFbqH+YEUzsiyy0W7o9zwBrKH4H Derive=KAS-ECC-CDH_B-409_C5 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=010a8aafbb243fc9466bf381eae173c01be95d88a9c131b07ed54d2f117cd3af4019ffb196ebe8290b1269622f9df26763ffa211 @@ -15800,6 +16443,7 @@ n+jQUVug8NPc0Z8Ywi2jkJ8C14c1qhGy/roPjTMMVwM= Derive=KAS-ECC-CDH_B-409_C6 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01e17b8844c4c757553a628d6f4c48f3a337ed2bbb6e4047dbfcfbfd02bb81c6e096f8ccbb7f2e5d10ee9cbcc960e3a99e79bd09 @@ -15832,6 +16476,7 @@ Qlf+cDviUp9u/7bymaGiUcAeONQ8pspXbvHgvrbJEh4= Derive=KAS-ECC-CDH_B-409_C7 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01167edf7a3c50e13be126eb2caf6b5f8f761cc8dba413246423b877df74a3aa3f48144b44cd133ad9f2d05ef97a08f7ca511d7f @@ -15864,6 +16509,7 @@ yxhAfcQvY5EvomZyCAA6stKBAq3PuT3cBTdg5Twtqng= Derive=KAS-ECC-CDH_B-409_C8 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=015c0d202bfdee2dfbd4be91625171992e6c6b1a1d06cc1b2b66ed64c9d928bd4f062912900d3f89045c7190f513d3b019a634f5 @@ -15896,6 +16542,7 @@ MH4wEAYHKoZIzj0CAQYFK4EEACUDagAEAQwnNTD1T+F0u71cJ3GlWkLmQFDDvyUj Derive=KAS-ECC-CDH_B-409_C9 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=007c32383aae80e1111207894c8cc5be66fe538af4a19195742a94a4c3f5c765d9776a56177c485ddb53c038b70478959d374627 @@ -15928,6 +16575,7 @@ PF1bJj/wNvAj8P9fci0FbCSkEfU7NH0HhthPe+h5EFo= Derive=KAS-ECC-CDH_B-409_C10 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01166107ab98db1dbe22c5888a70c992af4faf4623ef593802aedfe433809c53ef4ab0b2dc4dc2546488b356ef3265356055d8f5 @@ -15960,6 +16608,7 @@ sCdwKZTHT1uBgSTTShkJh/1liJL8meesuYd71v6UaRk= Derive=KAS-ECC-CDH_B-409_C11 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=007e7a249094eb52bee0115b8bd5545f81bf0b7d66998fe124c9a3dd3c5715d03b2f973d47c19af5108a2ae005fcca65e61f337d @@ -15992,6 +16641,7 @@ EZxXPD90FBC7fBytEHbDukKu0c5p1WIosIL7beDu+2g= Derive=KAS-ECC-CDH_B-409_C12 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00b9d8b68642b2729340d8b7c5ed3b3a8913c4a3f6b947473017c0e105bc7edc60daa9b0732772220f93eca4878085f756e3adad @@ -16024,6 +16674,7 @@ pF20LuC5JkoFTBaoe+2tRcDZoPNbvGqnoSlWIug+vos= Derive=KAS-ECC-CDH_B-409_C13 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=017d60394c7ee64ba73db91484713370daa821255807349c237e5849411bf0bab3a1b353be3cd07eeddc5c2ffc74336225dae6f7 @@ -16056,6 +16707,7 @@ gyzysmHfrVhWEoBC+0phqRo3s0HeQpbUv2O/Z6NFinQ= Derive=KAS-ECC-CDH_B-409_C14 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=00b19e052edd44421ee2f5ba845911fed9183d885da85d51dc819ca565ce574f7db257509876377b40c5a08349019563b60e13e9 @@ -16088,6 +16740,7 @@ uHGXAFlpaynvkN2EYXdrNDoJyFOlOOTyL9+FT8vztzQ= Derive=KAS-ECC-CDH_B-409_C15 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01697512676ae56ff5ab778c411042d217ad24a24ea05bbc253e4395fecc8a07fe77ae0ca4ed977459f1a14d9b83931bccf46107 @@ -16120,6 +16773,7 @@ H9CH2vwH3WcOLOclVH4aJhxD+8VOFMNHPr27Mf2oRzo= Derive=KAS-ECC-CDH_B-409_C16 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=015960ea8b92bd77d52874e3ea82ed1763440189d68728d3974d4c01d6aafdbb5274648f6f3eaa4faf3fc72d09892ab038cb2fb7 @@ -16152,6 +16806,7 @@ sjpNHXnSfI08RECyyEK8HiH2kk4U3IMbCr+4RQAMc9VoewSQzMB/ZUEBrN2zbNDC Derive=KAS-ECC-CDH_B-409_C17 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01127491ff33a67ffc4757416cd02a081cafb723aff52af35b069b89963e8e3ef5bc19c5a093ccf511e3c3c19be789280e986809 @@ -16184,6 +16839,7 @@ izvo5XqxE3cPX+DGIwD0oJ+iiZ5zu8mCMmX1XVz0rhg= Derive=KAS-ECC-CDH_B-409_C18 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=01254508553eab09fbc2fafe13fa9b324d9217d7d0ba4cedbe5dc869ad68de4f87774dd17d6428ed242c71956f252969e6bd5837 @@ -16216,6 +16872,7 @@ jUIuyQ+Uwr3ShM2/i+5kL3C9e+LakGue27ws0QBDB4+RIRApChPZAWDw5xWC+jnA Derive=KAS-ECC-CDH_B-409_C19 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C19-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=004b9accc21d7122835fc21410ed1d83767c47a54ffee5f0c180fc55f3d0e8484af3ad38020294be92f02f0ba7e2b4f4eb1db07f @@ -16248,6 +16905,7 @@ g9TopOyPhZLvUjlfJMES1ZQtOuCP/o2Znv3jmYiKfPM= Derive=KAS-ECC-CDH_B-409_C20 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0093e2581c159d74d11f8667ee03399208b5c1a4ee5b20070ce8d97d251ef1236dc81dd688b2f07a730e6b8aeca0c193a28b178f @@ -16280,6 +16938,7 @@ y8PhL5cG86sFQpktjbbI2Lsl+gYU1Ib20ayfPZi57f4= Derive=KAS-ECC-CDH_B-409_C21 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=008e2f1c4bad19c46a5134afccf7f4ec14ab591c8b8ea48d9c3d1e7354ab43ba20aa39a65fd92cdc176cf3dedecbf9da49a8d855 @@ -16312,6 +16971,7 @@ FmfEFWA0Ann84JYqIb2LtS+iPbcahPNaV5TvXgdZct0= Derive=KAS-ECC-CDH_B-409_C22 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0190a1693eebe287ec980236d8762804d23fdb6f222763a0efc364f9280fdd53394c2badcc51ff09557f3b97cae7f70d790bf9df @@ -16344,6 +17004,7 @@ NDZUJGo3/jpg196YfmqaEKrwY9lrEBhGEszSZAfX4D4= Derive=KAS-ECC-CDH_B-409_C23 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=001469dabcf2210aa7de0040b201221eb4d1a4725431fb5a93212a66ddea4187e078f5e3d82606f6cdfc0ffe6b69574d1d0ba643 @@ -16376,6 +17037,7 @@ Nr7Fa8a0T5KGv56Z+sl/NWcIzQMQ2/Yzj5r417E1kQI= Derive=KAS-ECC-CDH_B-409_C24 +Availablein = default PeerKey=KAS-ECC-CDH_B-409_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=005c701a93d7790322aa7c67440fdd9ee8057a0dae86d1e856ae89e7893da178bd67777f86db2be5c8e31dc50ed8a440aabc342d @@ -16411,6 +17073,7 @@ WotRa8UDgoFjcJ1NrLWU0nehWpLAZOV3DRs= Derive=KAS-ECC-CDH_B-571_C0 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C0-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=06775e1b99a236e02b020bc73666e5751c1210dcb6e9b02a69f4075376e49f7a1476d2209e861abb73f5e3ad189d268e035b1de93d47b3a64de5783c9a09bc223e1cc612f26dcdf1 @@ -16446,6 +17109,7 @@ MIGnMBAGByqGSM49AgEGBSuBBAAnA4GSAAQFdcuwWfQjMJ+ZO2wGrHHXvMXR5qGa Derive=KAS-ECC-CDH_B-571_C1 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C1-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03a80ea8cfecb858f9b77bdb46b6cda26320ee8c561a2fd6b7e0a2b62201fbfe60f577780c75a98a11a69de4c4ee911930d2200b6972bc3123d7f278615ecc65984a59fe352a1cec @@ -16481,6 +17145,7 @@ li1lq8VNXeot1yxVRZB0AHT3xmxLjf0wdWE= Derive=KAS-ECC-CDH_B-571_C2 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C2-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03edea7e47ded7c2ab1115f4ebcbb42677c7fba6e0cfd811602896251ada1d5a0b461aaf4e000f4d4231b96d8dee7630d9f1b7860e6418dac8c3b07b66af6fd1acdb44b2683b29b4 @@ -16516,6 +17181,7 @@ w9ttmC9FtpK+oRzyXRiso8g77IQMdYKnBi0= Derive=KAS-ECC-CDH_B-571_C3 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C3-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=005b640015330f8416f2bbbf8b5660e01a7abba8b0197a29e52bb535d62f89ad0443e08b6e0d1d15f4eb03c0fe35e3e43bd7739cb692092698a2cd13126cee4432831ec7423b3434 @@ -16551,6 +17217,7 @@ hjtvzEifk3oFpf2UbWKCUyign4Ony6J/6l4= Derive=KAS-ECC-CDH_B-571_C4 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C4-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=027af05ecd0332784d64b0b1bdb45c310fd445c5a6d6b34f35f4eaa3fa3e171ab98763d243a1dedf46aa29864620a47d05eeaefd748186bcbcf187c01e7ce36e2a53ded071036b59 @@ -16586,6 +17253,7 @@ YkrK2yGbIHGI0OlFy8Z8mCBo0yYT/CH4sPQ= Derive=KAS-ECC-CDH_B-571_C5 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C5-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0763c0d659a7c080912005a2afd60ce57e610619b388ef3d5dd3c9386ab12069c6ef3a8e72eb741cba2da5c6f9267f6c09fada6459690ed4e432445d6f0f72dbcb059c87df36f665 @@ -16621,6 +17289,7 @@ rnOkibt/gc3KaxuxZ8eUwm1iOKDSVq/DuiE= Derive=KAS-ECC-CDH_B-571_C6 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C6-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0428413f2d2aad4d5288885c2edc8b976321ae1dd4fc6b41275fb88b8c5e7776165effce79025163538a0e83c919220a407ead6cefd616b4b05294488c2ef5d30ab8caa55ccbd1b1 @@ -16656,6 +17325,7 @@ ruF4vW/hXsGW+x9ifYcHk5T294VOBTIo3uU= Derive=KAS-ECC-CDH_B-571_C7 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C7-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=031bd2a84369e93dfa00581446d52762100d985cc7bb91c4fa8be7472e2e8e9781c52b19a54330442441bacae23f4bdc76486eb475d51f26aafbfb272a5ab5db184a4d3c3006e5d1 @@ -16691,6 +17361,7 @@ ENtDeYGiqhJuuarzx74FqA+sFJXhxAyhwQY= Derive=KAS-ECC-CDH_B-571_C8 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C8-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=04df20154fa49a1d6e04dc2ba6e55a7f2ae575de5e2c6e4091a4d2c36aa93ca9699b890f0ee4df53aa75d0d9babad68605bc027ec67c187a6826aac0f4bc596baae788b376110216 @@ -16726,6 +17397,7 @@ Tms887kScYsWks2YMBl0GiVBgkI0vcjDI/k= Derive=KAS-ECC-CDH_B-571_C9 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C9-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=037a380f525590582658e2dd272a32de67fc0cf5390b37f4d33c1359f075d4461ea38a55027317892a3d1d22f5ea333ad437667d2f3eb8781c39504036ae33e4b0a26b6894722f0b @@ -16761,6 +17433,7 @@ mnCYgqU3KvVuoLNoFzhfu/6sS5BgaeU/v7o= Derive=KAS-ECC-CDH_B-571_C10 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C10-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0420de313bddce87d07321e3f0af404d9d13e5369b79506e807178711153c9b1837cd055562eff3aadfc5954a221eeebb1bec1696d3df1cccfb8b61172a50d83cee95f4140ba070b @@ -16796,6 +17469,7 @@ jHAFS5fZUrGfdChW2s9OUN8MMQO68lP03mWj2crOY/6CkG0sjoozEvtTXgD5tcpp Derive=KAS-ECC-CDH_B-571_C11 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C11-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=0606228f5a05077aeefbefac23c0d5bac7a6062bfc2b02ce8bba6698ea96b456b1f0d32c6e05dbb9be61a83090428eedea18c74f41238edede9e3a12e28722d2f314613c2e84d6db @@ -16831,6 +17505,7 @@ XYZLnKxGvqbpbfKxvkSTrPlQIk1xc3+ZBlg= Derive=KAS-ECC-CDH_B-571_C12 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C12-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=052669336019db5eddef5eab2336abeb60bbc7295e4bb663ab43e373fb6d888d7433ec89a487a91d4a59c289a9509ddd1bab33cd02a7bf37aaad78dbedf0b4ae5f2f35d15cb4e628 @@ -16866,6 +17541,7 @@ N+eEnyKP3BoHqimL4myncfR6xP6ycj1aZmY= Derive=KAS-ECC-CDH_B-571_C13 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C13-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=062de5aa98b440c6cb7a1428f6b5e47452b30454eec4d651982b531121febbd5a3833b180017f7ddb5ce38d7bb1c842de1a8a8fc7fc981e24733b7662813fd010a4e757ca4ea5c28 @@ -16901,6 +17577,7 @@ VjlKZi7xHIIU6K2oXfGxewuXQUzdZi0Yi10= Derive=KAS-ECC-CDH_B-571_C14 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C14-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=07c7eb4892816cc3388ebcdfb412984e05910c112dd15b8e5481719401701aceba22fcf35aab0c3b040096161011f6177097c505395d9d6d8a713f6a5100fb476adbe7b9cdf4b68b @@ -16936,6 +17613,7 @@ mtlTxxHjMNx79V7fKfCVyuRVV7fI1YQ9ib0= Derive=KAS-ECC-CDH_B-571_C15 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C15-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=05c638349000ec30881cd190c067e7f12b6b42d5842a8285a8ff0dc7e9c9eaf483309e48314fdc2ce7f9da6a468e549c8e70a50b68d07aee29708a98172209e5cd2e8c09cb66d982 @@ -16971,6 +17649,7 @@ iELVyPWQN1pDZWkYqoDlWwKFNHzOj/4fFeg= Derive=KAS-ECC-CDH_B-571_C16 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C16-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=007a40a59b6632156a43158565a4eeaf80618e501c5ac5afdab4ce3cb76ac99a0bcd17e9eec549373ace8c96aac78e2af6600483a2c49ec81298a083d5237118de96a953999beb26 @@ -17006,6 +17685,7 @@ aMwklYrcUuKkxAc1ZRTz6nFmBW3Gfk0Rj6g= Derive=KAS-ECC-CDH_B-571_C17 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C17-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=021fd2726973405fc30d2a1f2115907cbd0de90bb6bcb0496452e389b1b10ccf38e2400617040cf0dbb188f345337678b0ad8603dcfe926582d4321f384daec0943e2cd267f48343 @@ -17041,6 +17721,7 @@ WImpWg8v3DXTD8YcxVYKKRQjLWKtNjhrkXk= Derive=KAS-ECC-CDH_B-571_C18 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C18-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=07a47bdc7d54ecd391672f131b3214d0efc4d40195db1ec993a62fe9da875efff5403bd708fa491a01a94f4bddc7d516baffff9fbdd213ca1a4905f9aa679d65da25c0f1fd2afb0a @@ -17111,6 +17792,7 @@ faiyk8aENZPdIhyJv5eWNna9BE6MirjnF60= Derive=KAS-ECC-CDH_B-571_C20 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C20-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=059052d3e1c66efa4b7dd39e74299e886367d8fe49d7cab90e4f051bec10316438fb29b1290dfdaec169decd622a1010cf0a0275008814f4861b4d83ba78515a8768d978be430011 @@ -17146,6 +17828,7 @@ i+kBdzRtdsp7xxM9DsKArPBmAFxcwQtSqmVDNf6CCmYX5WDicJA/8cLMivE5jyTf Derive=KAS-ECC-CDH_B-571_C21 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C21-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=03acfa4b3d1c2a6b62af23bdff6a215a416d4437ce6cc114d17dc4201195987a5d7301da11b913254702d7172e31d64e59b24deaa3270f20445e51dc484f7a2b8c3cbeb0bb9efb28 @@ -17181,6 +17864,7 @@ tdubCxjYPPnrwbGq8k9DZ+xTNoTOnVZYLUM= Derive=KAS-ECC-CDH_B-571_C22 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C22-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=067a58e5b3287bb9aa83ed9ca2d718cf7165fb574b6a446c3019849cd1584673d561b574bc8f68419437c5e8113e060847cad3b5ddc2f67ad75bc1e3f04554e63a5e4945cfcb65f5 @@ -17216,6 +17900,7 @@ QrqIcXicgujzrTz2AG9DvEx9QQIDLEP495c= Derive=KAS-ECC-CDH_B-571_C23 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C23-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=06b272ca3330c0cdfbe60a1746bc0ddea6257536cdd8e976f2517eb541460a3f0e6ea7fec2b495e0f57712c8cac35e8a7d64d876c29851bbfeb6fe726d57e0be43dc76a584ef9c93 @@ -17251,6 +17936,7 @@ nzq7jSys1bLuK2g5nqxOj2XOvdZjAP0Em1s= Derive=KAS-ECC-CDH_B-571_C24 +Availablein = default PeerKey=KAS-ECC-CDH_B-571_C24-Peer-PUBLIC Ctrl=ecdh_cofactor_mode:1 SharedSecret=02da266a269bdc8d8b2a0c6bb5762f102fc801c8d5394a9271539136bd81d4b69cfbb7525cd0a983fb7f7e9deec583b8f8e574c6184b2d79831ec770649e484dc006fa35b0bffd0b @@ -17281,6 +17967,7 @@ PrivPubKeyPair = ALICE_cf_sect283k1:ALICE_cf_sect283k1_PUB # ECDH Alice with Bob peer Derive=ALICE_cf_sect283k1 +Availablein = default PeerKey=BOB_cf_sect283k1_PUB Ctrl=ecdh_cofactor_mode:1 Result = DERIVE_ERROR @@ -17396,22 +18083,26 @@ Result = KEYPAIR_MISMATCH Title = DigestSign and DigestVerify DigestSign = SHA1 +Availablein = default Key = RSA-2048 Input = "Hello World" Output = 3da3ca2bdd1b23a231b0e3c49d95d5959f9398c27a1e534c7e6baf1d2682304d3b6b229385b1edf483f5ef6f9b35bf10c519a302bb2f79c564e1a59ba71aa2fa36df96c942c43e8d9bd4702b5f61c12a078ae2b34d0de221fc8f9f936b79a67c89d11ba5da8c63a1370d0e824c6b661123e9b58b143ff533cf362cbdad70e65b419a6d45723bf22db3c76bb8f5337c5c5c93cb6f38b30d0c835b54c23405ca4217dd0b755f3712ebad285d9e0c02655f6ce5ce6fed78f3c81843de325f628055eef57f280dee0c3170050137ee599b9ab7f2b5d3c5f831777ea05a5eb097c70bad1a7214dadae12d7960bb9425390c7d25a79985e1e3c28ad422ff93c808f4b5 DigestSign = SHA256 +Availablein = default Key = RSA-2048 Input = "Hello World" Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034 DigestSign = SHA256 +Availablein = default Key = RSA-2048 Input = "Hello " Input = "World" Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034 DigestSign = SHA256 +Availablein = default Key = RSA-2048 Input = "Hello " Input = "World" @@ -17420,12 +18111,14 @@ Ctrl = rsa_pss_saltlen:0 Output = 4a35cc7623f176c997696213045024f1b1121a6ec4a5755d206c20fc4a7c5259566d19730f6f1a75ac00878c6290e6757510588d740da3633b09a1d899c7dfba2031cfcae6a490e995c87f4750ea88948009cbed6c80cebb9ebfab7d04805e7a2140373fb888b5e6151d1c4eb7f505c4e0a584c17c6ca71e552ba13e1f20101796fe0d1af0cde661fc47d904b5d3f127073471fe6dc7e78f5cd2a049d67e0c7c92184e2bf97f8e16b50b8385daa1f8882e8f6c8683720903454b35356058f2f0136cad7689105167bacbe0dbad466ff2a298e41e5a65caecac4cde08529b7ea8717258e19b0732c966b34f5d52e4ec3073da78757471086553a3ff6c5460bcda DigestVerify = SHA256 +Availablein = default Key = RSA-2048-PUBLIC Input = "Hello " Input = "World" Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69bfafbc809b01b93ab34aad9a33908644efca6eca04db1afda1016d1c1603183d2263597cf85ce5b7acd6a4872cbcc401b90b221d85aa0a2d0e1f159fc0843e0a55c47dc108c3f207d000e954605fabbb8c938050f280e29653aa1438109d02e53dfbdcb8cb9b46d372dd39ba7317a3f4c0020dba1ddd247b3d58addb1df7208785a62a8e3e4372c1fa6d24a17cd6413f7f5c046ba40a881c21875fde848b3b56fea7264430eca15b27c5c3b72fedcbcc124f8d939ffc11e6d3172c7eb491d378902093fcc3bf3a2835a1fcfabf457c13abf7b37f08595ed72332e27034 DigestVerify = SHA256 +Availablein = default Key = RSA-2048-PUBLIC Input = "Hello" Input = "World" @@ -17433,22 +18126,26 @@ Output = ba8c24b86f18633767ed1778ef12d283a508d0bef32dd50b4a67cbd6b75df0f4ef6e69b Result = VERIFY_ERROR DigestVerify = SHA256 +Availablein = default Key = P-256-PUBLIC Input = "Hello World" Output = 3046022100e7515177ec3817b77a4a94066ab3070817b7aa9d44a8a09f040da250116e8972022100ba59b0f631258e59a9026be5d84f60685f4cf22b9165a0c2736d5c21c8ec1862 # Invalid digest DigestVerify = MD5 +Availablein = default Key = P-256-PUBLIC Result = DIGESTVERIFYINIT_ERROR # Oneshot tests OneShotDigestVerify = SHA256 +Availablein = default Key = P-256-PUBLIC Input = "Hello World" Output = 3046022100e7515177ec3817b77a4a94066ab3070817b7aa9d44a8a09f040da250116e8972022100ba59b0f631258e59a9026be5d84f60685f4cf22b9165a0c2736d5c21c8ec1862 OneShotDigestSign = SHA1 +Availablein = default Key = RSA-2048 Input = "Hello World" Output = 3da3ca2bdd1b23a231b0e3c49d95d5959f9398c27a1e534c7e6baf1d2682304d3b6b229385b1edf483f5ef6f9b35bf10c519a302bb2f79c564e1a59ba71aa2fa36df96c942c43e8d9bd4702b5f61c12a078ae2b34d0de221fc8f9f936b79a67c89d11ba5da8c63a1370d0e824c6b661123e9b58b143ff533cf362cbdad70e65b419a6d45723bf22db3c76bb8f5337c5c5c93cb6f38b30d0c835b54c23405ca4217dd0b755f3712ebad285d9e0c02655f6ce5ce6fed78f3c81843de325f628055eef57f280dee0c3170050137ee599b9ab7f2b5d3c5f831777ea05a5eb097c70bad1a7214dadae12d7960bb9425390c7d25a79985e1e3c28ad422ff93c808f4b5 @@ -17515,6 +18212,7 @@ PrivPubKeyPair = ED25519-1:ED25519-1-PUBLIC PrivPubKeyPair = ED25519-1-Raw:ED25519-1-PUBLIC-Raw OneShotDigestSign = NULL +Availablein = default Key = ED25519-1 Input = "" Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b @@ -17522,6 +18220,7 @@ Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821 PrivPubKeyPair = ED25519-2:ED25519-2-PUBLIC OneShotDigestSign = NULL +Availablein = default Key = ED25519-2 Input = 72 Output = 92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00 @@ -17536,6 +18235,7 @@ Output = 6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b5 PrivPubKeyPair = ED25519-4:ED25519-4-PUBLIC OneShotDigestSign = NULL +Availablein = default Key = ED25519-4 Input = 08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0 Output = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03 @@ -17543,18 +18243,21 @@ Output = 0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b PrivPubKeyPair = ED25519-5:ED25519-5-PUBLIC OneShotDigestSign = NULL +Availablein = default Key = ED25519-5 Input = ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f Output = dc2a4459e7369633a52b1bf277839a00201009a3efbf3ecb69bea2186c26b58909351fc9ac90b3ecfdfbc7c66431e0303dca179c138ac17ad9bef1177331a704 # Verify test OneShotDigestVerify = NULL +Availablein = default Key = ED25519-1-PUBLIC Input = "" Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b # Corrupted input OneShotDigestVerify = NULL +Availablein = default Key = ED25519-1-PUBLIC Input = "bad" Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b @@ -17562,6 +18265,7 @@ Result = VERIFY_ERROR # Corrupted signature OneShotDigestVerify = NULL +Availablein = default Key = ED25519-1-PUBLIC Input = "" Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100c @@ -17572,28 +18276,33 @@ Result = KEYPAIR_MISMATCH # Make sure update calls return an error DigestSign = NULL +Availablein = default Key = ED25519-1 Input = "Test" Result = DIGESTUPDATE_ERROR DigestVerify = NULL +Availablein = default Key = ED25519-1-PUBLIC Input = "Test" Result = DIGESTUPDATE_ERROR # Attempt to set invalid digest DigestSign = SHA256 +Availablein = default Key = ED25519-1 Result = DIGESTSIGNINIT_ERROR # Raw tests OneShotDigestSign = NULL +Availablein = default Key = ED25519-1-Raw Input = "" Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b OneShotDigestVerify = NULL +Availablein = default Key = ED25519-1-PUBLIC-Raw Input = "" Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b @@ -17601,6 +18310,7 @@ Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821 #Signature maleability test. #Same as the verify operation above but with the order added to s OneShotDigestVerify = NULL +Availablein = default Key = ED25519-1-PUBLIC-Raw Input = "" Output = e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901554c8c7872aa064e049dbb3013fbf29380d25bf5f0595bbe24655141438e7a101b @@ -17710,71 +18420,90 @@ PrivateKeyRaw=ED448-1-Raw:ED448:6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f PublicKeyRaw=ED448-1-PUBLIC-Raw:ED448:5fd7449b59b461fd2ce787ec616ad46a1da1342485a70e1f8a0ea75d80e96778edf124769b46c7061bd6783df1e50f6cd1fa1abeafe8256180 PrivPubKeyPair = ED448-1:ED448-1-PUBLIC +Availablein = default PrivPubKeyPair = ED448-2:ED448-2-PUBLIC +Availablein = default PrivPubKeyPair = ED448-3:ED448-3-PUBLIC +Availablein = default PrivPubKeyPair = ED448-4:ED448-4-PUBLIC +Availablein = default PrivPubKeyPair = ED448-5:ED448-5-PUBLIC +Availablein = default PrivPubKeyPair = ED448-6:ED448-6-PUBLIC +Availablein = default PrivPubKeyPair = ED448-7:ED448-7-PUBLIC +Availablein = default PrivPubKeyPair = ED448-8:ED448-8-PUBLIC +Availablein = default PrivPubKeyPair = ED448-1-Raw:ED448-1-PUBLIC-Raw +Availablein = default OneShotDigestSign = NULL +Availablein = default Key = ED448-1 Input = "" Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600 OneShotDigestSign = NULL +Availablein = default Key = ED448-2 Input = 03 Output = 26b8f91727bd62897af15e41eb43c377efb9c610d48f2335cb0bd0087810f4352541b143c4b981b7e18f62de8ccdf633fc1bf037ab7cd779805e0dbcc0aae1cbcee1afb2e027df36bc04dcecbf154336c19f0af7e0a6472905e799f1953d2a0ff3348ab21aa4adafd1d234441cf807c03a00 OneShotDigestSign = NULL +Availablein = default Key = ED448-3 Input = 0c3e544074ec63b0265e0c Output = 1f0a8888ce25e8d458a21130879b840a9089d999aaba039eaf3e3afa090a09d389dba82c4ff2ae8ac5cdfb7c55e94d5d961a29fe0109941e00b8dbdeea6d3b051068df7254c0cdc129cbe62db2dc957dbb47b51fd3f213fb8698f064774250a5028961c9bf8ffd973fe5d5c206492b140e00 OneShotDigestSign = NULL +Availablein = default Key = ED448-4 Input = 64a65f3cdedcdd66811e2915 Output = 7eeeab7c4e50fb799b418ee5e3197ff6bf15d43a14c34389b59dd1a7b1b85b4ae90438aca634bea45e3a2695f1270f07fdcdf7c62b8efeaf00b45c2c96ba457eb1a8bf075a3db28e5c24f6b923ed4ad747c3c9e03c7079efb87cb110d3a99861e72003cbae6d6b8b827e4e6c143064ff3c00 OneShotDigestSign = NULL +Availablein = default Key = ED448-5 Input = 64a65f3cdedcdd66811e2915e7 Output = 6a12066f55331b6c22acd5d5bfc5d71228fbda80ae8dec26bdd306743c5027cb4890810c162c027468675ecf645a83176c0d7323a2ccde2d80efe5a1268e8aca1d6fbc194d3f77c44986eb4ab4177919ad8bec33eb47bbb5fc6e28196fd1caf56b4e7e0ba5519234d047155ac727a1053100 OneShotDigestSign = NULL +Availablein = default Key = ED448-6 Input = bd0f6a3747cd561bdddf4640a332461a4a30a12a434cd0bf40d766d9c6d458e5512204a30c17d1f50b5079631f64eb3112182da3005835461113718d1a5ef944 Output = 554bc2480860b49eab8532d2a533b7d578ef473eeb58c98bb2d0e1ce488a98b18dfde9b9b90775e67f47d4a1c3482058efc9f40d2ca033a0801b63d45b3b722ef552bad3b4ccb667da350192b61c508cf7b6b5adadc2c8d9a446ef003fb05cba5f30e88e36ec2703b349ca229c2670833900 OneShotDigestSign = NULL +Availablein = default Key = ED448-7 Input = 15777532b0bdd0d1389f636c5f6b9ba734c90af572877e2d272dd078aa1e567cfa80e12928bb542330e8409f3174504107ecd5efac61ae7504dabe2a602ede89e5cca6257a7c77e27a702b3ae39fc769fc54f2395ae6a1178cab4738e543072fc1c177fe71e92e25bf03e4ecb72f47b64d0465aaea4c7fad372536c8ba516a6039c3c2a39f0e4d832be432dfa9a706a6e5c7e19f397964ca4258002f7c0541b590316dbc5622b6b2a6fe7a4abffd96105eca76ea7b98816af0748c10df048ce012d901015a51f189f3888145c03650aa23ce894c3bd889e030d565071c59f409a9981b51878fd6fc110624dcbcde0bf7a69ccce38fabdf86f3bef6044819de11 Output = c650ddbb0601c19ca11439e1640dd931f43c518ea5bea70d3dcde5f4191fe53f00cf966546b72bcc7d58be2b9badef28743954e3a44a23f880e8d4f1cfce2d7a61452d26da05896f0a50da66a239a8a188b6d825b3305ad77b73fbac0836ecc60987fd08527c1a8e80d5823e65cafe2a3d00 OneShotDigestSign = NULL +Availablein = default Key = ED448-8 Input = 6ddf802e1aae4986935f7f981ba3f0351d6273c0a0c22c9c0e8339168e675412a3debfaf435ed651558007db4384b650fcc07e3b586a27a4f7a00ac8a6fec2cd86ae4bf1570c41e6a40c931db27b2faa15a8cedd52cff7362c4e6e23daec0fbc3a79b6806e316efcc7b68119bf46bc76a26067a53f296dafdbdc11c77f7777e972660cf4b6a9b369a6665f02e0cc9b6edfad136b4fabe723d2813db3136cfde9b6d044322fee2947952e031b73ab5c603349b307bdc27bc6cb8b8bbd7bd323219b8033a581b59eadebb09b3c4f3d2277d4f0343624acc817804728b25ab797172b4c5c21a22f9c7839d64300232eb66e53f31c723fa37fe387c7d3e50bdf9813a30e5bb12cf4cd930c40cfb4e1fc622592a49588794494d56d24ea4b40c89fc0596cc9ebb961c8cb10adde976a5d602b1c3f85b9b9a001ed3c6a4d3b1437f52096cd1956d042a597d561a596ecd3d1735a8d570ea0ec27225a2c4aaff26306d1526c1af3ca6d9cf5a2c98f47e1c46db9a33234cfd4d81f2c98538a09ebe76998d0d8fd25997c7d255c6d66ece6fa56f11144950f027795e653008f4bd7ca2dee85d8e90f3dc315130ce2a00375a318c7c3d97be2c8ce5b6db41a6254ff264fa6155baee3b0773c0f497c573f19bb4f4240281f0b1f4f7be857a4e59d416c06b4c50fa09e1810ddc6b1467baeac5a3668d11b6ecaa901440016f389f80acc4db977025e7f5924388c7e340a732e554440e76570f8dd71b7d640b3450d1fd5f0410a18f9a3494f707c717b79b4bf75c98400b096b21653b5d217cf3565c9597456f70703497a078763829bc01bb1cbc8fa04eadc9a6e3f6699587a9e75c94e5bab0036e0b2e711392cff0047d0d6b05bd2a588bc109718954259f1d86678a579a3120f19cfb2963f177aeb70f2d4844826262e51b80271272068ef5b3856fa8535aa2a88b2d41f2a0e2fda7624c2850272ac4a2f561f8f2f7a318bfd5caf9696149e4ac824ad3460538fdc25421beec2cc6818162d06bbed0c40a387192349db67a118bada6cd5ab0140ee273204f628aad1c135f770279a651e24d8c14d75a6059d76b96a6fd857def5e0b354b27ab937a5815d16b5fae407ff18222c6d1ed263be68c95f32d908bd895cd76207ae726487567f9a67dad79abec316f683b17f2d02bf07e0ac8b5bc6162cf94697b3c27cd1fea49b27f23ba2901871962506520c392da8b6ad0d99f7013fbc06c2c17a569500c8a7696481c1cd33e9b14e40b82e79a5f5db82571ba97bae3ad3e0479515bb0e2b0f3bfcd1fd33034efc6245eddd7ee2086ddae2600d8ca73e214e8c2b0bdb2b047c6a464a562ed77b73d2d841c4b34973551257713b753632efba348169abc90a68f42611a40126d7cb21b58695568186f7e569d2ff0f9e745d0487dd2eb997cafc5abf9dd102e62ff66cba87 Output = e301345a41a39a4d72fff8df69c98075a0cc082b802fc9b2b6bc503f926b65bddf7f4c8f1cb49f6396afc8a70abe6d8aef0db478d4c6b2970076c6a0484fe76d76b3a97625d79f1ce240e7c576750d295528286f719b413de9ada3e8eb78ed573603ce30d8bb761785dc30dbc320869e1a00 # Verify test OneShotDigestVerify = NULL +Availablein = default Key = ED448-1-PUBLIC Input = "" Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600 # Corrupted input OneShotDigestVerify = NULL +Availablein = default Key = ED448-1-PUBLIC Input = "bad" Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600 @@ -17782,6 +18511,7 @@ Result = VERIFY_ERROR # Corrupted signature OneShotDigestVerify = NULL +Availablein = default Key = ED448-1-PUBLIC Input = "" Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652601 @@ -17789,27 +18519,32 @@ Result = VERIFY_ERROR # Make sure update calls return an error DigestSign = NULL +Availablein = default Key = ED448-1 Input = "Test" Result = DIGESTUPDATE_ERROR DigestVerify = NULL +Availablein = default Key = ED448-1-PUBLIC Input = "Test" Result = DIGESTUPDATE_ERROR # Attempt to set invalid digest DigestSign = SHA256 +Availablein = default Key = ED448-1 Result = DIGESTSIGNINIT_ERROR # Raw keys OneShotDigestSign = NULL +Availablein = default Key = ED448-1-Raw Input = "" Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600 OneShotDigestVerify = NULL +Availablein = default Key = ED448-1-PUBLIC-Raw Input = "" Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600 @@ -17817,6 +18552,7 @@ Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f0 #Signature malelability test. #Same as the verify operation above but with the order added to s OneShotDigestVerify = NULL +Availablein = default Key = ED448-1-PUBLIC-Raw Input = "" Output = 533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980f25278d3667403c14bcec5f9cfde9955ebc8333c0ae78fc86e518317c5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e656600 @@ -17824,6 +18560,7 @@ Result = VERIFY_ERROR # Key generation tests KeyGen = rsaEncryption +Availablein = default Ctrl = rsa_keygen_bits:128 KeyName = tmprsa Result = PKEY_CTRL_INVALID @@ -17831,18 +18568,21 @@ Reason = key size too small # RSA-PSS with restrictions, should succeed. KeyGen = RSASSA-PSS +Availablein = default KeyName = tmppss Ctrl = rsa_pss_keygen_md:sha256 Ctrl = rsa_pss_keygen_mgf1_md:sha512 # Check MGF1 restrictions DigestVerify = SHA256 +Availablein = default Key = tmppss Ctrl = rsa_mgf1_md:sha256 Result = PKEY_CTRL_ERROR # Test valid digest and MGF1 parameters. Verify will fail DigestVerify = SHA256 +Availablein = default Key = tmppss Ctrl = rsa_mgf1_md:sha512 Input = "" @@ -17851,6 +18591,7 @@ Result = VERIFY_ERROR # Check caching of key MGF1 digest restriction DigestVerify = SHA256 +Availablein = default Key = tmppss Ctrl = rsa_mgf1_md:sha1 Result = PKEY_CTRL_ERROR @@ -17859,6 +18600,7 @@ Title = RFC7919 DH tests # Key generation test KeyGen = dhKeyAgreement +Availablein = default Ctrl = dh_param:ffdhe2048 KeyName = tmpdh @@ -17924,14 +18666,17 @@ PrivPubKeyPair=ffdhe2048-1:ffdhe2048-1-pub PrivPubKeyPair=ffdhe2048-2:ffdhe2048-2-pub Derive=ffdhe2048-1 +Availablein = default PeerKey=ffdhe2048-2-pub SharedSecret=6620DD85B56EE8540C8040CAC46B7385344A164E4DBDF521F7D99F88FA68EDD295A45E36E0BBD5FF5DE84598824E2CA52ED82ACA918CAECC6B22846D0FC6F0203E8B6963964D11E9E704F83AF1D60E9B1931139E9E9967C4665A831A75D99359A8BA80DD5921E74379AF4CA8DB453EDBC5E669AB17A5254CA6C96794CD5196BE90AF37742C8F6812515FFCC45B08F4158EFF9559F1AEF3665B3D91519DCBC6DF22CD6DA521B86613558602E73D2CA4666972F7D2CB6B46299B1DF2DA29A2A2D99D105E10CB553D6738A9B1DB2A0314C3CF30642D5C44695623D8B95C4426BEA830FB51816B4F086945E9B12A445F42DD68610E3F378A6E69A383D13D85BF Derive=ffdhe2048-2 +Availablein = default PeerKey=ffdhe2048-1-pub SharedSecret=6620DD85B56EE8540C8040CAC46B7385344A164E4DBDF521F7D99F88FA68EDD295A45E36E0BBD5FF5DE84598824E2CA52ED82ACA918CAECC6B22846D0FC6F0203E8B6963964D11E9E704F83AF1D60E9B1931139E9E9967C4665A831A75D99359A8BA80DD5921E74379AF4CA8DB453EDBC5E669AB17A5254CA6C96794CD5196BE90AF37742C8F6812515FFCC45B08F4158EFF9559F1AEF3665B3D91519DCBC6DF22CD6DA521B86613558602E73D2CA4666972F7D2CB6B46299B1DF2DA29A2A2D99D105E10CB553D6738A9B1DB2A0314C3CF30642D5C44695623D8B95C4426BEA830FB51816B4F086945E9B12A445F42DD68610E3F378A6E69A383D13D85BF Derive=ffdhe2048-1 +Availablein = default PeerKey=ffdhe2048-2-pub Ctrl = dh_pad:1 SharedSecret=00006620DD85B56EE8540C8040CAC46B7385344A164E4DBDF521F7D99F88FA68EDD295A45E36E0BBD5FF5DE84598824E2CA52ED82ACA918CAECC6B22846D0FC6F0203E8B6963964D11E9E704F83AF1D60E9B1931139E9E9967C4665A831A75D99359A8BA80DD5921E74379AF4CA8DB453EDBC5E669AB17A5254CA6C96794CD5196BE90AF37742C8F6812515FFCC45B08F4158EFF9559F1AEF3665B3D91519DCBC6DF22CD6DA521B86613558602E73D2CA4666972F7D2CB6B46299B1DF2DA29A2A2D99D105E10CB553D6738A9B1DB2A0314C3CF30642D5C44695623D8B95C4426BEA830FB51816B4F086945E9B12A445F42DD68610E3F378A6E69A383D13D85BF @@ -18011,10 +18756,12 @@ PrivPubKeyPair=ffdhe3072-1:ffdhe3072-1-pub PrivPubKeyPair=ffdhe3072-2:ffdhe3072-2-pub Derive=ffdhe3072-1 +Availablein = default PeerKey=ffdhe3072-2-pub SharedSecret=59C4B72684E68BC02148DF19FE6BECE40885AD037EE83F28C6E353C87026DAD66BB469C3F252BDC7ADA9271B6AD900620ECA15696B4E85561794A26259D61CAC7B56DDAED27BE2759A4C4BED5F8940784A255635D24E0D7B2BC796142CAF256D7A979240E9C8DD7230562B5D687971C4582A488E7BCA827FA32C4068C3C8B27ACA83E43EE9D7EAB3192F0DD877BA9C25D6334D233FC5752BEFE625B3D5DAE8589122B6C7E76538619E90AF1BD8D078496214C8F740F7BB5BFA284C811BEF5F9C6C1326E396DE17FDD47BE9D979643F2141FABB8950C3CECEEECFD0BB763F4D143A5AE284535F5E29B05E7DAC609D7080B5D1325F8D9242C67AC44482F5AA51131A763C370842D757EC16DE1988DF5BB4E4B6191A03F9E200DB491906871442FA98985DC976D5007C22FD491F49B8F0AB2AFDE0BDEFA18E56A686C712F4EDE53D924AA39CFED6C827CE0AD553132A474009203421F0A9373646200D8BA75725964079CF82D8C0C50AF6EEA4ECB607C02E7DD55C7998B4F849D79BE8867C69C62A Derive=ffdhe3072-2 +Availablein = default PeerKey=ffdhe3072-1-pub SharedSecret=59C4B72684E68BC02148DF19FE6BECE40885AD037EE83F28C6E353C87026DAD66BB469C3F252BDC7ADA9271B6AD900620ECA15696B4E85561794A26259D61CAC7B56DDAED27BE2759A4C4BED5F8940784A255635D24E0D7B2BC796142CAF256D7A979240E9C8DD7230562B5D687971C4582A488E7BCA827FA32C4068C3C8B27ACA83E43EE9D7EAB3192F0DD877BA9C25D6334D233FC5752BEFE625B3D5DAE8589122B6C7E76538619E90AF1BD8D078496214C8F740F7BB5BFA284C811BEF5F9C6C1326E396DE17FDD47BE9D979643F2141FABB8950C3CECEEECFD0BB763F4D143A5AE284535F5E29B05E7DAC609D7080B5D1325F8D9242C67AC44482F5AA51131A763C370842D757EC16DE1988DF5BB4E4B6191A03F9E200DB491906871442FA98985DC976D5007C22FD491F49B8F0AB2AFDE0BDEFA18E56A686C712F4EDE53D924AA39CFED6C827CE0AD553132A474009203421F0A9373646200D8BA75725964079CF82D8C0C50AF6EEA4ECB607C02E7DD55C7998B4F849D79BE8867C69C62A @@ -18111,10 +18858,12 @@ PrivPubKeyPair=ffdhe4096-1:ffdhe4096-1-pub PrivPubKeyPair=ffdhe4096-2:ffdhe4096-2-pub Derive=ffdhe4096-1 +Availablein = default PeerKey=ffdhe4096-2-pub SharedSecret=B92DCFD06BA13D2E740CE295BA5748F0A8BC7F2AA23E6E9CC8D5FE01A783DA5F12C2B190B77D6A3CD69FE2B340C98AA2F612CE5A3FA34C168C2B1A3067B143043F46D354C5FFD79DDAC0097A5A1375B1F41A95918D49499116CA6D39377548FF23AC2248CFDE2064106F426FB45D9A626B614C5DF54872DB3216857472406C83449BED15385839D01B6F67CC8EC7F7DA35389B01333E6E8AD2F366BA56B6DB1F3FD726AB4C7F99E2D0AB9BABC6D4B8F6244B9706D4942984E2DD046831E05C51571E3EA9B1E665D5419E89378F7315BB2DEFD258A8FF44242D6908EC2E15A48D2F61820616935A72BF18309903A492F2646DA91AE5ABD3A4B3D934FF3811415B5385A276E082B4DE960CFE82FE3EE4909C2C8847EE2D839F419365B7B2EF38646EE182EF3531CCBEEE4115E57D71BFF808C0379057805D82317176CC913F058635F2B30705F456CCB3C518905F18A0902F6A74DECC48BCCDAF0C3004FE233D2FAFB60EB79204DDA7B791F911D763A3A0FBDD0926644F7004D5AD57EFF787DD54C81C4E9828B8501B44468ABCA6189A8DC00E666F813D7EF21A472F36E5F3338405C3FF4433FFBEF867677791C848E0B62D0099EE59E3A8ACDCCA4ABDB2CD6C58A8C7E76BE37FD922BB29DCA0F5B70714BDAF3183C09982EE4716BC656A3A8D63F7B26201C5D803923D1CE7BCE2843376F02E580D91B63B2B7480BBF32E9551ED Derive=ffdhe4096-2 +Availablein = default PeerKey=ffdhe4096-1-pub SharedSecret=B92DCFD06BA13D2E740CE295BA5748F0A8BC7F2AA23E6E9CC8D5FE01A783DA5F12C2B190B77D6A3CD69FE2B340C98AA2F612CE5A3FA34C168C2B1A3067B143043F46D354C5FFD79DDAC0097A5A1375B1F41A95918D49499116CA6D39377548FF23AC2248CFDE2064106F426FB45D9A626B614C5DF54872DB3216857472406C83449BED15385839D01B6F67CC8EC7F7DA35389B01333E6E8AD2F366BA56B6DB1F3FD726AB4C7F99E2D0AB9BABC6D4B8F6244B9706D4942984E2DD046831E05C51571E3EA9B1E665D5419E89378F7315BB2DEFD258A8FF44242D6908EC2E15A48D2F61820616935A72BF18309903A492F2646DA91AE5ABD3A4B3D934FF3811415B5385A276E082B4DE960CFE82FE3EE4909C2C8847EE2D839F419365B7B2EF38646EE182EF3531CCBEEE4115E57D71BFF808C0379057805D82317176CC913F058635F2B30705F456CCB3C518905F18A0902F6A74DECC48BCCDAF0C3004FE233D2FAFB60EB79204DDA7B791F911D763A3A0FBDD0926644F7004D5AD57EFF787DD54C81C4E9828B8501B44468ABCA6189A8DC00E666F813D7EF21A472F36E5F3338405C3FF4433FFBEF867677791C848E0B62D0099EE59E3A8ACDCCA4ABDB2CD6C58A8C7E76BE37FD922BB29DCA0F5B70714BDAF3183C09982EE4716BC656A3A8D63F7B26201C5D803923D1CE7BCE2843376F02E580D91B63B2B7480BBF32E9551ED @@ -18241,10 +18990,12 @@ PrivPubKeyPair=ffdhe6144-1:ffdhe6144-1-pub PrivPubKeyPair=ffdhe6144-2:ffdhe6144-2-pub Derive=ffdhe6144-1 +Availablein = default PeerKey=ffdhe6144-2-pub SharedSecret=02B4252E4F0F659E78A58223DE9044AD90A0CC22DB5DE4F4815BF7226B7E663AE1B548A1ADB4ED81E9AF0B62FF985BF1E9893E39BA56FD843B6A134923156DD7D51DE9811B14ABA4494EAA95DA2AF8ACAD6AB2480A96A5DB99B46456FDEBDF1083220566F5DD3EC52DD06E72558B4701B528C989C06CE245EEF6215F487CFD1580615E6FE7D036985782E9BCC7ED62D2AA5A869FBF668391A0E601C2EC7A9A2E0DB57736C54ACA751E1085ABD4A55D506EFAB6FFC51AEEA33DD5EA651AA613E5F77BC81D2489FABABC8AEEF1DE5B65C3584F4080E4324EF3722AB4BF67A8FCABAE430996E454CA985B886D1B6BB5FF2C5246A8C001D953751EB59C47DAC678EE890DE817D9A06877E86516291A170ABE2273C4ADCF638713D98283F90DA17478759537C58A5D7D6AAC54C0485CAC2407A76079625ED285444ECA18127FF42419FADBDA2EDD5300CCB5F69543BCB74005BECE1FED763B06766B05EF2E20B685B92910C16B70165D111B2F8C59C6C79E5BCAC96FD2A6A969061C6D8626E605DA70E247630CF8A1D419C0E4910A72C164117B92B651CA8C8842E79C06E0E12BF8B67C218FB7FEB0F787EBBD2562E5C88A38013133753AECA5B03ECB54328765F61A6D3B901C38EC8F6582D717C688049893129DCAE597F3888E8E8BBCD9AAC9BDBD087926EAA63592DA66C085CBC408A5EC787CF0E3CE3070918B65B089A23457D0408B626B449221B460D1FD8DCCB280744B322760A53945DCD8FAA03DB4844F27496DA00B30ACC8619679D0AD28CE4464094C6DB2F68332BAD17348637E4D72B0C1EBCBBDDE514691C744F709083A76044AC85AF1B18ACD0B1716773DDB82ED94E02B0DB26205BD683A1F4E390881D556AAC305FCEB7E00AF0E3EC80AF2CD46769ED4F471DC71B60BEF36F6361B4A82C7A7F473F61C566D5206C9EFDC112A48BDDC58691830F64C91F4FB150DC61A334B7D5C3770BDBDC91A5E14C6FB02A369A0A7D2D7B008070289EFBDBB2AFD4D62BCC095E9FF81CB8E0B4F139EFD3CF5EDF243FCC08A8FA7577AEF0548436B589C4A221BE1FCE223024619F99DC66557598F Derive=ffdhe6144-2 +Availablein = default PeerKey=ffdhe6144-1-pub SharedSecret=02B4252E4F0F659E78A58223DE9044AD90A0CC22DB5DE4F4815BF7226B7E663AE1B548A1ADB4ED81E9AF0B62FF985BF1E9893E39BA56FD843B6A134923156DD7D51DE9811B14ABA4494EAA95DA2AF8ACAD6AB2480A96A5DB99B46456FDEBDF1083220566F5DD3EC52DD06E72558B4701B528C989C06CE245EEF6215F487CFD1580615E6FE7D036985782E9BCC7ED62D2AA5A869FBF668391A0E601C2EC7A9A2E0DB57736C54ACA751E1085ABD4A55D506EFAB6FFC51AEEA33DD5EA651AA613E5F77BC81D2489FABABC8AEEF1DE5B65C3584F4080E4324EF3722AB4BF67A8FCABAE430996E454CA985B886D1B6BB5FF2C5246A8C001D953751EB59C47DAC678EE890DE817D9A06877E86516291A170ABE2273C4ADCF638713D98283F90DA17478759537C58A5D7D6AAC54C0485CAC2407A76079625ED285444ECA18127FF42419FADBDA2EDD5300CCB5F69543BCB74005BECE1FED763B06766B05EF2E20B685B92910C16B70165D111B2F8C59C6C79E5BCAC96FD2A6A969061C6D8626E605DA70E247630CF8A1D419C0E4910A72C164117B92B651CA8C8842E79C06E0E12BF8B67C218FB7FEB0F787EBBD2562E5C88A38013133753AECA5B03ECB54328765F61A6D3B901C38EC8F6582D717C688049893129DCAE597F3888E8E8BBCD9AAC9BDBD087926EAA63592DA66C085CBC408A5EC787CF0E3CE3070918B65B089A23457D0408B626B449221B460D1FD8DCCB280744B322760A53945DCD8FAA03DB4844F27496DA00B30ACC8619679D0AD28CE4464094C6DB2F68332BAD17348637E4D72B0C1EBCBBDDE514691C744F709083A76044AC85AF1B18ACD0B1716773DDB82ED94E02B0DB26205BD683A1F4E390881D556AAC305FCEB7E00AF0E3EC80AF2CD46769ED4F471DC71B60BEF36F6361B4A82C7A7F473F61C566D5206C9EFDC112A48BDDC58691830F64C91F4FB150DC61A334B7D5C3770BDBDC91A5E14C6FB02A369A0A7D2D7B008070289EFBDBB2AFD4D62BCC095E9FF81CB8E0B4F139EFD3CF5EDF243FCC08A8FA7577AEF0548436B589C4A221BE1FCE223024619F99DC66557598F @@ -18405,10 +19156,12 @@ PrivPubKeyPair=ffdhe8192-1:ffdhe8192-1-pub PrivPubKeyPair=ffdhe8192-2:ffdhe8192-2-pub Derive=ffdhe8192-1 +Availablein = default PeerKey=ffdhe8192-2-pub SharedSecret=4E48335CB2A508C3481729F42C49CFC0A9DA673F9FA4FBD968B3C5B78DBFA8695295642D1337C54229370B33068481F6A6E1B021F8B09B7C6B3E4DB581AD4C7ACF5C230A1FD4107EAE55530A8376856A65E079DE1BDA41B050E9B53A088ACADB879CCBC683A13BB925D48497BF7021FEB9DA214DD77FCBB6D0D46EC2BB9C7A9AFB93FC236E4EB61CB0F0C8E025D8CF4AF8B3B0F28B3E2CFAE6E760DC7877C71046179154FBE1A50A315C4DBA6D9E06406D389B614B1FC422C72FBB958C0A2EE21694CD32136F9CF0A1205E0D3A4B10CC9C98B3B4524A0CDC9455D3021AC44057CEF4A97E85166068769E9E644CC447095243BB90368A1CE6F0E3C69CA180F5B9D51F590A812B1375460CF10A7E718A83A2F6B00D8E28BAB45CEAB8AF0EB02988ED9221416EC061C1C4081552D3D0849D243DB473EC7B90180C3891E768DD2D7002CF505D369700CAF02A4B9DD1F2828C4ACC1F2EB47100DC2DB5620ADA971D1B0B0FAC9F9E3492B591FC85AC3DCB3826A8DA5842F4AE145FE33BFCDD0B6CD15C9836A5862EDB3D87A0CDBD724AE19A79A55D4F0BFF7870019926181933C840EACFB70FBC0EF182057DC09E06798EB4C9AAC2285F22F5D907A432C6D00CC44D07D77E77D1ACC183A174146ECFBDA26FF922CEBD2FA288EF2D23F65C0AAAD0F05DBFB6CA12446082D1F5774877483C3858442E305CF2A9637CE0EBB702DB70FF336E5B0413F3E8791960F1F0A9877C9076213D40657283D546AE52B73FF4449E60F8B6FE30D4CC0BA1ACA7A7DC155EC73C48B21477983D004261267D710D8A5E8CBD0656F1A963F248E887E8C2BF87BCAE7A0D4891BF21FCF35893584B29E18E842A23EA329ADD3D6AD994B5CBFBBFAB5A26932E8F799B2B0FA7789DE7A4A5C4B7FA81971819EA7F33B5BF6577F917BDE9C3680BCC5B15F1EAB4524A1B6DEE96B9F108A77344269A1757685D0404C832E4E0C5A29F808CFA6290316C0EBB2EF0A7431F62A5FBCDC66527AD8A04C0F10AF88C7CE1F1F22C41B71CE278BB704E88145608C28AD78402487031F6B13604CC6687161EBB78E7AF7AA0BC3CCB9AD8B00D7C01980599904B71F5DBC06A691E5638566BE36522B7FED69E24C28F8EA798BA3E9CCEB8AB8CF5651379A21A38315B05C66205616BBC6A3DD5573C9C6FBA2E3488E055E5F36857016D9300BFCE9F38D7C7CCD07FCF1EF41F8347CADCB12C400536374CF269613B05069B6D94CADA3B1F4ACBB68FA1ED175B01D840D871B3B0CDB918CDF15C79169A398C189AEA78860081DB423C89D350587E26D6D77B4C762B4F2A030345679F724CFBB08DB03E8CEB4FF0B91422BD2EB5C1C356D209049CFA2D6447F69B1E1DF0850FFBB6BB9F8D5B147765C023F76524A808456DEBF6A9134E3364DF462D4807FE6D4D036A4E59A4D56F8A30D8A27F4DFA174940B713A7E4 Derive=ffdhe8192-2 +Availablein = default PeerKey=ffdhe8192-1-pub SharedSecret=4E48335CB2A508C3481729F42C49CFC0A9DA673F9FA4FBD968B3C5B78DBFA8695295642D1337C54229370B33068481F6A6E1B021F8B09B7C6B3E4DB581AD4C7ACF5C230A1FD4107EAE55530A8376856A65E079DE1BDA41B050E9B53A088ACADB879CCBC683A13BB925D48497BF7021FEB9DA214DD77FCBB6D0D46EC2BB9C7A9AFB93FC236E4EB61CB0F0C8E025D8CF4AF8B3B0F28B3E2CFAE6E760DC7877C71046179154FBE1A50A315C4DBA6D9E06406D389B614B1FC422C72FBB958C0A2EE21694CD32136F9CF0A1205E0D3A4B10CC9C98B3B4524A0CDC9455D3021AC44057CEF4A97E85166068769E9E644CC447095243BB90368A1CE6F0E3C69CA180F5B9D51F590A812B1375460CF10A7E718A83A2F6B00D8E28BAB45CEAB8AF0EB02988ED9221416EC061C1C4081552D3D0849D243DB473EC7B90180C3891E768DD2D7002CF505D369700CAF02A4B9DD1F2828C4ACC1F2EB47100DC2DB5620ADA971D1B0B0FAC9F9E3492B591FC85AC3DCB3826A8DA5842F4AE145FE33BFCDD0B6CD15C9836A5862EDB3D87A0CDBD724AE19A79A55D4F0BFF7870019926181933C840EACFB70FBC0EF182057DC09E06798EB4C9AAC2285F22F5D907A432C6D00CC44D07D77E77D1ACC183A174146ECFBDA26FF922CEBD2FA288EF2D23F65C0AAAD0F05DBFB6CA12446082D1F5774877483C3858442E305CF2A9637CE0EBB702DB70FF336E5B0413F3E8791960F1F0A9877C9076213D40657283D546AE52B73FF4449E60F8B6FE30D4CC0BA1ACA7A7DC155EC73C48B21477983D004261267D710D8A5E8CBD0656F1A963F248E887E8C2BF87BCAE7A0D4891BF21FCF35893584B29E18E842A23EA329ADD3D6AD994B5CBFBBFAB5A26932E8F799B2B0FA7789DE7A4A5C4B7FA81971819EA7F33B5BF6577F917BDE9C3680BCC5B15F1EAB4524A1B6DEE96B9F108A77344269A1757685D0404C832E4E0C5A29F808CFA6290316C0EBB2EF0A7431F62A5FBCDC66527AD8A04C0F10AF88C7CE1F1F22C41B71CE278BB704E88145608C28AD78402487031F6B13604CC6687161EBB78E7AF7AA0BC3CCB9AD8B00D7C01980599904B71F5DBC06A691E5638566BE36522B7FED69E24C28F8EA798BA3E9CCEB8AB8CF5651379A21A38315B05C66205616BBC6A3DD5573C9C6FBA2E3488E055E5F36857016D9300BFCE9F38D7C7CCD07FCF1EF41F8347CADCB12C400536374CF269613B05069B6D94CADA3B1F4ACBB68FA1ED175B01D840D871B3B0CDB918CDF15C79169A398C189AEA78860081DB423C89D350587E26D6D77B4C762B4F2A030345679F724CFBB08DB03E8CEB4FF0B91422BD2EB5C1C356D209049CFA2D6447F69B1E1DF0850FFBB6BB9F8D5B147765C023F76524A808456DEBF6A9134E3364DF462D4807FE6D4D036A4E59A4D56F8A30D8A27F4DFA174940B713A7E4 @@ -18422,21 +19175,25 @@ Wt3Te/d/8Mr57Tf886i09VwDhSMmH8pmNq/mp6+ioUgqYG9cs6GLLioe -----END PRIVATE KEY----- Verify = SM2_key1 +Availablein = default Ctrl = digest:SM3 Input = D7AD397F6FFA5D4F7F11E7217F241607DC30618C236D2C09C1B9EA8FDADEE2E8 Output = 3046022100AB1DB64DE7C40EDBDE6651C9B8EBDB804673DB836E5D5C7FE15DCF9ED2725037022100EBA714451FF69B0BB930B379E192E7CD5FA6E3C41C7FBD8303B799AB54A54621 Verify = SM2_key1 +Availablein = default Ctrl = digest:SM3 Input = B1139602C6ECC9E15E2F3F9C635A1AFE737058BC15387479C1EA0D0B3D90E9E5 Output = 3045022100E6E0414EBD3A656C35602AF14AB20287DBF30D57AF75C49A188ED4B42391F22402202F54F277C606F4605E1CE9514947FFDDF94C67A539804A4ED17F852288BDBE2E Verify = SM2_key1 +Availablein = default Ctrl = digest:SHA512 Input = 40AA1B203C9D8EE150B21C3C7CDA8261492E5420C5F2B9F7380700E094C303B48E62F319C1DA0E32EB40D113C5F1749CC61AEB499167890AB82F2CC9BB706971 Output = 3046022100AE018933B9BA041784380069F2DDF609694DCD299FDBF23D09F4B711FBC103EC0221008440BB1A48C132DE4FB91BE9F43B958142FDD29FB9DABE01B17514023A2F638C Decrypt = SM2_key1 +Availablein = default Input = 30818A0220466BE2EF5C11782EC77864A0055417F407A5AFC11D653C6BCE69E417BB1D05B6022062B572E21FF0DDF5C726BD3F9FF2EAE56E6294713A607E9B9525628965F62CC804203C1B5713B5DB2728EB7BF775E44F4689FC32668BDC564F52EA45B09E8DF2A5F40422084A9D0CC2997092B7D3C404FCE95956EB604D732B2307A8E5B8900ED6608CA5B197 Output = "The floofy bunnies hop at midnight" @@ -18445,6 +19202,7 @@ Output = "The floofy bunnies hop at midnight" # anything about the generated signature being valid, nor does it test the # correct implementation of the cryptosystem. Sign = SM2_key1 +Availablein = default Ctrl = digest:SM3 Input = D7AD397F6FFA5D4F7F11E7217F241607DC30618C236D2C09C1B9EA8FDADEE2E8 Output = 3045022100f11bf36e75bb304f094fb42a4ca22377d0cc768637c5011cd59fb9ed4b130c98022035545ffe2c2efb3abee4fee661468946d886004fae8ea5311593e48f7fe21b91 @@ -18457,6 +19215,7 @@ PrivateKeyRaw = WychePRIVATE0:X25519:288796bc5aff4b81a37501757bc0753a3c21964790d PublicKeyRaw = WychePUBLIC0:X25519:f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f Derive=WychePRIVATE0 +Availablein = default PeerKey=WychePUBLIC0 SharedSecret=b4e0dd76da7b071728b61f856771aa356e57eda78a5b1655cc3820fb5f854c5c @@ -18465,6 +19224,7 @@ PrivateKeyRaw = WychePRIVATE1:X25519:60887b3dc72443026ebedbbbb70665f42b87add1440 PublicKeyRaw = WychePUBLIC1:X25519:f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff Derive=WychePRIVATE1 +Availablein = default PeerKey=WychePUBLIC1 SharedSecret=38d6304c4a7e6d9f7959334fb5245bd2c754525d4c91db950206926234c1f633 @@ -18473,17 +19233,20 @@ PrivateKeyRaw = WychePRIVATE2:X25519:a0a4f130b98a5be4b1cedb7cb85584a3520e142d474 PublicKeyRaw = WychePUBLIC2:X25519:0ab4e76380d84dde4f6833c58f2a9fb8f83bb0169b172be4b6e0592887741a36 Derive=WychePRIVATE2 +Availablein = default PeerKey=WychePUBLIC2 SharedSecret=0200000000000000000000000000000000000000000000000000000000000000 PublicKeyRaw = WychePUBLIC3:X25519:89e10d5701b4337d2d032181538b1064bd4084401ceca1fd12663a1959388000 Derive=WychePRIVATE2 +Availablein = default PeerKey=WychePUBLIC3 SharedSecret=0900000000000000000000000000000000000000000000000000000000000000 PublicKeyRaw = WychePUBLIC4:X25519:2b55d3aa4a8f80c8c0b2ae5f933e85af49beac36c2fa7394bab76c8933f8f81d Derive=WychePRIVATE2 +Availablein = default PeerKey=WychePUBLIC4 SharedSecret=1000000000000000000000000000000000000000000000000000000000000000 diff --git a/test/recipes/65-test_cmp_vfy.t b/test/recipes/65-test_cmp_vfy.t new file mode 100644 index 00000000..c07e693f --- /dev/null +++ b/test/recipes/65-test_cmp_vfy.t @@ -0,0 +1,36 @@ +#! /usr/bin/env perl +# Copyright 2007-2019 The OpenSSL Project Authors. All Rights Reserved. +# Copyright Nokia 2007-2019 +# Copyright Siemens AG 2015-2019 +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + +use strict; +use OpenSSL::Test qw/:DEFAULT data_file/; +use OpenSSL::Test::Utils; + +setup("test_cmp_vfy"); + +plan skip_all => "This test is not supported in a no-cmp build" + if disabled("cmp"); + +plan skip_all => "This test is not supported in a no-ec build" + if disabled("ec"); + +plan tests => 1; + +ok(run(test(["cmp_vfy_test", + data_file("server.crt"), data_file("client.crt"), + data_file("EndEntity1.crt"), data_file("EndEntity2.crt"), + data_file("Root_CA.crt"), data_file("Intermediate_CA.crt"), + data_file("IR_protected.der"), + data_file("IR_unprotected.der"), + data_file("IP_waitingStatus_PBM.der"), + data_file("IR_rmprotection.der"), + data_file("insta.cert.pem"), + data_file("insta_ca.cert.pem"), + data_file("IR_protected_0_extraCerts.der"), + data_file("IR_protected_2_extraCerts.der")]))); diff --git a/test/recipes/65-test_cmp_vfy_data/EndEntity1.crt b/test/recipes/65-test_cmp_vfy_data/EndEntity1.crt new file mode 100644 index 00000000..4e054498 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/EndEntity1.crt @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICnDCCAYSgAwIBAgIBAzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwdSb290 +IENBMB4XDTE3MTEwODE1NDgwMFoXDTE4MTEwODExMTkwMFowETEPMA0GA1UEAxMG +Q2xpZW50MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtNiWJufEotHe +p6E/4b0laX7K1NRamNoUokLIsq78RoBieBXaGxIdbT6zmhLnLmZdb0UN3v7FUP75 +rqPN2yyj3TbS4o5ilh5El8bDDAPhW5lthCddvH/uBziRAM5oIB4xxOumNbgHpLUT +Clh49sdXd4ydYpCTWld5emRouBmMUeP/0EkyWMBIrHGSBxrqtFVRXhxvVHImQv6Z +hIKql7dCVCZbhUtxw6sLxIGL4xlhKoM2o31k4I/9tjZrWSZZ7KAIOlOLrjxZc/bQ +MwvxVUgS+C+iXzhCY8v+N/K37jwtAAk4C1aOGv/VygNcN0C/ynfKSzFmtnfei4+3 +6GC7HtFzewIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQB3GYpPSCCYsJM5owKcODr/ +I1aJ8jQ+u5jCKjvYLp6Cnbr4AbRXzvKuMyV6UfIAQbrGOxAClvX++5/ZQbhY+TxN +iiUM3yr5yYCLqj4MeYHhJ3gOzcppAO9LQ9V7eA8C830giZMm3cpApFSLP8CpwNUD +W/fgoQfaOae5IYPZdea88Gmt5RVNbtHgVqtm4ifTQo577kfxTeh20s+M6pgYW3/R +vftXy2ITEtk/j3NcRvOyZ7Bu1mAg7wNeUjL+gDWAaxs16LsWsCsUGwfr/Z2Rq1CF +zB0XwIyigkVLDLqDzUShcw0Eb/zYy2KXsxNWA2tb27mw+T+tmmOszpn7JjLrlVks +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/EndEntity2.crt b/test/recipes/65-test_cmp_vfy_data/EndEntity2.crt new file mode 100644 index 00000000..ba062107 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/EndEntity2.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB3zCCAZSgAwIBAgIBBjAKBggqhkjOPQQDAzAVMRMwEQYDVQQDEwpad2lzY2hl +bkNBMB4XDTE3MTEwODE2MDUwMFoXDTE4MTEwODExMTkwMFowEjEQMA4GA1UEAxMH +Q2xpZW50MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTYlibnxKLR +3qehP+G9JWl+ytTUWpjaFKJCyLKu/EaAYngV2hsSHW0+s5oS5y5mXW9FDd7+xVD+ ++a6jzdsso9020uKOYpYeRJfGwwwD4VuZbYQnXbx/7gc4kQDOaCAeMcTrpjW4B6S1 +EwpYePbHV3eMnWKQk1pXeXpkaLgZjFHj/9BJMljASKxxkgca6rRVUV4cb1RyJkL+ +mYSCqpe3QlQmW4VLccOrC8SBi+MZYSqDNqN9ZOCP/bY2a1kmWeygCDpTi648WXP2 +0DML8VVIEvgvol84QmPL/jfyt+48LQAJOAtWjhr/1coDXDdAv8p3yksxZrZ33ouP +t+hgux7Rc3sCAwEAAaMNMAswCQYDVR0TBAIwADAKBggqhkjOPQQDAwM5ADA2AhkA +qASBLwTauET6FGp/EBe7b/99jTyGB861AhkA5ILGkLX4KmjRkTcNxJ3JKB1Sumya +cbqF +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.der b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.der new file mode 100644 index 00000000..76888e84 Binary files /dev/null and b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.der differ diff --git a/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.txt b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.txt new file mode 100644 index 00000000..89837972 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/IP_waitingStatus_PBM.txt @@ -0,0 +1,2 @@ +Reference#: 4787 +Secret Value: 9pp8-b35i-Xd3Q-udNR diff --git a/test/recipes/65-test_cmp_vfy_data/IR_protected.der b/test/recipes/65-test_cmp_vfy_data/IR_protected.der new file mode 100644 index 00000000..ce0a7a46 Binary files /dev/null and b/test/recipes/65-test_cmp_vfy_data/IR_protected.der differ diff --git a/test/recipes/65-test_cmp_vfy_data/IR_protected_0_extraCerts.der b/test/recipes/65-test_cmp_vfy_data/IR_protected_0_extraCerts.der new file mode 100755 index 00000000..1c260280 Binary files /dev/null and b/test/recipes/65-test_cmp_vfy_data/IR_protected_0_extraCerts.der differ diff --git a/test/recipes/65-test_cmp_vfy_data/IR_protected_2_extraCerts.der b/test/recipes/65-test_cmp_vfy_data/IR_protected_2_extraCerts.der new file mode 100755 index 00000000..56faad4a Binary files /dev/null and b/test/recipes/65-test_cmp_vfy_data/IR_protected_2_extraCerts.der differ diff --git a/test/recipes/65-test_cmp_vfy_data/IR_rmprotection.der b/test/recipes/65-test_cmp_vfy_data/IR_rmprotection.der new file mode 100644 index 00000000..e84c64d8 Binary files /dev/null and b/test/recipes/65-test_cmp_vfy_data/IR_rmprotection.der differ diff --git a/test/recipes/65-test_cmp_vfy_data/IR_unprotected.der b/test/recipes/65-test_cmp_vfy_data/IR_unprotected.der new file mode 100644 index 00000000..41a64969 Binary files /dev/null and b/test/recipes/65-test_cmp_vfy_data/IR_unprotected.der differ diff --git a/test/recipes/65-test_cmp_vfy_data/Intermediate_CA.crt b/test/recipes/65-test_cmp_vfy_data/Intermediate_CA.crt new file mode 100644 index 00000000..3416cdb9 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/Intermediate_CA.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB1jCBv6ADAgECAgEFMA0GCSqGSIb3DQEBDQUAMBIxEDAOBgNVBAMTB1Jvb3Qg +Q0EwHhcNMTcxMTA4MTYwNDAwWhcNMTgxMTA4MTExOTAwWjAVMRMwEQYDVQQDEwpa +d2lzY2hlbkNBMEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAE9bJcmZWj2CmO6aW8 +9Qylkj1WgPREf9/s4Z1VYqFODeJnebPXFBLVH/aoGxnds9E9oxAwDjAMBgNVHRME +BTADAQH/MA0GCSqGSIb3DQEBDQUAA4IBAQBwQD4NTIWMMevEsSrBpKjjQEWc81Ct +eXoyAXr/d8wgVyuIZe9C7ekxPQCwowcmONUyeYQv9N2eYpdhkAQuk6DS4+aDR4s7 +I6rg5R5CUGGla5NUxM0BKIS3ZIezvEGlP1NFN+HBgJI7ZIIYQ3zDr0EYgo4J7Xvm +5p58pcCZSsbVyKwKs6T+rTzOVVmJ2L1bWzywZEDmzxMkPmA6fP9XtB4Kx/b4oviw +TEQl3Jf9EkBvBkKX2rRJs7aMJo4MwOnE4HHOV5GAQqhGrXltsuXmVfIQPtRN4xlK +oNf/FukI1NcBh4A/iY4PmbyxHYmKy6qjFjng2u2VFtH15HDT4XlLP5gq +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/Root_CA.crt b/test/recipes/65-test_cmp_vfy_data/Root_CA.crt new file mode 100644 index 00000000..6ccf3625 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/Root_CA.crt @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICrzCCAZegAwIBAgIBATANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwdSb290 +IENBMB4XDTE3MTEwODE1NDUwMFoXDTE4MTEwODExMTkwMFowEjEQMA4GA1UEAxMH +Um9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALiHdLAD2Wu+ +C5UDMK6WCL53Wz0CeU61RRRlGEVSqHrQOWnffgVutgftzsddxxgJJyGsqKo1B+nQ +vapyJyugYJWYNQLN5+iffe4y1UBPnHMQFHiZ4cNR6PB0eHja2wpcN3QmJzOcpRYE +xf+QQwJNFqhRi0cZGfd/JfFi/ybJalqClbnYMPcJo7g6S7M3lWbOnEOUWnbM2EBp +h849mC+kd80vXcRcb7U/3MJKK3Ee72TDye5/kWFf9zcxj2ac0oCiS66JKYobiVJr +NmbGM0I9U6T6ejXVUu2J3pGUFlcf3RCUYf1aWhkmzEzbm/FGMRJ7vVyCXm/OWIh9 +bqtwH5YfljsCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC +AQEAF7tSa9oVan7kPR5/TXB330Ca1xQt5C38afaJbacR9mM8ZkL0HceQTuJGrnAR +4kK7CaB5iraU6Lxyql7drq8aixz/7TXna6c172J6HxDeFhQMeSt1LAh7XN5Ir6Y6 +iO7XD5I5lw3Xv6qvhoD0ktkNk/WtF7aBw2ZAi+RcDMgWzWjoS4WqMbvWEHw10j9b +s8R0YG4yi6wb89UNIMfQtC2XviHKcRS9MzIJQHw73r2EY2t6o9TO+5ukHYDB6/Zo +/CLXu21MzsFvhupHgX6zdptU324tq2za1+4LvmOHSW+D36jEPT22SndXmHo5VmAn +6bQ52MhBI0rrWwju9aBpVzsUUg== +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/chain.txt b/test/recipes/65-test_cmp_vfy_data/chain.txt new file mode 100644 index 00000000..1b55c25a --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/chain.txt @@ -0,0 +1,4 @@ +1 - Root_CA (self-signed) +1.1 - EndEntity1 +1.2 Intermediate_CA +1.2.1 EndEntity2 diff --git a/test/recipes/65-test_cmp_vfy_data/client.crt b/test/recipes/65-test_cmp_vfy_data/client.crt new file mode 100644 index 00000000..fa6cdec4 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/client.crt @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICtTCCAZ2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQKExNjbGll +bnQgb3JnYW5pemF0aW9uMB4XDTE4MDIwNjEyNDYwMFoXDTE5MDIwNjEyNDYwMFow +HjEcMBoGA1UEChMTY2xpZW50IG9yZ2FuaXphdGlvbjCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBALf0KDl07RlJlQVQcibB+JiUyXthFz4nzIkFVNISORCG +JpTUMLLWxhF7Sc1li7gzvMAvx77SUThaNEOd0d2MJBbOXmZ9MtAOy8yHzRejBpw1 +mn9e0FKCI8rz3ttivspsGUIsRDhvMxuOol3lQ93QjfI593D7BOfBGdhsivD8m6+P +EzF400iOSsbo3VPlArA+xTHiCyJ+E9p3yFGvzQrmK/MjM3lW3l3tARJmbXINIOio +PnVmh4nsc9awqDGQdQTup/EjuY15AR4Vck7Zf9e+6U9t7Ow7aaZ5gX07FNnnqlVs +48Lj/5a2Qgh482SQNvvRWAkPwTQNZ40ThKvOR/sB3iUCAwEAATANBgkqhkiG9w0B +AQUFAAOCAQEAUSZBAR22ICoO7oPKMpfxwIHDAODv6jEHx2fSTpwxqodVqwF8ghAS +PvJwQ4+7+yny4ieX9iVicRdXXT8kEOQL5/3/Q+cBj/BzYE0VGxo4YloHQwWNdSg0 +B1oQ/4dAnDntGnXHDJMSZCGq/jj4/56XSrPymzR2jgOQNqnEkMM9/SpW7MirixJA +ZBR5Oc97vKaAH89ucsTu0neVMTXgywdBiy1W8bo4XxquK6VDRHlLj4gMLBpaG0mW +r5ST1gs8j63nK/eZ7AuTV/tvI25reXT+2wOKAgPEcd02Fh61TO4IPD4GDidEHvAw +6m66U9eFVezkxDvjE0X5voFnsBl4qTSZ/A== +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/insta.cert.pem b/test/recipes/65-test_cmp_vfy_data/insta.cert.pem new file mode 100755 index 00000000..4a25699f --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/insta.cert.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIEBtqJKDANBgkqhkiG9w0BAQsFADA6MQswCQYDVQQGEwJG +STETMBEGA1UECgwKSW5zdGEgRGVtbzEWMBQGA1UEAwwNSW5zdGEgRGVtbyBDQTAe +Fw0xODAxMzAxMDE0MjNaFw0xODA0MzAyMzU5NTlaMBAxDjAMBgNVBAMMBXRlc3Qx +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoiNNxo5pwk1lD1em3mad +bpKz86GSYyGlQtd0ZhIX1tOUFo9lFex7n5Osv0A99pKb+7EKqB9Ghg6mJ29kIUUm +LACnfZJ/q+U6s9T4zFrYyXweUNJvQgbA2ojDPyVoRp2T1ekahPh4DpxPWNKfYECD +RbrxkHMM3WiIqYFLU8hYvEMGSWRHHbnS/vG7MTaVDkR8d0zixTOp0fST5c1UUTqp +pYlThac/BG1kk3hyjIjz5o7lspfX3s/eAYgT9GhYHL6Uy4o4OqCleR39aVc0dMrr +jb7hsmX6ecNwqJOE5AHHOG4Ti6CbweSOcdH5PRFzdpao5rlTErsFHlUSTca4mfVe +WwIDAQABo4IBUzCCAU8wHwYDVR0jBBgwFoAUPHjduMGNV/UFKl5t4FhySvpEJWEw +HQYDVR0OBBYEFD0oLwov3vSGa1f9bIKGzWoPP0A1MCcGA1UdEQQgMB6CBGFiLmOC +BGRlLmaCBHRlc3SHBAECA/+HBAQFBgcweAYDVR0fBHEwbzBtoGugaYZnbGRhcDov +L3BraS5jZXJ0aWZpY2F0ZS5maTozODkvQ049SW5zdGElMjBEZW1vJTIwQ0EsTz1J +bnN0YSUyMERlbW8sQz1GST9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0O2JpbmFy +eTBqBggrBgEFBQcBAQReMFwwWgYIKwYBBQUHMAKGTmxkYXA6Ly93d3cuY2VydGlm +aWNhdGUuZmk6Mzg5L0NOPUluc3RhIERlbW8gQ0EsTz1JbnN0YSBEZW1vLEM9Rkk/ +Y2FDZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAbIRfAbU0v2RWZg6lkjZg +58fi4lT7Xk64sK4G/QLZ8TR/jg5UR0J5IvYt52YBjs/tjwJokkaW7+DyhVKkPrGs +oexpdLRSnXBv33+Yj+MZbSfrIX1Ox7up+ovs8le4viSlUqIDWBuuUBfZ16BFMmnB +UwDar8p/ci9ReKJH+FmvxlHbTHdMznZooSxTZm96HTutuiULL/SzZ2FpUsd7G5EE +mRA6uRVV1tuysD15H+9paqVwd0RaKee8Z63cDi3NXOxUcCnpINHrjVsdcW47/73V +IgfU4t39BKNiQNL0ADYpCyrpntTpsyZWrNmYzXMgLYEXxi4s6obusY0I3Qg+U31o +Uw== +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/insta.priv.pem b/test/recipes/65-test_cmp_vfy_data/insta.priv.pem new file mode 100755 index 00000000..8612994d --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/insta.priv.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAoiNNxo5pwk1lD1em3madbpKz86GSYyGlQtd0ZhIX1tOUFo9l +Fex7n5Osv0A99pKb+7EKqB9Ghg6mJ29kIUUmLACnfZJ/q+U6s9T4zFrYyXweUNJv +QgbA2ojDPyVoRp2T1ekahPh4DpxPWNKfYECDRbrxkHMM3WiIqYFLU8hYvEMGSWRH +HbnS/vG7MTaVDkR8d0zixTOp0fST5c1UUTqppYlThac/BG1kk3hyjIjz5o7lspfX +3s/eAYgT9GhYHL6Uy4o4OqCleR39aVc0dMrrjb7hsmX6ecNwqJOE5AHHOG4Ti6Cb +weSOcdH5PRFzdpao5rlTErsFHlUSTca4mfVeWwIDAQABAoIBAQCUYAZevBjgbP8c +qTPVtsY/WBVB0Qwrl7CqmIy2k7wpJfoRIyx4ga8n+3ZMlredm9EO5ZdA/04EhAdd +czyIjcU+42JjMduQLPgpda4xJLnauLDteYXDQHbgBePXN55TcQTG7skMAm2rwTOD +r0uWQ7Nd7pP9gqu1OmJF7EJI68D4llCU1FrOrliwSDzHWP3p4QmCW3M9PQJ68xw1 +gE7X1QflROGivcFoRgcgeoJDzpxveGvPbEn6Q+05/FMRVxjqWhpxdZ9/SL7iRz1e +45T+P9a8OLgTyErT3Lp/f/vuHA1tlbAYumhSnxXsb+nHi80aDcImOrNQHAp076Ik +bkZ1NpOxAoGBAM3Ulgi2hUPdoAMFtHZF8eBHRzn+4uTfY2s33wObiUJQ8VbGDeJY +ifCfOwLThiAXAqktrs7ItwWDYmzd5xPYGQeWoKcBEoZ+dvaaOe8H7TCMnjB3R3i1 +ACSDHo/3c+NfFOnPJtXL85jeAqGYH50uOtYmYaBVe6xASTBgNvP7snYHAoGBAMmo +ZBQqgIhoqMRapGh6n4OpzH0Nt9ruOTJoteAfbLdAu7X+wAaMuxEaAmZQRDYj0lzX +Ty8DlKSy7vfvXtghxMBEv4+dsYpagXcUOeEZSPfu1c3e253dAov6C0MdREKWBT7P ++NwPBowPy0CP/yBeHaw7d/P7/SYIoPXLGraGl6ANAoGBAMmmce7LUjgw0mjjl+8f +i14cts08x3FO4YnTTOut34VW43oNwuBzuYBBn4CfVpHtuS+hj9cKkTQXib/6jj7E +wZDLo0y6Ijodf9MNOaDSdS/RM9Frqlu5iBA9XR3SYnjpWAXQas2eaGLlblJ+RMqq +1f2j0JVR6j3RJWL9gBj8B9TVAoGBALYZrs4bF1iXEhfGNoL2gIdX1QX0VluIFfR0 +ZBDQr87H0Ppm4qbHfMHTt+kGgKJXNMaL08CDvj4AKxWPfhk0XUS2kDmzUDi8w/5x +MFcaCy+A6Gdw4OcsRfl7QaJIknSCnpf7HCI0G1hthsB1iBCFjMwUI50ap54p2pg6 +4ZOD9PYdAoGAERi5Hlq7+rJeDi3VunKHySqV9mvbOPNclEUmAdKi1yuu3INF1Zgv +Lf432ZI/Ufk2g888ed5ZGE1IMULc2tgSIAMzdX4ZYI4uGFLkHWzSOM6a7NCeZuVt +W+NgUYa2qsqFEd9kqaoDbNry+nPvLM7fWXvBoE4oNkeJhHjOIabBPvw= +-----END RSA PRIVATE KEY----- diff --git a/test/recipes/65-test_cmp_vfy_data/insta_ca.cert.pem b/test/recipes/65-test_cmp_vfy_data/insta_ca.cert.pem new file mode 100755 index 00000000..4b7e31b8 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/insta_ca.cert.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDkDCCAnigAwIBAgIDCZU1MA0GCSqGSIb3DQEBBQUAMDoxCzAJBgNVBAYTAkZJ +MRMwEQYDVQQKEwpJbnN0YSBEZW1vMRYwFAYDVQQDEw1JbnN0YSBEZW1vIENBMB4X +DTA2MDEwMjA4NDgzOFoXDTI1MTIzMTA4NDgzOFowOjELMAkGA1UEBhMCRkkxEzAR +BgNVBAoTCkluc3RhIERlbW8xFjAUBgNVBAMTDUluc3RhIERlbW8gQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDF57bSwj+hZnkgLyLtFsoNIN19qBv9 +GIoqFaCiPvw6VQgMXR15t+Z5sdYHdydGp875yJD4wDq2K7cjMoCXALxLeyp6dCY6 +WPC6Hk3QvZtMRuDAz8+0Nb5qaC4+O+7c7j1h/Gs8Jpj+TUuSkmtlCVIGPSWkWaQl +FhLWeUnKRW8bj1CJQguV7igF19kGQKUZ/VZj+n5xIXKHc8njC1ZrS/s0IBFViQkZ +63nTdNPLHQ4Xu8uKrbJbYEK1S4KVNH3L9yA4ut+brqX8n6OulTsKntvMdwNWZdor +KoM15D3lmM7QUGDflJdSQ/qvBVTda+ccrT21sp4hdwwiU01vxQguT26JAgMBAAGj +gZ4wgZswHwYDVR0jBBgwFoAUPHjduMGNV/UFKl5t4FhySvpEJWEwHQYDVR0OBBYE +FDx43bjBjVf1BSpebeBYckr6RCVhMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8E +CDAGAQH/AgEAMDUGCWCGSAGG+EIBDQQoFiZJbnN0YSBEZW1vIENBIC0gb25seSBm +b3IgZGVtbyBwdXJwb3NlczANBgkqhkiG9w0BAQUFAAOCAQEAuVRmRimTxVTZMNXi +3u4bRCq7GxJ4Lonx3mocxYiwBjCYwqn5dPAd4AHrA1HWYCEvIPo52FibpUNNljqH +v7CSoEBg2f4If6cFtwudobqNvf8Z50CAnxlwpPy4k+EbXlh49/uZBtu8+Lc2Ss7L +QaNHHiOeHxYeGX7pTcr6fnXQWAbbn4SLyqniW7ZTqjNJvC79Ym7KowMYzCbmozzv +3xqElA+g/MLFfxn52c/vl/obOVk5eBf3f7V68qKL2IDEip3fyZyoelhfTypq944m +sSJFQjoVzgd7ykgouEwOceOT8YMWWigNsWl/hsVJ03Ri7TxRX4+v8dMEbat+SsTL +AqTTgQ== +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/server.crt b/test/recipes/65-test_cmp_vfy_data/server.crt new file mode 100644 index 00000000..ed1d4333 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/server.crt @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICpTCCAY2gAwIBAgIBATANBgkqhkiG9w0BAQUFADAWMRQwEgYDVQQKDAtvcGVu +c3NsX2NtcDAeFw0xNzEyMjAxMzA0MDBaFw0xODEyMjAxMzA0MDBaMBYxFDASBgNV +BAoMC29wZW5zc2xfY21wMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZAJHnq0ypW/PZccrWj +o7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVVpLicMnItNFElfCoh +BzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuWq/vWW9r96/gBKKdd +mj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SOZf9bH1olBVsmBMsU +shFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6GvZ/i5KOhaqgJCnRKd +HHzijz9cLec5p9NSOuC1OwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQDGUXpFCBkV +WgPrBfZyBwt6VCjWB/e67q4IdcKMfDa4hwSquah1AyXHI0PlC/qitnoSx2+7f7pY +TEOay/3eEPUl1J5tdPF2Vg56Dw8jdhSkMwO7bXKDEE3R6o6jaa4ECgxwQtdGHmNU +A41PgKX76yEXku803ptO39/UR7i7Ye3MbyAmWE+PvixJYUbxd3fqz5fsaJqTCzAy +AT9hrr4uu8J7m3LYaYXo4LVL4jw5UsP5bIYtpmmEBfy9GhpUqH5/LzBNij7y3ziE +T59wHkzawAQDHsBPuCe07DFtlzqWWvaih0TQAw9MZ2tbyK9jt7P80Rqt9CwpM/i9 +jQYqSl/ix5hn +-----END CERTIFICATE----- diff --git a/test/recipes/65-test_cmp_vfy_data/server.key b/test/recipes/65-test_cmp_vfy_data/server.key new file mode 100644 index 00000000..23242667 --- /dev/null +++ b/test/recipes/65-test_cmp_vfy_data/server.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA4ckRrH0UWmIJFj99kBqvCipGjJRAaPkdvWjdDQLglTpI3eZA +JHnq0ypW/PZccrWjo7mxuvAStEYWF+5Jx6ZFmAsC1K0NNebSAZQoLWYZqiOzkfVV +pLicMnItNFElfCohBzPCYmF5UlC5yp9PSUEfNwPJqDIRMtw+IlVUV3AJw9TJ3uuW +q/vWW9r96/gBKKddmj/q2gGT8RC6LxEaolTbhfPbHaA1DFpv1WQFb3oAV3Wq14SO +Zf9bH1olBVsmBMsUshFEw5MXVrNCv2moM4HtITMyjvZe7eIwHzSzf6dvQjERG6Gv +Z/i5KOhaqgJCnRKdHHzijz9cLec5p9NSOuC1OwIDAQABAoIBAGiYVO+rIfqc38jG +sMxJED2NSBFnvE7k2LoeEgktBA0daxQgziYXtIkOXC3jkwAw1RXLuGH5RTDuJt3/ +LX6nsCW3NCCB6lTGERNaJyKg4dLHpzA+juY3/2P/MKHD1bGncpV7jNk2fpV7gBY1 +pu0wld1Oi+S3DPCaxs3w6Zl39Y4Z7oSNf6DRO5lGN3Asc8TSVjIOWpAl8LIg+P2B +ZvFeHRANVXaV9YmF2uEi7iMgH4vGrK2svsmM9VThVO4ArGcTRTvGYn7aw3/H4Pt+ +lYuhERdpkKBT0tCgIpO5IJXMl4/5RSDTtcBwiJcReN5IHUAItBIPSHcMflNSKG/I +aQf4u0ECgYEA8+PAyzn096Y2UrKzE75yuadCveLjsUWx2NN5ZMohQru99F4k7Pab +/Te4qOe5zlxHAPK3LRwvbwUWo5mLfs45wFrSgZoRlYcCuL+JaX0y2oXMMF9E+UkY +tljMt/HpLo1SfSjN2Sae4LVhC7rWJ43LtyRepptzBPGqd26eLPGAMr8CgYEA7P8u +RGkMOrMzEKAb0A9smrzq2xW88T1VejqEt6R8mUcNt8PFHMgjuzVU4zDysrlb7G/0 +VSkQWnJxBh1yNGc1Av7YgwicIgApr4ty0hZhLcnKX2VrNw+L/sSe/cnwVAc6RtPK +RR6xQubuLlrCGcbYXmyn5Jv+nlY0S3uCyDFHqIUCgYAwtpLxhJf7RwWeqva9wNJl +ZpUcHE9iPwtwxXx/tyfBjoI4Zv11HyS1BQYrJm2kXCYKeHBB4FlREXEeKDMGluZO +F1XocP+GIDtY71jg6xLXNtY76yt5pzH6ae4p53WtyKhrO1UyRFaDh3bkwuK3b8j6 +wZbuLCpjGGn2BPAvBeWXPQKBgEewKN6op/pZmmi9Bay5/bAQ1TnQKYcPdnuyl9K0 +/ruespeTsFw0bhqC11qhw8gsKZIri0z3TusNEwM2hQU08uQlEnkQcaoXQoTHOcQy +4NJo575Tf0r4ePBnqXA7VWcViJtEFTszPYtvLzz2VyBU9b4aP+73AN4EVW0/vx+v +SG3BAoGBAMzESFA2TXwUFmozK5zowIszc995Xqpi7mXKk77WESOpoS1dQ1wF1dSg +XOwxzFoYovLxcc1K9lqOrod8BV+qGuEfc/PIJ2aiXjvEDeZYX2eWaANNmj4OSLoJ +MNYj9tZxbq56slD7snf7AgUBnwKz0Pj6H6UsbE3gdJqZWCDyw/bB +-----END RSA PRIVATE KEY----- diff --git a/test/recipes/80-test_ssl_old.t b/test/recipes/80-test_ssl_old.t index 2d213b7d..d6e638d2 100644 --- a/test/recipes/80-test_ssl_old.t +++ b/test/recipes/80-test_ssl_old.t @@ -36,7 +36,7 @@ my $digest = "-sha1"; my @reqcmd = ("openssl", "req"); my @x509cmd = ("openssl", "x509", $digest); my @verifycmd = ("openssl", "verify"); -my @gendsacmd = ("openssl", "gendsa"); +my @genpkeycmd = ("openssl", "genpkey"); my $dummycnf = srctop_file("apps", "openssl.cnf"); my $CAkey = "keyCA.ss"; @@ -178,8 +178,8 @@ sub testss { SKIP: { $ENV{CN2} = "DSA Certificate"; skip 'failure', 4 unless - ok(run(app([@gendsacmd, "-out", $Dkey, - $dsaparams], + ok(run(app([@genpkeycmd, "-out", $Dkey, + "-paramfile", $dsaparams], stdout => "err.ss")), "make a DSA key"); skip 'failure', 3 unless diff --git a/test/secmemtest.c b/test/secmemtest.c index edd88b15..549795d7 100644 --- a/test/secmemtest.c +++ b/test/secmemtest.c @@ -14,7 +14,7 @@ static int test_sec_mem(void) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY int testresult = 0; char *p = NULL, *q = NULL, *r = NULL, *s = NULL; @@ -135,7 +135,7 @@ static int test_sec_mem(void) static int test_sec_mem_clear(void) { -#ifdef OPENSSL_SECURE_MEMORY +#ifndef OPENSSL_NO_SECURE_MEMORY const int size = 64; unsigned char *p = NULL; int i, res = 0; diff --git a/test/ssl-tests/20-cert-select.conf b/test/ssl-tests/20-cert-select.conf index 93f3a1ff..757b973e 100644 --- a/test/ssl-tests/20-cert-select.conf +++ b/test/ssl-tests/20-cert-select.conf @@ -216,9 +216,9 @@ PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem [4-Ed448 CipherString and Signature Algorithm Selection-client] CipherString = aECDSA MaxProtocol = TLSv1.2 -RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-cert.pem +RequestCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem SignatureAlgorithms = ed448:ECDSA+SHA256 -VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem +VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem VerifyMode = Peer [test-4] @@ -421,7 +421,7 @@ CipherString = aECDSA Curves = X448 MaxProtocol = TLSv1.2 SignatureAlgorithms = ECDSA+SHA256:ed448 -VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem +VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem VerifyMode = Peer [test-10] @@ -1454,7 +1454,7 @@ PrivateKey = ${ENV::TEST_CERTS_DIR}/serverkey.pem [44-TLS 1.3 Ed448 Signature Algorithm Selection-client] CipherString = DEFAULT SignatureAlgorithms = ed448 -VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem +VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem VerifyMode = Peer [test-44] diff --git a/test/ssl-tests/20-cert-select.conf.in b/test/ssl-tests/20-cert-select.conf.in index 5e9bfede..24093548 100644 --- a/test/ssl-tests/20-cert-select.conf.in +++ b/test/ssl-tests/20-cert-select.conf.in @@ -134,7 +134,8 @@ our @tests = ( "CipherString" => "aECDSA", "MaxProtocol" => "TLSv1.2", "SignatureAlgorithms" => "ed448:ECDSA+SHA256", - "RequestCAFile" => test_pem("root-cert.pem"), + "RequestCAFile" => test_pem("root-ed448-cert.pem"), + "VerifyCAFile" => test_pem("root-ed448-cert.pem"), }, test => { "ExpectedServerCertType" =>, "Ed448", @@ -231,6 +232,7 @@ our @tests = ( "CipherString" => "aECDSA", "MaxProtocol" => "TLSv1.2", "SignatureAlgorithms" => "ECDSA+SHA256:ed448", + "VerifyCAFile" => test_pem("root-ed448-cert.pem"), # Excluding P-256 from the supported curves list means server # certificate should be Ed25519 and not P-256 "Curves" => "X448" @@ -727,6 +729,7 @@ my @tests_tls_1_3 = ( server => $server_tls_1_3, client => { "SignatureAlgorithms" => "ed448", + "VerifyCAFile" => test_pem("root-ed448-cert.pem"), }, test => { "ExpectedServerCertType" => "Ed448", diff --git a/test/ssl-tests/28-seclevel.conf b/test/ssl-tests/28-seclevel.conf index f863f68b..04a0c4fb 100644 --- a/test/ssl-tests/28-seclevel.conf +++ b/test/ssl-tests/28-seclevel.conf @@ -45,7 +45,7 @@ PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem [1-SECLEVEL 3 with ED448 key-client] CipherString = DEFAULT -VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem +VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem VerifyMode = Peer [test-1] @@ -93,7 +93,7 @@ PrivateKey = ${ENV::TEST_CERTS_DIR}/server-ed448-key.pem [3-SECLEVEL 3 with ED448 key, TLSv1.2-client] CipherString = DEFAULT -VerifyCAFile = ${ENV::TEST_CERTS_DIR}/rootcert.pem +VerifyCAFile = ${ENV::TEST_CERTS_DIR}/root-ed448-cert.pem VerifyMode = Peer [test-3] diff --git a/test/ssl-tests/28-seclevel.conf.in b/test/ssl-tests/28-seclevel.conf.in index 9d400a45..f2cdc477 100644 --- a/test/ssl-tests/28-seclevel.conf.in +++ b/test/ssl-tests/28-seclevel.conf.in @@ -27,7 +27,7 @@ our @tests_ec = ( server => { "CipherString" => "DEFAULT:\@SECLEVEL=3", "Certificate" => test_pem("server-ed448-cert.pem"), "PrivateKey" => test_pem("server-ed448-key.pem") }, - client => { }, + client => { "VerifyCAFile" => test_pem("root-ed448-cert.pem") }, test => { "ExpectedResult" => "Success" }, }, { @@ -49,7 +49,7 @@ our @tests_tls1_2 = ( "Certificate" => test_pem("server-ed448-cert.pem"), "PrivateKey" => test_pem("server-ed448-key.pem"), "MaxProtocol" => "TLSv1.2" }, - client => { }, + client => { "VerifyCAFile" => test_pem("root-ed448-cert.pem") }, test => { "ExpectedResult" => "Success" }, }, ); diff --git a/util/libcrypto.num b/util/libcrypto.num index b30d471a..b1cfccb8 100644 --- a/util/libcrypto.num +++ b/util/libcrypto.num @@ -88,7 +88,7 @@ d2i_OCSP_RESPBYTES 89 3_0_0 EXIST::FUNCTION:OCSP TS_REQ_get_ext_by_NID 90 3_0_0 EXIST::FUNCTION:TS ASN1_item_ndef_i2d 91 3_0_0 EXIST::FUNCTION: OCSP_archive_cutoff_new 92 3_0_0 EXIST::FUNCTION:OCSP -DSA_size 93 3_0_0 EXIST::FUNCTION:DSA +DSA_size 93 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA IPAddressRange_free 94 3_0_0 EXIST::FUNCTION:RFC3779 CMS_ContentInfo_free 95 3_0_0 EXIST::FUNCTION:CMS BIO_accept 96 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_1_1_0,SOCK @@ -96,7 +96,7 @@ X509_VERIFY_PARAM_set1_policies 97 3_0_0 EXIST::FUNCTION: SCT_set0_extensions 98 3_0_0 EXIST::FUNCTION:CT PKCS5_pbe2_set_scrypt 99 3_0_0 EXIST::FUNCTION:SCRYPT X509_find_by_subject 100 3_0_0 EXIST::FUNCTION: -DSAparams_print 101 3_0_0 EXIST::FUNCTION:DSA +DSAparams_print 101 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA BF_set_key 102 3_0_0 EXIST::FUNCTION:BF,DEPRECATEDIN_3_0 d2i_DHparams 103 3_0_0 EXIST::FUNCTION:DH i2d_PKCS7_ENC_CONTENT 104 3_0_0 EXIST::FUNCTION: @@ -133,7 +133,7 @@ d2i_OCSP_BASICRESP 134 3_0_0 EXIST::FUNCTION:OCSP X509v3_add_ext 135 3_0_0 EXIST::FUNCTION: X509v3_addr_subset 136 3_0_0 EXIST::FUNCTION:RFC3779 CRYPTO_strndup 137 3_0_0 EXIST::FUNCTION: -OCSP_REQ_CTX_free 138 3_0_0 EXIST::FUNCTION:OCSP +OCSP_REQ_CTX_free 138 3_0_0 EXIST::FUNCTION: X509_STORE_new 140 3_0_0 EXIST::FUNCTION: ASN1_TYPE_free 141 3_0_0 EXIST::FUNCTION: PKCS12_BAGS_new 142 3_0_0 EXIST::FUNCTION: @@ -222,7 +222,7 @@ ASN1_put_eoc 225 3_0_0 EXIST::FUNCTION: EVP_MD_meth_set_input_blocksize 226 3_0_0 EXIST::FUNCTION: PKCS12_SAFEBAG_get0_attrs 227 3_0_0 EXIST::FUNCTION: PKCS8_get_attr 228 3_0_0 EXIST::FUNCTION: -DSAparams_print_fp 229 3_0_0 EXIST::FUNCTION:DSA,STDIO +DSAparams_print_fp 229 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO EC_POINT_set_Jprojective_coordinates_GFp 230 3_0_0 EXIST::FUNCTION:EC DIST_POINT_NAME_new 231 3_0_0 EXIST::FUNCTION: X509_LOOKUP_file 232 3_0_0 EXIST::FUNCTION: @@ -269,7 +269,7 @@ CRYPTO_gcm128_tag 274 3_0_0 EXIST::FUNCTION: OSSL_HTTP_parse_url 275 3_0_0 EXIST::FUNCTION: UI_get0_test_string 276 3_0_0 EXIST::FUNCTION: CRYPTO_secure_free 277 3_0_0 EXIST::FUNCTION: -DSA_print_fp 278 3_0_0 EXIST::FUNCTION:DSA,STDIO +DSA_print_fp 278 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA,STDIO X509_get_ext_d2i 279 3_0_0 EXIST::FUNCTION: d2i_PKCS7_ENC_CONTENT 280 3_0_0 EXIST::FUNCTION: BUF_MEM_grow 281 3_0_0 EXIST::FUNCTION: @@ -488,7 +488,7 @@ X509_INFO_new 497 3_0_0 EXIST::FUNCTION: OCSP_RESPDATA_it 498 3_0_0 EXIST::FUNCTION:OCSP X509_CRL_print 499 3_0_0 EXIST::FUNCTION: WHIRLPOOL_Update 500 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,WHIRLPOOL -DSA_get_ex_data 501 3_0_0 EXIST::FUNCTION:DSA +DSA_get_ex_data 501 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA BN_copy 502 3_0_0 EXIST::FUNCTION: FIPS_mode_set 503 3_0_0 EXIST::FUNCTION: X509_VERIFY_PARAM_add0_policy 504 3_0_0 EXIST::FUNCTION: @@ -497,7 +497,7 @@ X509_TRUST_get_trust 506 3_0_0 EXIST::FUNCTION: DES_string_to_key 507 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DES ERR_error_string 508 3_0_0 EXIST::FUNCTION: BIO_new_connect 509 3_0_0 EXIST::FUNCTION:SOCK -DSA_new_method 511 3_0_0 EXIST::FUNCTION:DSA +DSA_new_method 511 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA OCSP_CERTID_new 512 3_0_0 EXIST::FUNCTION:OCSP X509_CRL_get_signature_nid 513 3_0_0 EXIST::FUNCTION: X509_policy_level_node_count 514 3_0_0 EXIST::FUNCTION: @@ -615,7 +615,7 @@ UI_get0_result_string 629 3_0_0 EXIST::FUNCTION: TS_RESP_CTX_add_policy 630 3_0_0 EXIST::FUNCTION:TS X509_REQ_dup 631 3_0_0 EXIST::FUNCTION: d2i_DSA_PUBKEY_fp 633 3_0_0 EXIST::FUNCTION:DSA,STDIO -OCSP_REQ_CTX_nbio_d2i 634 3_0_0 EXIST::FUNCTION:OCSP,SOCK +OCSP_REQ_CTX_nbio_d2i 634 3_0_0 EXIST::FUNCTION:SOCK d2i_X509_REQ_fp 635 3_0_0 EXIST::FUNCTION:STDIO DH_OpenSSL 636 3_0_0 EXIST::FUNCTION:DH BN_get_rfc3526_prime_8192 637 3_0_0 EXIST::FUNCTION:DH @@ -760,7 +760,7 @@ PKCS7_add_attrib_smimecap 778 3_0_0 EXIST::FUNCTION: ERR_peek_last_error_line_data 779 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0 EVP_PKEY_meth_set_sign 780 3_0_0 EXIST::FUNCTION: ASN1_i2d_bio 781 3_0_0 EXIST::FUNCTION: -DSA_verify 782 3_0_0 EXIST::FUNCTION:DSA +DSA_verify 782 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA i2a_ASN1_OBJECT 783 3_0_0 EXIST::FUNCTION: i2d_PKEY_USAGE_PERIOD 784 3_0_0 EXIST::FUNCTION: DSA_new 785 3_0_0 EXIST::FUNCTION:DSA @@ -1115,7 +1115,7 @@ PEM_write_bio_PKCS7 1141 3_0_0 EXIST::FUNCTION: MDC2_Final 1142 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MDC2 SMIME_crlf_copy 1143 3_0_0 EXIST::FUNCTION: OCSP_REQUEST_get_ext_count 1144 3_0_0 EXIST::FUNCTION:OCSP -OCSP_REQ_CTX_new 1145 3_0_0 EXIST::FUNCTION:OCSP +OCSP_REQ_CTX_new 1145 3_0_0 EXIST::FUNCTION: X509_load_cert_crl_file 1146 3_0_0 EXIST::FUNCTION: EVP_PKEY_new_mac_key 1147 3_0_0 EXIST::FUNCTION: DIST_POINT_new 1148 3_0_0 EXIST::FUNCTION: @@ -1379,7 +1379,7 @@ BIO_set_ex_data 1411 3_0_0 EXIST::FUNCTION: SHA512 1412 3_0_0 EXIST::FUNCTION: X509_STORE_CTX_get_explicit_policy 1413 3_0_0 EXIST::FUNCTION: EVP_DecodeBlock 1414 3_0_0 EXIST::FUNCTION: -OCSP_REQ_CTX_http 1415 3_0_0 EXIST::FUNCTION:OCSP +OCSP_REQ_CTX_http 1415 3_0_0 EXIST::FUNCTION: EVP_MD_CTX_reset 1416 3_0_0 EXIST::FUNCTION: X509_NAME_new 1417 3_0_0 EXIST::FUNCTION: ASN1_item_pack 1418 3_0_0 EXIST::FUNCTION: @@ -1546,7 +1546,7 @@ PEM_write_X509_REQ_NEW 1579 3_0_0 EXIST::FUNCTION:STDIO CONF_imodule_set_usr_data 1580 3_0_0 EXIST::FUNCTION: d2i_TS_RESP_fp 1581 3_0_0 EXIST::FUNCTION:STDIO,TS X509_policy_tree_get0_user_policies 1582 3_0_0 EXIST::FUNCTION: -DSA_do_sign 1584 3_0_0 EXIST::FUNCTION:DSA +DSA_do_sign 1584 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA EVP_CIPHER_CTX_reset 1585 3_0_0 EXIST::FUNCTION: OCSP_REVOKEDINFO_new 1586 3_0_0 EXIST::FUNCTION:OCSP SRP_Verify_A_mod_N 1587 3_0_0 EXIST::FUNCTION:SRP @@ -1577,7 +1577,7 @@ BIO_ADDRINFO_address 1613 3_0_0 EXIST::FUNCTION:SOCK ASN1_STRING_print_ex 1614 3_0_0 EXIST::FUNCTION: i2d_CMS_ReceiptRequest 1615 3_0_0 EXIST::FUNCTION:CMS d2i_TS_REQ_fp 1616 3_0_0 EXIST::FUNCTION:STDIO,TS -OCSP_REQ_CTX_i2d 1617 3_0_0 EXIST::FUNCTION:OCSP +OCSP_REQ_CTX_i2d 1617 3_0_0 EXIST::FUNCTION: EVP_PKEY_get_default_digest_nid 1618 3_0_0 EXIST::FUNCTION: ASIdOrRange_new 1619 3_0_0 EXIST::FUNCTION:RFC3779 ASN1_SCTX_new 1620 3_0_0 EXIST::FUNCTION: @@ -1593,7 +1593,7 @@ CRYPTO_ocb128_cleanup 1629 3_0_0 EXIST::FUNCTION:OCB EVP_des_ede_cbc 1630 3_0_0 EXIST::FUNCTION:DES i2d_ASN1_TIME 1631 3_0_0 EXIST::FUNCTION: ENGINE_register_all_pkey_asn1_meths 1632 3_0_0 EXIST::FUNCTION:ENGINE -OCSP_set_max_response_length 1633 3_0_0 EXIST::FUNCTION:OCSP +OCSP_set_max_response_length 1633 3_0_0 EXIST::FUNCTION: d2i_ISSUING_DIST_POINT 1634 3_0_0 EXIST::FUNCTION: CMS_RecipientInfo_set0_key 1635 3_0_0 EXIST::FUNCTION:CMS NCONF_new 1636 3_0_0 EXIST::FUNCTION: @@ -1821,7 +1821,7 @@ X509_PURPOSE_get0 1863 3_0_0 EXIST::FUNCTION: EVP_PKEY_set1_DSA 1864 3_0_0 EXIST::FUNCTION:DSA X509_NAME_it 1865 3_0_0 EXIST::FUNCTION: OBJ_add_object 1866 3_0_0 EXIST::FUNCTION: -DSA_generate_key 1867 3_0_0 EXIST::FUNCTION:DSA +DSA_generate_key 1867 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA EVP_DigestUpdate 1868 3_0_0 EXIST::FUNCTION: X509_get_ext_by_OBJ 1869 3_0_0 EXIST::FUNCTION: PBEPARAM_new 1870 3_0_0 EXIST::FUNCTION: @@ -1850,7 +1850,7 @@ OCSP_ONEREQ_add_ext 1892 3_0_0 EXIST::FUNCTION:OCSP CMS_uncompress 1893 3_0_0 EXIST::FUNCTION:CMS CRYPTO_mem_debug_pop 1895 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0 EVP_aes_192_cfb128 1896 3_0_0 EXIST::FUNCTION: -OCSP_REQ_CTX_nbio 1897 3_0_0 EXIST::FUNCTION:OCSP +OCSP_REQ_CTX_nbio 1897 3_0_0 EXIST::FUNCTION: EVP_CIPHER_CTX_copy 1898 3_0_0 EXIST::FUNCTION: CRYPTO_secure_allocated 1899 3_0_0 EXIST::FUNCTION: UI_UTIL_read_pw_string 1900 3_0_0 EXIST::FUNCTION: @@ -1954,7 +1954,7 @@ PEM_read_PrivateKey 1999 3_0_0 EXIST::FUNCTION:STDIO X509V3_get_d2i 2000 3_0_0 EXIST::FUNCTION: PKCS7_SIGNER_INFO_sign 2001 3_0_0 EXIST::FUNCTION: TS_TST_INFO_free 2002 3_0_0 EXIST::FUNCTION:TS -DSA_security_bits 2003 3_0_0 EXIST::FUNCTION:DSA +DSA_security_bits 2003 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA X509v3_addr_is_canonical 2004 3_0_0 EXIST::FUNCTION:RFC3779 BN_mod_mul_reciprocal 2005 3_0_0 EXIST::FUNCTION: TS_REQ_get_version 2006 3_0_0 EXIST::FUNCTION:TS @@ -2162,7 +2162,7 @@ EVP_idea_ecb 2209 3_0_0 EXIST::FUNCTION:IDEA i2d_TS_ACCURACY 2210 3_0_0 EXIST::FUNCTION:TS ASN1_VISIBLESTRING_free 2211 3_0_0 EXIST::FUNCTION: NCONF_load_bio 2212 3_0_0 EXIST::FUNCTION: -DSA_get_default_method 2213 3_0_0 EXIST::FUNCTION:DSA +DSA_get_default_method 2213 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA OPENSSL_LH_retrieve 2214 3_0_0 EXIST::FUNCTION: CRYPTO_ccm128_decrypt_ccm64 2215 3_0_0 EXIST::FUNCTION: TS_RESP_CTX_set_clock_precision_digits 2216 3_0_0 EXIST::FUNCTION:TS @@ -2266,7 +2266,7 @@ HMAC_CTX_free 2313 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_ EC_POINT_new 2314 3_0_0 EXIST::FUNCTION:EC PKCS7_ISSUER_AND_SERIAL_digest 2315 3_0_0 EXIST::FUNCTION: EVP_des_ofb 2316 3_0_0 EXIST::FUNCTION:DES -DSA_set_method 2317 3_0_0 EXIST::FUNCTION:DSA +DSA_set_method 2317 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA EVP_PKEY_get1_RSA 2318 3_0_0 EXIST::FUNCTION:RSA EC_KEY_OpenSSL 2319 3_0_0 EXIST::FUNCTION:EC EVP_camellia_192_ofb 2320 3_0_0 EXIST::FUNCTION:CAMELLIA @@ -2404,9 +2404,9 @@ d2i_TS_TST_INFO_bio 2454 3_0_0 EXIST::FUNCTION:TS BIGNUM_it 2455 3_0_0 EXIST::FUNCTION: BN_BLINDING_get_flags 2456 3_0_0 EXIST::FUNCTION: X509_EXTENSION_get_critical 2457 3_0_0 EXIST::FUNCTION: -DSA_set_default_method 2458 3_0_0 EXIST::FUNCTION:DSA +DSA_set_default_method 2458 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA PEM_write_bio_DHxparams 2459 3_0_0 EXIST::FUNCTION:DH -DSA_set_ex_data 2460 3_0_0 EXIST::FUNCTION:DSA +DSA_set_ex_data 2460 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA BIO_s_datagram_sctp 2461 3_0_0 EXIST::FUNCTION:DGRAM,SCTP SXNET_add_id_asc 2462 3_0_0 EXIST::FUNCTION: X509_print_fp 2463 3_0_0 EXIST::FUNCTION:STDIO @@ -2416,7 +2416,7 @@ Camellia_decrypt 2466 3_0_0 EXIST::FUNCTION:CAMELLIA,DEPR X509_signature_print 2467 3_0_0 EXIST::FUNCTION: EVP_camellia_128_ecb 2468 3_0_0 EXIST::FUNCTION:CAMELLIA MD2_Final 2469 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,MD2 -OCSP_REQ_CTX_add1_header 2470 3_0_0 EXIST::FUNCTION:OCSP +OCSP_REQ_CTX_add1_header 2470 3_0_0 EXIST::FUNCTION: NETSCAPE_SPKAC_it 2471 3_0_0 EXIST::FUNCTION: ASIdOrRange_free 2472 3_0_0 EXIST::FUNCTION:RFC3779 EC_POINT_get_Jprojective_coordinates_GFp 2473 3_0_0 EXIST::FUNCTION:EC @@ -2472,7 +2472,7 @@ i2d_USERNOTICE 2523 3_0_0 EXIST::FUNCTION: d2i_NETSCAPE_SPKI 2524 3_0_0 EXIST::FUNCTION: CRYPTO_mem_leaks 2525 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0 BN_get_rfc3526_prime_1536 2526 3_0_0 EXIST::FUNCTION:DH -DSA_sign 2527 3_0_0 EXIST::FUNCTION:DSA +DSA_sign 2527 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA RAND_egd 2528 3_0_0 EXIST::FUNCTION:EGD ASN1_d2i_bio 2529 3_0_0 EXIST::FUNCTION: X509_REQ_digest 2531 3_0_0 EXIST::FUNCTION: @@ -3296,7 +3296,7 @@ OCSP_SINGLERESP_get_ext_by_OBJ 3363 3_0_0 EXIST::FUNCTION:OCSP ECDSA_SIG_get0 3364 3_0_0 EXIST::FUNCTION:EC BN_set_word 3365 3_0_0 EXIST::FUNCTION: ENGINE_set_flags 3366 3_0_0 EXIST::FUNCTION:ENGINE -DSA_OpenSSL 3367 3_0_0 EXIST::FUNCTION:DSA +DSA_OpenSSL 3367 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA CMS_RecipientInfo_kari_get0_alg 3368 3_0_0 EXIST::FUNCTION:CMS PKCS7_ENVELOPE_new 3369 3_0_0 EXIST::FUNCTION: EDIPARTYNAME_new 3370 3_0_0 EXIST::FUNCTION: @@ -3451,7 +3451,7 @@ EVP_DecryptFinal_ex 3521 3_0_0 EXIST::FUNCTION: SCT_get_signature_nid 3522 3_0_0 EXIST::FUNCTION:CT PROXY_CERT_INFO_EXTENSION_new 3523 3_0_0 EXIST::FUNCTION: EVP_bf_cbc 3524 3_0_0 EXIST::FUNCTION:BF -DSA_do_verify 3525 3_0_0 EXIST::FUNCTION:DSA +DSA_do_verify 3525 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA EC_GROUP_get_seed_len 3526 3_0_0 EXIST::FUNCTION:EC EC_POINT_set_affine_coordinates_GF2m 3527 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,EC,EC2M TS_REQ_set_policy_id 3528 3_0_0 EXIST::FUNCTION:TS @@ -3564,7 +3564,7 @@ SCT_get0_signature 3641 3_0_0 EXIST::FUNCTION:CT DISPLAYTEXT_it 3643 3_0_0 EXIST::FUNCTION: OPENSSL_gmtime_adj 3644 3_0_0 EXIST::FUNCTION: ASN1_INTEGER_dup 3645 3_0_0 EXIST::FUNCTION: -DSA_print 3646 3_0_0 EXIST::FUNCTION:DSA +DSA_print 3646 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA X509_REQ_set_extension_nids 3647 3_0_0 EXIST::FUNCTION: X509_free 3648 3_0_0 EXIST::FUNCTION: ERR_load_ERR_strings 3649 3_0_0 EXIST::FUNCTION: @@ -3597,7 +3597,7 @@ i2d_ASIdOrRange 3676 3_0_0 EXIST::FUNCTION:RFC3779 OCSP_url_svcloc_new 3677 3_0_0 EXIST::FUNCTION:OCSP CRYPTO_mem_ctrl 3678 3_0_0 EXIST::FUNCTION:CRYPTO_MDEBUG,DEPRECATEDIN_3_0 ASN1_verify 3679 3_0_0 EXIST::FUNCTION: -DSA_generate_parameters_ex 3680 3_0_0 EXIST::FUNCTION:DSA +DSA_generate_parameters_ex 3680 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA X509_sign 3681 3_0_0 EXIST::FUNCTION: SHA256_Transform 3682 3_0_0 EXIST::FUNCTION: BIO_ADDR_free 3683 3_0_0 EXIST::FUNCTION:SOCK @@ -3762,7 +3762,7 @@ i2d_PrivateKey_bio 3843 3_0_0 EXIST::FUNCTION: RSA_padding_add_PKCS1_type_1 3844 3_0_0 EXIST::FUNCTION:RSA i2d_re_X509_tbs 3845 3_0_0 EXIST::FUNCTION: EVP_CIPHER_iv_length 3846 3_0_0 EXIST::FUNCTION: -OCSP_REQ_CTX_get0_mem_bio 3847 3_0_0 EXIST::FUNCTION:OCSP +OCSP_REQ_CTX_get0_mem_bio 3847 3_0_0 EXIST::FUNCTION: i2d_PKCS8PrivateKeyInfo_bio 3848 3_0_0 EXIST::FUNCTION: d2i_OCSP_CERTID 3849 3_0_0 EXIST::FUNCTION:OCSP EVP_CIPHER_meth_set_init 3850 3_0_0 EXIST::FUNCTION: @@ -3868,42 +3868,42 @@ BIO_meth_get_destroy 3951 3_0_0 EXIST::FUNCTION: BIO_meth_get_read 3952 3_0_0 EXIST::FUNCTION: BIO_set_retry_reason 3953 3_0_0 EXIST::FUNCTION: BIO_meth_free 3954 3_0_0 EXIST::FUNCTION: -DSA_meth_set_bn_mod_exp 3955 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_init 3956 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_free 3957 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_mod_exp 3958 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_sign 3959 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_finish 3960 3_0_0 EXIST::FUNCTION:DSA +DSA_meth_set_bn_mod_exp 3955 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_init 3956 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_free 3957 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_mod_exp 3958 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_sign 3959 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_get_finish 3960 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA DSA_set_flags 3961 3_0_0 EXIST::FUNCTION:DSA DSA_get0_pqg 3962 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get0_app_data 3963 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_keygen 3964 3_0_0 EXIST::FUNCTION:DSA +DSA_meth_get0_app_data 3963 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_get_keygen 3964 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA DSA_clear_flags 3965 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get0_name 3966 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_paramgen 3967 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_sign 3968 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_paramgen 3969 3_0_0 EXIST::FUNCTION:DSA +DSA_meth_get0_name 3966 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_get_paramgen 3967 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_get_sign 3968 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_paramgen 3969 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA DSA_test_flags 3970 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set0_app_data 3971 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set1_name 3972 3_0_0 EXIST::FUNCTION:DSA +DSA_meth_set0_app_data 3971 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set1_name 3972 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA DSA_get0_key 3973 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_mod_exp 3974 3_0_0 EXIST::FUNCTION:DSA +DSA_meth_get_mod_exp 3974 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA DSA_set0_pqg 3975 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_flags 3976 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_verify 3977 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_verify 3978 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_finish 3979 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_keygen 3980 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_dup 3981 3_0_0 EXIST::FUNCTION:DSA +DSA_meth_get_flags 3976 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_get_verify 3977 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_verify 3978 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_finish 3979 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_keygen 3980 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_dup 3981 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA DSA_set0_key 3982 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_init 3983 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_sign_setup 3984 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_bn_mod_exp 3985 3_0_0 EXIST::FUNCTION:DSA -DSA_get_method 3986 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_new 3987 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_set_flags 3988 3_0_0 EXIST::FUNCTION:DSA -DSA_meth_get_sign_setup 3989 3_0_0 EXIST::FUNCTION:DSA -DSA_get0_engine 3990 3_0_0 EXIST::FUNCTION:DSA +DSA_meth_get_init 3983 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_sign_setup 3984 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_get_bn_mod_exp 3985 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_get_method 3986 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_new 3987 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_set_flags 3988 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_meth_get_sign_setup 3989 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA +DSA_get0_engine 3990 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA X509_VERIFY_PARAM_set_auth_level 3991 3_0_0 EXIST::FUNCTION: X509_VERIFY_PARAM_get_auth_level 3992 3_0_0 EXIST::FUNCTION: X509_REQ_get0_pubkey 3993 3_0_0 EXIST::FUNCTION: @@ -4045,7 +4045,7 @@ X509_STORE_unlock 4133 3_0_0 EXIST::FUNCTION: X509_STORE_lock 4134 3_0_0 EXIST::FUNCTION: X509_set_proxy_pathlen 4135 3_0_0 EXIST::FUNCTION: X509_get_proxy_pathlen 4136 3_0_0 EXIST::FUNCTION: -DSA_bits 4137 3_0_0 EXIST::FUNCTION:DSA +DSA_bits 4137 3_0_0 EXIST::FUNCTION:DEPRECATEDIN_3_0,DSA EVP_PKEY_set1_tls_encodedpoint 4138 3_0_0 EXIST::FUNCTION: EVP_PKEY_get1_tls_encodedpoint 4139 3_0_0 EXIST::FUNCTION: ASN1_STRING_get0_data 4140 3_0_0 EXIST::FUNCTION: @@ -4688,7 +4688,6 @@ EC_KEY_new_ex ? 3_0_0 EXIST::FUNCTION:EC EC_KEY_new_by_curve_name_ex ? 3_0_0 EXIST::FUNCTION:EC OPENSSL_hexstr2buf_ex ? 3_0_0 EXIST::FUNCTION: OPENSSL_buf2hexstr_ex ? 3_0_0 EXIST::FUNCTION: -OSSL_PARAM_construct_from_text ? 3_0_0 EXIST::FUNCTION: OSSL_PARAM_allocate_from_text ? 3_0_0 EXIST::FUNCTION: EVP_MD_gettable_params ? 3_0_0 EXIST::FUNCTION: EVP_MD_CTX_settable_params ? 3_0_0 EXIST::FUNCTION: @@ -4929,4 +4928,11 @@ OSSL_HTTP_get_asn1 ? 3_0_0 EXIST::FUNCTION:SOCK OSSL_HTTP_post_asn1 ? 3_0_0 EXIST::FUNCTION:SOCK OSSL_HTTP_transfer ? 3_0_0 EXIST::FUNCTION:SOCK OSSL_HTTP_proxy_connect ? 3_0_0 EXIST::FUNCTION:SOCK +ERR_add_error_txt ? 3_0_0 EXIST::FUNCTION: +ERR_add_error_mem_bio ? 3_0_0 EXIST::FUNCTION: +X509_STORE_CTX_print_verify_cb ? 3_0_0 EXIST::FUNCTION: +X509_STORE_get1_all_certs ? 3_0_0 EXIST::FUNCTION: +OSSL_CMP_validate_msg ? 3_0_0 EXIST::FUNCTION:CMP +OSSL_CMP_validate_cert_path ? 3_0_0 EXIST::FUNCTION:CMP +OSSL_CMP_print_to_bio ? 3_0_0 EXIST::FUNCTION:CMP EVP_chacha20_poly1305_draft ? 3_0_0 EXIST::FUNCTION:CHACHA,POLY1305 diff --git a/util/missingcrypto.txt b/util/missingcrypto.txt index a1f0c348..95d300ed 100644 --- a/util/missingcrypto.txt +++ b/util/missingcrypto.txt @@ -1567,7 +1567,6 @@ i2v_GENERAL_NAME(3) i2v_GENERAL_NAMES(3) o2i_ECPublicKey(3) openssl-core_numbers.h(7) -ossl_cmp_certReq_new(3) provider-kdf(7) s2i_ASN1_IA5STRING(3) s2i_ASN1_INTEGER(3) diff --git a/util/mkdef.pl b/util/mkdef.pl index b923cb62..6d376d3a 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -31,6 +31,7 @@ my $version = undef; # the version to use for the library my $OS = undef; # the operating system family my $verbose = 0; my $ctest = 0; +my $debug = 0; # For VMS, some modules may have case insensitive names my $case_insensitive = 0; @@ -193,7 +194,7 @@ sub feature_filter { my $symdep = $1 * 10000 + $2 * 100 + ($3 // 0); $verdict = 0 if $config{api} >= $symdep; print STDERR "DEBUG: \$symdep = $symdep, \$verdict = $verdict\n" - if $1 == 0; + if $debug && $1 == 0; } } diff --git a/util/other.syms b/util/other.syms index 78d436f7..27e9a923 100644 --- a/util/other.syms +++ b/util/other.syms @@ -359,17 +359,7 @@ OSSL_CMP_LOG_NOTICE define OSSL_CMP_LOG_WARNING define OSSL_CMP_MSTR_HELPER define OSSL_CMP_MSTR define -OSSL_CMP_alert define -OSSL_CMP_debug define -OSSL_CMP_err define -OSSL_CMP_info define -OSSL_CMP_log define -OSSL_CMP_log1 define -OSSL_CMP_log2 define -OSSL_CMP_log3 define -OSSL_CMP_log4 define OSSL_CMP_severity datatype -OSSL_CMP_warn define OSSL_cmp_certConf_cb_t datatype OSSL_cmp_log_cb_t datatype OSSL_cmp_transfer_cb_t datatype @@ -384,6 +374,9 @@ OSSL_PARAM_utf8_string define OSSL_PARAM_get_TYPE generic OSSL_PARAM_END define OSSL_PARAM_set_TYPE generic +OSSL_SERIALIZER_PUBKEY_TO_DER_PQ define +OSSL_SERIALIZER_PrivateKey_TO_DER_PQ define +OSSL_SERIALIZER_Parameters_TO_DER_PQ define OSSL_SERIALIZER_PUBKEY_TO_PEM_PQ define OSSL_SERIALIZER_PrivateKey_TO_PEM_PQ define OSSL_SERIALIZER_Parameters_TO_PEM_PQ define