X-Git-Url: http://www.git.cypherpunks.ru/?p=gogost.git;a=blobdiff_plain;f=mgm%2Fmode_test.go;h=984ea483f9b27b8b90e01507c3bbbd289467cadc;hp=38d6ee9a842b4fa54c21def92e43b6c369ecdfb4;hb=7e8907d3f9c6eeec0a49e563923cb0aab0e9aeac;hpb=c07494bbd559b9d00f391e28cfd070e18afe9900 diff --git a/mgm/mode_test.go b/mgm/mode_test.go index 38d6ee9..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-2019 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,11 +19,12 @@ import ( "bytes" "crypto/cipher" "crypto/rand" + "io" "testing" "testing/quick" - "go.cypherpunks.ru/gogost/v4/gost3412128" - "go.cypherpunks.ru/gogost/v4/gost341264" + "go.cypherpunks.ru/gogost/v5/gost3412128" + "go.cypherpunks.ru/gogost/v5/gost341264" ) func TestVector(t *testing.T) { @@ -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) + } +}