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