]> Cypherpunks.ru repositories - gogost.git/blob - src/cypherpunks.ru/gogost/gost3410/params.go
Twisted Edwards curve 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-2012-256-paramSetA
340         CurveIdtc26gost34102012256paramSetA 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, 0xFD, 0x97,
347                         },
348                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                         []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                 if err != nil {
587                         panic(err)
588                 }
589                 return curve
590         }
591
592         CurveDefault = CurveIdGostR34102001CryptoProAParamSet
593 )