github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/sm3soft/sm3_soft_test.go (about) 1 // Copyright 2022 s1ren@github.com/hxx258456. 2 3 /* 4 sm3soft 是sm3的纯软实现,基于tjfoc国密算法库`tjfoc/gmsm`做了少量修改。 5 对应版权声明: thrid_licenses/github.com/tjfoc/gmsm/版权声明 6 */ 7 8 package sm3soft 9 10 import ( 11 "crypto/sha512" 12 "fmt" 13 "io/ioutil" 14 "os" 15 "testing" 16 17 "golang.org/x/crypto/sha3" 18 ) 19 20 func byteToString(b []byte) string { 21 ret := "" 22 for i := 0; i < len(b); i++ { 23 ret += fmt.Sprintf("%02x", b[i]) 24 } 25 // fmt.Println("ret = ", ret) 26 return ret 27 } 28 29 func TestSm3(t *testing.T) { 30 msg := []byte("天行健君子以自强不息") 31 // 生成msg文件 32 err := ioutil.WriteFile("testdata/msg", msg, os.FileMode(0644)) 33 if err != nil { 34 t.Fatal(err) 35 } 36 // 读取msg文件 37 msg, err = ioutil.ReadFile("testdata/msg") 38 if err != nil { 39 t.Fatal(err) 40 } 41 fmt.Printf("读取到的文件内容: %s\n", msg) 42 // sm3.New() 43 hw := New() 44 // 添加散列内容 45 hw.Write(msg) 46 // 散列计算 47 hash := hw.Sum(nil) 48 fmt.Println("hash值: ", hash) 49 fmt.Printf("hash长度 : %d\n", len(hash)) 50 fmt.Printf("hash字符串 : %s\n", byteToString(hash)) 51 // 直接sm3计算 52 hash1 := Sm3Sum(msg) 53 fmt.Println("hash1值: ", hash1) 54 fmt.Printf("hash1长度 : %d\n", len(hash1)) 55 fmt.Printf("hash1字符串 : %s\n", byteToString(hash1)) 56 } 57 58 func TestSm3AndSHA256(t *testing.T) { 59 msg, err := ioutil.ReadFile("testdata/msg") 60 if err != nil { 61 t.Fatal(err) 62 } 63 // sm3计算 64 hashSm3 := Sm3Sum(msg) 65 fmt.Println("hashSm3值: ", hashSm3) 66 fmt.Printf("hashSm3长度 : %d\n", len(hashSm3)) 67 fmt.Printf("hashSm3字符串 : %s\n", byteToString(hashSm3)) 68 69 // hashFuncSha256 := sha256.New() 70 hashFuncSha256 := sha3.New256() 71 // 添加散列内容 72 hashFuncSha256.Write(msg) 73 // 散列计算 74 hashSha256 := hashFuncSha256.Sum(nil) 75 fmt.Println("hashSha256值: ", hashSha256) 76 fmt.Printf("hashSha256长度 : %d\n", len(hashSha256)) 77 fmt.Printf("hashSha256字符串 : %s\n", byteToString(hashSha256)) 78 79 // hashFuncSha384 := sha512.New384() 80 hashFuncSha384 := sha3.New384() 81 // 添加散列内容 82 hashFuncSha384.Write(msg) 83 // 散列计算 84 hashSha384 := hashFuncSha384.Sum(nil) 85 fmt.Println("hashSha384值: ", hashSha384) 86 fmt.Printf("hashSha384长度 : %d\n", len(hashSha384)) 87 fmt.Printf("hashSha384字符串 : %s\n", byteToString(hashSha384)) 88 89 // 散列计算 90 hashSha512 := sha512.Sum512(msg) 91 fmt.Println("hashSha512 值: ", hashSha512) 92 fmt.Printf("hashSha512 长度 : %d\n", len(hashSha512)) 93 fmt.Printf("hashSha512 字符串 : %s\n", byteToString(hashSha512[:])) 94 } 95 96 func BenchmarkSm3(t *testing.B) { 97 t.ReportAllocs() 98 msg := []byte("天行健君子以自强不息") 99 hw := New() 100 for i := 0; i < t.N; i++ { 101 hw.Reset() 102 hw.Write(msg) 103 hw.Sum(nil) 104 } 105 }