+
+func BenchmarkMGM64(b *testing.B) {
+ key := make([]byte, gost341264.KeySize)
+ if _, err := io.ReadFull(rand.Reader, key); err != nil {
+ panic(err)
+ }
+ nonce := make([]byte, gost341264.BlockSize)
+ if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
+ panic(err)
+ }
+ nonce[0] &= 0x7F
+ pt := make([]byte, 1280+3)
+ if _, err := io.ReadFull(rand.Reader, pt); err != nil {
+ panic(err)
+ }
+ c := gost341264.NewCipher(key)
+ aead, err := NewMGM(c, gost341264.BlockSize)
+ if err != nil {
+ panic(err)
+ }
+ ct := make([]byte, len(pt)+aead.Overhead())
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ aead.Seal(ct[:0], nonce, pt, nil)
+ }
+}
+
+func BenchmarkMGM128(b *testing.B) {
+ key := make([]byte, gost3412128.KeySize)
+ if _, err := io.ReadFull(rand.Reader, key); err != nil {
+ panic(err)
+ }
+ nonce := make([]byte, gost3412128.BlockSize)
+ if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
+ panic(err)
+ }
+ nonce[0] &= 0x7F
+ pt := make([]byte, 1280+3)
+ if _, err := io.ReadFull(rand.Reader, pt); err != nil {
+ panic(err)
+ }
+ c := gost3412128.NewCipher(key)
+ aead, err := NewMGM(c, gost3412128.BlockSize)
+ if err != nil {
+ panic(err)
+ }
+ ct := make([]byte, len(pt)+aead.Overhead())
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ aead.Seal(ct[:0], nonce, pt, nil)
+ }
+}