ShangMi (SM) cipher suites for golang (Go语言商用密码软件)
Go to file
2022-07-11 17:40:15 +08:00
.github/workflows upgrade github actions 2022-07-11 16:40:11 +08:00
cipher cipher/sm4: refactoring, remove sm4_test folder 2022-07-11 17:40:15 +08:00
internal go report card 2022-07-11 13:27:36 +08:00
padding update package level comments 2022-04-20 08:36:44 +08:00
pkcs8 pkcs8: merge from emmansun/pkcs8 2022-06-17 10:59:23 +08:00
sm2 go report card 2022-07-11 13:27:36 +08:00
sm3 fix 1.17 error 2022-06-14 08:57:25 +08:00
sm4 fix 1.17 error 2022-06-14 08:57:25 +08:00
sm4_test align format 2022-05-01 18:06:47 +08:00
sm9 go report card 2022-07-11 13:27:36 +08:00
smx509 test: reduce fmt.Printf 2022-06-17 08:49:50 +08:00
zuc zuc: eia refactoring 2022-07-08 16:08:43 +08:00
.gitattributes align format 2022-01-21 11:24:10 +08:00
.gitignore align format 2022-01-21 11:24:10 +08:00
.travis.yml remove travis ppc64le CI 2022-06-14 09:01:52 +08:00
go.mod Upgrade dependencies 2022-06-13 14:44:36 +08:00
go.sum Upgrade dependencies 2022-06-13 14:44:36 +08:00
LICENSE align format 2022-01-21 11:24:10 +08:00
README.md code test coverage 2022-07-11 14:25:20 +08:00

GM-Standards SM2/SM3/SM4/SM9/ZUC for Go

Travis CI Github CI codecov Go Report Card Documentation Release

This is a SM2 sm2p256v1 implementation whose performance is similar like golang native NIST P256 under amd64 and arm64, for implementation detail, please refer SM2实现细节.

This is also a SM3 implementation whose performance is similar like golang native SHA 256 with SIMD under amd64, for implementation detail, please refer SM3性能优化.

For SM4 implementation, SIMD & AES-NI are used under amd64 and arm64, for detail please refer SM4性能优化, support CBC/CFB/OFB/CTR/GCM/CCM/XTS modes.

SM2 encryption Benchmark

CPU: i5-9500
P-256/SM2(No tuning)
goos: windows
goarch: amd64
pkg: gmsm/sm2
BenchmarkLessThan32-6   	     210	   5665861 ns/op	   0.01 MB/s	 2601864 B/op	   27725 allocs/op
PASS
ok  	gmsm/sm2	5.629s

P-256/SM2(with P256/SM2 curve pure golang implementation)
goos: windows
goarch: amd64
pkg: gmsm/sm2
BenchmarkLessThan32_P256SM2-6   	    1027	   1169516 ns/op	    3874 B/op	      74 allocs/op
PASS
ok  	gmsm/sm2	1.564s

P-256/SM2(with P256/SM2 amd64 curve implementation, i think there are still improvement space for p256Sqr function)
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm2
BenchmarkLessThan32_P256SM2-6   	   10447	    115618 ns/op	    2357 B/op	      46 allocs/op
PASS
ok  	github.com/emmansun/gmsm/sm2	2.199s

P-256 (SM2 based on NIST P-256 curve)
goos: windows
goarch: amd64
pkg: gmsm/sm2
BenchmarkMoreThan32-6   	   13656	     86252 ns/op	    3141 B/op	      50 allocs/op
PASS
ok  	gmsm/sm2	4.139s

SM3 hash Benchmark

CPU: i5-9500
Pure golang version
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
BenchmarkHash8K-6   	   27097	     41112 ns/op	 199.26 MB/s	       0 B/op	       0 allocs/op
PASS
ok  	github.com/emmansun/gmsm/sm3	3.463s

ASM (non-AVX2) version
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
BenchmarkHash8K-6   	   35080	     33235 ns/op	 246.49 MB/s	       0 B/op	       0 allocs/op
PASS
ok  	github.com/emmansun/gmsm/sm3	3.102s

ASM AVX2 version
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
BenchmarkHash8K-6   	   53208	     22223 ns/op	 368.63 MB/s	       0 B/op	       0 allocs/op
PASS
ok  	github.com/emmansun/gmsm/sm3	1.720s 

SHA256 ASM AVX2 version
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
BenchmarkHash8K_SH256-6   	   68352	     17116 ns/op	 478.63 MB/s	       0 B/op	       0 allocs/op
PASS
ok  	github.com/emmansun/gmsm/sm3	3.043s    

SM4 Benchmark

CPU: i5-9500
Pure golang version
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm4
BenchmarkEncrypt-6   	 2671431	       441 ns/op	  36.28 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecrypt-6   	 2709132	       440 ns/op	  36.40 MB/s	       0 B/op	       0 allocs/op
BenchmarkExpand-6    	 2543746	       471 ns/op	      16 B/op	       1 allocs/op

ASM AES-NI version
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm4
BenchmarkEncrypt-6   	 5881989	       206 ns/op	  77.75 MB/s	       0 B/op	       0 allocs/op
BenchmarkDecrypt-6   	 5853994	       204 ns/op	  78.45 MB/s	       0 B/op	       0 allocs/op
BenchmarkExpand-6    	 5985129	       200 ns/op	       0 B/op	       0 allocs/op
PASS
ok  	github.com/emmansun/gmsm/sm4	6.193s