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