mirror of
https://github.com/golang/go
synced 2024-11-22 20:14:40 -07:00
crypto/cipher: make AES-GCM benchmarks match ChaCha20Poly1305 ones
It's useful to compare TLS AEADs. Here are the numbers on my MacBook with an Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz. name speed AESGCM/Open-128-64-8 692MB/s ± 2% AESGCM/Seal-128-64-8 568MB/s ± 1% AESGCM/Open-128-1350-8 3.96GB/s ± 1% AESGCM/Seal-128-1350-8 3.17GB/s ± 4% AESGCM/Open-128-8192-8 5.46GB/s ± 2% AESGCM/Seal-128-8192-8 4.40GB/s ± 3% name speed AESGCM/Open-256-64-8 602MB/s ± 2% AESGCM/Seal-256-64-8 508MB/s ± 1% AESGCM/Open-256-1350-8 3.06GB/s ± 1% AESGCM/Seal-256-1350-8 2.65GB/s ± 2% AESGCM/Open-256-8192-8 4.02GB/s ± 3% AESGCM/Seal-256-8192-8 3.53GB/s ± 2% name speed Chacha20Poly1305/Open-64-8 385MB/s ± 3% Chacha20Poly1305/Seal-64-8 396MB/s ± 3% Chacha20Poly1305/Open-1350-8 1.67GB/s ± 2% Chacha20Poly1305/Seal-1350-8 1.62GB/s ± 1% Chacha20Poly1305/Open-8192-8 2.04GB/s ± 2% Chacha20Poly1305/Seal-8192-8 2.04GB/s ± 3% Change-Id: I9373ab85bf132b45b41078205259100fa2d46dda Reviewed-on: https://go-review.googlesource.com/c/go/+/314610 Trust: Filippo Valsorda <filippo@golang.org> Run-TryBot: Filippo Valsorda <filippo@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Roland Shoemaker <roland@golang.org>
This commit is contained in:
parent
764f53eb6c
commit
ad989c7dba
@ -7,28 +7,15 @@ package cipher_test
|
|||||||
import (
|
import (
|
||||||
"crypto/aes"
|
"crypto/aes"
|
||||||
"crypto/cipher"
|
"crypto/cipher"
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func benchmarkAESGCMSign(b *testing.B, buf []byte) {
|
func benchmarkAESGCMSeal(b *testing.B, buf []byte, keySize int) {
|
||||||
|
b.ReportAllocs()
|
||||||
b.SetBytes(int64(len(buf)))
|
b.SetBytes(int64(len(buf)))
|
||||||
|
|
||||||
var key [16]byte
|
var key = make([]byte, keySize)
|
||||||
var nonce [12]byte
|
|
||||||
aes, _ := aes.NewCipher(key[:])
|
|
||||||
aesgcm, _ := cipher.NewGCM(aes)
|
|
||||||
var out []byte
|
|
||||||
|
|
||||||
b.ResetTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
out = aesgcm.Seal(out[:0], nonce[:], nil, buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func benchmarkAESGCMSeal(b *testing.B, buf []byte) {
|
|
||||||
b.SetBytes(int64(len(buf)))
|
|
||||||
|
|
||||||
var key [16]byte
|
|
||||||
var nonce [12]byte
|
var nonce [12]byte
|
||||||
var ad [13]byte
|
var ad [13]byte
|
||||||
aes, _ := aes.NewCipher(key[:])
|
aes, _ := aes.NewCipher(key[:])
|
||||||
@ -41,44 +28,41 @@ func benchmarkAESGCMSeal(b *testing.B, buf []byte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func benchmarkAESGCMOpen(b *testing.B, buf []byte) {
|
func benchmarkAESGCMOpen(b *testing.B, buf []byte, keySize int) {
|
||||||
|
b.ReportAllocs()
|
||||||
b.SetBytes(int64(len(buf)))
|
b.SetBytes(int64(len(buf)))
|
||||||
|
|
||||||
var key [16]byte
|
var key = make([]byte, keySize)
|
||||||
var nonce [12]byte
|
var nonce [12]byte
|
||||||
var ad [13]byte
|
var ad [13]byte
|
||||||
aes, _ := aes.NewCipher(key[:])
|
aes, _ := aes.NewCipher(key[:])
|
||||||
aesgcm, _ := cipher.NewGCM(aes)
|
aesgcm, _ := cipher.NewGCM(aes)
|
||||||
var out []byte
|
var out []byte
|
||||||
out = aesgcm.Seal(out[:0], nonce[:], buf, ad[:])
|
|
||||||
|
ct := aesgcm.Seal(nil, nonce[:], buf[:], ad[:])
|
||||||
|
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
_, err := aesgcm.Open(buf[:0], nonce[:], out, ad[:])
|
out, _ = aesgcm.Open(out[:0], nonce[:], ct, ad[:])
|
||||||
if err != nil {
|
|
||||||
b.Errorf("Open: %v", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkAESGCMSeal1K(b *testing.B) {
|
func BenchmarkAESGCM(b *testing.B) {
|
||||||
benchmarkAESGCMSeal(b, make([]byte, 1024))
|
for _, length := range []int{64, 1350, 8 * 1024} {
|
||||||
}
|
b.Run("Open-128-"+strconv.Itoa(length), func(b *testing.B) {
|
||||||
|
benchmarkAESGCMOpen(b, make([]byte, length), 128/8)
|
||||||
|
})
|
||||||
|
b.Run("Seal-128-"+strconv.Itoa(length), func(b *testing.B) {
|
||||||
|
benchmarkAESGCMSeal(b, make([]byte, length), 128/8)
|
||||||
|
})
|
||||||
|
|
||||||
func BenchmarkAESGCMOpen1K(b *testing.B) {
|
b.Run("Open-256-"+strconv.Itoa(length), func(b *testing.B) {
|
||||||
benchmarkAESGCMOpen(b, make([]byte, 1024))
|
benchmarkAESGCMOpen(b, make([]byte, length), 256/8)
|
||||||
}
|
})
|
||||||
|
b.Run("Seal-256-"+strconv.Itoa(length), func(b *testing.B) {
|
||||||
func BenchmarkAESGCMSign8K(b *testing.B) {
|
benchmarkAESGCMSeal(b, make([]byte, length), 256/8)
|
||||||
benchmarkAESGCMSign(b, make([]byte, 8*1024))
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkAESGCMSeal8K(b *testing.B) {
|
|
||||||
benchmarkAESGCMSeal(b, make([]byte, 8*1024))
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkAESGCMOpen8K(b *testing.B) {
|
|
||||||
benchmarkAESGCMOpen(b, make([]byte, 8*1024))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func benchmarkAESStream(b *testing.B, mode func(cipher.Block, []byte) cipher.Stream, buf []byte) {
|
func benchmarkAESStream(b *testing.B, mode func(cipher.Block, []byte) cipher.Stream, buf []byte) {
|
||||||
|
Loading…
Reference in New Issue
Block a user