X-Git-Url: http://www.git.cypherpunks.ru/?p=gogost.git;a=blobdiff_plain;f=mgm%2Fmode_test.go;h=984ea483f9b27b8b90e01507c3bbbd289467cadc;hp=d29120a7e087132abda55c3a92224c8c5fedb3ea;hb=7e8907d3f9c6eeec0a49e563923cb0aab0e9aeac;hpb=e38f7b828c16660814ac5b55b53644b3822e067b diff --git a/mgm/mode_test.go b/mgm/mode_test.go index d29120a..984ea48 100644 --- a/mgm/mode_test.go +++ b/mgm/mode_test.go @@ -1,5 +1,5 @@ // GoGOST -- Pure Go GOST cryptographic functions library -// Copyright (C) 2015-2020 Sergey Matveev +// Copyright (C) 2015-2021 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -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) + } +}