From 83c4b3b01a749fdddaeae0adfb2feaf0fd7bec13 Mon Sep 17 00:00:00 2001 From: laoyu Date: Wed, 13 Aug 2025 16:19:17 +0800 Subject: [PATCH] x509 utils func ReadPrivateKeyFromPem add "EC PRIVATE KEY" support --- x509/utils.go | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/x509/utils.go b/x509/utils.go index 07e0f420..553dc5e6 100644 --- a/x509/utils.go +++ b/x509/utils.go @@ -21,6 +21,9 @@ func ReadPrivateKeyFromPem(privateKeyPem []byte, pwd []byte) (*sm2.PrivateKey, e if block == nil { return nil, errors.New("failed to decode private key") } + if block.Type == "EC PRIVATE KEY" { + return ParseSm2PrivateKey(block.Bytes) + } priv, err := ParsePKCS8PrivateKey(block.Bytes, pwd) return priv, err } @@ -67,43 +70,41 @@ func WritePublicKeyToPem(key *sm2.PublicKey) ([]byte, error) { return certPem, nil } -//DHex是sm2私钥的真正关键数值 -func ReadPrivateKeyFromHex(Dhex string) (*sm2.PrivateKey,error) { +// DHex是sm2私钥的真正关键数值 +func ReadPrivateKeyFromHex(Dhex string) (*sm2.PrivateKey, error) { c := sm2.P256Sm2() - d,err:=hex.DecodeString(Dhex) - if err!=nil{ - return nil,err + d, err := hex.DecodeString(Dhex) + if err != nil { + return nil, err } - k:= new(big.Int).SetBytes(d) + k := new(big.Int).SetBytes(d) params := c.Params() one := new(big.Int).SetInt64(1) n := new(big.Int).Sub(params.N, one) - if k.Cmp(n)>=0{ - return nil,errors.New("privateKey's D is overflow.") + if k.Cmp(n) >= 0 { + return nil, errors.New("privateKey's D is overflow.") } priv := new(sm2.PrivateKey) priv.PublicKey.Curve = c priv.D = k priv.PublicKey.X, priv.PublicKey.Y = c.ScalarBaseMult(k.Bytes()) - return priv,nil + return priv, nil } - - func WritePrivateKeyToHex(key *sm2.PrivateKey) string { return key.D.Text(16) } func ReadPublicKeyFromHex(Qhex string) (*sm2.PublicKey, error) { - q,err:=hex.DecodeString(Qhex) - if err!=nil{ - return nil,err + q, err := hex.DecodeString(Qhex) + if err != nil { + return nil, err } - if len(q)==65&&q[0]==byte(0x04){ - q=q[1:] + if len(q) == 65 && q[0] == byte(0x04) { + q = q[1:] } - if len(q)!=64{ - return nil,errors.New("publicKey is not uncompressed.") + if len(q) != 64 { + return nil, errors.New("publicKey is not uncompressed.") } pub := new(sm2.PublicKey) pub.Curve = sm2.P256Sm2() @@ -112,7 +113,6 @@ func ReadPublicKeyFromHex(Qhex string) (*sm2.PublicKey, error) { return pub, nil } - func WritePublicKeyToHex(key *sm2.PublicKey) string { x := key.X.Bytes() y := key.Y.Bytes() @@ -129,7 +129,6 @@ func WritePublicKeyToHex(key *sm2.PublicKey) string { return hex.EncodeToString(c) } - func ReadCertificateRequestFromPem(certPem []byte) (*CertificateRequest, error) { block, _ := pem.Decode(certPem) if block == nil { @@ -280,6 +279,7 @@ func ParseSm2CertifateToX509(asn1data []byte) (*x509.Certificate, error) { } return sm2Cert.ToX509Certificate(), nil } + // 32byte func zeroByteSlice() []byte { return []byte{