new ecc tests + ECC.pm cosmetics
Karel Miko
9 years ago
15 | 15 | |
16 | 16 | our %curve = ( |
17 | 17 | ### http://www.ecc-brainpool.org/download/Domain-parameters.pdf (v1.0 19.10.2005) |
18 | brainpoolP160r1 => { | |
18 | brainpoolp160r1 => { | |
19 | oid => '1.3.36.3.3.2.8.1.1.1', | |
19 | 20 | prime => "E95E4A5F737059DC60DFC7AD95B3D8139515620F", |
20 | 21 | A => "340E7BE2A280EB74E2BE61BADA745D97E8F7C300", |
21 | 22 | B => "1E589A8595423412134FAA2DBDEC95C8D8675E58", |
24 | 25 | order => "E95E4A5F737059DC60DF5991D45029409E60FC09", |
25 | 26 | cofactor => 1, |
26 | 27 | }, |
27 | brainpoolP192r1 => { | |
28 | brainpoolp192r1 => { | |
29 | oid => '1.3.36.3.3.2.8.1.1.3', | |
28 | 30 | prime => "C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297", |
29 | 31 | A => "6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF", |
30 | 32 | B => "469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9", |
33 | 35 | order => "C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1", |
34 | 36 | cofactor => 1, |
35 | 37 | }, |
36 | brainpoolP224r1 => { | |
38 | brainpoolp224r1 => { | |
39 | oid => '1.3.36.3.3.2.8.1.1.5', | |
37 | 40 | prime => "D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF", |
38 | 41 | A => "68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43", |
39 | 42 | B => "2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B", |
42 | 45 | order => "D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F", |
43 | 46 | cofactor => 1, |
44 | 47 | }, |
45 | brainpoolP256r1 => { | |
48 | brainpoolp256r1 => { | |
49 | oid => '1.3.36.3.3.2.8.1.1.7', | |
46 | 50 | prime => "A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", |
47 | 51 | A => "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", |
48 | 52 | B => "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", |
51 | 55 | order => "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7", |
52 | 56 | cofactor => 1, |
53 | 57 | }, |
54 | brainpoolP320r1 => { | |
58 | brainpoolp320r1 => { | |
59 | oid => '1.3.36.3.3.2.8.1.1.9', | |
55 | 60 | prime => "D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27", |
56 | 61 | A => "3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4", |
57 | 62 | B => "520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6", |
60 | 65 | order => "D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311", |
61 | 66 | cofactor => 1, |
62 | 67 | }, |
63 | brainpoolP384r1 => { | |
68 | brainpoolp384r1 => { | |
69 | oid => '1.3.36.3.3.2.8.1.1.11', | |
64 | 70 | prime => "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53", |
65 | 71 | A => "7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826", |
66 | 72 | B => "04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11", |
69 | 75 | order => "8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565", |
70 | 76 | cofactor => 1, |
71 | 77 | }, |
72 | brainpoolP512r1 => { | |
78 | brainpoolp512r1 => { | |
79 | oid => '1.3.36.3.3.2.8.1.1.13', | |
73 | 80 | prime => "AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3", |
74 | 81 | A => "7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA", |
75 | 82 | B => "3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723", |
80 | 87 | }, |
81 | 88 | ### http://www.secg.org/collateral/sec2_final.pdf (September 20, 2000 - Version 1.0) |
82 | 89 | secp112r1 => { |
90 | oid => '1.3.132.0.6', | |
83 | 91 | prime => "DB7C2ABF62E35E668076BEAD208B", |
84 | 92 | A => "DB7C2ABF62E35E668076BEAD2088", |
85 | 93 | B => "659EF8BA043916EEDE8911702B22", |
89 | 97 | cofactor => 1, |
90 | 98 | }, |
91 | 99 | secp112r2 => { |
100 | oid => '1.3.132.0.7', | |
92 | 101 | prime => "DB7C2ABF62E35E668076BEAD208B", |
93 | 102 | A => "6127C24C05F38A0AAAF65C0EF02C", |
94 | 103 | B => "51DEF1815DB5ED74FCC34C85D709", |
98 | 107 | cofactor => 4, |
99 | 108 | }, |
100 | 109 | secp128r1 => { |
110 | oid => '1.3.132.0.28', | |
101 | 111 | prime => "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", |
102 | 112 | A => "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", |
103 | 113 | B => "E87579C11079F43DD824993C2CEE5ED3", |
107 | 117 | cofactor => 1, |
108 | 118 | }, |
109 | 119 | secp128r2 => { |
120 | oid => '1.3.132.0.29', | |
110 | 121 | prime => "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", |
111 | 122 | A => "D6031998D1B3BBFEBF59CC9BBFF9AEE1", |
112 | 123 | B => "5EEEFCA380D02919DC2C6558BB6D8A5D", |
116 | 127 | cofactor => 4, |
117 | 128 | }, |
118 | 129 | secp160k1 => { |
130 | oid => '1.3.132.0.9', | |
119 | 131 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", |
120 | 132 | A => "0000000000000000000000000000000000000000", |
121 | 133 | B => "0000000000000000000000000000000000000007", |
125 | 137 | cofactor => 1, |
126 | 138 | }, |
127 | 139 | secp160r1 => { |
140 | oid => '1.3.132.0.8', | |
128 | 141 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", |
129 | 142 | A => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", |
130 | 143 | B => "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", |
134 | 147 | cofactor => 1, |
135 | 148 | }, |
136 | 149 | secp160r2 => { |
150 | oid => '1.3.132.0.30', | |
137 | 151 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", |
138 | 152 | A => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70", |
139 | 153 | B => "B4E134D3FB59EB8BAB57274904664D5AF50388BA", |
143 | 157 | cofactor => 1, |
144 | 158 | }, |
145 | 159 | secp192k1 => { |
160 | oid => '1.3.132.0.31', | |
146 | 161 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", |
147 | 162 | A => "000000000000000000000000000000000000000000000000", |
148 | 163 | B => "000000000000000000000000000000000000000000000003", |
151 | 166 | order => "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", |
152 | 167 | cofactor => 1, |
153 | 168 | }, |
154 | secp192r1 => { | |
169 | secp192r1 => { # == NIST P-192, X9.62 prime192v1 | |
170 | oid => '1.2.840.10045.3.1.1', | |
155 | 171 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", |
156 | 172 | A => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", |
157 | 173 | B => "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", |
161 | 177 | cofactor => 1, |
162 | 178 | }, |
163 | 179 | secp224k1 => { |
180 | oid => '1.3.132.0.32', | |
164 | 181 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", |
165 | 182 | A => "00000000000000000000000000000000000000000000000000000000", |
166 | 183 | B => "00000000000000000000000000000000000000000000000000000005", |
169 | 186 | order => "010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", |
170 | 187 | cofactor => 1, |
171 | 188 | }, |
172 | secp224r1 => { | |
189 | secp224r1 => { # == NIST P-224 | |
190 | oid => '1.3.132.0.33', | |
173 | 191 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", |
174 | 192 | A => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", |
175 | 193 | B => "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", |
179 | 197 | cofactor => 1, |
180 | 198 | }, |
181 | 199 | secp256k1 => { |
200 | oid => '1.3.132.0.10', | |
182 | 201 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", |
183 | 202 | A => "0000000000000000000000000000000000000000000000000000000000000000", |
184 | 203 | B => "0000000000000000000000000000000000000000000000000000000000000007", |
187 | 206 | order => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", |
188 | 207 | cofactor => 1, |
189 | 208 | }, |
190 | secp256r1 => { | |
209 | secp256r1 => { # == NIST P-256, X9.62 prime256v1 | |
210 | oid => '1.2.840.10045.3.1.7', | |
191 | 211 | prime => "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", |
192 | 212 | A => "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", |
193 | 213 | B => "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", |
196 | 216 | order => "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", |
197 | 217 | cofactor => 1, |
198 | 218 | }, |
199 | secp384r1 => { | |
219 | secp384r1 => { # == NIST P-384 | |
220 | oid => '1.3.132.0.34', | |
200 | 221 | prime => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", |
201 | 222 | A => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", |
202 | 223 | B => "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", |
205 | 226 | order => "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", |
206 | 227 | cofactor => 1, |
207 | 228 | }, |
208 | secp521r1 => { | |
229 | secp521r1 => { # == NIST P-521 | |
230 | oid => '1.3.132.0.35', | |
209 | 231 | prime => "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", |
210 | 232 | A => "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", |
211 | 233 | B => "0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", |
213 | 235 | Gy => "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650", |
214 | 236 | order => "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", |
215 | 237 | cofactor => 1 |
216 | }, | |
217 | ### http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf (July 2013) | |
218 | nistp192 => { | |
238 | }, | |
239 | ### http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf (July 2013) | |
240 | nistp192 => { # == secp192r1, X9.62 prime192v1 | |
241 | oid => '1.2.840.10045.3.1.1', | |
219 | 242 | prime => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', |
220 | 243 | A => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', |
221 | 244 | B => '64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1', |
224 | 247 | order => 'FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831', |
225 | 248 | cofactor => 1, |
226 | 249 | }, |
227 | nistp224 => { | |
250 | nistp224 => { # == secp224r1 | |
251 | oid => '1.3.132.0.33', | |
228 | 252 | prime => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001', |
229 | 253 | A => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE', |
230 | 254 | B => 'B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4', |
233 | 257 | order => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D', |
234 | 258 | cofactor => 1, |
235 | 259 | }, |
236 | nistp256 => { | |
260 | nistp256 => { # == secp256r1, X9.62 prime256v1 | |
261 | oid => '1.2.840.10045.3.1.7', | |
237 | 262 | prime => 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF', |
238 | 263 | A => 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC', |
239 | 264 | B => '5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B', |
242 | 267 | order => 'FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551', |
243 | 268 | cofactor => 1, |
244 | 269 | }, |
245 | nistp384 => { | |
270 | nistp384 => { # == secp384r1 | |
271 | oid => '1.3.132.0.34', | |
246 | 272 | prime => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF', |
247 | 273 | A => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC', |
248 | 274 | B => 'B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF', |
251 | 277 | order => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973', |
252 | 278 | cofactor => 1, |
253 | 279 | }, |
254 | nistp521 => { | |
280 | nistp521 => { # == secp521r1 | |
281 | oid => '1.3.132.0.35', | |
255 | 282 | prime => '1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', |
256 | 283 | A => '1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC', |
257 | 284 | B => '051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00', |
261 | 288 | cofactor => 1, |
262 | 289 | }, |
263 | 290 | ### ANS X9.62 elliptic curves - http://www.flexiprovider.de/CurvesGfpX962.html |
264 | prime192v1 => { | |
291 | prime192v1 => { # == secp192r1, NIST P-192 | |
292 | oid => '1.2.840.10045.3.1.1', | |
265 | 293 | prime => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', |
266 | 294 | A => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', |
267 | 295 | B => '64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1', |
271 | 299 | cofactor => 1, |
272 | 300 | }, |
273 | 301 | prime192v2 => { |
302 | oid => '1.2.840.10045.3.1.2', | |
274 | 303 | prime => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', |
275 | 304 | A => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', |
276 | 305 | B => 'CC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953', |
280 | 309 | cofactor => 1 |
281 | 310 | }, |
282 | 311 | prime192v3 => { |
312 | oid => '1.2.840.10045.3.1.3', | |
283 | 313 | prime => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', |
284 | 314 | A => 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', |
285 | 315 | B => '22123DC2395A05CAA7423DAECCC94760A7D462256BD56916', |
289 | 319 | cofactor => 1, |
290 | 320 | }, |
291 | 321 | prime239v1 => { |
322 | oid => '1.2.840.10045.3.1.4', | |
292 | 323 | prime => '7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', |
293 | 324 | A => '7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', |
294 | 325 | B => '6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A', |
298 | 329 | cofactor => 1, |
299 | 330 | }, |
300 | 331 | prime239v2 => { |
332 | oid => '1.2.840.10045.3.1.5', | |
301 | 333 | prime => '7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', |
302 | 334 | A => '7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', |
303 | 335 | B => '617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C', |
307 | 339 | cofactor => 1, |
308 | 340 | }, |
309 | 341 | prime239v3 => { |
342 | oid => '1.2.840.10045.3.1.6', | |
310 | 343 | prime => '7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', |
311 | 344 | A => '7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', |
312 | 345 | B => '255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E', |
315 | 348 | order => '7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551', |
316 | 349 | cofactor => 1, |
317 | 350 | }, |
318 | prime256v1 => { | |
351 | prime256v1 => { # == secp256r1, NIST P-256 | |
352 | oid => '1.2.840.10045.3.1.7', | |
319 | 353 | prime => 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF', |
320 | 354 | A => 'FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC', |
321 | 355 | B => '5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B', |
322 | 356 | Gx => '6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296', |
323 | Gy => '4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5', | |
357 | Gy => '4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5', | |
324 | 358 | order => 'FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551', |
325 | 359 | cofactor => 1, |
326 | 360 | }, |
542 | 576 | The following pre-defined C<$curve_name> values are supported: |
543 | 577 | |
544 | 578 | # curves from http://www.ecc-brainpool.org/download/Domain-parameters.pdf |
545 | 'brainpoolP160r1' | |
546 | 'brainpoolP192r1' | |
547 | 'brainpoolP224r1' | |
548 | 'brainpoolP256r1' | |
549 | 'brainpoolP320r1' | |
550 | 'brainpoolP384r1' | |
551 | 'brainpoolP512r1' | |
579 | 'brainpoolp160r1' | |
580 | 'brainpoolp192r1' | |
581 | 'brainpoolp224r1' | |
582 | 'brainpoolp256r1' | |
583 | 'brainpoolp320r1' | |
584 | 'brainpoolp384r1' | |
585 | 'brainpoolp512r1' | |
552 | 586 | # curves from http://www.secg.org/collateral/sec2_final.pdf |
553 | 587 | 'secp112r1' |
554 | 588 | 'secp112r2' |
558 | 592 | 'secp160r1' |
559 | 593 | 'secp160r2' |
560 | 594 | 'secp192k1' |
561 | 'secp192r1' | |
595 | 'secp192r1' ... same as nistp192, prime192v1 | |
562 | 596 | 'secp224k1' |
563 | 'secp224r1' | |
564 | 'secp256k1' ... used by Bitcoin | |
565 | 'secp256r1' | |
566 | 'secp384r1' | |
567 | 'secp521r1' | |
597 | 'secp224r1' ... same as nistp224 | |
598 | 'secp256k1' ... used by Bitcoin | |
599 | 'secp256r1' ... same as nistp256, prime256v1 | |
600 | 'secp384r1' ... same as nistp384 | |
601 | 'secp521r1' ... same as nistp521 | |
568 | 602 | #curves from http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf |
569 | 'nistp192' | |
570 | 'nistp224' | |
571 | 'nistp256' | |
572 | 'nistp384' | |
573 | 'nistp521' | |
603 | 'nistp192' ... same as secp192r1, prime192v1 | |
604 | 'nistp224' ... same as secp224r1 | |
605 | 'nistp256' ... same as secp256r1, prime256v1 | |
606 | 'nistp384' ... same as secp384r1 | |
607 | 'nistp521' ... same as secp521r1 | |
574 | 608 | # curves from ANS X9.62 |
575 | 'prime192v1' | |
609 | 'prime192v1' ... same as nistp192, secp192r1 | |
576 | 610 | 'prime192v2' |
577 | 611 | 'prime192v3' |
578 | 612 | 'prime239v1' |
579 | 613 | 'prime239v2' |
580 | 614 | 'prime239v3' |
581 | 'prime256v1' | |
615 | 'prime256v1' ... same as nistp256, secp256r1 | |
582 | 616 | |
583 | 617 | Using custom curve parameters: |
584 | 618 | |
890 | 924 | openssl ec -param_enc explicit -in eckey.priv.pem -out eckey.pubc.der -outform der -pubout -conv_form compressed |
891 | 925 | openssl ec -param_enc explicit -in eckey.priv.pem -passout pass:secret -des3 -out eckey-passwd.priv.pem |
892 | 926 | |
893 | B<IMPORTANT:> it is necessary to use C<-param_enc explicit> option | |
894 | ||
895 | 927 | Load keys (Perl code): |
896 | 928 | |
897 | 929 | use Crypt::PK::ECC; |
Binary diff not shown
Binary diff not shown
0 | -----BEGIN PUBLIC KEY----- | |
1 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoBUyo8CQAFPeYPvv78ylh5MwFZjT | |
2 | CLQeb042TjiMJxG+9DLFmRSMlBQ9T/RsLLc+PmpB1+7yPAR+oR5gZn3kJQ== | |
3 | -----END PUBLIC KEY----- |
115 | 115 | is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret'); |
116 | 116 | } |
117 | 117 | |
118 | { | |
119 | my $k = Crypt::PK::ECC->new('t/data/openssl_ec-short.pem'); | |
120 | ok($k, 'load openssl_ec-short.pem'); | |
121 | ok($k->is_private, 'is_private openssl_ec-short.pem'); | |
122 | is($k->size, 32, 'size'); | |
123 | is(uc($k->key2hash->{pub_x}), 'C068B754877A4AB328A569BAC6D464A81B17E527D2D652572ABB11BDA3572D50', 'key2hash'); | |
118 | for my $priv (qw/openssl_ec-short.pem openssl_ec-short.der/) { | |
119 | my $k = Crypt::PK::ECC->new("t/data/$priv"); | |
120 | ok($k, "load $priv"); | |
121 | ok($k->is_private, "is_private $priv"); | |
122 | is($k->size, 32, "size $priv"); | |
123 | is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $priv"); | |
124 | } | |
125 | ||
126 | for my $pub (qw/openssl_ec-short.pub.pem openssl_ec-short.pub.der/) { | |
127 | my $k = Crypt::PK::ECC->new("t/data/$pub"); | |
128 | ok($k, "load $pub"); | |
129 | ok(!$k->is_private, "is_private $pub"); | |
130 | is($k->size, 32, "$pub size"); | |
131 | is(uc($k->key2hash->{pub_x}), 'A01532A3C0900053DE60FBEFEFCCA58793301598D308B41E6F4E364E388C2711', "key2hash $pub"); | |
124 | 132 | } |
125 | 133 | |
126 | 134 | done_testing;⏎ |