]> Cypherpunks.ru repositories - gogost.git/blob - src/cypherpunks.ru/gogost/gost3410/params.go
1.1 release is ready
[gogost.git] / src / cypherpunks.ru / gogost / gost3410 / params.go
1 // GoGOST -- Pure Go GOST cryptographic functions library
2 // Copyright (C) 2015-2016 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 type DigestSize uint8
20
21 // Curve params: p, q, a, b, bx, by
22 type CurveParams [6][]byte
23
24 var (
25         DigestSize2001 DigestSize = 32
26         DigestSize2012 DigestSize = 64
27
28         CurveParamsGostR34102001cc CurveParams = CurveParams([6][]byte{
29                 {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
31                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
32                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC7},
33                 {0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34                         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35                         0x60, 0x61, 0x17, 0xa2, 0xf4, 0xbd, 0xe4, 0x28,
36                         0xb7, 0x45, 0x8a, 0x54, 0xb6, 0xe8, 0x7b, 0x85},
37                 {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
38                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc4},
41                 {0x2d, 0x06, 0xB4, 0x26, 0x5e, 0xbc, 0x74, 0x9f,
42                         0xf7, 0xd0, 0xf1, 0xf1, 0xf8, 0x82, 0x32, 0xe8,
43                         0x16, 0x32, 0xe9, 0x08, 0x8f, 0xd4, 0x4b, 0x77,
44                         0x87, 0xd5, 0xe4, 0x07, 0xe9, 0x55, 0x08, 0x0c},
45                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
48                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
49                 {0xa2, 0x0e, 0x03, 0x4b, 0xf8, 0x81, 0x3e, 0xf5,
50                         0xc1, 0x8d, 0x01, 0x10, 0x5e, 0x72, 0x6a, 0x17,
51                         0xeb, 0x24, 0x8b, 0x26, 0x4a, 0xe9, 0x70, 0x6f,
52                         0x44, 0x0b, 0xed, 0xc8, 0xcc, 0xb6, 0xb2, 0x2c},
53         })
54         CurveParamsGostR34102001Test CurveParams = CurveParams([6][]byte{
55                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
56                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31},
59                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
61                         0x50, 0xFE, 0x8A, 0x18, 0x92, 0x97, 0x61, 0x54,
62                         0xC5, 0x9C, 0xFC, 0x19, 0x3A, 0xCC, 0xF5, 0xB3},
63                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07},
67                 {0x5F, 0xBF, 0xF4, 0x98, 0xAA, 0x93, 0x8C, 0xE7,
68                         0x39, 0xB8, 0xE0, 0x22, 0xFB, 0xAF, 0xEF, 0x40,
69                         0x56, 0x3F, 0x6E, 0x6A, 0x34, 0x72, 0xFC, 0x2A,
70                         0x51, 0x4C, 0x0C, 0xE9, 0xDA, 0xE2, 0x3B, 0x7E},
71                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
75                 {0x08, 0xE2, 0xA8, 0xA0, 0xE6, 0x51, 0x47, 0xD4,
76                         0xBD, 0x63, 0x16, 0x03, 0x0E, 0x16, 0xD1, 0x9C,
77                         0x85, 0xC9, 0x7F, 0x0A, 0x9C, 0xA2, 0x67, 0x12,
78                         0x2B, 0x96, 0xAB, 0xBC, 0xEA, 0x7E, 0x8F, 0xC8},
79         })
80         CurveParamsGostR34102001CryptoProA CurveParams = CurveParams([6][]byte{
81                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
82                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
83                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
84                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x97},
85                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
86                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
87                         0x6C, 0x61, 0x10, 0x70, 0x99, 0x5A, 0xD1, 0x00,
88                         0x45, 0x84, 0x1B, 0x09, 0xB7, 0x61, 0xB8, 0x93},
89                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
90                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
91                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
92                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x94},
93                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
94                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6},
97                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
101                 {0x8D, 0x91, 0xE4, 0x71, 0xE0, 0x98, 0x9C, 0xDA,
102                         0x27, 0xDF, 0x50, 0x5A, 0x45, 0x3F, 0x2B, 0x76,
103                         0x35, 0x29, 0x4F, 0x2D, 0xDF, 0x23, 0xE3, 0xB1,
104                         0x22, 0xAC, 0xC9, 0x9C, 0x9E, 0x9F, 0x1E, 0x14},
105         })
106         CurveParamsGostR34102001CryptoProB CurveParams = CurveParams([6][]byte{
107                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x99},
111                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
113                         0x5F, 0x70, 0x0C, 0xFF, 0xF1, 0xA6, 0x24, 0xE5,
114                         0xE4, 0x97, 0x16, 0x1B, 0xCC, 0x8A, 0x19, 0x8F},
115                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
117                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x96},
119                 {0x3E, 0x1A, 0xF4, 0x19, 0xA2, 0x69, 0xA5, 0xF8,
120                         0x66, 0xA7, 0xD3, 0xC2, 0x5C, 0x3D, 0xF8, 0x0A,
121                         0xE9, 0x79, 0x25, 0x93, 0x73, 0xFF, 0x2B, 0x18,
122                         0x2F, 0x49, 0xD4, 0xCE, 0x7E, 0x1B, 0xBC, 0x8B},
123                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
125                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
127                 {0x3F, 0xA8, 0x12, 0x43, 0x59, 0xF9, 0x66, 0x80,
128                         0xB8, 0x3D, 0x1C, 0x3E, 0xB2, 0xC0, 0x70, 0xE5,
129                         0xC5, 0x45, 0xC9, 0x85, 0x8D, 0x03, 0xEC, 0xFB,
130                         0x74, 0x4B, 0xF8, 0xD7, 0x17, 0x71, 0x7E, 0xFC},
131         })
132         CurveParamsGostR34102001CryptoProC CurveParams = CurveParams([6][]byte{
133                 {0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
134                         0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
135                         0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
136                         0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x9B},
137                 {0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
138                         0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
139                         0x58, 0x2C, 0xA3, 0x51, 0x1E, 0xDD, 0xFB, 0x74,
140                         0xF0, 0x2F, 0x3A, 0x65, 0x98, 0x98, 0x0B, 0xB9},
141                 {0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
142                         0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
143                         0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
144                         0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x98},
145                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5a},
149                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
152                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
153                 {0x41, 0xEC, 0xE5, 0x57, 0x43, 0x71, 0x1A, 0x8C,
154                         0x3C, 0xBF, 0x37, 0x83, 0xCD, 0x08, 0xC0, 0xEE,
155                         0x4D, 0x4D, 0xC4, 0x40, 0xD4, 0x64, 0x1A, 0x8F,
156                         0x36, 0x6E, 0x55, 0x0D, 0xFD, 0xB3, 0xBB, 0x67},
157         })
158         CurveParamsGostR34102001CryptoProXchA CurveParams = CurveParams([6][]byte{
159                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
160                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
161                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
162                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x97},
163                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
164                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
165                         0x6C, 0x61, 0x10, 0x70, 0x99, 0x5A, 0xD1, 0x00,
166                         0x45, 0x84, 0x1B, 0x09, 0xB7, 0x61, 0xB8, 0x93},
167                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
168                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
169                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
170                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x94},
171                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
172                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6},
175                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
176                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
177                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
178                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
179                 {0x8D, 0x91, 0xE4, 0x71, 0xE0, 0x98, 0x9C, 0xDA,
180                         0x27, 0xDF, 0x50, 0x5A, 0x45, 0x3F, 0x2B, 0x76,
181                         0x35, 0x29, 0x4F, 0x2D, 0xDF, 0x23, 0xE3, 0xB1,
182                         0x22, 0xAC, 0xC9, 0x9C, 0x9E, 0x9F, 0x1E, 0x14},
183         })
184         CurveParamsGostR34102001CryptoProXchB CurveParams = CurveParams([6][]byte{
185                 {0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
186                         0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
187                         0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
188                         0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x9B},
189                 {0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
190                         0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
191                         0x58, 0x2C, 0xA3, 0x51, 0x1E, 0xDD, 0xFB, 0x74,
192                         0xF0, 0x2F, 0x3A, 0x65, 0x98, 0x98, 0x0B, 0xB9},
193                 {0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
194                         0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
195                         0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
196                         0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x98},
197                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
198                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
200                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5a},
201                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
202                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
203                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
205                 {0x41, 0xEC, 0xE5, 0x57, 0x43, 0x71, 0x1A, 0x8C,
206                         0x3C, 0xBF, 0x37, 0x83, 0xCD, 0x08, 0xC0, 0xEE,
207                         0x4D, 0x4D, 0xC4, 0x40, 0xD4, 0x64, 0x1A, 0x8F,
208                         0x36, 0x6E, 0x55, 0x0D, 0xFD, 0xB3, 0xBB, 0x67},
209         })
210         CurveParamsGostR34102012TC26ParamSetA CurveParams = CurveParams([6][]byte{
211                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
212                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
213                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
214                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
215                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
216                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
217                         0xFF, 0xFF, 0xFD, 0xC7},
218                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
219                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
220                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
221                         0xFF, 0xFF, 0x27, 0xE6, 0x95, 0x32, 0xF4, 0x8D, 0x89, 0x11,
222                         0x6F, 0xF2, 0x2B, 0x8D, 0x4E, 0x05, 0x60, 0x60, 0x9B, 0x4B,
223                         0x38, 0xAB, 0xFA, 0xD2, 0xB8, 0x5D, 0xCA, 0xCD, 0xB1, 0x41,
224                         0x1F, 0x10, 0xB2, 0x75},
225                 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
226                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
227                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
228                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
229                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
230                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
231                         0xFF, 0xFF, 0xFD, 0xC4},
232                 {0xE8, 0xC2, 0x50, 0x5D, 0xED, 0xFC, 0x86, 0xDD, 0xC1, 0xBD,
233                         0x0B, 0x2B, 0x66, 0x67, 0xF1, 0xDA, 0x34, 0xB8, 0x25, 0x74,
234                         0x76, 0x1C, 0xB0, 0xE8, 0x79, 0xBD, 0x08, 0x1C, 0xFD, 0x0B,
235                         0x62, 0x65, 0xEE, 0x3C, 0xB0, 0x90, 0xF3, 0x0D, 0x27, 0x61,
236                         0x4C, 0xB4, 0x57, 0x40, 0x10, 0xDA, 0x90, 0xDD, 0x86, 0x2E,
237                         0xF9, 0xD4, 0xEB, 0xEE, 0x47, 0x61, 0x50, 0x31, 0x90, 0x78,
238                         0x5A, 0x71, 0xC7, 0x60},
239                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
240                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
241                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
242                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
245                         0x00, 0x00, 0x00, 0x03},
246                 {0x75, 0x03, 0xCF, 0xE8, 0x7A, 0x83, 0x6A, 0xE3, 0xA6, 0x1B,
247                         0x88, 0x16, 0xE2, 0x54, 0x50, 0xE6, 0xCE, 0x5E, 0x1C, 0x93,
248                         0xAC, 0xF1, 0xAB, 0xC1, 0x77, 0x80, 0x64, 0xFD, 0xCB, 0xEF,
249                         0xA9, 0x21, 0xDF, 0x16, 0x26, 0xBE, 0x4F, 0xD0, 0x36, 0xE9,
250                         0x3D, 0x75, 0xE6, 0xA5, 0x0E, 0x3A, 0x41, 0xE9, 0x80, 0x28,
251                         0xFE, 0x5F, 0xC2, 0x35, 0xF5, 0xB8, 0x89, 0xA5, 0x89, 0xCB,
252                         0x52, 0x15, 0xF2, 0xA4},
253         })
254         CurveParamsGostR34102012TC26ParamSetB CurveParams = CurveParams([6][]byte{
255                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
258                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
259                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
260                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
261                         0x00, 0x00, 0x00, 0x6F},
262                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
264                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265                         0x00, 0x01, 0x49, 0xA1, 0xEC, 0x14, 0x25, 0x65, 0xA5, 0x45,
266                         0xAC, 0xFD, 0xB7, 0x7B, 0xD9, 0xD4, 0x0C, 0xFA, 0x8B, 0x99,
267                         0x67, 0x12, 0x10, 0x1B, 0xEA, 0x0E, 0xC6, 0x34, 0x6C, 0x54,
268                         0x37, 0x4F, 0x25, 0xBD},
269                 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
272                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
274                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275                         0x00, 0x00, 0x00, 0x6C},
276                 {0x68, 0x7D, 0x1B, 0x45, 0x9D, 0xC8, 0x41, 0x45, 0x7E, 0x3E,
277                         0x06, 0xCF, 0x6F, 0x5E, 0x25, 0x17, 0xB9, 0x7C, 0x7D, 0x61,
278                         0x4A, 0xF1, 0x38, 0xBC, 0xBF, 0x85, 0xDC, 0x80, 0x6C, 0x4B,
279                         0x28, 0x9F, 0x3E, 0x96, 0x5D, 0x2D, 0xB1, 0x41, 0x6D, 0x21,
280                         0x7F, 0x8B, 0x27, 0x6F, 0xAD, 0x1A, 0xB6, 0x9C, 0x50, 0xF7,
281                         0x8B, 0xEE, 0x1F, 0xA3, 0x10, 0x6E, 0xFB, 0x8C, 0xCB, 0xC7,
282                         0xC5, 0x14, 0x01, 0x16},
283                 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
286                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
287                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
288                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289                         0x00, 0x00, 0x00, 0x02},
290                 {0x1A, 0x8F, 0x7E, 0xDA, 0x38, 0x9B, 0x09, 0x4C, 0x2C, 0x07,
291                         0x1E, 0x36, 0x47, 0xA8, 0x94, 0x0F, 0x3C, 0x12, 0x3B, 0x69,
292                         0x75, 0x78, 0xC2, 0x13, 0xBE, 0x6D, 0xD9, 0xE6, 0xC8, 0xEC,
293                         0x73, 0x35, 0xDC, 0xB2, 0x28, 0xFD, 0x1E, 0xDF, 0x4A, 0x39,
294                         0x15, 0x2C, 0xBC, 0xAA, 0xF8, 0xC0, 0x39, 0x88, 0x28, 0x04,
295                         0x10, 0x55, 0xF9, 0x4C, 0xEE, 0xEC, 0x7E, 0x21, 0x34, 0x07,
296                         0x80, 0xFE, 0x41, 0xBD},
297         })
298
299         CurveParamsDefault = CurveParamsGostR34102001CryptoProA
300 )
301
302 func NewCurveFromParams(params CurveParams) (*Curve, error) {
303         return NewCurve(
304                 params[0][:],
305                 params[1][:],
306                 params[2][:],
307                 params[3][:],
308                 params[4][:],
309                 params[5][:],
310         )
311 }