]> Cypherpunks.ru repositories - gogost.git/blob - gost3410/params.go
ebbb9afe6d4f87ec0ebd849a398987ef8e2222a9
[gogost.git] / gost3410 / params.go
1 // GoGOST -- Pure Go GOST cryptographic functions library
2 // Copyright (C) 2015-2020 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 gost3410
17
18 type Mode int
19
20 var (
21         Mode2001 Mode = Mode(32)
22         Mode2012 Mode = Mode(64)
23
24         CurveGostR34102001ParamSetcc func() *Curve = func() *Curve {
25                 curve, err := NewCurve(
26                         bytes2big([]byte{
27                                 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
29                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC7,
31                         }),
32                         bytes2big([]byte{
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                         }),
38                         bytes2big([]byte{
39                                 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
41                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc4,
43                         }),
44                         bytes2big([]byte{
45                                 0x2d, 0x06, 0xB4, 0x26, 0x5e, 0xbc, 0x74, 0x9f,
46                                 0xf7, 0xd0, 0xf1, 0xf1, 0xf8, 0x82, 0x32, 0xe8,
47                                 0x16, 0x32, 0xe9, 0x08, 0x8f, 0xd4, 0x4b, 0x77,
48                                 0x87, 0xd5, 0xe4, 0x07, 0xe9, 0x55, 0x08, 0x0c,
49                         }),
50                         bytes2big([]byte{
51                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
55                         }),
56                         bytes2big([]byte{
57                                 0xa2, 0x0e, 0x03, 0x4b, 0xf8, 0x81, 0x3e, 0xf5,
58                                 0xc1, 0x8d, 0x01, 0x10, 0x5e, 0x72, 0x6a, 0x17,
59                                 0xeb, 0x24, 0x8b, 0x26, 0x4a, 0xe9, 0x70, 0x6f,
60                                 0x44, 0x0b, 0xed, 0xc8, 0xcc, 0xb6, 0xb2, 0x2c,
61                         }),
62                         nil,
63                         nil,
64                         nil,
65                 )
66                 if err != nil {
67                         panic(err)
68                 }
69                 curve.Name = "GostR34102001ParamSetcc"
70                 return curve
71         }
72         // id-GostR3410-2001-TestParamSet
73         CurveIdGostR34102001TestParamSet func() *Curve = func() *Curve {
74                 curve, err := NewCurve(
75                         bytes2big([]byte{
76                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31,
80                         }),
81                         bytes2big([]byte{
82                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
84                                 0x50, 0xFE, 0x8A, 0x18, 0x92, 0x97, 0x61, 0x54,
85                                 0xC5, 0x9C, 0xFC, 0x19, 0x3A, 0xCC, 0xF5, 0xB3,
86                         }),
87                         bytes2big([]byte{
88                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
92                         }),
93                         bytes2big([]byte{
94                                 0x5F, 0xBF, 0xF4, 0x98, 0xAA, 0x93, 0x8C, 0xE7,
95                                 0x39, 0xB8, 0xE0, 0x22, 0xFB, 0xAF, 0xEF, 0x40,
96                                 0x56, 0x3F, 0x6E, 0x6A, 0x34, 0x72, 0xFC, 0x2A,
97                                 0x51, 0x4C, 0x0C, 0xE9, 0xDA, 0xE2, 0x3B, 0x7E,
98                         }),
99                         bytes2big([]byte{
100                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
104                         }),
105                         bytes2big([]byte{
106                                 0x08, 0xE2, 0xA8, 0xA0, 0xE6, 0x51, 0x47, 0xD4,
107                                 0xBD, 0x63, 0x16, 0x03, 0x0E, 0x16, 0xD1, 0x9C,
108                                 0x85, 0xC9, 0x7F, 0x0A, 0x9C, 0xA2, 0x67, 0x12,
109                                 0x2B, 0x96, 0xAB, 0xBC, 0xEA, 0x7E, 0x8F, 0xC8,
110                         }),
111                         nil,
112                         nil,
113                         nil,
114                 )
115                 if err != nil {
116                         panic(err)
117                 }
118                 curve.Name = "id-GostR3410-2001-TestParamSet"
119                 return curve
120         }
121         // id-GostR3410-2001-CryptoPro-A-ParamSet
122         CurveIdGostR34102001CryptoProAParamSet func() *Curve = func() *Curve {
123                 curve, err := NewCurve(
124                         bytes2big([]byte{
125                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
126                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
127                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
128                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x97,
129                         }),
130                         bytes2big([]byte{
131                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
132                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
133                                 0x6C, 0x61, 0x10, 0x70, 0x99, 0x5A, 0xD1, 0x00,
134                                 0x45, 0x84, 0x1B, 0x09, 0xB7, 0x61, 0xB8, 0x93,
135                         }),
136                         bytes2big([]byte{
137                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
138                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
139                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
140                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x94,
141                         }),
142                         bytes2big([]byte{
143                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
144                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6,
147                         }),
148                         bytes2big([]byte{
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, 0x01,
153                         }),
154                         bytes2big([]byte{
155                                 0x8D, 0x91, 0xE4, 0x71, 0xE0, 0x98, 0x9C, 0xDA,
156                                 0x27, 0xDF, 0x50, 0x5A, 0x45, 0x3F, 0x2B, 0x76,
157                                 0x35, 0x29, 0x4F, 0x2D, 0xDF, 0x23, 0xE3, 0xB1,
158                                 0x22, 0xAC, 0xC9, 0x9C, 0x9E, 0x9F, 0x1E, 0x14,
159                         }),
160                         nil,
161                         nil,
162                         nil,
163                 )
164                 if err != nil {
165                         panic(err)
166                 }
167                 curve.Name = "id-GostR3410-2001-CryptoPro-A-ParamSet"
168                 return curve
169         }
170         // id-GostR3410-2001-CryptoPro-B-ParamSet
171         CurveIdGostR34102001CryptoProBParamSet func() *Curve = func() *Curve {
172                 curve, err := NewCurve(
173                         bytes2big([]byte{
174                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0x0C, 0x99,
178                         }),
179                         bytes2big([]byte{
180                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
182                                 0x5F, 0x70, 0x0C, 0xFF, 0xF1, 0xA6, 0x24, 0xE5,
183                                 0xE4, 0x97, 0x16, 0x1B, 0xCC, 0x8A, 0x19, 0x8F,
184                         }),
185                         bytes2big([]byte{
186                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
187                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
188                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
189                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x96,
190                         }),
191                         bytes2big([]byte{
192                                 0x3E, 0x1A, 0xF4, 0x19, 0xA2, 0x69, 0xA5, 0xF8,
193                                 0x66, 0xA7, 0xD3, 0xC2, 0x5C, 0x3D, 0xF8, 0x0A,
194                                 0xE9, 0x79, 0x25, 0x93, 0x73, 0xFF, 0x2B, 0x18,
195                                 0x2F, 0x49, 0xD4, 0xCE, 0x7E, 0x1B, 0xBC, 0x8B,
196                         }),
197                         bytes2big([]byte{
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, 0x00, 0x00,
201                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
202                         }),
203                         bytes2big([]byte{
204                                 0x3F, 0xA8, 0x12, 0x43, 0x59, 0xF9, 0x66, 0x80,
205                                 0xB8, 0x3D, 0x1C, 0x3E, 0xB2, 0xC0, 0x70, 0xE5,
206                                 0xC5, 0x45, 0xC9, 0x85, 0x8D, 0x03, 0xEC, 0xFB,
207                                 0x74, 0x4B, 0xF8, 0xD7, 0x17, 0x71, 0x7E, 0xFC,
208                         }),
209                         nil,
210                         nil,
211                         nil,
212                 )
213                 if err != nil {
214                         panic(err)
215                 }
216                 curve.Name = "id-GostR3410-2001-CryptoPro-B-ParamSet"
217                 return curve
218         }
219         // id-GostR3410-2001-CryptoPro-C-ParamSet
220         CurveIdGostR34102001CryptoProCParamSet func() *Curve = func() *Curve {
221                 curve, err := NewCurve(
222                         bytes2big([]byte{
223                                 0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
224                                 0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
225                                 0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
226                                 0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x9B,
227                         }),
228                         bytes2big([]byte{
229                                 0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
230                                 0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
231                                 0x58, 0x2C, 0xA3, 0x51, 0x1E, 0xDD, 0xFB, 0x74,
232                                 0xF0, 0x2F, 0x3A, 0x65, 0x98, 0x98, 0x0B, 0xB9,
233                         }),
234                         bytes2big([]byte{
235                                 0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
236                                 0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
237                                 0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
238                                 0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x98,
239                         }),
240                         bytes2big([]byte{
241                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
242                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5a,
245                         }),
246                         bytes2big([]byte{
247                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
249                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
250                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
251                         }),
252                         bytes2big([]byte{
253                                 0x41, 0xEC, 0xE5, 0x57, 0x43, 0x71, 0x1A, 0x8C,
254                                 0x3C, 0xBF, 0x37, 0x83, 0xCD, 0x08, 0xC0, 0xEE,
255                                 0x4D, 0x4D, 0xC4, 0x40, 0xD4, 0x64, 0x1A, 0x8F,
256                                 0x36, 0x6E, 0x55, 0x0D, 0xFD, 0xB3, 0xBB, 0x67,
257                         }),
258                         nil,
259                         nil,
260                         nil,
261                 )
262                 if err != nil {
263                         panic(err)
264                 }
265                 curve.Name = "id-GostR3410-2001-CryptoPro-C-ParamSet"
266                 return curve
267         }
268         // id-GostR3410-2001-CryptoPro-XchA-ParamSet
269         CurveIdGostR34102001CryptoProXchAParamSet func() *Curve = func() *Curve {
270                 c := CurveIdGostR34102001CryptoProAParamSet()
271                 c.Name = "id-GostR3410-2001-CryptoPro-XchA-ParamSet"
272                 return c
273         }
274         // id-GostR3410-2001-CryptoPro-XchB-ParamSet
275         CurveIdGostR34102001CryptoProXchBParamSet func() *Curve = func() *Curve {
276                 c := CurveIdGostR34102001CryptoProCParamSet()
277                 c.Name = "id-GostR3410-2001-CryptoPro-XchB-ParamSet"
278                 return c
279         }
280         // id-tc26-gost-3410-2012-256-paramSetA
281         CurveIdtc26gost34102012256paramSetA func() *Curve = func() *Curve {
282                 curve, err := NewCurve(
283                         bytes2big([]byte{
284                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
285                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
286                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
287                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x97,
288                         }),
289                         bytes2big([]byte{
290                                 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292                                 0x0F, 0xD8, 0xCD, 0xDF, 0xC8, 0x7B, 0x66, 0x35,
293                                 0xC1, 0x15, 0xAF, 0x55, 0x6C, 0x36, 0x0C, 0x67,
294                         }),
295                         bytes2big([]byte{
296                                 0xC2, 0x17, 0x3F, 0x15, 0x13, 0x98, 0x16, 0x73,
297                                 0xAF, 0x48, 0x92, 0xC2, 0x30, 0x35, 0xA2, 0x7C,
298                                 0xE2, 0x5E, 0x20, 0x13, 0xBF, 0x95, 0xAA, 0x33,
299                                 0xB2, 0x2C, 0x65, 0x6F, 0x27, 0x7E, 0x73, 0x35,
300                         }),
301                         bytes2big([]byte{
302                                 0x29, 0x5F, 0x9B, 0xAE, 0x74, 0x28, 0xED, 0x9C,
303                                 0xCC, 0x20, 0xE7, 0xC3, 0x59, 0xA9, 0xD4, 0x1A,
304                                 0x22, 0xFC, 0xCD, 0x91, 0x08, 0xE1, 0x7B, 0xF7,
305                                 0xBA, 0x93, 0x37, 0xA6, 0xF8, 0xAE, 0x95, 0x13,
306                         }),
307                         bytes2big([]byte{
308                                 0x91, 0xE3, 0x84, 0x43, 0xA5, 0xE8, 0x2C, 0x0D,
309                                 0x88, 0x09, 0x23, 0x42, 0x57, 0x12, 0xB2, 0xBB,
310                                 0x65, 0x8B, 0x91, 0x96, 0x93, 0x2E, 0x02, 0xC7,
311                                 0x8B, 0x25, 0x82, 0xFE, 0x74, 0x2D, 0xAA, 0x28,
312                         }),
313                         bytes2big([]byte{
314                                 0x32, 0x87, 0x94, 0x23, 0xAB, 0x1A, 0x03, 0x75,
315                                 0x89, 0x57, 0x86, 0xC4, 0xBB, 0x46, 0xE9, 0x56,
316                                 0x5F, 0xDE, 0x0B, 0x53, 0x44, 0x76, 0x67, 0x40,
317                                 0xAF, 0x26, 0x8A, 0xDB, 0x32, 0x32, 0x2E, 0x5C,
318                         }),
319                         bigInt1,
320                         bytes2big([]byte{
321                                 0x06, 0x05, 0xF6, 0xB7, 0xC1, 0x83, 0xFA, 0x81,
322                                 0x57, 0x8B, 0xC3, 0x9C, 0xFA, 0xD5, 0x18, 0x13,
323                                 0x2B, 0x9D, 0xF6, 0x28, 0x97, 0x00, 0x9A, 0xF7,
324                                 0xE5, 0x22, 0xC3, 0x2D, 0x6D, 0xC7, 0xBF, 0xFB,
325                         }),
326                         bigInt4,
327                 )
328                 if err != nil {
329                         panic(err)
330                 }
331                 curve.Name = "id-tc26-gost-3410-2012-256-paramSetA"
332                 return curve
333         }
334         // id-tc26-gost-3410-2012-256-paramSetB
335         CurveIdtc26gost34102012256paramSetB func() *Curve = func() *Curve {
336                 c := CurveIdGostR34102001CryptoProAParamSet()
337                 c.Name = "id-tc26-gost-3410-2012-256-paramSetB"
338                 return c
339         }
340         // id-tc26-gost-3410-2012-256-paramSetC
341         CurveIdtc26gost34102012256paramSetC func() *Curve = func() *Curve {
342                 c := CurveIdGostR34102001CryptoProBParamSet()
343                 c.Name = "id-tc26-gost-3410-2012-256-paramSetC"
344                 return c
345         }
346         // id-tc26-gost-3410-2012-256-paramSetD
347         CurveIdtc26gost34102012256paramSetD func() *Curve = func() *Curve {
348                 c := CurveIdGostR34102001CryptoProCParamSet()
349                 c.Name = "id-tc26-gost-3410-2012-256-paramSetD"
350                 return c
351         }
352         // id-tc26-gost-3410-12-512-paramSetA
353         CurveIdtc26gost341012512paramSetA func() *Curve = func() *Curve {
354                 curve, err := NewCurve(
355                         bytes2big([]byte{
356                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
357                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
358                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
359                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
360                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
361                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
362                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
363                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC7,
364                         }),
365                         bytes2big([]byte{
366                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
367                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
368                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
369                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
370                                 0x27, 0xE6, 0x95, 0x32, 0xF4, 0x8D, 0x89, 0x11,
371                                 0x6F, 0xF2, 0x2B, 0x8D, 0x4E, 0x05, 0x60, 0x60,
372                                 0x9B, 0x4B, 0x38, 0xAB, 0xFA, 0xD2, 0xB8, 0x5D,
373                                 0xCA, 0xCD, 0xB1, 0x41, 0x1F, 0x10, 0xB2, 0x75,
374                         }),
375                         bytes2big([]byte{
376                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
377                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
378                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
379                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
380                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
381                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
382                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
383                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC4,
384                         }),
385                         bytes2big([]byte{
386                                 0xE8, 0xC2, 0x50, 0x5D, 0xED, 0xFC, 0x86, 0xDD,
387                                 0xC1, 0xBD, 0x0B, 0x2B, 0x66, 0x67, 0xF1, 0xDA,
388                                 0x34, 0xB8, 0x25, 0x74, 0x76, 0x1C, 0xB0, 0xE8,
389                                 0x79, 0xBD, 0x08, 0x1C, 0xFD, 0x0B, 0x62, 0x65,
390                                 0xEE, 0x3C, 0xB0, 0x90, 0xF3, 0x0D, 0x27, 0x61,
391                                 0x4C, 0xB4, 0x57, 0x40, 0x10, 0xDA, 0x90, 0xDD,
392                                 0x86, 0x2E, 0xF9, 0xD4, 0xEB, 0xEE, 0x47, 0x61,
393                                 0x50, 0x31, 0x90, 0x78, 0x5A, 0x71, 0xC7, 0x60,
394                         }),
395                         bytes2big([]byte{
396                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
397                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
398                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
399                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
400                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
401                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
402                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
403                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
404                         }),
405                         bytes2big([]byte{
406                                 0x75, 0x03, 0xCF, 0xE8, 0x7A, 0x83, 0x6A, 0xE3,
407                                 0xA6, 0x1B, 0x88, 0x16, 0xE2, 0x54, 0x50, 0xE6,
408                                 0xCE, 0x5E, 0x1C, 0x93, 0xAC, 0xF1, 0xAB, 0xC1,
409                                 0x77, 0x80, 0x64, 0xFD, 0xCB, 0xEF, 0xA9, 0x21,
410                                 0xDF, 0x16, 0x26, 0xBE, 0x4F, 0xD0, 0x36, 0xE9,
411                                 0x3D, 0x75, 0xE6, 0xA5, 0x0E, 0x3A, 0x41, 0xE9,
412                                 0x80, 0x28, 0xFE, 0x5F, 0xC2, 0x35, 0xF5, 0xB8,
413                                 0x89, 0xA5, 0x89, 0xCB, 0x52, 0x15, 0xF2, 0xA4,
414                         }),
415                         nil,
416                         nil,
417                         nil,
418                 )
419                 if err != nil {
420                         panic(err)
421                 }
422                 curve.Name = "id-tc26-gost-3410-12-512-paramSetA"
423                 return curve
424         }
425         // id-tc26-gost-3410-12-512-paramSetB
426         CurveIdtc26gost341012512paramSetB func() *Curve = func() *Curve {
427                 curve, err := NewCurve(
428                         bytes2big([]byte{
429                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
430                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
431                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
432                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
433                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
434                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
435                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
436                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F,
437                         }),
438                         bytes2big([]byte{
439                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
440                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
441                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
442                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
443                                 0x49, 0xA1, 0xEC, 0x14, 0x25, 0x65, 0xA5, 0x45,
444                                 0xAC, 0xFD, 0xB7, 0x7B, 0xD9, 0xD4, 0x0C, 0xFA,
445                                 0x8B, 0x99, 0x67, 0x12, 0x10, 0x1B, 0xEA, 0x0E,
446                                 0xC6, 0x34, 0x6C, 0x54, 0x37, 0x4F, 0x25, 0xBD,
447                         }),
448                         bytes2big([]byte{
449                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
450                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
451                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
452                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
453                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
454                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
455                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
456                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C,
457                         }),
458                         bytes2big([]byte{
459                                 0x68, 0x7D, 0x1B, 0x45, 0x9D, 0xC8, 0x41, 0x45,
460                                 0x7E, 0x3E, 0x06, 0xCF, 0x6F, 0x5E, 0x25, 0x17,
461                                 0xB9, 0x7C, 0x7D, 0x61, 0x4A, 0xF1, 0x38, 0xBC,
462                                 0xBF, 0x85, 0xDC, 0x80, 0x6C, 0x4B, 0x28, 0x9F,
463                                 0x3E, 0x96, 0x5D, 0x2D, 0xB1, 0x41, 0x6D, 0x21,
464                                 0x7F, 0x8B, 0x27, 0x6F, 0xAD, 0x1A, 0xB6, 0x9C,
465                                 0x50, 0xF7, 0x8B, 0xEE, 0x1F, 0xA3, 0x10, 0x6E,
466                                 0xFB, 0x8C, 0xCB, 0xC7, 0xC5, 0x14, 0x01, 0x16,
467                         }),
468                         bytes2big([]byte{
469                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
470                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
471                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
472                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
473                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
474                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
475                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
476                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
477                         }),
478                         bytes2big([]byte{
479                                 0x1A, 0x8F, 0x7E, 0xDA, 0x38, 0x9B, 0x09, 0x4C,
480                                 0x2C, 0x07, 0x1E, 0x36, 0x47, 0xA8, 0x94, 0x0F,
481                                 0x3C, 0x12, 0x3B, 0x69, 0x75, 0x78, 0xC2, 0x13,
482                                 0xBE, 0x6D, 0xD9, 0xE6, 0xC8, 0xEC, 0x73, 0x35,
483                                 0xDC, 0xB2, 0x28, 0xFD, 0x1E, 0xDF, 0x4A, 0x39,
484                                 0x15, 0x2C, 0xBC, 0xAA, 0xF8, 0xC0, 0x39, 0x88,
485                                 0x28, 0x04, 0x10, 0x55, 0xF9, 0x4C, 0xEE, 0xEC,
486                                 0x7E, 0x21, 0x34, 0x07, 0x80, 0xFE, 0x41, 0xBD,
487                         }),
488                         nil,
489                         nil,
490                         nil,
491                 )
492                 if err != nil {
493                         panic(err)
494                 }
495                 curve.Name = "id-tc26-gost-3410-12-512-paramSetB"
496                 return curve
497         }
498         // id-tc26-gost-3410-2012-512-paramSetC
499         CurveIdtc26gost34102012512paramSetC func() *Curve = func() *Curve {
500                 curve, err := NewCurve(
501                         bytes2big([]byte{
502                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
503                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
504                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
505                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
506                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
507                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
508                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
509                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC7,
510                         }),
511                         bytes2big([]byte{
512                                 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
513                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
514                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
515                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
516                                 0xC9, 0x8C, 0xDB, 0xA4, 0x65, 0x06, 0xAB, 0x00,
517                                 0x4C, 0x33, 0xA9, 0xFF, 0x51, 0x47, 0x50, 0x2C,
518                                 0xC8, 0xED, 0xA9, 0xE7, 0xA7, 0x69, 0xA1, 0x26,
519                                 0x94, 0x62, 0x3C, 0xEF, 0x47, 0xF0, 0x23, 0xED,
520                         }),
521                         bytes2big([]byte{
522                                 0xDC, 0x92, 0x03, 0xE5, 0x14, 0xA7, 0x21, 0x87,
523                                 0x54, 0x85, 0xA5, 0x29, 0xD2, 0xC7, 0x22, 0xFB,
524                                 0x18, 0x7B, 0xC8, 0x98, 0x0E, 0xB8, 0x66, 0x64,
525                                 0x4D, 0xE4, 0x1C, 0x68, 0xE1, 0x43, 0x06, 0x45,
526                                 0x46, 0xE8, 0x61, 0xC0, 0xE2, 0xC9, 0xED, 0xD9,
527                                 0x2A, 0xDE, 0x71, 0xF4, 0x6F, 0xCF, 0x50, 0xFF,
528                                 0x2A, 0xD9, 0x7F, 0x95, 0x1F, 0xDA, 0x9F, 0x2A,
529                                 0x2E, 0xB6, 0x54, 0x6F, 0x39, 0x68, 0x9B, 0xD3,
530                         }),
531                         bytes2big([]byte{
532                                 0xB4, 0xC4, 0xEE, 0x28, 0xCE, 0xBC, 0x6C, 0x2C,
533                                 0x8A, 0xC1, 0x29, 0x52, 0xCF, 0x37, 0xF1, 0x6A,
534                                 0xC7, 0xEF, 0xB6, 0xA9, 0xF6, 0x9F, 0x4B, 0x57,
535                                 0xFF, 0xDA, 0x2E, 0x4F, 0x0D, 0xE5, 0xAD, 0xE0,
536                                 0x38, 0xCB, 0xC2, 0xFF, 0xF7, 0x19, 0xD2, 0xC1,
537                                 0x8D, 0xE0, 0x28, 0x4B, 0x8B, 0xFE, 0xF3, 0xB5,
538                                 0x2B, 0x8C, 0xC7, 0xA5, 0xF5, 0xBF, 0x0A, 0x3C,
539                                 0x8D, 0x23, 0x19, 0xA5, 0x31, 0x25, 0x57, 0xE1,
540                         }),
541                         bytes2big([]byte{
542                                 0xE2, 0xE3, 0x1E, 0xDF, 0xC2, 0x3D, 0xE7, 0xBD,
543                                 0xEB, 0xE2, 0x41, 0xCE, 0x59, 0x3E, 0xF5, 0xDE,
544                                 0x22, 0x95, 0xB7, 0xA9, 0xCB, 0xAE, 0xF0, 0x21,
545                                 0xD3, 0x85, 0xF7, 0x07, 0x4C, 0xEA, 0x04, 0x3A,
546                                 0xA2, 0x72, 0x72, 0xA7, 0xAE, 0x60, 0x2B, 0xF2,
547                                 0xA7, 0xB9, 0x03, 0x3D, 0xB9, 0xED, 0x36, 0x10,
548                                 0xC6, 0xFB, 0x85, 0x48, 0x7E, 0xAE, 0x97, 0xAA,
549                                 0xC5, 0xBC, 0x79, 0x28, 0xC1, 0x95, 0x01, 0x48,
550                         }),
551                         bytes2big([]byte{
552                                 0xF5, 0xCE, 0x40, 0xD9, 0x5B, 0x5E, 0xB8, 0x99,
553                                 0xAB, 0xBC, 0xCF, 0xF5, 0x91, 0x1C, 0xB8, 0x57,
554                                 0x79, 0x39, 0x80, 0x4D, 0x65, 0x27, 0x37, 0x8B,
555                                 0x8C, 0x10, 0x8C, 0x3D, 0x20, 0x90, 0xFF, 0x9B,
556                                 0xE1, 0x8E, 0x2D, 0x33, 0xE3, 0x02, 0x1E, 0xD2,
557                                 0xEF, 0x32, 0xD8, 0x58, 0x22, 0x42, 0x3B, 0x63,
558                                 0x04, 0xF7, 0x26, 0xAA, 0x85, 0x4B, 0xAE, 0x07,
559                                 0xD0, 0x39, 0x6E, 0x9A, 0x9A, 0xDD, 0xC4, 0x0F,
560                         }),
561                         bigInt1,
562                         bytes2big([]byte{
563                                 0x9E, 0x4F, 0x5D, 0x8C, 0x01, 0x7D, 0x8D, 0x9F,
564                                 0x13, 0xA5, 0xCF, 0x3C, 0xDF, 0x5B, 0xFE, 0x4D,
565                                 0xAB, 0x40, 0x2D, 0x54, 0x19, 0x8E, 0x31, 0xEB,
566                                 0xDE, 0x28, 0xA0, 0x62, 0x10, 0x50, 0x43, 0x9C,
567                                 0xA6, 0xB3, 0x9E, 0x0A, 0x51, 0x5C, 0x06, 0xB3,
568                                 0x04, 0xE2, 0xCE, 0x43, 0xE7, 0x9E, 0x36, 0x9E,
569                                 0x91, 0xA0, 0xCF, 0xC2, 0xBC, 0x2A, 0x22, 0xB4,
570                                 0xCA, 0x30, 0x2D, 0xBB, 0x33, 0xEE, 0x75, 0x50,
571                         }),
572                         bigInt4,
573                 )
574                 if err != nil {
575                         panic(err)
576                 }
577                 curve.Name = "id-tc26-gost-3410-2012-512-paramSetC"
578                 return curve
579         }
580
581         CurveDefault = CurveIdGostR34102001CryptoProAParamSet
582 )