]> Cypherpunks.ru repositories - gogost.git/blob - src/cypherpunks.ru/gogost/gost3410/params.go
Curve parameters aliases
[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 = CurveIdGostR34102001CryptoProAParamSet
266         // id-GostR3410-2001-CryptoPro-XchB-ParamSet
267         CurveIdGostR34102001CryptoProXchBParamSet func() *Curve = CurveIdGostR34102001CryptoProCParamSet
268         // id-tc26-gost-3410-2012-256-paramSetA
269         CurveIdtc26gost34102012256paramSetA func() *Curve = func() *Curve {
270                 curve, err := NewCurve(
271                         "id-tc26-gost-3410-2012-256-paramSetA",
272                         bytes2big([]byte{
273                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
274                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
275                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
276                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x97,
277                         }),
278                         bytes2big([]byte{
279                                 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
280                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
281                                 0x0F, 0xD8, 0xCD, 0xDF, 0xC8, 0x7B, 0x66, 0x35,
282                                 0xC1, 0x15, 0xAF, 0x55, 0x6C, 0x36, 0x0C, 0x67,
283                         }),
284                         bytes2big([]byte{
285                                 0xC2, 0x17, 0x3F, 0x15, 0x13, 0x98, 0x16, 0x73,
286                                 0xAF, 0x48, 0x92, 0xC2, 0x30, 0x35, 0xA2, 0x7C,
287                                 0xE2, 0x5E, 0x20, 0x13, 0xBF, 0x95, 0xAA, 0x33,
288                                 0xB2, 0x2C, 0x65, 0x6F, 0x27, 0x7E, 0x73, 0x35,
289                         }),
290                         bytes2big([]byte{
291                                 0x29, 0x5F, 0x9B, 0xAE, 0x74, 0x28, 0xED, 0x9C,
292                                 0xCC, 0x20, 0xE7, 0xC3, 0x59, 0xA9, 0xD4, 0x1A,
293                                 0x22, 0xFC, 0xCD, 0x91, 0x08, 0xE1, 0x7B, 0xF7,
294                                 0xBA, 0x93, 0x37, 0xA6, 0xF8, 0xAE, 0x95, 0x13,
295                         }),
296                         bytes2big([]byte{
297                                 0x91, 0xE3, 0x84, 0x43, 0xA5, 0xE8, 0x2C, 0x0D,
298                                 0x88, 0x09, 0x23, 0x42, 0x57, 0x12, 0xB2, 0xBB,
299                                 0x65, 0x8B, 0x91, 0x96, 0x93, 0x2E, 0x02, 0xC7,
300                                 0x8B, 0x25, 0x82, 0xFE, 0x74, 0x2D, 0xAA, 0x28,
301                         }),
302                         bytes2big([]byte{
303                                 0x32, 0x87, 0x94, 0x23, 0xAB, 0x1A, 0x03, 0x75,
304                                 0x89, 0x57, 0x86, 0xC4, 0xBB, 0x46, 0xE9, 0x56,
305                                 0x5F, 0xDE, 0x0B, 0x53, 0x44, 0x76, 0x67, 0x40,
306                                 0xAF, 0x26, 0x8A, 0xDB, 0x32, 0x32, 0x2E, 0x5C,
307                         }),
308                         bigInt1,
309                         bytes2big([]byte{
310                                 0x06, 0x05, 0xF6, 0xB7, 0xC1, 0x83, 0xFA, 0x81,
311                                 0x57, 0x8B, 0xC3, 0x9C, 0xFA, 0xD5, 0x18, 0x13,
312                                 0x2B, 0x9D, 0xF6, 0x28, 0x97, 0x00, 0x9A, 0xF7,
313                                 0xE5, 0x22, 0xC3, 0x2D, 0x6D, 0xC7, 0xBF, 0xFB,
314                         }),
315                 )
316                 if err != nil {
317                         panic(err)
318                 }
319                 return curve
320         }
321         // id-tc26-gost-3410-2012-256-paramSetB
322         CurveIdtc26gost34102012256paramSetB func() *Curve = CurveIdGostR34102001CryptoProAParamSet
323         // id-tc26-gost-3410-2012-256-paramSetC
324         CurveIdtc26gost34102012256paramSetC func() *Curve = CurveIdGostR34102001CryptoProBParamSet
325         // id-tc26-gost-3410-2012-256-paramSetD
326         CurveIdtc26gost34102012256paramSetD func() *Curve = CurveIdGostR34102001CryptoProCParamSet
327         // id-tc26-gost-3410-12-512-paramSetA
328         CurveIdtc26gost341012512paramSetA func() *Curve = func() *Curve {
329                 curve, err := NewCurve(
330                         "id-tc26-gost-3410-12-512-paramSetA",
331                         bytes2big([]byte{
332                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
333                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
334                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
335                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
336                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
337                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
338                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
339                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC7,
340                         }),
341                         bytes2big([]byte{
342                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
343                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
344                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
345                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
346                                 0x27, 0xE6, 0x95, 0x32, 0xF4, 0x8D, 0x89, 0x11,
347                                 0x6F, 0xF2, 0x2B, 0x8D, 0x4E, 0x05, 0x60, 0x60,
348                                 0x9B, 0x4B, 0x38, 0xAB, 0xFA, 0xD2, 0xB8, 0x5D,
349                                 0xCA, 0xCD, 0xB1, 0x41, 0x1F, 0x10, 0xB2, 0x75,
350                         }),
351                         bytes2big([]byte{
352                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
353                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
354                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
355                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
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, 0xFD, 0xC4,
360                         }),
361                         bytes2big([]byte{
362                                 0xE8, 0xC2, 0x50, 0x5D, 0xED, 0xFC, 0x86, 0xDD,
363                                 0xC1, 0xBD, 0x0B, 0x2B, 0x66, 0x67, 0xF1, 0xDA,
364                                 0x34, 0xB8, 0x25, 0x74, 0x76, 0x1C, 0xB0, 0xE8,
365                                 0x79, 0xBD, 0x08, 0x1C, 0xFD, 0x0B, 0x62, 0x65,
366                                 0xEE, 0x3C, 0xB0, 0x90, 0xF3, 0x0D, 0x27, 0x61,
367                                 0x4C, 0xB4, 0x57, 0x40, 0x10, 0xDA, 0x90, 0xDD,
368                                 0x86, 0x2E, 0xF9, 0xD4, 0xEB, 0xEE, 0x47, 0x61,
369                                 0x50, 0x31, 0x90, 0x78, 0x5A, 0x71, 0xC7, 0x60,
370                         }),
371                         bytes2big([]byte{
372                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
373                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
374                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
376                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
377                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
378                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
379                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
380                         }),
381                         bytes2big([]byte{
382                                 0x75, 0x03, 0xCF, 0xE8, 0x7A, 0x83, 0x6A, 0xE3,
383                                 0xA6, 0x1B, 0x88, 0x16, 0xE2, 0x54, 0x50, 0xE6,
384                                 0xCE, 0x5E, 0x1C, 0x93, 0xAC, 0xF1, 0xAB, 0xC1,
385                                 0x77, 0x80, 0x64, 0xFD, 0xCB, 0xEF, 0xA9, 0x21,
386                                 0xDF, 0x16, 0x26, 0xBE, 0x4F, 0xD0, 0x36, 0xE9,
387                                 0x3D, 0x75, 0xE6, 0xA5, 0x0E, 0x3A, 0x41, 0xE9,
388                                 0x80, 0x28, 0xFE, 0x5F, 0xC2, 0x35, 0xF5, 0xB8,
389                                 0x89, 0xA5, 0x89, 0xCB, 0x52, 0x15, 0xF2, 0xA4,
390                         }),
391                         nil,
392                         nil,
393                 )
394                 if err != nil {
395                         panic(err)
396                 }
397                 return curve
398         }
399         // id-tc26-gost-3410-12-512-paramSetB
400         CurveIdtc26gost341012512paramSetB func() *Curve = func() *Curve {
401                 curve, err := NewCurve(
402                         "id-tc26-gost-3410-12-512-paramSetB",
403                         bytes2big([]byte{
404                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
405                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
406                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
407                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
408                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
409                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
410                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
411                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F,
412                         }),
413                         bytes2big([]byte{
414                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
415                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
416                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
417                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
418                                 0x49, 0xA1, 0xEC, 0x14, 0x25, 0x65, 0xA5, 0x45,
419                                 0xAC, 0xFD, 0xB7, 0x7B, 0xD9, 0xD4, 0x0C, 0xFA,
420                                 0x8B, 0x99, 0x67, 0x12, 0x10, 0x1B, 0xEA, 0x0E,
421                                 0xC6, 0x34, 0x6C, 0x54, 0x37, 0x4F, 0x25, 0xBD,
422                         }),
423                         bytes2big([]byte{
424                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
425                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
426                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
427                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
428                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
429                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
430                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
431                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C,
432                         }),
433                         bytes2big([]byte{
434                                 0x68, 0x7D, 0x1B, 0x45, 0x9D, 0xC8, 0x41, 0x45,
435                                 0x7E, 0x3E, 0x06, 0xCF, 0x6F, 0x5E, 0x25, 0x17,
436                                 0xB9, 0x7C, 0x7D, 0x61, 0x4A, 0xF1, 0x38, 0xBC,
437                                 0xBF, 0x85, 0xDC, 0x80, 0x6C, 0x4B, 0x28, 0x9F,
438                                 0x3E, 0x96, 0x5D, 0x2D, 0xB1, 0x41, 0x6D, 0x21,
439                                 0x7F, 0x8B, 0x27, 0x6F, 0xAD, 0x1A, 0xB6, 0x9C,
440                                 0x50, 0xF7, 0x8B, 0xEE, 0x1F, 0xA3, 0x10, 0x6E,
441                                 0xFB, 0x8C, 0xCB, 0xC7, 0xC5, 0x14, 0x01, 0x16,
442                         }),
443                         bytes2big([]byte{
444                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
445                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
446                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
447                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
448                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
449                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
450                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
451                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
452                         }),
453                         bytes2big([]byte{
454                                 0x1A, 0x8F, 0x7E, 0xDA, 0x38, 0x9B, 0x09, 0x4C,
455                                 0x2C, 0x07, 0x1E, 0x36, 0x47, 0xA8, 0x94, 0x0F,
456                                 0x3C, 0x12, 0x3B, 0x69, 0x75, 0x78, 0xC2, 0x13,
457                                 0xBE, 0x6D, 0xD9, 0xE6, 0xC8, 0xEC, 0x73, 0x35,
458                                 0xDC, 0xB2, 0x28, 0xFD, 0x1E, 0xDF, 0x4A, 0x39,
459                                 0x15, 0x2C, 0xBC, 0xAA, 0xF8, 0xC0, 0x39, 0x88,
460                                 0x28, 0x04, 0x10, 0x55, 0xF9, 0x4C, 0xEE, 0xEC,
461                                 0x7E, 0x21, 0x34, 0x07, 0x80, 0xFE, 0x41, 0xBD,
462                         }),
463                         nil,
464                         nil,
465                 )
466                 if err != nil {
467                         panic(err)
468                 }
469                 return curve
470         }
471         // id-tc26-gost-3410-2012-512-paramSetC
472         CurveIdtc26gost34102012512paramSetC func() *Curve = func() *Curve {
473                 curve, err := NewCurve(
474                         "id-tc26-gost-3410-2012-512-paramSetC",
475                         bytes2big([]byte{
476                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
477                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
478                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
479                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
480                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
481                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
482                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
483                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC7,
484                         }),
485                         bytes2big([]byte{
486                                 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
487                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
488                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
489                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
490                                 0xC9, 0x8C, 0xDB, 0xA4, 0x65, 0x06, 0xAB, 0x00,
491                                 0x4C, 0x33, 0xA9, 0xFF, 0x51, 0x47, 0x50, 0x2C,
492                                 0xC8, 0xED, 0xA9, 0xE7, 0xA7, 0x69, 0xA1, 0x26,
493                                 0x94, 0x62, 0x3C, 0xEF, 0x47, 0xF0, 0x23, 0xED,
494                         }),
495                         bytes2big([]byte{
496                                 0xDC, 0x92, 0x03, 0xE5, 0x14, 0xA7, 0x21, 0x87,
497                                 0x54, 0x85, 0xA5, 0x29, 0xD2, 0xC7, 0x22, 0xFB,
498                                 0x18, 0x7B, 0xC8, 0x98, 0x0E, 0xB8, 0x66, 0x64,
499                                 0x4D, 0xE4, 0x1C, 0x68, 0xE1, 0x43, 0x06, 0x45,
500                                 0x46, 0xE8, 0x61, 0xC0, 0xE2, 0xC9, 0xED, 0xD9,
501                                 0x2A, 0xDE, 0x71, 0xF4, 0x6F, 0xCF, 0x50, 0xFF,
502                                 0x2A, 0xD9, 0x7F, 0x95, 0x1F, 0xDA, 0x9F, 0x2A,
503                                 0x2E, 0xB6, 0x54, 0x6F, 0x39, 0x68, 0x9B, 0xD3,
504                         }),
505                         bytes2big([]byte{
506                                 0xB4, 0xC4, 0xEE, 0x28, 0xCE, 0xBC, 0x6C, 0x2C,
507                                 0x8A, 0xC1, 0x29, 0x52, 0xCF, 0x37, 0xF1, 0x6A,
508                                 0xC7, 0xEF, 0xB6, 0xA9, 0xF6, 0x9F, 0x4B, 0x57,
509                                 0xFF, 0xDA, 0x2E, 0x4F, 0x0D, 0xE5, 0xAD, 0xE0,
510                                 0x38, 0xCB, 0xC2, 0xFF, 0xF7, 0x19, 0xD2, 0xC1,
511                                 0x8D, 0xE0, 0x28, 0x4B, 0x8B, 0xFE, 0xF3, 0xB5,
512                                 0x2B, 0x8C, 0xC7, 0xA5, 0xF5, 0xBF, 0x0A, 0x3C,
513                                 0x8D, 0x23, 0x19, 0xA5, 0x31, 0x25, 0x57, 0xE1,
514                         }),
515                         bytes2big([]byte{
516                                 0xE2, 0xE3, 0x1E, 0xDF, 0xC2, 0x3D, 0xE7, 0xBD,
517                                 0xEB, 0xE2, 0x41, 0xCE, 0x59, 0x3E, 0xF5, 0xDE,
518                                 0x22, 0x95, 0xB7, 0xA9, 0xCB, 0xAE, 0xF0, 0x21,
519                                 0xD3, 0x85, 0xF7, 0x07, 0x4C, 0xEA, 0x04, 0x3A,
520                                 0xA2, 0x72, 0x72, 0xA7, 0xAE, 0x60, 0x2B, 0xF2,
521                                 0xA7, 0xB9, 0x03, 0x3D, 0xB9, 0xED, 0x36, 0x10,
522                                 0xC6, 0xFB, 0x85, 0x48, 0x7E, 0xAE, 0x97, 0xAA,
523                                 0xC5, 0xBC, 0x79, 0x28, 0xC1, 0x95, 0x01, 0x48,
524                         }),
525                         bytes2big([]byte{
526                                 0xF5, 0xCE, 0x40, 0xD9, 0x5B, 0x5E, 0xB8, 0x99,
527                                 0xAB, 0xBC, 0xCF, 0xF5, 0x91, 0x1C, 0xB8, 0x57,
528                                 0x79, 0x39, 0x80, 0x4D, 0x65, 0x27, 0x37, 0x8B,
529                                 0x8C, 0x10, 0x8C, 0x3D, 0x20, 0x90, 0xFF, 0x9B,
530                                 0xE1, 0x8E, 0x2D, 0x33, 0xE3, 0x02, 0x1E, 0xD2,
531                                 0xEF, 0x32, 0xD8, 0x58, 0x22, 0x42, 0x3B, 0x63,
532                                 0x04, 0xF7, 0x26, 0xAA, 0x85, 0x4B, 0xAE, 0x07,
533                                 0xD0, 0x39, 0x6E, 0x9A, 0x9A, 0xDD, 0xC4, 0x0F,
534                         }),
535                         bigInt1,
536                         bytes2big([]byte{
537                                 0x9E, 0x4F, 0x5D, 0x8C, 0x01, 0x7D, 0x8D, 0x9F,
538                                 0x13, 0xA5, 0xCF, 0x3C, 0xDF, 0x5B, 0xFE, 0x4D,
539                                 0xAB, 0x40, 0x2D, 0x54, 0x19, 0x8E, 0x31, 0xEB,
540                                 0xDE, 0x28, 0xA0, 0x62, 0x10, 0x50, 0x43, 0x9C,
541                                 0xA6, 0xB3, 0x9E, 0x0A, 0x51, 0x5C, 0x06, 0xB3,
542                                 0x04, 0xE2, 0xCE, 0x43, 0xE7, 0x9E, 0x36, 0x9E,
543                                 0x91, 0xA0, 0xCF, 0xC2, 0xBC, 0x2A, 0x22, 0xB4,
544                                 0xCA, 0x30, 0x2D, 0xBB, 0x33, 0xEE, 0x75, 0x50,
545                         }),
546                 )
547                 if err != nil {
548                         panic(err)
549                 }
550                 return curve
551         }
552
553         CurveDefault = CurveIdGostR34102001CryptoProAParamSet
554 )