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