60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
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")
|
|
}
|
|
}
|