emmansun / gmsm

ShangMi (SM) cipher suites for golang (Go语言商用密码软件)

Home Page:https://emmansun.github.io/gmsm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

sm3: 使用逻辑运算分配律优化FF2

emmansun opened this issue · comments

FF2(x, y, z) = (x ^ y) | (x ^ z) | (y ^ z) = x ^ (y | z) | (y ^ z)

AVX2:

goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
  404881	      2663 ns/op	 384.53 MB/s	       0 B/op	       0 allocs/op

AVX:

goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
  412590	      2793 ns/op	 366.59 MB/s	       0 B/op	       0 allocs/op

普通汇编:

goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
  314943	      3955 ns/op	 258.88 MB/s	       0 B/op	       0 allocs/op

纯golang:

goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
  233209	      4699 ns/op	 217.91 MB/s	       0 B/op	       0 allocs/op

AVX2(SH256):

goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K_SH256
BenchmarkHash1K_SH256-6
  508598	      2281 ns/op	 448.94 MB/s	       0 B/op	       0 allocs/op

经过和sha256的代码详细比对,SM3压缩部分并不比SHA256复杂,SHA256普通汇编的性能也只有:

goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sha256
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
  260756	      4525 ns/op	 226.30 MB/s	       0 B/op	       0 allocs/op