1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-18 00:22:41 +08:00
This commit is contained in:
2023-08-25 15:31:00 +08:00
parent 04aecd4abc
commit b0a97978d8
58 changed files with 1330 additions and 476 deletions

View File

@ -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)
}

View File

@ -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)