gmsm/sm2/sm2_test.go

72 lines
1.9 KiB
Go
Raw Normal View History

2020-12-16 16:27:36 +08:00
package sm2
import (
"crypto/ecdsa"
"crypto/rand"
"encoding/hex"
"math/big"
"reflect"
"testing"
)
func Test_kdf(t *testing.T) {
x2, _ := new(big.Int).SetString("64D20D27D0632957F8028C1E024F6B02EDF23102A566C932AE8BD613A8E865FE", 16)
y2, _ := new(big.Int).SetString("58D225ECA784AE300A81A2D48281A828E1CEDF11C4219099840265375077BF78", 16)
expected := "006e30dae231b071dfad8aa379e90264491603"
result, success := kdf(append(x2.Bytes(), y2.Bytes()...), 19)
if !success {
t.Fatalf("failed")
}
resultStr := hex.EncodeToString(result)
if expected != resultStr {
t.Fatalf("expected %s, real value %s", expected, resultStr)
}
}
func Test_encryptDecrypt(t *testing.T) {
priv, _ := ecdsa.GenerateKey(P256(), rand.Reader)
2020-12-16 16:27:36 +08:00
tests := []struct {
name string
plainText string
}{
// TODO: Add test cases.
{"less than 32", "encryption standard"},
{"equals 32", "encryption standard encryption "},
{"long than 32", "encryption standard encryption standard"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ciphertext, err := Encrypt(rand.Reader, &priv.PublicKey, []byte(tt.plainText))
if err != nil {
t.Fatalf("encrypt failed %v", err)
}
plaintext, err := Decrypt(priv, ciphertext)
if err != nil {
t.Fatalf("decrypt failed %v", err)
}
if !reflect.DeepEqual(string(plaintext), tt.plainText) {
t.Errorf("Decrypt() = %v, want %v", string(plaintext), tt.plainText)
}
})
}
}
func benchmarkEncrypt(b *testing.B, plaintext string) {
for i := 0; i < b.N; i++ {
priv, _ := ecdsa.GenerateKey(P256(), rand.Reader)
Encrypt(rand.Reader, &priv.PublicKey, []byte(plaintext))
}
}
func BenchmarkLessThan32(b *testing.B) {
benchmarkEncrypt(b, "encryption standard")
}
func BenchmarkMoreThan32(b *testing.B) {
benchmarkEncrypt(b, "encryption standard encryption standard encryption standard encryption standard encryption standard encryption standard encryption standard")
}