]> Cypherpunks.ru repositories - gogost.git/blob - src/cypherpunks.ru/gogost/gost3410/vko2012_test.go
Simplify 34.10 curve creation from parameters
[gogost.git] / src / cypherpunks.ru / gogost / gost3410 / vko2012_test.go
1 // GoGOST -- Pure Go GOST cryptographic functions library
2 // Copyright (C) 2015-2019 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, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 package gost3410
18
19 import (
20         "bytes"
21         "encoding/hex"
22         "testing"
23         "testing/quick"
24 )
25
26 func TestVKO2012256(t *testing.T) {
27         c := CurveIdtc26gost341012512paramSetA()
28         ukmRaw, _ := hex.DecodeString("1d80603c8544c727")
29         ukm := NewUKM(ukmRaw)
30         prvRawA, _ := hex.DecodeString("c990ecd972fce84ec4db022778f50fcac726f46708384b8d458304962d7147f8c2db41cef22c90b102f2968404f9b9be6d47c79692d81826b32b8daca43cb667")
31         pubRawA, _ := hex.DecodeString("aab0eda4abff21208d18799fb9a8556654ba783070eba10cb9abb253ec56dcf5d3ccba6192e464e6e5bcb6dea137792f2431f6c897eb1b3c0cc14327b1adc0a7914613a3074e363aedb204d38d3563971bd8758e878c9db11403721b48002d38461f92472d40ea92f9958c0ffa4c93756401b97f89fdbe0b5e46e4a4631cdb5a")
32         prvRawB, _ := hex.DecodeString("48c859f7b6f11585887cc05ec6ef1390cfea739b1a18c0d4662293ef63b79e3b8014070b44918590b4b996acfea4edfbbbcccc8c06edd8bf5bda92a51392d0db")
33         pubRawB, _ := hex.DecodeString("192fe183b9713a077253c72c8735de2ea42a3dbc66ea317838b65fa32523cd5efca974eda7c863f4954d1147f1f2b25c395fce1c129175e876d132e94ed5a65104883b414c9b592ec4dc84826f07d0b6d9006dda176ce48c391e3f97d102e03bb598bf132a228a45f7201aba08fc524a2d77e43a362ab022ad4028f75bde3b79")
34         pubA, _ := NewPublicKey(c, Mode2012, pubRawA)
35         pubB, _ := NewPublicKey(c, Mode2012, pubRawB)
36         kek, _ := hex.DecodeString("c9a9a77320e2cc559ed72dce6f47e2192ccea95fa648670582c054c0ef36c221")
37         prvA, _ := NewPrivateKey(c, Mode2012, prvRawA)
38         prvB, _ := NewPrivateKey(c, Mode2012, prvRawB)
39         kekA, _ := prvA.KEK2012256(pubB, ukm)
40         kekB, _ := prvB.KEK2012256(pubA, ukm)
41         if bytes.Compare(kekA, kekB) != 0 {
42                 t.FailNow()
43         }
44         if bytes.Compare(kekA, kek) != 0 {
45                 t.FailNow()
46         }
47 }
48
49 func TestRandomVKO2012256(t *testing.T) {
50         c := CurveIdtc26gost341012512paramSetA()
51         f := func(prvRaw1 [64]byte, prvRaw2 [64]byte, ukmRaw [8]byte) bool {
52                 prv1, err := NewPrivateKey(c, Mode2012, prvRaw1[:])
53                 if err != nil {
54                         return false
55                 }
56                 prv2, err := NewPrivateKey(c, Mode2012, prvRaw2[:])
57                 if err != nil {
58                         return false
59                 }
60                 pub1, _ := prv1.PublicKey()
61                 pub2, _ := prv2.PublicKey()
62                 ukm := NewUKM(ukmRaw[:])
63                 kek1, _ := prv1.KEK2012256(pub2, ukm)
64                 kek2, _ := prv2.KEK2012256(pub1, ukm)
65                 return bytes.Compare(kek1, kek2) == 0
66         }
67         if err := quick.Check(f, nil); err != nil {
68                 t.Error(err)
69         }
70 }
71
72 func TestVKO2012512(t *testing.T) {
73         c := CurveIdtc26gost341012512paramSetA()
74         ukmRaw, _ := hex.DecodeString("1d80603c8544c727")
75         ukm := NewUKM(ukmRaw)
76         prvRawA, _ := hex.DecodeString("c990ecd972fce84ec4db022778f50fcac726f46708384b8d458304962d7147f8c2db41cef22c90b102f2968404f9b9be6d47c79692d81826b32b8daca43cb667")
77         pubRawA, _ := hex.DecodeString("aab0eda4abff21208d18799fb9a8556654ba783070eba10cb9abb253ec56dcf5d3ccba6192e464e6e5bcb6dea137792f2431f6c897eb1b3c0cc14327b1adc0a7914613a3074e363aedb204d38d3563971bd8758e878c9db11403721b48002d38461f92472d40ea92f9958c0ffa4c93756401b97f89fdbe0b5e46e4a4631cdb5a")
78         prvRawB, _ := hex.DecodeString("48c859f7b6f11585887cc05ec6ef1390cfea739b1a18c0d4662293ef63b79e3b8014070b44918590b4b996acfea4edfbbbcccc8c06edd8bf5bda92a51392d0db")
79         pubRawB, _ := hex.DecodeString("192fe183b9713a077253c72c8735de2ea42a3dbc66ea317838b65fa32523cd5efca974eda7c863f4954d1147f1f2b25c395fce1c129175e876d132e94ed5a65104883b414c9b592ec4dc84826f07d0b6d9006dda176ce48c391e3f97d102e03bb598bf132a228a45f7201aba08fc524a2d77e43a362ab022ad4028f75bde3b79")
80         pubA, _ := NewPublicKey(c, Mode2012, pubRawA)
81         pubB, _ := NewPublicKey(c, Mode2012, pubRawB)
82         kek, _ := hex.DecodeString("79f002a96940ce7bde3259a52e015297adaad84597a0d205b50e3e1719f97bfa7ee1d2661fa9979a5aa235b558a7e6d9f88f982dd63fc35a8ec0dd5e242d3bdf")
83         prvA, _ := NewPrivateKey(c, Mode2012, prvRawA)
84         prvB, _ := NewPrivateKey(c, Mode2012, prvRawB)
85         kekA, _ := prvA.KEK2012512(pubB, ukm)
86         kekB, _ := prvB.KEK2012512(pubA, ukm)
87         if bytes.Compare(kekA, kekB) != 0 {
88                 t.FailNow()
89         }
90         if bytes.Compare(kekA, kek) != 0 {
91                 t.FailNow()
92         }
93 }
94
95 func TestRandomVKO2012512(t *testing.T) {
96         c := CurveIdtc26gost341012512paramSetA()
97         f := func(prvRaw1 [64]byte, prvRaw2 [64]byte, ukmRaw [8]byte) bool {
98                 prv1, err := NewPrivateKey(c, Mode2012, prvRaw1[:])
99                 if err != nil {
100                         return false
101                 }
102                 prv2, err := NewPrivateKey(c, Mode2012, prvRaw2[:])
103                 if err != nil {
104                         return false
105                 }
106                 pub1, _ := prv1.PublicKey()
107                 pub2, _ := prv2.PublicKey()
108                 ukm := NewUKM(ukmRaw[:])
109                 kek1, _ := prv1.KEK2012512(pub2, ukm)
110                 kek2, _ := prv2.KEK2012512(pub1, ukm)
111                 return bytes.Compare(kek1, kek2) == 0
112         }
113         if err := quick.Check(f, nil); err != nil {
114                 t.Error(err)
115         }
116 }