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