gmsm

module
v0.13.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 19, 2022 License: MIT

README

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

Travis (.org) Github CI codecov Go Report Card Documentation GitHub go.mod Go version (branch) 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.

For SM9 implementation, please reference sm9/bn256 README.md.

For ZUC implementation, SIMD, AES-NI and CLMUL are used under amd64 and arm64, for detail please refer Efficient Software Implementations of ZUC

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

Directories

Path Synopsis
internal
godebug
Package godebug parses the GODEBUG environment variable.
Package godebug parses the GODEBUG environment variable.
randutil
Package randutil contains internal randomness utilities for various crypto packages.
Package randutil contains internal randomness utilities for various crypto packages.
sm2ec
Package sm2ec implements the SM2 Prime elliptic curves.
Package sm2ec implements the SM2 Prime elliptic curves.
xor
Package padding handle padding octets at the trailing end
Package padding handle padding octets at the trailing end
Package pkcs8 implements functions to parse and convert private keys in PKCS#8 format, as defined in RFC5208 and RFC5958
Package pkcs8 implements functions to parse and convert private keys in PKCS#8 format, as defined in RFC5208 and RFC5958
Package sm2 handle shangmi sm2 digital signature and public key encryption algorithm and its curve implementation
Package sm2 handle shangmi sm2 digital signature and public key encryption algorithm and its curve implementation
Package sm3 handle shangmi sm3 hash algorithm
Package sm3 handle shangmi sm3 hash algorithm
Package sm4 handle shangmi sm4 symmetric encryption algorithm
Package sm4 handle shangmi sm4 symmetric encryption algorithm
sm9
Package sm9 handle shangmi sm9 algorithm and its curves and pairing implementation
Package sm9 handle shangmi sm9 algorithm and its curves and pairing implementation
Package zuc handle shangmi zuc stream cipher.
Package zuc handle shangmi zuc stream cipher.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL