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