mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-18 00:22:41 +08:00
update
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
package crypto
|
||||
package sm2
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
@ -14,7 +14,7 @@ var (
|
||||
C1C2C3 = 1
|
||||
)
|
||||
|
||||
var _ IAsymmetric = &sm2Instance{}
|
||||
type option func(*sm2Instance) error
|
||||
|
||||
type sm2Instance struct {
|
||||
mode int
|
||||
@ -22,9 +22,42 @@ type sm2Instance struct {
|
||||
puk *s.PublicKey
|
||||
}
|
||||
|
||||
type option func(*sm2Instance) error
|
||||
func WithSm2PrivateKey(p []byte, pwd []byte) option {
|
||||
return func(so *sm2Instance) error {
|
||||
priv, err := x.ReadPrivateKeyFromPem(p, pwd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
func NewSm2(opts ...option) (*sm2Instance, error) {
|
||||
so.prk = priv
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func WithSm2PublicKey(p []byte) option {
|
||||
return func(so *sm2Instance) error {
|
||||
if len(p) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
pub, err := x.ReadPublicKeyFromPem(p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
so.puk = pub
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func WithMode(mode int) option {
|
||||
return func(so *sm2Instance) error {
|
||||
so.mode = mode
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func New(opts ...option) (*sm2Instance, error) {
|
||||
o := &sm2Instance{
|
||||
mode: defaultMode,
|
||||
}
|
||||
@ -51,37 +84,6 @@ func NewSm2(opts ...option) (*sm2Instance, error) {
|
||||
return o, nil
|
||||
}
|
||||
|
||||
func ParseSm2PrivateKey(p []byte, pwd []byte) option {
|
||||
return func(so *sm2Instance) error {
|
||||
priv, err := x.ReadPrivateKeyFromPem(p, pwd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
so.prk = priv
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func ParseSm2PublicKey(p []byte) option {
|
||||
return func(so *sm2Instance) error {
|
||||
pub, err := x.ReadPublicKeyFromPem(p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
so.puk = pub
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func WithMode(mode int) option {
|
||||
return func(so *sm2Instance) error {
|
||||
so.mode = mode
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (o *sm2Instance) Encrypt(msg []byte) ([]byte, error) {
|
||||
return s.Encrypt(o.puk, msg, rand.Reader, o.mode)
|
||||
}
|
@ -1,20 +1,34 @@
|
||||
package crypto_test
|
||||
package sm2
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/x509"
|
||||
"encoding/hex"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/charlienet/go-mixed/crypto"
|
||||
"github.com/tjfoc/gmsm/sm2"
|
||||
x "github.com/tjfoc/gmsm/x509"
|
||||
)
|
||||
|
||||
func TestPem(t *testing.T) {
|
||||
|
||||
key, _ := sm2.GenerateKey(rand.Reader)
|
||||
|
||||
prv, _ := x.WritePrivateKeyToPem(key, []byte{})
|
||||
pub, _ := x.WritePublicKeyToPem(key.Public().(*sm2.PublicKey))
|
||||
|
||||
t.Log(x.WritePublicKeyToHex(&key.PublicKey))
|
||||
t.Log(string(prv))
|
||||
t.Log(string(pub))
|
||||
}
|
||||
|
||||
func TestNewSm2(t *testing.T) {
|
||||
o, err := crypto.NewSm2()
|
||||
o, err := New()
|
||||
t.Logf("%+v, %v", o, err)
|
||||
|
||||
t.Log(crypto.NewSm2(crypto.ParseSm2PrivateKey([]byte{}, []byte{})))
|
||||
t.Log(New(WithSm2PrivateKey([]byte{}, []byte{})))
|
||||
|
||||
msg := []byte("123456")
|
||||
sign, err := o.Sign(msg)
|
||||
@ -49,9 +63,9 @@ hslcifiQY8173nHtaB3R6T0PwRQTwKbpdec0dwVCpvVcdzHtivndlG0mqQ==
|
||||
)
|
||||
|
||||
func TestPrivatePem(t *testing.T) {
|
||||
signer, err := crypto.NewSm2(
|
||||
crypto.ParseSm2PrivateKey([]byte(privPem), []byte{}),
|
||||
crypto.ParseSm2PublicKey([]byte(pubPem)))
|
||||
signer, err := New(
|
||||
WithSm2PrivateKey([]byte(privPem), []byte{}),
|
||||
WithSm2PublicKey([]byte(pubPem)))
|
||||
|
||||
t.Log(signer, err)
|
||||
if err != nil {
|
||||
@ -67,9 +81,9 @@ func TestPrivatePem(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestBadPublicPem(t *testing.T) {
|
||||
signer, err := crypto.NewSm2(
|
||||
crypto.ParseSm2PrivateKey([]byte(privPem), []byte{}),
|
||||
crypto.ParseSm2PublicKey([]byte(badPubPem)))
|
||||
signer, err := New(
|
||||
WithSm2PrivateKey([]byte(privPem), []byte{}),
|
||||
WithSm2PublicKey([]byte(badPubPem)))
|
||||
|
||||
t.Log(signer, err)
|
||||
|
Reference in New Issue
Block a user