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  }