]> Cypherpunks.ru repositories - gogost.git/blob - src/cypherpunks.ru/gogost/gost3410/params.go
Simplify 34.10 curve creation from parameters
[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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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-12-512-paramSetA
340         CurveIdtc26gost341012512paramSetA func() *Curve = func() *Curve {
341                 curve, err := NewCurve(
342                         []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, 0xFF, 0xFF,
347                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
348                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
349                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
350                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC7,
351                         },
352                         []byte{
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                                 0x27, 0xE6, 0x95, 0x32, 0xF4, 0x8D, 0x89, 0x11,
358                                 0x6F, 0xF2, 0x2B, 0x8D, 0x4E, 0x05, 0x60, 0x60,
359                                 0x9B, 0x4B, 0x38, 0xAB, 0xFA, 0xD2, 0xB8, 0x5D,
360                                 0xCA, 0xCD, 0xB1, 0x41, 0x1F, 0x10, 0xB2, 0x75,
361                         },
362                         []byte{
363                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
364                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
365                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
366                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
367                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
368                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
369                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
370                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xC4,
371                         },
372                         []byte{
373                                 0xE8, 0xC2, 0x50, 0x5D, 0xED, 0xFC, 0x86, 0xDD,
374                                 0xC1, 0xBD, 0x0B, 0x2B, 0x66, 0x67, 0xF1, 0xDA,
375                                 0x34, 0xB8, 0x25, 0x74, 0x76, 0x1C, 0xB0, 0xE8,
376                                 0x79, 0xBD, 0x08, 0x1C, 0xFD, 0x0B, 0x62, 0x65,
377                                 0xEE, 0x3C, 0xB0, 0x90, 0xF3, 0x0D, 0x27, 0x61,
378                                 0x4C, 0xB4, 0x57, 0x40, 0x10, 0xDA, 0x90, 0xDD,
379                                 0x86, 0x2E, 0xF9, 0xD4, 0xEB, 0xEE, 0x47, 0x61,
380                                 0x50, 0x31, 0x90, 0x78, 0x5A, 0x71, 0xC7, 0x60,
381                         },
382                         []byte{
383                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
384                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
385                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
386                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
387                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
388                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
389                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
390                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
391                         },
392                         []byte{
393                                 0x75, 0x03, 0xCF, 0xE8, 0x7A, 0x83, 0x6A, 0xE3,
394                                 0xA6, 0x1B, 0x88, 0x16, 0xE2, 0x54, 0x50, 0xE6,
395                                 0xCE, 0x5E, 0x1C, 0x93, 0xAC, 0xF1, 0xAB, 0xC1,
396                                 0x77, 0x80, 0x64, 0xFD, 0xCB, 0xEF, 0xA9, 0x21,
397                                 0xDF, 0x16, 0x26, 0xBE, 0x4F, 0xD0, 0x36, 0xE9,
398                                 0x3D, 0x75, 0xE6, 0xA5, 0x0E, 0x3A, 0x41, 0xE9,
399                                 0x80, 0x28, 0xFE, 0x5F, 0xC2, 0x35, 0xF5, 0xB8,
400                                 0x89, 0xA5, 0x89, 0xCB, 0x52, 0x15, 0xF2, 0xA4,
401                         },
402                 )
403                 if err != nil {
404                         panic(err)
405                 }
406                 return curve
407         }
408         // id-tc26-gost-3410-12-512-paramSetB
409         CurveIdtc26gost341012512paramSetB func() *Curve = func() *Curve {
410                 curve, err := NewCurve(
411                         []byte{
412                                 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
413                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
414                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
415                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
416                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
417                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
418                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
419                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F,
420                         },
421                         []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, 0x01,
426                                 0x49, 0xA1, 0xEC, 0x14, 0x25, 0x65, 0xA5, 0x45,
427                                 0xAC, 0xFD, 0xB7, 0x7B, 0xD9, 0xD4, 0x0C, 0xFA,
428                                 0x8B, 0x99, 0x67, 0x12, 0x10, 0x1B, 0xEA, 0x0E,
429                                 0xC6, 0x34, 0x6C, 0x54, 0x37, 0x4F, 0x25, 0xBD,
430                         },
431                         []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, 0x00,
436                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
437                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
438                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
439                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C,
440                         },
441                         []byte{
442                                 0x68, 0x7D, 0x1B, 0x45, 0x9D, 0xC8, 0x41, 0x45,
443                                 0x7E, 0x3E, 0x06, 0xCF, 0x6F, 0x5E, 0x25, 0x17,
444                                 0xB9, 0x7C, 0x7D, 0x61, 0x4A, 0xF1, 0x38, 0xBC,
445                                 0xBF, 0x85, 0xDC, 0x80, 0x6C, 0x4B, 0x28, 0x9F,
446                                 0x3E, 0x96, 0x5D, 0x2D, 0xB1, 0x41, 0x6D, 0x21,
447                                 0x7F, 0x8B, 0x27, 0x6F, 0xAD, 0x1A, 0xB6, 0x9C,
448                                 0x50, 0xF7, 0x8B, 0xEE, 0x1F, 0xA3, 0x10, 0x6E,
449                                 0xFB, 0x8C, 0xCB, 0xC7, 0xC5, 0x14, 0x01, 0x16,
450                         },
451                         []byte{
452                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
453                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
454                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
455                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
456                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
457                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
458                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
459                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
460                         },
461                         []byte{
462                                 0x1A, 0x8F, 0x7E, 0xDA, 0x38, 0x9B, 0x09, 0x4C,
463                                 0x2C, 0x07, 0x1E, 0x36, 0x47, 0xA8, 0x94, 0x0F,
464                                 0x3C, 0x12, 0x3B, 0x69, 0x75, 0x78, 0xC2, 0x13,
465                                 0xBE, 0x6D, 0xD9, 0xE6, 0xC8, 0xEC, 0x73, 0x35,
466                                 0xDC, 0xB2, 0x28, 0xFD, 0x1E, 0xDF, 0x4A, 0x39,
467                                 0x15, 0x2C, 0xBC, 0xAA, 0xF8, 0xC0, 0x39, 0x88,
468                                 0x28, 0x04, 0x10, 0x55, 0xF9, 0x4C, 0xEE, 0xEC,
469                                 0x7E, 0x21, 0x34, 0x07, 0x80, 0xFE, 0x41, 0xBD,
470                         },
471                 )
472                 if err != nil {
473                         panic(err)
474                 }
475                 return curve
476         }
477
478         CurveDefault = CurveIdGostR34102001CryptoProAParamSet
479 )