]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
fix SM2 privatekey decode(PEM format, ECPrivateKey).
authorAlen Yan <yzpgryx@163.com>
Wed, 9 Jul 2025 01:23:00 +0000 (09:23 +0800)
committerPauli <ppzgs1@gmail.com>
Thu, 24 Jul 2025 23:46:27 +0000 (09:46 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <ppzgs1@gmail.com>
(Merged from https://github.com/openssl/openssl/pull/27999)

include/openssl/pem.h
providers/implementations/encode_decode/decode_pem2der.c
test/recipes/15-test_ec.t
test/testec-sm2.pem [new file with mode: 0644]

index 3d61961e0db1edd8e0bf1b452bde79dd7fd1f9fc..ab1e9714431658bf4e6a52626d11b2c73a28790d 100644 (file)
@@ -54,6 +54,7 @@ extern "C" {
 # define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
 # define PEM_STRING_PARAMETERS   "PARAMETERS"
 # define PEM_STRING_CMS          "CMS"
+# define PEM_STRING_SM2PRIVATEKEY "SM2 PRIVATE KEY"
 # define PEM_STRING_SM2PARAMETERS "SM2 PARAMETERS"
 
 # define PEM_TYPE_ENCRYPTED      10
index 648ecd4584a62053588d672d3f07ac5a032c3fb6..1f7ddb5620e9e4f1ef843af71297d1059431892c 100644 (file)
@@ -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_SM2PRIVATEKEY, OSSL_OBJECT_PKEY, "SM2", "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" },
index 0638d626e7447956e38cf576b72c093d4945391b..92f763f4c5f5c6cdde883b0b11bf2601cc23308f 100644 (file)
@@ -18,7 +18,7 @@ setup("test_ec");
 
 plan skip_all => 'EC is not supported in this build' if disabled('ec');
 
-plan tests => 15;
+plan tests => 16;
 
 my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
 
@@ -33,6 +33,10 @@ subtest 'EC conversions -- private key' => sub {
     tconversion( -type => 'ec', -prefix => 'ec-priv',
                  -in => srctop_file("test","testec-p256.pem") );
 };
+subtest 'EC conversions -- private key' => sub {
+    tconversion( -type => 'ec', -prefix => 'sm2-priv',
+                 -in => srctop_file("test","testec-sm2.pem") );
+};
 subtest 'EC conversions -- private key PKCS#8' => sub {
     tconversion( -type => 'ec', -prefix => 'ec-pkcs8',
                  -in => srctop_file("test","testec-p256.pem"),
diff --git a/test/testec-sm2.pem b/test/testec-sm2.pem
new file mode 100644 (file)
index 0000000..30e2561
--- /dev/null
@@ -0,0 +1,5 @@
+-----BEGIN SM2 PRIVATE KEY-----
+MHcCAQEEIKPB7gEYKGAwAkz0MfGwQm0BXclgzvSTxQG9bm4RCAxXoAoGCCqBHM9V
+AYItoUQDQgAE+FuibOpfjVfj716O3LglhK4HzjUR82mgn8kTZinQsEafw3FFZzZJ
+vwHIGHUsSKxVTRIEs+BICQDBg99OA3VU/Q==
+-----END SM2 PRIVATE KEY-----