mirror of
https://github.com/openssl/openssl.git
synced 2025-02-17 14:32:04 +08:00
Support decode SM2 parameters
Reviewed-by: Hugo Landau <hlandau@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/18819)
This commit is contained in:
parent
c92c3dfb99
commit
08ae9fa627
@ -242,9 +242,17 @@ int ecparam_main(int argc, char **argv)
|
||||
goto end;
|
||||
}
|
||||
} else {
|
||||
params_key = load_keyparams(infile, informat, 1, "EC", "EC parameters");
|
||||
if (params_key == NULL || !EVP_PKEY_is_a(params_key, "EC"))
|
||||
params_key = load_keyparams_suppress(infile, informat, 1, "EC",
|
||||
"EC parameters", 1);
|
||||
if (params_key == NULL)
|
||||
params_key = load_keyparams_suppress(infile, informat, 1, "SM2",
|
||||
"SM2 parameters", 1);
|
||||
|
||||
if (params_key == NULL) {
|
||||
BIO_printf(bio_err, "Unable to load parameters from %s\n", infile);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (point_format
|
||||
&& !EVP_PKEY_set_utf8_string_param(
|
||||
params_key, OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT,
|
||||
|
@ -57,6 +57,7 @@ extern "C" {
|
||||
# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
|
||||
# define PEM_STRING_PARAMETERS "PARAMETERS"
|
||||
# define PEM_STRING_CMS "CMS"
|
||||
# define PEM_STRING_SM2PARAMETERS "SM2 PARAMETERS"
|
||||
|
||||
# define PEM_TYPE_ENCRYPTED 10
|
||||
# define PEM_TYPE_MIC_ONLY 20
|
||||
|
@ -69,6 +69,7 @@ DECODER_w_structure("X448", der, SubjectPublicKeyInfo, x448, yes),
|
||||
# ifndef OPENSSL_NO_SM2
|
||||
DECODER_w_structure("SM2", der, PrivateKeyInfo, sm2, no),
|
||||
DECODER_w_structure("SM2", der, SubjectPublicKeyInfo, sm2, no),
|
||||
DECODER_w_structure("SM2", der, type_specific_no_pub, sm2, no),
|
||||
# endif
|
||||
#endif
|
||||
DECODER_w_structure("RSA", der, PrivateKeyInfo, rsa, yes),
|
||||
|
@ -783,6 +783,7 @@ MAKE_DECODER("ED448", ed448, ecx, SubjectPublicKeyInfo);
|
||||
# ifndef OPENSSL_NO_SM2
|
||||
MAKE_DECODER("SM2", sm2, ec, PrivateKeyInfo);
|
||||
MAKE_DECODER("SM2", sm2, ec, SubjectPublicKeyInfo);
|
||||
MAKE_DECODER("SM2", sm2, sm2, type_specific_no_pub);
|
||||
# endif
|
||||
#endif
|
||||
MAKE_DECODER("RSA", rsa, rsa, PrivateKeyInfo);
|
||||
|
@ -119,6 +119,7 @@ static int pem2der_decode(void *vctx, OSSL_CORE_BIO *cin, int selection,
|
||||
{ PEM_STRING_DSAPARAMS, OSSL_OBJECT_PKEY, "DSA", "type-specific" },
|
||||
{ PEM_STRING_ECPRIVATEKEY, OSSL_OBJECT_PKEY, "EC", "type-specific" },
|
||||
{ PEM_STRING_ECPARAMETERS, OSSL_OBJECT_PKEY, "EC", "type-specific" },
|
||||
{ PEM_STRING_SM2PARAMETERS, OSSL_OBJECT_PKEY, "SM2", "type-specific" },
|
||||
{ PEM_STRING_RSA, OSSL_OBJECT_PKEY, "RSA", "type-specific" },
|
||||
{ PEM_STRING_RSA_PUBLIC, OSSL_OBJECT_PKEY, "RSA", "type-specific" },
|
||||
|
||||
|
@ -512,7 +512,8 @@ static int ec_to_text(BIO *out, const void *key, int selection)
|
||||
else if ((selection & OSSL_KEYMGMT_SELECT_PUBLIC_KEY) != 0)
|
||||
type_label = "Public-Key";
|
||||
else if ((selection & OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS) != 0)
|
||||
type_label = "EC-Parameters";
|
||||
if (EC_GROUP_get_curve_name(group) != NID_sm2)
|
||||
type_label = "EC-Parameters";
|
||||
|
||||
if ((selection & OSSL_KEYMGMT_SELECT_PRIVATE_KEY) != 0) {
|
||||
const BIGNUM *priv_key = EC_KEY_get0_private_key(ec);
|
||||
@ -538,8 +539,9 @@ static int ec_to_text(BIO *out, const void *key, int selection)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (BIO_printf(out, "%s: (%d bit)\n", type_label,
|
||||
EC_GROUP_order_bits(group)) <= 0)
|
||||
if (type_label != NULL
|
||||
&& BIO_printf(out, "%s: (%d bit)\n", type_label,
|
||||
EC_GROUP_order_bits(group)) <= 0)
|
||||
goto err;
|
||||
if (priv != NULL
|
||||
&& !print_labeled_buf(out, "priv:", priv, priv_len))
|
||||
|
@ -508,6 +508,7 @@ extern const OSSL_DISPATCH ossl_SubjectPublicKeyInfo_der_to_ed448_decoder_functi
|
||||
#ifndef OPENSSL_NO_SM2
|
||||
extern const OSSL_DISPATCH ossl_PrivateKeyInfo_der_to_sm2_decoder_functions[];
|
||||
extern const OSSL_DISPATCH ossl_SubjectPublicKeyInfo_der_to_sm2_decoder_functions[];
|
||||
extern const OSSL_DISPATCH ossl_type_specific_no_pub_der_to_sm2_decoder_functions[];
|
||||
#endif
|
||||
|
||||
extern const OSSL_DISPATCH ossl_PrivateKeyInfo_der_to_rsa_decoder_functions[];
|
||||
|
@ -25,6 +25,10 @@ my @valid = glob(data_file("valid", "*.pem"));
|
||||
my @noncanon = glob(data_file("noncanon", "*.pem"));
|
||||
my @invalid = glob(data_file("invalid", "*.pem"));
|
||||
|
||||
if (disabled("sm2")) {
|
||||
@valid = grep { !/sm2-.*\.pem/} @valid;
|
||||
}
|
||||
|
||||
plan tests => 12;
|
||||
|
||||
sub checkload {
|
||||
|
7
test/recipes/15-test_ecparam_data/valid/sm2-explicit.pem
Normal file
7
test/recipes/15-test_ecparam_data/valid/sm2-explicit.pem
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN SM2 PARAMETERS-----
|
||||
MIHgAgEBMCwGByqGSM49AQECIQD////+/////////////////////wAAAAD/////
|
||||
/////zBEBCD////+/////////////////////wAAAAD//////////AQgKOn6np2f
|
||||
XjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+ML
|
||||
v/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA
|
||||
/////v///////////////3ID32shxgUrU7v0CTnVQSMCAQE=
|
||||
-----END SM2 PARAMETERS-----
|
3
test/recipes/15-test_ecparam_data/valid/sm2-named.pem
Normal file
3
test/recipes/15-test_ecparam_data/valid/sm2-named.pem
Normal file
@ -0,0 +1,3 @@
|
||||
-----BEGIN SM2 PARAMETERS-----
|
||||
BggqgRzPVQGCLQ==
|
||||
-----END SM2 PARAMETERS-----
|
Loading…
Reference in New Issue
Block a user