80 lines
1.2 KiB
Go
80 lines
1.2 KiB
Go
package aestests
|
|
|
|
import (
|
|
"crypto/aes"
|
|
"crypto/cipher"
|
|
"crypto/rand"
|
|
"log"
|
|
"testing"
|
|
)
|
|
|
|
func must(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func TestAES(t *testing.T) {
|
|
key := make([]byte, 32)
|
|
rand.Read(key)
|
|
|
|
block, err := aes.NewCipher(key)
|
|
must(err)
|
|
|
|
aesgcm, err := cipher.NewGCM(block)
|
|
must(err)
|
|
|
|
log.Print(aesgcm.NonceSize())
|
|
log.Print(aesgcm.Overhead())
|
|
}
|
|
|
|
func BenchmarkSeal(b *testing.B) {
|
|
key := make([]byte, 32)
|
|
rand.Read(key)
|
|
|
|
block, err := aes.NewCipher(key)
|
|
must(err)
|
|
|
|
cryptor, err := cipher.NewGCM(block)
|
|
must(err)
|
|
|
|
nonce := make([]byte, 12)
|
|
rand.Read(nonce)
|
|
|
|
data := make([]byte, 1400)
|
|
rand.Read(data)
|
|
|
|
out := make([]byte, 1500)
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
out = cryptor.Seal(out[:0], nonce, data, nil)
|
|
}
|
|
}
|
|
|
|
func BenchmarkOpen(b *testing.B) {
|
|
key := make([]byte, 32)
|
|
rand.Read(key)
|
|
|
|
block, err := aes.NewCipher(key)
|
|
must(err)
|
|
|
|
cryptor, err := cipher.NewGCM(block)
|
|
must(err)
|
|
|
|
nonce := make([]byte, 12)
|
|
rand.Read(nonce)
|
|
|
|
data := make([]byte, 1400)
|
|
rand.Read(data)
|
|
|
|
sealed := make([]byte, 1500)
|
|
sealed = cryptor.Seal(sealed[:0], nonce, data, nil)
|
|
|
|
dec := make([]byte, 1500)
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
dec, err = cryptor.Open(dec[:0], nonce, sealed, nil)
|
|
}
|
|
}
|