crypto-sm/sm_password_test.go

60 lines
1.3 KiB
Go
Raw Permalink Normal View History

package sm_test
import (
"bytes"
"testing"
"apigo.cc/go/cast"
"apigo.cc/go/crypto-sm"
)
func TestSMPassword(t *testing.T) {
password := []byte("sm-secret-password")
salt := []byte("sm-salt")
data := []byte("hello sm password")
// 1. SM4-GCM
p1 := append([]byte(nil), password...)
s1 := append([]byte(nil), salt...)
sm4, err := sm.NewSM4GCMByPassword(p1, s1)
if err != nil {
t.Fatal(err)
}
enc := cast.As(sm4.EncryptBytes(data))
dec := cast.As(sm4.DecryptBytes(enc))
if !bytes.Equal(data, dec) {
t.Error("SM4-GCM password roundtrip failed")
}
// 2. SM2
p2 := append([]byte(nil), password...)
s2 := append([]byte(nil), salt...)
sm2a, err := sm.NewSM2ByPassword(p2, s2)
if err != nil {
t.Fatal(err)
}
sig := cast.As(sm2a.Sign(data))
if ok, _ := sm2a.Verify(data, sig); !ok {
t.Error("SM2 password sign/verify failed")
}
}
func TestSM2Deterministic(t *testing.T) {
password := []byte("sm2-determ-pass")
salt := []byte("sm2-determ-salt")
p1 := append([]byte(nil), password...)
s1 := append([]byte(nil), salt...)
a1, _ := sm.NewSM2ByPassword(p1, s1)
p2 := append([]byte(nil), password...)
s2 := append([]byte(nil), salt...)
a2, _ := sm.NewSM2ByPassword(p2, s2)
data := []byte("test")
sig, _ := a1.Sign(data)
if ok, _ := a2.Verify(data, sig); !ok {
t.Error("SM2 deterministic generation failed")
}
}