]> Cypherpunks.ru repositories - gogost.git/blobdiff - mgm/mode_test.go
Separate GF^64 and GF^128 multiplier implementations
[gogost.git] / mgm / mode_test.go
index 7d1d984316915227bdc46fe957a570175572fbea..984ea483f9b27b8b90e01507c3bbbd289467cadc 100644 (file)
@@ -19,6 +19,7 @@ import (
        "bytes"
        "crypto/cipher"
        "crypto/rand"
+       "io"
        "testing"
        "testing/quick"
 
@@ -145,3 +146,55 @@ func TestSymmetric(t *testing.T) {
                nonce[:gost341264.BlockSize],
        )
 }
+
+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)
+       }
+}