]> 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-2020 Sergey Matveev <stargrave@stargrave.org>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, version 3 of the License.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 package gost3410
17
18 type Mode int
19
20 var (
21         Mode2001 Mode = Mode(32)
22         Mode2012 Mode = Mode(64)
23
24         CurveGostR34102001ParamSetcc func() *Curve = func() *Curve {
25                 curve, err := NewCurve(
26                         bytes2big([]byte{
27                                 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
29                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC7,
31                         }),
32                         bytes2big([]byte{
33                                 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34                                 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35                                 0x60, 0x61, 0x17, 0xa2, 0xf4, 0xbd, 0xe4, 0x28,
36                                 0xb7, 0x45, 0x8a, 0x54, 0xb6, 0xe8, 0x7b, 0x85,
37                         }),
38                         bytes2big([]byte{
39                                 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
41                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
42                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc4,
43                         }),
44                         bytes2big([]byte{
45                                 0x2d, 0x06, 0xB4, 0x26, 0x5e, 0xbc, 0x74, 0x9f,
46                                 0xf7, 0xd0, 0xf1, 0xf1, 0xf8, 0x82, 0x32, 0xe8,
47                                 0x16, 0x32, 0xe9, 0x08, 0x8f, 0xd4, 0x4b, 0x77,
48                                 0x87, 0xd5, 0xe4, 0x07, 0xe9, 0x55, 0x08, 0x0c,
49                         }),
50                         bytes2big([]byte{
51                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
55                         }),
56                         bytes2big([]byte{
57                                 0xa2, 0x0e, 0x03, 0x4b, 0xf8, 0x81, 0x3e, 0xf5,
58                                 0xc1, 0x8d, 0x01, 0x10, 0x5e, 0x72, 0x6a, 0x17,
59                                 0xeb, 0x24, 0x8b, 0x26, 0x4a, 0xe9, 0x70, 0x6f,
60                                 0x44, 0x0b, 0xed, 0xc8, 0xcc, 0xb6, 0xb2, 0x2c,
61                         }),
62                         nil,
63                         nil,
64                 )
65                 if err != nil {
66                         panic(err)
67                 }
68                 curve.Name = "GostR34102001ParamSetcc"
69                 return curve
70         }
71         // id-GostR3410-2001-TestParamSet
72         CurveIdGostR34102001TestParamSet func() *Curve = func() *Curve {
73                 curve, err := NewCurve(
74                         bytes2big([]byte{
75                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x31,
79                         }),
80                         bytes2big([]byte{
81                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
83                                 0x50, 0xFE, 0x8A, 0x18, 0x92, 0x97, 0x61, 0x54,
84                                 0xC5, 0x9C, 0xFC, 0x19, 0x3A, 0xCC, 0xF5, 0xB3,
85                         }),
86                         bytes2big([]byte{
87                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0x07,
91                         }),
92                         bytes2big([]byte{
93                                 0x5F, 0xBF, 0xF4, 0x98, 0xAA, 0x93, 0x8C, 0xE7,
94                                 0x39, 0xB8, 0xE0, 0x22, 0xFB, 0xAF, 0xEF, 0x40,
95                                 0x56, 0x3F, 0x6E, 0x6A, 0x34, 0x72, 0xFC, 0x2A,
96                                 0x51, 0x4C, 0x0C, 0xE9, 0xDA, 0xE2, 0x3B, 0x7E,
97                         }),
98                         bytes2big([]byte{
99                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0x02,
103                         }),
104                         bytes2big([]byte{
105                                 0x08, 0xE2, 0xA8, 0xA0, 0xE6, 0x51, 0x47, 0xD4,
106                                 0xBD, 0x63, 0x16, 0x03, 0x0E, 0x16, 0xD1, 0x9C,
107                                 0x85, 0xC9, 0x7F, 0x0A, 0x9C, 0xA2, 0x67, 0x12,
108                                 0x2B, 0x96, 0xAB, 0xBC, 0xEA, 0x7E, 0x8F, 0xC8,
109                         }),
110                         nil,
111                         nil,
112                 )
113                 if err != nil {
114                         panic(err)
115                 }
116                 curve.Name = "id-GostR3410-2001-TestParamSet"
117                 return curve
118         }
119         // id-GostR3410-2001-CryptoPro-A-ParamSet
120         CurveIdGostR34102001CryptoProAParamSet func() *Curve = func() *Curve {
121                 curve, err := NewCurve(
122                         bytes2big([]byte{
123                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
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, 0xFD, 0x97,
127                         }),
128                         bytes2big([]byte{
129                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
130                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
131                                 0x6C, 0x61, 0x10, 0x70, 0x99, 0x5A, 0xD1, 0x00,
132                                 0x45, 0x84, 0x1B, 0x09, 0xB7, 0x61, 0xB8, 0x93,
133                         }),
134                         bytes2big([]byte{
135                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
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, 0xFD, 0x94,
139                         }),
140                         bytes2big([]byte{
141                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0xa6,
145                         }),
146                         bytes2big([]byte{
147                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0x01,
151                         }),
152                         bytes2big([]byte{
153                                 0x8D, 0x91, 0xE4, 0x71, 0xE0, 0x98, 0x9C, 0xDA,
154                                 0x27, 0xDF, 0x50, 0x5A, 0x45, 0x3F, 0x2B, 0x76,
155                                 0x35, 0x29, 0x4F, 0x2D, 0xDF, 0x23, 0xE3, 0xB1,
156                                 0x22, 0xAC, 0xC9, 0x9C, 0x9E, 0x9F, 0x1E, 0x14,
157                         }),
158                         nil,
159                         nil,
160                 )
161                 if err != nil {
162                         panic(err)
163                 }
164                 curve.Name = "id-GostR3410-2001-CryptoPro-A-ParamSet"
165                 return curve
166         }
167         // id-GostR3410-2001-CryptoPro-B-ParamSet
168         CurveIdGostR34102001CryptoProBParamSet func() *Curve = func() *Curve {
169                 curve, err := NewCurve(
170                         bytes2big([]byte{
171                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
172                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x99,
175                         }),
176                         bytes2big([]byte{
177                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
178                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
179                                 0x5F, 0x70, 0x0C, 0xFF, 0xF1, 0xA6, 0x24, 0xE5,
180                                 0xE4, 0x97, 0x16, 0x1B, 0xCC, 0x8A, 0x19, 0x8F,
181                         }),
182                         bytes2big([]byte{
183                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
184                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x96,
187                         }),
188                         bytes2big([]byte{
189                                 0x3E, 0x1A, 0xF4, 0x19, 0xA2, 0x69, 0xA5, 0xF8,
190                                 0x66, 0xA7, 0xD3, 0xC2, 0x5C, 0x3D, 0xF8, 0x0A,
191                                 0xE9, 0x79, 0x25, 0x93, 0x73, 0xFF, 0x2B, 0x18,
192                                 0x2F, 0x49, 0xD4, 0xCE, 0x7E, 0x1B, 0xBC, 0x8B,
193                         }),
194                         bytes2big([]byte{
195                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0x01,
199                         }),
200                         bytes2big([]byte{
201                                 0x3F, 0xA8, 0x12, 0x43, 0x59, 0xF9, 0x66, 0x80,
202                                 0xB8, 0x3D, 0x1C, 0x3E, 0xB2, 0xC0, 0x70, 0xE5,
203                                 0xC5, 0x45, 0xC9, 0x85, 0x8D, 0x03, 0xEC, 0xFB,
204                                 0x74, 0x4B, 0xF8, 0xD7, 0x17, 0x71, 0x7E, 0xFC,
205                         }),
206                         nil,
207                         nil,
208                 )
209                 if err != nil {
210                         panic(err)
211                 }
212                 curve.Name = "id-GostR3410-2001-CryptoPro-B-ParamSet"
213                 return curve
214         }
215         // id-GostR3410-2001-CryptoPro-C-ParamSet
216         CurveIdGostR34102001CryptoProCParamSet func() *Curve = func() *Curve {
217                 curve, err := NewCurve(
218                         bytes2big([]byte{
219                                 0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
220                                 0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
221                                 0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
222                                 0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x9B,
223                         }),
224                         bytes2big([]byte{
225                                 0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
226                                 0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
227                                 0x58, 0x2C, 0xA3, 0x51, 0x1E, 0xDD, 0xFB, 0x74,
228                                 0xF0, 0x2F, 0x3A, 0x65, 0x98, 0x98, 0x0B, 0xB9,
229                         }),
230                         bytes2big([]byte{
231                                 0x9B, 0x9F, 0x60, 0x5F, 0x5A, 0x85, 0x81, 0x07,
232                                 0xAB, 0x1E, 0xC8, 0x5E, 0x6B, 0x41, 0xC8, 0xAA,
233                                 0xCF, 0x84, 0x6E, 0x86, 0x78, 0x90, 0x51, 0xD3,
234                                 0x79, 0x98, 0xF7, 0xB9, 0x02, 0x2D, 0x75, 0x98,
235                         }),
236                         bytes2big([]byte{
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, 0x00, 0x00,
240                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5a,
241                         }),
242                         bytes2big([]byte{
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                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
247                         }),
248                         bytes2big([]byte{
249                                 0x41, 0xEC, 0xE5, 0x57, 0x43, 0x71, 0x1A, 0x8C,
250                                 0x3C, 0xBF, 0x37, 0x83, 0xCD, 0x08, 0xC0, 0xEE,
251                                 0x4D, 0x4D, 0xC4, 0x40, 0xD4, 0x64, 0x1A, 0x8F,
252                                 0x36, 0x6E, 0x55, 0x0D, 0xFD, 0xB3, 0xBB, 0x67,
253                         }),
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                 )
322                 if err != nil {
323                         panic(err)
324                 }
325                 curve.Name = "id-tc26-gost-3410-2012-256-paramSetA"
326                 return curve
327         }
328         // id-tc26-gost-3410-2012-256-paramSetB
329         CurveIdtc26gost34102012256paramSetB func() *Curve = func() *Curve {
330                 c := CurveIdGostR34102001CryptoProAParamSet()
331                 c.Name = "id-tc26-gost-3410-2012-256-paramSetB"
332                 return c
333         }
334         // id-tc26-gost-3410-2012-256-paramSetC
335         CurveIdtc26gost34102012256paramSetC func() *Curve = func() *Curve {
336                 c := CurveIdGostR34102001CryptoProBParamSet()
337                 c.Name = "id-tc26-gost-3410-2012-256-paramSetC"
338                 return c
339         }
340         // id-tc26-gost-3410-2012-256-paramSetD
341         CurveIdtc26gost34102012256paramSetD func() *Curve = func() *Curve {
342                 c := CurveIdGostR34102001CryptoProCParamSet()
343                 c.Name = "id-tc26-gost-3410-2012-256-paramSetD"
344                 return c
345         }
346         // id-tc26-gost-3410-12-512-paramSetA
347         CurveIdtc26gost341012512paramSetA func() *Curve = func() *Curve {
348                 curve, err := NewCurve(
349                         bytes2big([]byte{
350                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
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, 0xFD, 0xC7,
358                         }),
359                         bytes2big([]byte{
360                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
361                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
362                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
363                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
364                                 0x27, 0xE6, 0x95, 0x32, 0xF4, 0x8D, 0x89, 0x11,
365                                 0x6F, 0xF2, 0x2B, 0x8D, 0x4E, 0x05, 0x60, 0x60,
366                                 0x9B, 0x4B, 0x38, 0xAB, 0xFA, 0xD2, 0xB8, 0x5D,
367                                 0xCA, 0xCD, 0xB1, 0x41, 0x1F, 0x10, 0xB2, 0x75,
368                         }),
369                         bytes2big([]byte{
370                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
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, 0xFD, 0xC4,
378                         }),
379                         bytes2big([]byte{
380                                 0xE8, 0xC2, 0x50, 0x5D, 0xED, 0xFC, 0x86, 0xDD,
381                                 0xC1, 0xBD, 0x0B, 0x2B, 0x66, 0x67, 0xF1, 0xDA,
382                                 0x34, 0xB8, 0x25, 0x74, 0x76, 0x1C, 0xB0, 0xE8,
383                                 0x79, 0xBD, 0x08, 0x1C, 0xFD, 0x0B, 0x62, 0x65,
384                                 0xEE, 0x3C, 0xB0, 0x90, 0xF3, 0x0D, 0x27, 0x61,
385                                 0x4C, 0xB4, 0x57, 0x40, 0x10, 0xDA, 0x90, 0xDD,
386                                 0x86, 0x2E, 0xF9, 0xD4, 0xEB, 0xEE, 0x47, 0x61,
387                                 0x50, 0x31, 0x90, 0x78, 0x5A, 0x71, 0xC7, 0x60,
388                         }),
389                         bytes2big([]byte{
390                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0x03,
398                         }),
399                         bytes2big([]byte{
400                                 0x75, 0x03, 0xCF, 0xE8, 0x7A, 0x83, 0x6A, 0xE3,
401                                 0xA6, 0x1B, 0x88, 0x16, 0xE2, 0x54, 0x50, 0xE6,
402                                 0xCE, 0x5E, 0x1C, 0x93, 0xAC, 0xF1, 0xAB, 0xC1,
403                                 0x77, 0x80, 0x64, 0xFD, 0xCB, 0xEF, 0xA9, 0x21,
404                                 0xDF, 0x16, 0x26, 0xBE, 0x4F, 0xD0, 0x36, 0xE9,
405                                 0x3D, 0x75, 0xE6, 0xA5, 0x0E, 0x3A, 0x41, 0xE9,
406                                 0x80, 0x28, 0xFE, 0x5F, 0xC2, 0x35, 0xF5, 0xB8,
407                                 0x89, 0xA5, 0x89, 0xCB, 0x52, 0x15, 0xF2, 0xA4,
408                         }),
409                         nil,
410                         nil,
411                 )
412                 if err != nil {
413                         panic(err)
414                 }
415                 curve.Name = "id-tc26-gost-3410-12-512-paramSetA"
416                 return curve
417         }
418         // id-tc26-gost-3410-12-512-paramSetB
419         CurveIdtc26gost341012512paramSetB func() *Curve = func() *Curve {
420                 curve, err := NewCurve(
421                         bytes2big([]byte{
422                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
423                                 0x00, 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, 0x6F,
430                         }),
431                         bytes2big([]byte{
432                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
433                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
434                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
435                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
436                                 0x49, 0xA1, 0xEC, 0x14, 0x25, 0x65, 0xA5, 0x45,
437                                 0xAC, 0xFD, 0xB7, 0x7B, 0xD9, 0xD4, 0x0C, 0xFA,
438                                 0x8B, 0x99, 0x67, 0x12, 0x10, 0x1B, 0xEA, 0x0E,
439                                 0xC6, 0x34, 0x6C, 0x54, 0x37, 0x4F, 0x25, 0xBD,
440                         }),
441                         bytes2big([]byte{
442                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
443                                 0x00, 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, 0x6C,
450                         }),
451                         bytes2big([]byte{
452                                 0x68, 0x7D, 0x1B, 0x45, 0x9D, 0xC8, 0x41, 0x45,
453                                 0x7E, 0x3E, 0x06, 0xCF, 0x6F, 0x5E, 0x25, 0x17,
454                                 0xB9, 0x7C, 0x7D, 0x61, 0x4A, 0xF1, 0x38, 0xBC,
455                                 0xBF, 0x85, 0xDC, 0x80, 0x6C, 0x4B, 0x28, 0x9F,
456                                 0x3E, 0x96, 0x5D, 0x2D, 0xB1, 0x41, 0x6D, 0x21,
457                                 0x7F, 0x8B, 0x27, 0x6F, 0xAD, 0x1A, 0xB6, 0x9C,
458                                 0x50, 0xF7, 0x8B, 0xEE, 0x1F, 0xA3, 0x10, 0x6E,
459                                 0xFB, 0x8C, 0xCB, 0xC7, 0xC5, 0x14, 0x01, 0x16,
460                         }),
461                         bytes2big([]byte{
462                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
463                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
464                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
465                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02,
470                         }),
471                         bytes2big([]byte{
472                                 0x1A, 0x8F, 0x7E, 0xDA, 0x38, 0x9B, 0x09, 0x4C,
473                                 0x2C, 0x07, 0x1E, 0x36, 0x47, 0xA8, 0x94, 0x0F,
474                                 0x3C, 0x12, 0x3B, 0x69, 0x75, 0x78, 0xC2, 0x13,
475                                 0xBE, 0x6D, 0xD9, 0xE6, 0xC8, 0xEC, 0x73, 0x35,
476                                 0xDC, 0xB2, 0x28, 0xFD, 0x1E, 0xDF, 0x4A, 0x39,
477                                 0x15, 0x2C, 0xBC, 0xAA, 0xF8, 0xC0, 0x39, 0x88,
478                                 0x28, 0x04, 0x10, 0x55, 0xF9, 0x4C, 0xEE, 0xEC,
479                                 0x7E, 0x21, 0x34, 0x07, 0x80, 0xFE, 0x41, 0xBD,
480                         }),
481                         nil,
482                         nil,
483                 )
484                 if err != nil {
485                         panic(err)
486                 }
487                 curve.Name = "id-tc26-gost-3410-12-512-paramSetB"
488                 return curve
489         }
490         // id-tc26-gost-3410-2012-512-paramSetC
491         CurveIdtc26gost34102012512paramSetC func() *Curve = func() *Curve {
492                 curve, err := NewCurve(
493                         bytes2big([]byte{
494                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
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, 0xFD, 0xC7,
502                         }),
503                         bytes2big([]byte{
504                                 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
505                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
506                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
507                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
508                                 0xC9, 0x8C, 0xDB, 0xA4, 0x65, 0x06, 0xAB, 0x00,
509                                 0x4C, 0x33, 0xA9, 0xFF, 0x51, 0x47, 0x50, 0x2C,
510                                 0xC8, 0xED, 0xA9, 0xE7, 0xA7, 0x69, 0xA1, 0x26,
511                                 0x94, 0x62, 0x3C, 0xEF, 0x47, 0xF0, 0x23, 0xED,
512                         }),
513                         bytes2big([]byte{
514                                 0xDC, 0x92, 0x03, 0xE5, 0x14, 0xA7, 0x21, 0x87,
515                                 0x54, 0x85, 0xA5, 0x29, 0xD2, 0xC7, 0x22, 0xFB,
516                                 0x18, 0x7B, 0xC8, 0x98, 0x0E, 0xB8, 0x66, 0x64,
517                                 0x4D, 0xE4, 0x1C, 0x68, 0xE1, 0x43, 0x06, 0x45,
518                                 0x46, 0xE8, 0x61, 0xC0, 0xE2, 0xC9, 0xED, 0xD9,
519                                 0x2A, 0xDE, 0x71, 0xF4, 0x6F, 0xCF, 0x50, 0xFF,
520                                 0x2A, 0xD9, 0x7F, 0x95, 0x1F, 0xDA, 0x9F, 0x2A,
521                                 0x2E, 0xB6, 0x54, 0x6F, 0x39, 0x68, 0x9B, 0xD3,
522                         }),
523                         bytes2big([]byte{
524                                 0xB4, 0xC4, 0xEE, 0x28, 0xCE, 0xBC, 0x6C, 0x2C,
525                                 0x8A, 0xC1, 0x29, 0x52, 0xCF, 0x37, 0xF1, 0x6A,
526                                 0xC7, 0xEF, 0xB6, 0xA9, 0xF6, 0x9F, 0x4B, 0x57,
527                                 0xFF, 0xDA, 0x2E, 0x4F, 0x0D, 0xE5, 0xAD, 0xE0,
528                                 0x38, 0xCB, 0xC2, 0xFF, 0xF7, 0x19, 0xD2, 0xC1,
529                                 0x8D, 0xE0, 0x28, 0x4B, 0x8B, 0xFE, 0xF3, 0xB5,
530                                 0x2B, 0x8C, 0xC7, 0xA5, 0xF5, 0xBF, 0x0A, 0x3C,
531                                 0x8D, 0x23, 0x19, 0xA5, 0x31, 0x25, 0x57, 0xE1,
532                         }),
533                         bytes2big([]byte{
534                                 0xE2, 0xE3, 0x1E, 0xDF, 0xC2, 0x3D, 0xE7, 0xBD,
535                                 0xEB, 0xE2, 0x41, 0xCE, 0x59, 0x3E, 0xF5, 0xDE,
536                                 0x22, 0x95, 0xB7, 0xA9, 0xCB, 0xAE, 0xF0, 0x21,
537                                 0xD3, 0x85, 0xF7, 0x07, 0x4C, 0xEA, 0x04, 0x3A,
538                                 0xA2, 0x72, 0x72, 0xA7, 0xAE, 0x60, 0x2B, 0xF2,
539                                 0xA7, 0xB9, 0x03, 0x3D, 0xB9, 0xED, 0x36, 0x10,
540                                 0xC6, 0xFB, 0x85, 0x48, 0x7E, 0xAE, 0x97, 0xAA,
541                                 0xC5, 0xBC, 0x79, 0x28, 0xC1, 0x95, 0x01, 0x48,
542                         }),
543                         bytes2big([]byte{
544                                 0xF5, 0xCE, 0x40, 0xD9, 0x5B, 0x5E, 0xB8, 0x99,
545                                 0xAB, 0xBC, 0xCF, 0xF5, 0x91, 0x1C, 0xB8, 0x57,
546                                 0x79, 0x39, 0x80, 0x4D, 0x65, 0x27, 0x37, 0x8B,
547                                 0x8C, 0x10, 0x8C, 0x3D, 0x20, 0x90, 0xFF, 0x9B,
548                                 0xE1, 0x8E, 0x2D, 0x33, 0xE3, 0x02, 0x1E, 0xD2,
549                                 0xEF, 0x32, 0xD8, 0x58, 0x22, 0x42, 0x3B, 0x63,
550                                 0x04, 0xF7, 0x26, 0xAA, 0x85, 0x4B, 0xAE, 0x07,
551                                 0xD0, 0x39, 0x6E, 0x9A, 0x9A, 0xDD, 0xC4, 0x0F,
552                         }),
553                         bigInt1,
554                         bytes2big([]byte{
555                                 0x9E, 0x4F, 0x5D, 0x8C, 0x01, 0x7D, 0x8D, 0x9F,
556                                 0x13, 0xA5, 0xCF, 0x3C, 0xDF, 0x5B, 0xFE, 0x4D,
557                                 0xAB, 0x40, 0x2D, 0x54, 0x19, 0x8E, 0x31, 0xEB,
558                                 0xDE, 0x28, 0xA0, 0x62, 0x10, 0x50, 0x43, 0x9C,
559                                 0xA6, 0xB3, 0x9E, 0x0A, 0x51, 0x5C, 0x06, 0xB3,
560                                 0x04, 0xE2, 0xCE, 0x43, 0xE7, 0x9E, 0x36, 0x9E,
561                                 0x91, 0xA0, 0xCF, 0xC2, 0xBC, 0x2A, 0x22, 0xB4,
562                                 0xCA, 0x30, 0x2D, 0xBB, 0x33, 0xEE, 0x75, 0x50,
563                         }),
564                 )
565                 if err != nil {
566                         panic(err)
567                 }
568                 curve.Name = "id-tc26-gost-3410-2012-512-paramSetC"
569                 return curve
570         }
571
572         CurveDefault = CurveIdGostR34102001CryptoProAParamSet
573 )