Commit a07739a4 authored by pengjun's avatar pengjun

fix cert unit testcase

parent c82abc33
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIB7TCCAZKgAwIBAgIRAK66R1SxVZQDN0Dkz0ZhbCcwCgYIKoEcz1UBg3UwRzEL MIIB6zCCAZGgAwIBAgIQVq9SxucwdINw2WUMlNFpdjAKBggqgRzPVQGDdTBHMQsw
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
cmFuY2lzY28xCzAJBgNVBAMTAmNhMB4XDTE4MDcxOTAyNTMxMVoXDTI4MDcxNjAy YW5jaXNjbzELMAkGA1UEAxMCY2EwHhcNMjAwNjE4MDMxNDQ2WhcNMzAwNjE2MDMx
NTMxMVowRzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNV NDQ2WjBHMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
BAcTDVNhbiBGcmFuY2lzY28xCzAJBgNVBAMTAmNhMFkwEwYHKoZIzj0CAQYIKoEc BxMNU2FuIEZyYW5jaXNjbzELMAkGA1UEAxMCY2EwWTATBgcqhkjOPQIBBggqgRzP
z1UBgi0DQgAEieMcW/533Qz8Vpgz/SkxO8/FWEzTGg66kgg3Yk2kcWajoPm4JL5B VQGCLQNCAARACzXYM8dLleVhjAwyljePO1Vltf2YL2xGKCLAB1/YITkM4q3GVE8D
Zz/gs0DR/PD5FnwCiLRxbFS5U5DKgRLCQKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8G LZxsydaG0zncKUswQA97HM6F1qarbFuvo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYD
A1UdJQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgnl+NdM85 VR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTADAQH/MCkGA1UdDgQiBCDpAuHxKpzW
BZ7lCPe16SCHjs/jnObR8vk6oGNJf6PDOKwwCgYIKoEcz1UBg3UDSQAwRgIhAKZm gxCIZxodcdzpHpzKFhlEJARmhKOPuN1yaTAKBggqgRzPVQGDdQNIADBFAiEAowXR
F7/VeFA7Lye2QP2OG5/ZZnN/95FhW3YBVoEudeQDAiEAlqZOJ2yDoCr9YJ0xcdOM RYYCWcBT0gVSbHk7k+aJzG3uRdORTbbvmLgbG2QCIF3e0/m0aNRlvF6gPxBJ+JBR
L8pSDDRDCvGds8+nemzYtpw= R0sbv9eyrSEFMwx/ZyGJ
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg86AAL0bRgFW6RhFX
no7CVphI1U2csfrjwPuYn3FXaF2gCgYIKoEcz1UBgi2hRANCAASR8Yb//+y/GMLy
D36FLLO80oxUPtD6AtVoh9UIuC1b0QzA4+zkUDUk3zwdZ1pMZZKGZ48vE6KtAcFB
uqU7L784
-----END PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgUDB2WJbWpyxcbwXq
m951EkEDNdRmUo6tzgtFy7nmcVegCgYIKoEcz1UBgi2hRANCAATPC6Ja8zQ9hhaL
eusbDK9ttb4a4yRjAWKXUDjO3r/zA6ROmeTQAc/fNlZXxKr+TXiAe+r2fBGBIRr3
hhql7gqw
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIB5DCCAYqgAwIBAgIRAOQUQ5hzHvaJCs4FzFKJnM8wCgYIKoEcz1UBg3UwRzEL MIIB4zCCAYmgAwIBAgIQdKBE3pdDBMaadMbZ30K7aTAKBggqgRzPVQGDdTBHMQsw
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
cmFuY2lzY28xCzAJBgNVBAMTAmNhMB4XDTE4MDcxOTAyNTMxMVoXDTI4MDcxNjAy YW5jaXNjbzELMAkGA1UEAxMCY2EwHhcNMjAwNjE4MDMxNDQ2WhcNMzAwNjE2MDMx
NTMxMVowUTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNV NDQ2WjBRMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
BAcTDVNhbiBGcmFuY2lzY28xFTATBgNVBAMMDFVzZXJAQ2hhaW4zMzBZMBMGByqG BxMNU2FuIEZyYW5jaXNjbzEVMBMGA1UEAwwMVXNlckBDaGFpbjMzMFkwEwYHKoZI
SM49AgEGCCqBHM9VAYItA0IABM8LolrzND2GFot66xsMr221vhrjJGMBYpdQOM7e zj0CAQYIKoEcz1UBgi0DQgAEkfGG///svxjC8g9+hSyzvNKMVD7Q+gLVaIfVCLgt
v/MDpE6Z5NABz982VlfEqv5NeIB76vZ8EYEhGveGGqXuCrCjTTBLMA4GA1UdDwEB W9EMwOPs5FA1JN88HWdaTGWShmePLxOirQHBQbqlOy+/OKNNMEswDgYDVR0PAQH/
/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIJ5fjXTPOQWe5Qj3tekg BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAg6QLh8Sqc1oMQiGcaHXHc
h47P45zm0fL5OqBjSX+jwzisMAoGCCqBHM9VAYN1A0gAMEUCIA2zO2rS86QfOeni 6R6cyhYZRCQEZoSjj7jdcmkwCgYIKoEcz1UBg3UDSAAwRQIgBSqSzSkoXopLR830
/6fE4Gi1HU93Kc7vWqMIeWWoKw1mAiEA8cKpU/yoA9saKqeDmTdp5EIbRdxm33Sk zMjWsMVlZERtUuW3+uYm+bCRjOgCIQDZf8dKxkBd155hiilDQ4RR4Xa8+ZGcPslm
7PV9pdBVWYU= Nm+S1txiqA==
-----END CERTIFICATE----- -----END CERTIFICATE-----
...@@ -19,7 +19,7 @@ func (s *sm2Signer) Sign(k Key, digest []byte, opts SignerOpts) (signature []byt ...@@ -19,7 +19,7 @@ func (s *sm2Signer) Sign(k Key, digest []byte, opts SignerOpts) (signature []byt
} }
func signSM2(k *sm2.PrivateKey, digest []byte, opts SignerOpts) (signature []byte, err error) { func signSM2(k *sm2.PrivateKey, digest []byte, opts SignerOpts) (signature []byte, err error) {
r, s, err := sm2.Sign(k, digest) r, s, err := sm2.Sm2Sign(k, digest, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -220,7 +220,7 @@ func newSM2CA(baseDir, name string) (*SM2CA, error) { ...@@ -220,7 +220,7 @@ func newSM2CA(baseDir, name string) (*SM2CA, error) {
sm2cert := utils.ParseX509CertificateToSm2(&template) sm2cert := utils.ParseX509CertificateToSm2(&template)
sm2cert.PublicKey = smPubKey sm2cert.PublicKey = smPubKey
x509Cert, err := genCertificateGMSM2(baseDir, name, sm2cert, sm2cert, priv) x509Cert, err := genCertificateGMSM2(baseDir, name, sm2cert, sm2cert, signer)
if err == nil { if err == nil {
ca = &SM2CA{ ca = &SM2CA{
Name: name, Name: name,
...@@ -247,7 +247,7 @@ func (ca *SM2CA) SignCertificate(baseDir, name string, sans []string, pub interf ...@@ -247,7 +247,7 @@ func (ca *SM2CA) SignCertificate(baseDir, name string, sans []string, pub interf
template.PublicKey = pub template.PublicKey = pub
sm2Tpl := utils.ParseX509CertificateToSm2(&template) sm2Tpl := utils.ParseX509CertificateToSm2(&template)
cert, err := genCertificateGMSM2(baseDir, name, sm2Tpl, ca.SignCert, ca.Sm2Key) cert, err := genCertificateGMSM2(baseDir, name, sm2Tpl, ca.SignCert, ca.Signer)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -282,7 +282,7 @@ func (ca *SM2CA) GenerateLocalUser(baseDir, name string) error { ...@@ -282,7 +282,7 @@ func (ca *SM2CA) GenerateLocalUser(baseDir, name string) error {
return err return err
} }
func genCertificateGMSM2(baseDir, name string, template, parent *sm2.Certificate, key csp.Key) (*sm2.Certificate, error) { func genCertificateGMSM2(baseDir, name string, template, parent *sm2.Certificate, key crypto.Signer) (*sm2.Certificate, error) {
certBytes, err := utils.CreateCertificateToMem(template, parent, key) certBytes, err := utils.CreateCertificateToMem(template, parent, key)
if err != nil { if err != nil {
return nil, err return nil, err
......
...@@ -5,40 +5,64 @@ ...@@ -5,40 +5,64 @@
package utils package utils
import ( import (
"crypto"
"crypto/rand"
"crypto/x509" "crypto/x509"
"encoding/pem"
"os"
"github.com/33cn/plugin/plugin/dapp/cert/authority/tools/cryptogen/factory/csp"
"github.com/tjfoc/gmsm/sm2" "github.com/tjfoc/gmsm/sm2"
) )
// CreateCertificateToMem 证书转mem // CreateCertificateToMem 证书转mem
func CreateCertificateToMem(template, parent *sm2.Certificate, key csp.Key) (cert []byte, err error) { func CreateCertificateToMem(template, parent *sm2.Certificate, key crypto.Signer) ([]byte, error) {
pk := key.(*csp.SM2PrivateKey).PrivKey
pub, _ := template.PublicKey.(*sm2.PublicKey) pub, _ := template.PublicKey.(*sm2.PublicKey)
var puk sm2.PublicKey var puk sm2.PublicKey
puk.Curve = sm2.P256Sm2() puk.Curve = sm2.P256Sm2()
puk.X = pub.X puk.X = pub.X
puk.Y = pub.Y puk.Y = pub.Y
cert, err = sm2.CreateCertificateToMem(template, parent, &puk, pk)
return der, err := sm2.CreateCertificate(rand.Reader, template, parent, &puk, key)
if err != nil {
return nil, err
}
block := &pem.Block{
Type: "CERTIFICATE",
Bytes: der,
}
return pem.EncodeToMemory(block), nil
} }
// CreateCertificateToPem 证书转pem // CreateCertificateToPem 证书转pem
func CreateCertificateToPem(FileName string, template, parent *sm2.Certificate, key csp.Key) error { func CreateCertificateToPem(FileName string, template, parent *sm2.Certificate, key crypto.Signer) error {
pk := key.(*csp.SM2PrivateKey).PrivKey
pub, _ := template.PublicKey.(*sm2.PublicKey) pub, _ := template.PublicKey.(*sm2.PublicKey)
var puk sm2.PublicKey var puk sm2.PublicKey
puk.Curve = sm2.P256Sm2() puk.Curve = sm2.P256Sm2()
puk.X = pub.X puk.X = pub.X
puk.Y = pub.Y puk.Y = pub.Y
_, err := sm2.CreateCertificateToPem(FileName, template, parent, &puk, pk)
der, err := sm2.CreateCertificate(rand.Reader, template, parent, &puk, key)
if err != nil {
return err return err
}
block := &pem.Block{
Type: "CERTIFICATE",
Bytes: der,
}
file, err := os.Create(FileName)
if err != nil {
return err
}
defer file.Close()
err = pem.Encode(file, block)
if err != nil {
return err
}
return nil
} }
// ParseX509CertificateToSm2 解析x509格式为sm2格式证书 // ParseX509CertificateToSm2 解析x509格式为sm2格式证书
...@@ -51,7 +75,7 @@ func ParseX509CertificateToSm2(x509Cert *x509.Certificate) *sm2.Certificate { ...@@ -51,7 +75,7 @@ func ParseX509CertificateToSm2(x509Cert *x509.Certificate) *sm2.Certificate {
RawIssuer: x509Cert.RawIssuer, RawIssuer: x509Cert.RawIssuer,
Signature: x509Cert.Signature, Signature: x509Cert.Signature,
SignatureAlgorithm: sm2.SignatureAlgorithm(x509Cert.SignatureAlgorithm), SignatureAlgorithm: sm2.SM2WithSM3,
PublicKeyAlgorithm: sm2.PublicKeyAlgorithm(x509Cert.PublicKeyAlgorithm), PublicKeyAlgorithm: sm2.PublicKeyAlgorithm(x509Cert.PublicKeyAlgorithm),
PublicKey: x509Cert.PublicKey, PublicKey: x509Cert.PublicKey,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment