]> Cypherpunks.ru repositories - gogost.git/blob - mgm/mul_test.go
b585799e604c2ab8aef1b2b0fae03b93b874edab
[gogost.git] / mgm / mul_test.go
1 // GoGOST -- Pure Go GOST cryptographic functions library
2 // Copyright (C) 2015-2021 Sergey Matveev <stargrave@stargrave.org>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, version 3 of the License.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 package mgm
17
18 import (
19         "crypto/rand"
20         "math/big"
21         "testing"
22
23         "go.cypherpunks.ru/gogost/v5/gost3412128"
24         "go.cypherpunks.ru/gogost/v5/gost341264"
25 )
26
27 func BenchmarkMul64(b *testing.B) {
28         x := make([]byte, gost341264.BlockSize)
29         y := make([]byte, gost341264.BlockSize)
30         rand.Read(x)
31         rand.Read(y)
32         mgm := MGM{
33                 x:      big.NewInt(0),
34                 y:      big.NewInt(0),
35                 z:      big.NewInt(0),
36                 maxBit: 64 - 1,
37                 r:      R64,
38                 mulBuf: make([]byte, gost341264.BlockSize),
39         }
40         b.ResetTimer()
41         for i := 0; i < b.N; i++ {
42                 mgm.mul(x, y)
43         }
44 }
45
46 func BenchmarkMul128(b *testing.B) {
47         x := make([]byte, gost3412128.BlockSize)
48         y := make([]byte, gost3412128.BlockSize)
49         rand.Read(x)
50         rand.Read(y)
51         mgm := MGM{
52                 x:      big.NewInt(0),
53                 y:      big.NewInt(0),
54                 z:      big.NewInt(0),
55                 maxBit: 128 - 1,
56                 r:      R128,
57                 mulBuf: make([]byte, gost3412128.BlockSize),
58         }
59         b.ResetTimer()
60         for i := 0; i < b.N; i++ {
61                 mgm.mul(x, y)
62         }
63 }