hyb
2026-01-30 7657e1b2fa251a2ea372710ad75cb395a3c0e374
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
Ë
ž¬`iIÀãó®—ddlmZddlZddlZddlZddlmZmZmZm    Z    m
Z
ddl m Z ddl mZmZmZmZddlmZmZmZddlmZmZddlmZd    d
lmZmZmZd    d lmZ Gd „d e!«Z"Gd„de#«Z$d„Z%d„Z&d'd„Z'd„Z(d(d„Z)d„Z*d„Z+d„Z,d„Z-d„Z.d„Z/d„Z0d„Z1d„Z2d'd„Z3e4dk(r°ddl5Z5d Z6ed!jnjq«Z9d"Z:e5jj«Z;e<e:«D]Z=e9e6zZ>Œ    e?d#e5jj«e;z
e:z d$zd%«e5jj«Z;e<e:«D]Z=e>e6zZ>Œ    e?d&e5jj«e;z
e:z d$zd%«yy))é)Úprint_functionN)ÚbordÚtobytesÚtostrÚbchrÚ    is_string)ÚInteger)Ú DerObjectIdÚDerOctetStringÚ DerSequenceÚ DerBitString)Ú_expand_subject_public_key_infoÚ_create_subject_public_key_infoÚ _extract_subject_public_key_info)ÚSHA512ÚSHAKE256)Úget_random_bytesé)ÚEccPointÚ    EccXPointÚ_curves)ÚCurveIDcó —eZdZy)ÚUnsupportedEccFeatureN)Ú__name__Ú
__module__Ú __qualname__©óõgH:\项目\archive\测试组\脚本\Change_password\venv_build\Lib\site-packages\Crypto/PublicKey/ECC.pyrr7s„Ørrcó´—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z    e
d„«Z e
d    „«Z e
d
„«Z d „Zd „Zd „Zd„Zd„Zdd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zy)ÚEccKeyaþClass defining an ECC key.
    Do not instantiate directly.
    Use :func:`generate`, :func:`construct` or :func:`import_key` instead.
 
    :ivar curve: The **canonical** name of the curve as defined in the `ECC table`_.
    :vartype curve: string
 
    :ivar pointQ: an ECC point representing the public component.
    :vartype pointQ: :class:`EccPoint` or :class:`EccXPoint`
 
    :ivar d: A scalar that represents the private component
             in NIST P curves. It is smaller than the
             order of the generator point.
    :vartype d: integer
 
    :ivar seed: A seed that represents the private component
                in Ed22519 (32 bytes), Curve25519 (32 bytes),
                Curve448 (56 bytes), Ed448 (57 bytes).
    :vartype seed: bytes
    c 󒠠  —t|«}|jdd«}|jdd«|_|jdd«|_|jdd«|_|€"|jr|jj
}|rt dt|«z«‚|tvrtd|z«‚t||_
|jj|_t|jdu«t|jdu«z}|dk(r|j€ td    «‚y|d
k(r td «‚|jjtjk(r·|j td «‚t!|j«d k7r td«‚t#j$|j«j'«}|d d|_t+|dd «}|dxxdzcc<|ddzdz|d<t-j.|d¬«|_y|jjtj0k(r¼|j td «‚t!|j«dk7r td«‚t3j$|j«j5d«}|dd|_t+|dd«}|dxxdzcc<|dxxdzcc<d|d<t-j.|d¬«|_y|jjtj6k(r‡|j td «‚t!|j«d k7r td«‚t+|j«}|dxxdzcc<|ddzdz|d<t-j.|d¬«|_y|jjtj8k(r†|j td «‚t!|j«dk7r td«‚t+|j«}|dxxdzcc<|dxxdzcc<t-j.|d¬«|_y|j td«‚t-|j«|_d|jcxkr#|jj:kstd «‚td «‚y)!a˜Create a new ECC key
 
        Keywords:
          curve : string
            The name of the curve.
          d : integer
            Mandatory for a private key one NIST P curves.
            It must be in the range ``[1..order-1]``.
          seed : bytes
            Mandatory for a private key on Ed25519 (32 bytes),
            Curve25519 (32 bytes), Curve448 (56 bytes) or Ed448 (57 bytes).
          point : EccPoint or EccXPoint
            Mandatory for a public key. If provided for a private key,
            the implementation will NOT check whether it matches ``d``.
 
        Only one parameter among ``d``, ``seed`` or ``point`` may be used.
        ÚcurveNÚdÚseedÚpointúUnknown parameters: zUnsupported curve (%s)rzGAt lest one between parameters 'point', 'd' or 'seed' must be specifiedéz,Parameters d and seed are mutually exclusivez/Parameter d can only be used with NIST P curvesé z0Parameter seed must be 32 bytes long for Ed25519éøééé@Úlittle©Ú    byteorderé9z.Parameter seed must be 57 bytes long for Ed448éréüé7é€é8z3Parameter seed must be 32 bytes long for Curve25519z1Parameter seed must be 56 bytes long for Curve448z2Parameter 'seed' cannot be used with NIST P-curvesrz;Parameter d must be an integer smaller than the curve order)ÚdictÚpopÚ_dÚ_seedÚ_pointr$Ú    TypeErrorÚstrrÚ
ValueErrorÚ_curveÚ    canonicalÚintÚidÚ_CurveIDÚED25519ÚlenrÚnewÚdigestÚ_prefixÚ    bytearrayr    Ú
from_bytesÚED448rÚreadÚ
CURVE25519ÚCURVE448Úorder)ÚselfÚkwargsÚkwargs_Ú
curve_nameÚcountÚ    seed_hashÚtmps       r Ú__init__zEccKey.__init__Qsû€ô&v“,ˆØ—[‘[ ¨$Ó/ˆ
Ø—+‘+˜c 4Ó(ˆŒØ—[‘[ ¨Ó.ˆŒ
Ø—k‘k '¨4Ó0ˆŒ Ø Ð  $§+¢+ØŸ™×*Ñ*ˆJÙ ÜÐ2´S¸³\ÑAÓBÐ Bà œWÑ $ÜÐ5¸
ÑBÓCÐ CܘjÑ)ˆŒ Ø—[‘[×*Ñ*ˆŒ
äD—G‘G 4Ð'Ó(¬3¨t¯z©zÀÐ/EÓ+FÑFˆà AŠ:؏{‰{Ð"Ü Ð!jÓkÐkØ à AŠ:ÜÐKÓLÐ Lð
;‰;>‰>œX×-Ñ-Ò -؏w‰wÐ"Ü Ð!RÓSÐSܐ4—:‘:‹ "Ò$Ü Ð!SÓTÐTÜŸ
™
 4§:¡:Ó.×5Ñ5Ó7ˆIØ$ R S˜>ˆDŒLܘI c r˜NÓ+ˆCØ ‹Fd‰N‹Fؘ2‘w ‘~¨Ñ-ˆC‰GÜ×(Ñ(¨¸ÔAˆDGà [‰[^‰^œxŸ~™~Ò -؏w‰wÐ"Ü Ð!RÓSÐSܐ4—:‘:‹ "Ò$Ü Ð!QÓRÐRÜ Ÿ ™  T§Z¡ZÓ0×5Ñ5°cÓ:ˆIØ$ R S˜>ˆDŒLܘI c r˜NÓ+ˆCØ ‹Fd‰N‹FØ ‹Gt‰O‹G؈C‰GÜ×(Ñ(¨¸ÔAˆDGà [‰[^‰^œx×2Ñ2Ò 2؏w‰wÐ"Ü Ð!RÓSÐSܐ4—:‘:‹ "Ò$Ü Ð!VÓWÐWܘDŸJ™JÓ'ˆCØ ‹Fd‰N‹Fؘ2‘w ‘~¨Ñ-ˆC‰GÜ×(Ñ(¨¸ÔAˆDGØ [‰[^‰^œx×0Ñ0Ò 0؏w‰wÐ"Ü Ð!RÓSÐSܐ4—:‘:‹ "Ò$Ü Ð!TÓUÐUܘDŸJ™JÓ'ˆCØ ‹Fd‰N‹FØ ‹Gt‰O‹GÜ×(Ñ(¨¸ÔAˆDGðz‰zÐ%Ü Ð!UÓVÐVܘdŸg™gÓ&ˆDŒGؘŸ™Ô3 $§+¡+×"3Ñ"3Ò3Ü Ð!^Ó_Ð_ð4Ü Ð!^Ó_Ð_ð4rcóš—t|t«sy|j«|j«k7ry|j|jk(S)NF)Ú
isinstancer"Ú has_privateÚpointQ)rQÚothers  r Ú__eq__z EccKey.__eq__³s?€Ü˜%¤Ô(Øà × Ñ Ó  $×"2Ñ"2Ó"4Ò 4Øà|‰|˜tŸ{™{Ñ*Ð*rcó —|j«r[|jjr,dtt    j
|j ««z}ndt|j«z}nd}|jjtjtjfvr4|jj}d|jj||fz}|S|jj \}}d|jj|||fz}|S)Nz    , seed=%sz, d=%dÚz EccKey(curve='%s', point_x=%d%s)z,EccKey(curve='%s', point_x=%d, point_y=%d%s))r[r@Ú
is_edwardsrÚbinasciiÚhexlifyr;rBr:rCrDrNrOr\ÚxrAÚxy)rQÚextrardÚresultÚys     r Ú__repr__zEccKey.__repr__¼sß€Ø × Ñ Ô Ø{‰{×%Ò%Ø#¤e¬H×,<Ñ,<¸T¿Z¹ZÓ,HÓ&IÑI‘à ¤3 t§w¡w£<Ñ/‘àˆEØ ;‰;>‰>œh×1Ñ1Ü&×/Ñ/ð1ñ 1à— ‘ — ‘ ˆAØ7¸4¿;¹;×;PÑ;PÐRSÐUZÐ:[Ñ[ˆFðˆ ð—;‘;—>‘>‰DˆAˆqØCÀtÇ{Á{×G\ÑG\Ð^_ÐabÐdiÐFjÑjˆF؈ rcó—|jduS)zJ``True`` if this key can be used for making signatures or decrypting data.N)r:©rQs r r[zEccKey.has_privateÍs€ðw‰w˜dÐ"Ð"rcó`—d|cxkr|jjksJ‚J‚|jj}tjd|¬«}|j|z}||zj |«}|jj |zj|z}|||z||zzz|z}||fS)Nrr)Ú min_inclusiveÚ max_exclusive)r@rPr    Ú random_ranger:ÚinverseÚGrd)    rQÚzÚkrPÚblindÚblind_dÚ inv_blind_kÚrÚss             r Ú_signz EccKey._signÓs®€Ø1Ô(t—{‘{×(Ñ(Ò(Ð(Ñ(Ð(Ð(à— ‘ ×!Ñ!ˆÜ×$Ñ$°1Ø38ô:ˆð—'‘'˜E‘/ˆØ˜q‘y×)Ñ)¨%Ó0ˆ à [‰[]‰]˜QÑ × !Ñ ! EÑ )ˆØ ˜5 1™9 w°¡{Ñ2Ñ 3°eÑ ;ˆØ1ˆvˆ rcóî—|jj}|dj|«}|jj||z|zz}|j||dz|zz}||zj
|dk(S)Nrr)r@rPrprqr\rd)rQrrÚrsrPÚsinvÚpoint1Úpoint2s       r Ú_verifyzEccKey._verifyâsr€Ø— ‘ ×!Ñ!ˆØ!‰u}‰}˜UÓ#ˆØ—‘—‘ 4¨!¡8¨uÑ"4Ñ5ˆØ—‘ ¨¨1©¡°Ñ 6Ñ7ˆØ˜‘×"Ñ" b¨¡eÑ+Ð+rcóP—|j«s td«‚|jS©NzThis is not a private ECC key)r[r?r:rks r r%zEccKey.dés#€à×ÑÔ!ÜÐ<Ó=Ð =؏w‰wˆrcóP—|j«s td«‚|jSr)r[r?r;rks r r&z EccKey.seedïs$€à×ÑÔ!ÜÐ<Ó=Ð =؏z‰zÐrcó‚—|j€(|jj|jz|_|jS©N)r<r@rqr:rks r r\z EccKey.pointQõs.€à ;‰;Ð ØŸ+™+Ÿ-™-¨$¯'©'Ñ1ˆDŒK؏{‰{ÐrcóX—t|jj|j¬«S)z^A matching ECC public key.
 
        Returns:
            a new :class:`EccKey` object
        )r$r')r"r@rAr\rks r Ú
public_keyzEccKey.public_keyûs€ô˜DŸK™K×1Ñ1¸¿¹ÔEÐErcó—|jjs td«‚|jj    «}|rS|jj
j «rd}nd}||jjj|«z}|Sd|jjj|«z|jj
j|«z}|S)Nz/SEC1 format is only supported for NIST P curvesóóó)    r@Úis_weierstrassr?r\Ú size_in_bytesrhÚis_oddrdÚto_bytes)rQÚcompressÚ modulus_bytesÚ
first_byter†s     r Ú _export_SEC1zEccKey._export_SEC1sÀ€Ø{‰{×)Ò)ÜÐNÓOÐ O🠙 ×1Ñ1Ó3ˆ á Ø{‰{}‰}×#Ñ#Ô%Ø$‘
à$
Ø$ØŸ+™+Ÿ-™-×0Ñ0°Ó?ñ@ˆJð Ðð"ØŸ+™+Ÿ-™-×0Ñ0°Ó?ñ@àŸ+™+Ÿ-™-×0Ñ0°Ó?ñ@ˆJðÐrcóº—|jj\}}|jjtj
k(r8t |jdd¬««}|dzdz|dz|d<t|«S|jjtjk(r2t |jdd¬««}|dzdz|d<t|«Std    «‚)
Nr*r/r0rér,r2r7zNot an EdDSA key to export) r\rer@rCrDrErJrŽrLr?Úbytes)rQrdrhrgs    r Ú_export_eddsa_publiczEccKey._export_eddsa_public s¾€Ø{‰{~‰~‰ˆˆ1Ø ;‰;>‰>œX×-Ñ-Ò -ܘqŸz™z¨"¸˜zÓAÓBˆFؘq™5 Q™,¨&°©*Ñ4ˆF2‰Jô V‹}Ðð [‰[^‰^œxŸ~™~Ò -ܘqŸz™z¨"¸˜zÓAÓBˆFؘa™% A™ˆF2‰JôV‹}ÐôÐ9Ó:Ð :rcóò—|jjs td«‚|jj}|jj «}t |j|d¬««}t|«S)NzNot a Montgomery key to exportr/r0)    r@Ú is_montgomeryr?r\rdrŒrJrŽr•)rQrdÚ
field_sizergs    r Ú_export_montgomery_publicz EccKey._export_montgomery_public,s[€Ø{‰{×(Ò(ÜÐ=Ó>Ð >Ø K‰KM‰MˆØ—[‘[×.Ñ.Ó0ˆ
ܘ1Ÿ:™: j¸H˜:ÓEÓFˆÜV‹}Ðrcó|—|jjr)|jj}|j«}d}nq|jjr)|jj}|j «}d}n2d}|j |«}t|jj«}t|||«S)Nú1.2.840.10045.2.1)    r@raÚoidr–r˜ršr’r
r)rQrrr†Úparamss     r Ú_export_subjectPublicKeyInfoz#EccKey._export_subjectPublicKeyInfo4s˜€Ø ;‰;× !Ò !Ø—+‘+—/‘/ˆCØ×2Ñ2Ó4ˆJ؉FØ [‰[× &Ò &Ø—+‘+—/‘/ˆCØ×7Ñ7Ó9ˆJ؉Fà%ˆCØ×*Ñ*¨8Ó4ˆJÜ  §¡§¡Ó1ˆFä.¨sØ/9Ø/5ó7ð    7rcóÖ—|j«sJ‚|jj«}d|jjj    |«z|jj
j    |«z}dt |jj    |««t|jjd¬«t|d¬«g}|s|d=t|«j«S)NrŠrr©Úexplicitr))r[r\rŒrdrŽrhr r%r
r@rr r Úencode)rQÚinclude_ec_paramsrr†Úseqs     r Ú_export_rfc5915_private_derz"EccKey._export_rfc5915_private_derFsÀ€à×ÑÔ!Ð!Ð!🠙 ×1Ñ1Ó3ˆ ØØ—k‘k—m‘m×,Ñ,¨]Ó;ñ<à—k‘k—m‘m×,Ñ,¨]Ó;ñ<ˆ
ðܘdŸf™fŸo™o¨mÓ<Ó=ܘ4Ÿ;™;Ÿ?™?°QÔ7ܘJ°Ô3ð5ˆñ
!ؐAä˜3Ó×&Ñ&Ó(Ð(rc óv—ddlm}|jdd«d|vr td«‚|j<|j
j }t|j«j«}d}n3d}|jd¬«}t|j
j «}|j||fd    |i|¤Ž}|S)
Nr©ÚPKCS8Ú
passphraseÚ
protectionz3At least the 'protection' parameter must be presentrœF)r¤Ú
key_params) Ú    Crypto.IOr©Úgetr?r;r@rr r£r¦r
Úwrap)rQrRr©rÚ private_keyržrgs       r Ú _export_pkcs8zEccKey._export_pkcs8as´€Ý#à :‰:l DÓ )Ð 5¸,ÈfÑ:TÜÐRÓSÐ Sà :‰:Ð !Ø—+‘+—/‘/ˆCÜ(¨¯©Ó4×;Ñ;Ó=ˆK؉Fà%ˆCØ×:Ñ:ÈUÐ:ÓSˆKÜ  §¡§¡Ó1ˆFà—‘˜KØñ&à'-ð&ð%ñ&ˆðˆ rcóT—ddlm}|j|«}|j|d«S)Nr©ÚPEMz
PUBLIC KEY)r­r´rŸr£)rQrr´Ú encoded_ders    r Ú_export_public_pemzEccKey._export_public_pemvs&€Ý!à×7Ñ7¸ÓAˆ ؏z‰z˜+ |Ó4Ð4rc óX—ddlm}|j«}|j|d|fi|¤ŽS)Nrr³zEC PRIVATE KEY)r­r´r¦r£©rQrªrRr´rµs     r Ú_export_private_pemzEccKey._export_private_pem|s.€Ý!à×6Ñ6Ó8ˆ ؈sz‰z˜+Ð'7¸ÑNÀvÑNÐNrcóR—ddlm}|j«}|j|d«S)Nrr³z PRIVATE KEY)r­r´r±r£)rQr´rµs   r Ú(_export_private_clear_pkcs8_in_clear_pemz/EccKey._export_private_clear_pkcs8_in_clear_pem‚s$€Ý!à×(Ñ(Ó*ˆ ؏z‰z˜+ }Ó5Ð5rc ó€—ddlm}|sJ‚d|vr td«‚|jdd|i|¤Ž}|j    |d«S)Nrr³r«z5At least the 'protection' parameter should be presentrªzENCRYPTED PRIVATE KEYr)r­r´r?r±r£r¸s     r Ú,_export_private_encrypted_pkcs8_in_clear_pemz3EccKey._export_private_encrypted_pkcs8_in_clear_pemˆsM€Ý!áЈzØ ˜vÑ %ÜÐTÓUÐ UØ(d×(Ñ(ÑI°JÐIÀ&ÑIˆ ؏z‰z˜+Ð'>Ó?Ð?rc óœ—|j«r td«‚|jj}|€td|jz«‚|dk(r'|j «}t |«t |«f}nî|jj«}|rYd|jjj«z}t|«|jjj|«z}nNd|jjj|«z|jjj|«z}|jd«d}t |«t |«|f}dj|Dcgc]$}t!j"dt%|««|z‘Œ&c}«}    |d    zt't)j*|    ««zScc}w)
Nz"Cannot export OpenSSH private keysz Cannot export %s keys as OpenSSHú ssh-ed25519r)rŠú-rú>Iú )r[r?r@Úopensshr$r–rr\rŒrhrrrdrŽÚsplitÚjoinÚstructÚpackrFrrbÚ
b2a_base64)
rQrÚdescr†Úcompsrr‘ÚmiddlerdÚblobs
          r Ú_export_opensshzEccKey._export_openssh‘s{€Ø × Ñ Ô ÜÐAÓBÐ Bà{‰{×"Ñ"ˆà ˆ<ÜÐ?À$Ç*Á*ÑLÓMÐ MØ ]Ò "Ø×2Ñ2Ó4ˆJܘT“]¤G¨JÓ$7Ð8‰Eà ŸK™K×5Ñ5Ó7ˆMáØ §¡§¡×!5Ñ!5Ó!7Ñ7
Ü" :Ó.Ø"Ÿk™kŸm™m×4Ñ4°]ÓCñD‘
ð&Ø"Ÿk™kŸm™m×4Ñ4°]ÓCñDà"Ÿk™kŸm™m×4Ñ4°]ÓCñD
ð—Z‘Z “_ QÑ'ˆFܘT“]¤G¨F£O°ZÐ@ˆEàx‰xÀÖF¸1œŸ™ T¬3¨q«6Ó2°QÓ6ÒFÓGˆØc‰zœE¤(×"5Ñ"5°dÓ";Ó<Ñ<Ð<ùòGsÅ5)G    c ó~—|j«}|jd«}|dvrtd|z«‚|jdd«}|j«r#|jdd«}t    |«rt |«}|s td«‚|jd    d
«}|durQ|j jr td «‚|j jr td «‚d |vr td«‚|dk(r:|r%|r|j|fi|¤ŽS|j«S|j|fi|¤ŽS|dk(r5|r |s td«‚|r|jdd|i|¤ŽS|j«Std|z«‚|rtd|z«‚|dk(r|j|«S|dk(r|j|«S|dk(r|j!|«S|dk(r]|j jr|j#«S|j jr|j%«S|j!|«S|j'|«S)aÊExport this ECC key.
 
        Args:
          format (string):
            The output format:
 
            - ``'DER'``. The key will be encoded in ASN.1 DER format (binary).
              For a public key, the ASN.1 ``subjectPublicKeyInfo`` structure
              defined in `RFC5480`_ will be used.
              For a private key, the ASN.1 ``ECPrivateKey`` structure defined
              in `RFC5915`_ is used instead (possibly within a PKCS#8 envelope,
              see the ``use_pkcs8`` flag below).
            - ``'PEM'``. The key will be encoded in a PEM_ envelope (ASCII).
            - ``'OpenSSH'``. The key will be encoded in the OpenSSH_ format
              (ASCII, public keys only).
            - ``'SEC1'``. The public key (i.e., the EC point) will be encoded
              into ``bytes`` according to Section 2.3.3 of `SEC1`_
              (which is a subset of the older X9.62 ITU standard).
              Only for NIST P-curves.
            - ``'raw'``. The public key will be encoded as ``bytes``,
              without any metadata.
 
              * For NIST P-curves: equivalent to ``'SEC1'``.
              * For Ed25519 and Ed448: ``bytes`` in the format
                defined in `RFC8032`_.
              * For Curve25519 and Curve448: ``bytes`` in the format
                defined in `RFC7748`_.
 
          passphrase (bytes or string):
            (*Private keys only*) The passphrase to protect the
            private key.
 
          use_pkcs8 (boolean):
            (*Private keys only*)
            If ``True`` (default and recommended), the `PKCS#8`_ representation
            will be used.
            It must be ``True`` for Ed25519, Ed448, Curve25519, and Curve448.
 
            If ``False`` and a passphrase is present, the obsolete PEM
            encryption will be used.
 
          protection (string):
            When a private key is exported with password-protection
            and PKCS#8 (both ``DER`` and ``PEM`` formats), this parameter MUST be
            present,
            For all possible protection schemes,
            refer to :ref:`the encryption parameters of PKCS#8<enc_params>`.
            It is recommended to use ``'PBKDF2WithHMAC-SHA512AndAES128-CBC'``.
 
          compress (boolean):
            If ``True``, the method returns a more compact representation
            of the public key, with the X-coordinate only.
 
            If ``False`` (default), the method returns the full public key.
 
            This parameter is ignored for Ed25519/Ed448/Curve25519/Curve448,
            as compression is mandatory.
 
          prot_params (dict):
            When a private key is exported with password-protection
            and PKCS#8 (both ``DER`` and ``PEM`` formats), this dictionary
            contains the  parameters to use to derive the encryption key
            from the passphrase.
            For all possible values,
            refer to :ref:`the encryption parameters of PKCS#8<enc_params>`.
            The recommendation is to use ``{'iteration_count':21000}`` for PBKDF2,
            and ``{'iteration_count':131072}`` for scrypt.
 
        .. warning::
            If you don't provide a passphrase, the private key will be
            exported in the clear!
 
        .. note::
            When exporting a private key with password-protection and `PKCS#8`_
            (both ``DER`` and ``PEM`` formats), any extra parameters
            to ``export_key()`` will be passed to :mod:`Crypto.IO.PKCS8`.
 
        .. _PEM:        http://www.ietf.org/rfc/rfc1421.txt
        .. _`PEM encryption`: http://www.ietf.org/rfc/rfc1423.txt
        .. _OpenSSH:    http://www.openssh.com/txt/rfc5656.txt
        .. _RFC5480:    https://tools.ietf.org/html/rfc5480
        .. _SEC1:       https://www.secg.org/sec1-v2.pdf
        .. _RFC7748:    https://tools.ietf.org/html/rfc7748
 
        Returns:
            A multi-line string (for ``'PEM'`` and ``'OpenSSH'``) or
            ``bytes`` (for ``'DER'``, ``'SEC1'``, and ``'raw'``) with the encoded key.
        Úformat)r´ÚDERÚOpenSSHÚSEC1ÚrawzUnknown format '%s'rFrªNzEmpty passphraseÚ    use_pkcs8Tz%'pkcs8' must be True for EdDSA curvesz#'pkcs8' must be True for Curve25519r«z)'protection' is only supported for PKCS#8r´rÐz8Private keys can only be encrpyted with DER using PKCS#8z2Private keys cannot be exported in the '%s' formatzUnexpected parameters: '%s'rÒrÓr)Úcopyr9r?r[rrr@rar˜r½r»r¹r±r¦r¶rŸr’r–ršrÍ)rQrRÚargsÚ
ext_formatrrªrÔs       r Ú
export_keyzEccKey.export_key®sX€ðt{‰{‹}ˆØ—X‘X˜hÓ'ˆ
Ø ÐEÑ EÜÐ2°ZÑ?Ó@Ð @à—8‘8˜J¨Ó.ˆà × Ñ Õ ØŸ™ ,°Ó5ˆJܘÔ$Ü$ ZÓ0
Ù!Ü$Ð%7Ó8Ð8àŸ™ ¨dÓ3ˆIؘEÑ!Ø—;‘;×)Ò)Ü$Ð%LÓMÐMØ—;‘;×,Ò,Ü$Ð%JÓKÐKØ 4Ñ'Ü$Ð%PÓQÐQà˜UÒ"ÙÙ!ØP˜t×PÑPÐQ[ÑdÐ_cÑdÐdà#×LÑLÓNÐNà3˜4×3Ñ3°JÑGÀ$ÑGÐGؘuÒ$á¡iÜ$Ð%_Ó`Ð`ÙØ-˜4×-Ñ-ÑL¸ÐLÀtÑLÐLà×;Ñ;Ó=Ð=ä ð"6Ø8Bñ"CóDðDñÜ Ð!>ÀÑ!EÓFÐFؘUÒ"Ø×.Ñ.¨xÓ8Ð8ؘuÒ$Ø×8Ñ8¸ÓBÐBؘvÒ%Ø×(Ñ(¨Ó2Ð2ؘuÒ$Ø—;‘;×)Ò)Ø×4Ñ4Ó6Ð6Ø—[‘[×.Ò.Ø×9Ñ9Ó;Ð;à×,Ñ,¨XÓ6Ð6à×+Ñ+¨HÓ5Ð5rN)T)rrrÚ__doc__rXr^rir[ryrÚpropertyr%r&r\r†r’r–ršrŸr¦r±r¶r¹r»r½rÍrØrrr r"r";s©„ñò*``òD+òò"#ò ò,ðñóðð
ñóðð
ñóðò
Fòò8
òò7ó$)ò6ò*5ò Oò 6ò @ò=ó:U6rr"c óV—|jd«}t|}|jdt«}|rtdt    |«z«‚t|j
t jk(r|d«}t||¬«}|St|j
t jk(r|d«}t||¬«}|St|j
t jk(r9|d«}t||¬«}t|j|j«|St|j
t jk(r9|d«}t||¬«}t|j|j«|Stjd|j |¬    «}t||¬
«}|S) a1Generate a new private key on the given curve.
 
    Args:
 
      curve (string):
        Mandatory. It must be a curve name defined in the `ECC table`_.
 
      randfunc (callable):
        Optional. The RNG to read randomness from.
        If ``None``, :func:`Crypto.Random.get_random_bytes` is used.
    r$Úrandfuncr(r*©r$r&r2r7r)rmrnrÜ)r$r%)r9rrr=r>rCrDrEr"rLrNÚvalidater\rOr    rorP)rRrTr$rÜr&Únew_keyr%s       r ÚgenerateràFs|€ð—‘˜GÓ$€JÜ JÑ €E؏z‰z˜*Ô&6Ó7€HÙ ÜÐ.´°V³Ñ<Ó=Ð=äˆzÑ×Ѥ×!1Ñ!1Ò1Ù˜‹|ˆÜ˜z°Ô5ˆð$ €Nô#
Ñ    ×    Ñ    ¤8§>¡>Ò    1Ù˜‹|ˆÜ˜z°Ô5ˆð €Nô
Ñ    ×    Ñ    ¤8×#6Ñ#6Ò    6Ù˜‹|ˆÜ˜z°Ô5ˆÜ
Ñ×$Ñ$ W§^¡^Ô4ð €Nô
Ñ    ×    Ñ    ¤8×#4Ñ#4Ò    4Ù˜‹|ˆÜ˜z°Ô5ˆÜ
Ñ×$Ñ$ W§^¡^Ô4ð €Nô ×  Ñ  ¨qØ/4¯{©{Ø*2ô 4ˆô˜z¨QÔ/ˆà €Nrc ó´—|d}t|}|jdd«}|jdd«}d|vr td«‚|jtj
k(r9|t ||«|d<tdi|¤Ž}|j|j«|S|jtjk(r9|t ||«|d<tdi|¤Ž}|j|j«|Sd||fvrt|||«|d<tdi|¤Ž}|j«r9d|vr5|j|jz}|j||fk7r t!d«‚|S)    aÕBuild a new ECC key (private or public) starting
    from some base components.
 
    In most cases, you will already have an existing key
    which you can read in with :func:`import_key` instead
    of this function.
 
    Args:
      curve (string):
        Mandatory. The name of the elliptic curve, as defined in the `ECC table`_.
 
      d (integer):
        Mandatory for a private key and a NIST P-curve (e.g., P-256).
        It must be an integer in the range ``[1..order-1]``.
 
      seed (bytes):
        Mandatory for a private key and curves Ed25519 (32 bytes),
        Curve25519 (32 bytes), Curve448 (56 bytes) and Ed448 (57 bytes).
 
      point_x (integer):
        The X coordinate (affine) of the ECC point.
        Mandatory for a public key.
 
      point_y (integer):
        The Y coordinate (affine) of the ECC point.
        Mandatory for a public key,
        except for Curve25519 and Curve448.
 
    Returns:
      :class:`EccKey` : a new ECC key object
    r$Úpoint_xNÚpoint_yr'zUnknown keyword: pointz(Private and public ECC keys do not matchr)rr9r=rCrDrNrr"rÞr\rOrr[rqr%rer?)rRrTr$rârãrßÚpub_keys       r Ú    constructråps]€ðB˜‘€JÜ JÑ €E؏j‰j˜ DÓ)€G؏j‰j˜ DÓ)€Gà&ÑÜÐ0Ó1Ð1à ‡xx”8×&Ñ&Ò&à Ð Ü'¨°Ó<ˆF7‰OÜÑ"˜6Ñ"ˆØ ‰w—~‘~Ô&ð, €Nð)
‰”X×&Ñ&Ò    &à Ð Ü'¨°Ó<ˆF7‰OÜÑ"˜6Ñ"ˆØ ‰w—~‘~Ô&ð €Nð ˜ Ð)Ñ )Ü& w°¸ÓDˆF7‰OÜÑ"˜6Ñ"ˆð × Ñ Ô   W°Ñ%6Ø—g‘g §    ¡    Ñ)ˆG؏z‰z˜g wÐ/Ò/Ü Ð!KÓLÐLà €NrcóF—tj«D]\}}|r|j|k(rn'||k(sŒn|rtd|z«‚td|z«‚|jj «}t |d«}|dk(rVt|«dd|zzk7r td«‚tj|d|dz«}tj||dzd«}n½|d    vr®t|«d|zk7r td«‚tj|dd«}|d
z|d
zz
|jzj|j«}|dk(r|j«r|j|z
}|d
k(r+|j«r|j|z
}n td «‚t|||¬ «S) aConvert an encoded EC point into an EccKey object
 
    ec_point: byte string with the EC point (SEC1-encoded)
    curve_oid: string with the name the curve
    curve_name: string with the OID of the curve
 
    Either curve_id or curve_name must be specified
 
    úUnsupported ECC curve (OID: %s)zUnsupported ECC curve (%s)rérr)zIncorrect EC point lengthN©r)érêzIncorrect EC point encoding©r$rârã)rÚitemsrrÚprŒrrFr?r    rKÚbÚsqrtrÚis_evenrå)    Úec_pointÚ    curve_oidrTÚ _curve_namer$rÚ
point_typerdrhs             r Ú_import_public_derrõ·s¡€ô&Ÿm™m›oò    Sш UÙ ˜Ÿ™ iÒ/Ù Ø ˜Ó $Ù ð        Sñ Ü'Ð(IÈIÑ(UÓVÐ Vä'Ð(DÀzÑ(QÓRÐ Rð—G‘G×)Ñ)Ó+€Mܐh˜q‘kÓ"€JðTÒÜ ˆx‹=˜Q  ]Ñ!2Ñ2Ò 3ÜÐ8Ó9Ð 9Ü × Ñ ˜x¨¨-¸©/Ð:Ó ;ˆÜ × Ñ ˜x¨ °a©Ð(8Ð9Ó :‰à    |Ñ    #Ü ˆx‹=˜Q Ñ.Ò /ÜÐ8Ó9Ð 9Ü × Ñ ˜x¨¨˜|Ó ,ˆà ‰TAa‘C‰Z˜%Ÿ'™'Ñ !× 'Ñ '¨¯©Ó 0ˆØ ˜Ò  !§(¡(¤*Ø—‘˜!‘ ˆAØ ˜Ò  !§)¡)¤+Ø—‘˜!‘ ‰AäÐ6Ó7Ð7ä ˜;°¸1Ô =Ð=rcó
—t|«\}}}d}dtfdtfdœ}dtfdtfdœ}||vrA|st d|z«‚    t «j|«j}t||¬
«S||vr1||\}    }
|rt d |z«‚|
|«\} } t| | |    ¬ «S||vr-||\}    } |rt d |z«‚| |«} t| |    ¬ «Std|z«‚#t
$r t d    «‚wxYw)z4Convert a subjectPublicKeyInfo into an EccKey object©rœz 1.3.132.1.12z 1.3.132.1.13ÚEd25519ÚEd448©z 1.3.101.112z 1.3.101.113Ú
Curve25519ÚCurve448©z 1.3.101.110z 1.3.101.111z%Missing ECC parameters for ECC OID %szError decoding namedCurve©ròz(Unexpected ECC parameters for ECC OID %s)rârãr$)râr$zUnsupported ECC OID: %s) rÚ_import_ed25519_public_keyÚ_import_ed448_public_keyÚ_import_curve25519_public_keyÚ_import_curve448_public_keyr?r
ÚdecodeÚvaluerõrår)ÚencodedrRrrñržÚ nist_p_oidsÚ
eddsa_oidsÚxdh_oidsròrTÚimport_eddsa_public_keyrdrhÚimport_xdh_public_keys              r Ú_import_subjectPublicKeyInfor ïs[€ô <¸GÓDÑ€Cˆ6ð€Kð "Ô#=Ð>ØÔ#;Ð<ñ€Jð
%Ô&CÐDØ"Ô$?Ð@ñ€Hð
 ˆkÑñÜÐDÀsÑJÓKÐ Kð    :Ü#› ×,Ñ,¨VÓ4×:Ñ:ˆIô
" (°iÔ@Ð@à     
Ñ    à.8¸©oÑ+ˆ
Ð+ñ ÜÐGÈ#ÑMÓNÐ Ná& xÓ0‰ˆˆ1Ü ¨A°ZÔ@Ð@à     ‰Ø,4°S©MÑ)ˆ
Ð)ñ ÜÐGÈ#ÑMÓNÐ Ná ! (Ó +ˆÜ ¨*Ô5Ð5ô$Ð$=ÀÑ$CÓDÐDøô9ò    :ÜÐ8Ó9Ð 9ð    :ús Á    #C-Ã-Dcó¼—t«j|d¬«}|ddk7r td«‚t«j|d«j}d}|t |«krB    t d¬«j||«j}|||k7r td«‚|}|dz }|€ td    «‚tj«D]\}}|j|k(sŒntd
|z«‚|jj«}    t |«|    k7r td «‚dx}
} |t |«krg    td¬«j||«j} t| |¬ «} | j j"}
| j j$} |dz }t'j(|«}t+|||
| ¬ «S#t$rYŒ$wxYw#t$rYŒ?wxYw)N©r)rêrè)Ú nr_elementsrrz!Incorrect ECC private key versionr)r¡zCurve mismatchzNo curve foundrçzPrivate key is too smallrþ)r$r%rârã)r rr?r ÚpayloadrFr
rrrìrrrírŒr rõr\rdrhr    rKrå)rrªròÚec_private_keyÚ scalar_bytesÚ next_elementÚ
parametersrTr$rrârãÚpublic_key_encr†r%s               r Ú_import_rfc5915_derr2sð€ô!“]×)Ñ)¨'¸yÐ)ÓI€NؐaјAÒÜÐ<Ó=Ð=ä!Ó#×*Ñ*¨>¸!Ñ+<Ó=×EÑE€Là€Lð”c˜.Ó)Ò)ð    Ü$¨aÔ0×7Ñ7¸À|Ñ8TÓU×[Ñ[ˆJØÐ$¨°yÒ)@Ü Ð!1Ó2Ð2Ø"ˆIØ ˜AÑ ˆLðÐÜÐ)Ó*Ð*ä$Ÿ]™]›_òSш
EØ 9‰9˜    Ó !Ù ðSô$Ð$EÈ    Ñ$QÓRÐRà—G‘G×)Ñ)Ó+€MÜ
ˆ<Ó˜MÒ)ÜÐ3Ó4Ð4ðЀGˆgØ”c˜.Ó)Ò)ð    Ü)°1Ô5×<Ñ<¸^ÈLÑ=YÓZ×`Ñ`ˆNÜ+¨NÀiÔPˆJØ ×'Ñ'×)Ñ)ˆGØ ×'Ñ'×)Ñ)ˆGØ ˜AÑ ˆLô    ×ј<Ó(€AÜ ˜:¨°GÀWÔ MÐMøô;ò    Ú ð    ûô2ò    Ù ð    ús&Á&AF?Ä5A&GÆ?    G Ç G Ç    GÇGcóþ—ddlm}|j||«\}}}d}dddœ}ddd    œ}||vr0t«j    |«j
}    t |||    «S||vrB| td
«‚d}    t«j    |«j}
t|||
¬ «S||vrJ||} |td | z«‚d}    t«j    |«j}
t|||
¬ «Std |z«‚)Nrr¨r÷rørùrúrûrürýz.EdDSA ECC private key must not have parametersrÝz+%s ECC private key must not have parametersz!Unsupported ECC purpose (OID: %s)) r­r©Úunwrapr
rrrr?r rrår) rrªr©Úalgo_oidr°ržrrrròr&rTs             r Ú _import_pkcs8rms-€Ýà$)§L¡L°¸*Ó$EÑ!€Hˆk˜6ð€Kð !Øñ€Jð
$Ø!ñ€Hð
;ÑÜ“M×(Ñ(¨Ó0×6Ñ6ˆ    Ü" ;°
¸IÓFÐFØ    ZÑ    Ø Ð ÜÐMÓNÐ N؈    ÜÓ×&Ñ& {Ó3×;Ñ;ˆÜ˜z¨(Ñ3¸$Ô?Ð?Ø    XÑ    Ø˜hÑ'ˆ
Ø Ð ÜÐJØ'ñ(ó)ð )àˆ    ÜÓ×&Ñ& {Ó3×;Ñ;ˆÜ˜x¨Ñ1¸Ô=Ð=ä#Ð$GÈ(Ñ$RÓSÐSrcó.—t|«}t|«Sr„)rr )rrRÚsp_infos   r Ú_import_x509_certr•s€ä.¨wÓ7€GÜ '¨Ó 0Ð0rcó¾—    t||«S#t$r}|‚d}~wtttf$rYnwxYw    t ||«S#t$r}|‚d}~wtttf$rYnwxYw    t ||«S#t$r}|‚d}~wtttf$rYnwxYw    t||«S#t$r}|‚d}~wtttf$r Ytd«‚wxYw)NzNot an ECC DER key)r rr?r=Ú
IndexErrorrrr)rrªÚerrs   r Ú _import_derr ›sò€ð Ü+¨G°ZÓ@Ð@øÜ  ò؈    ûÜ œ    ¤:Ð .ò Ù ð úð Ü  ¨*Ó5Ð5øÜ  ò؈    ûÜ œ    ¤:Ð .ò Ù ð úð Ü" 7¨JÓ7Ð7øÜ  ò؈    ûÜ œ    ¤:Ð .ò Ù ð úð ܘW jÓ1Ð1øÜ  ò؈    ûÜ œ    ¤:Ð .ò Ø ä
Ð)Ó
*Ð*ð úsm‚ Ž    3—™3²3· AÁ    A(Á AÁA(Á'A(Á, A8Á8    BÂBÂBÂBÂ! B-Â-    CÂ6B8Â8CÃCcó¨—|jd«}t|«dvr td«‚    tj|d«}g}t|«dkDrJt j d|dd«d}|j|dd|z«|d|zd}t|«dkDrŒJ|d|dk7r td«‚|djd    «r tj«D]_\}}|j€Œ|jjd
«sŒ/t|jjd «d «}|d|k(sŒ_ntd z«‚t|d |j¬«}|S|ddk(r!t|d«\}    }
t!d|    |
¬«}|Std|dz«‚#t"t$tj&f$rtd|dz«‚wxYw)Nó rézNot an openssh public keyrrèrÁrzMismatch in openssh public keyó ecdsa-sha2-ú
ecdsa-sha2rÀr)zUnsupported ECC curve: rþó ssh-ed25519rørëzUnsupported SSH key type: zError parsing SSH key type: )rÄrFr?rbÚ
a2b_base64rÆÚunpackÚappendÚ
startswithrrìrÃrrõrrÿrårr=ÚError) rÚpartsÚ    keystringÚkeypartsÚlkrTr$rËÚecc_keyrdrhs            r Ú_import_openssh_publicr0¼së€Ø M‰M˜$Ó €EÜ
ˆ5ƒz˜ÑÜÐ4Ó5Ð5ð$DÜ×'Ñ'¨¨a©Ó1ˆ    àˆÜ)‹n˜qÒ Ü—‘˜t Y¨r° ]Ó3°AÑ6ˆBØ O‰O˜I a¨¨B©Ð/Ô 0Ø! ! b¡& 'Ð*ˆIô)‹n˜qÓ ð
‰8x ‘{Ò "ÜÐ=Ó>Ð >𠐉8× Ñ ˜~Ô .ä%,§]¡]£_ò     EÑ!
˜EØ—=‘=Ð(ØØ—}‘}×/Ñ/° Ô=ØÜ  §¡×!4Ñ!4°SÓ!9¸!Ñ!<Ó=Ø˜A‘; &Ó(Ùð     Eô!Ð!:¸VÑ!CÓDÐDä(¨°!©ÀÇ    Á    ÔJˆGð €Nð1‰X˜Ò 'Ü-¨h°q©kÓ:‰DˆAˆqÜ i¸ÀAÔFˆGð €Nô Ð9¸EÀ!¹HÑDÓEÐ Eøä œ    ¤8§>¡>Ð 2òDÜÐ7¸%À¹(ÑBÓCÐCðDús%«A1F!ÂBF!Ä:+F!Å''F!ÆF!Æ!0Gcóö—ddlm}m}m}m}|||«\}}ddt
dfi}|j d«rÞ||«\}    }|    tvrtd|    z«‚t|    }
|
jdzd    z} ||«\} }t| d
«d k7r td «‚t| «d | zdzk7r td«‚tj| dd| z«} tj| d| zd«}||«\}}tj|«}||    dœ}nG||vr5||\}}}||«\} }|| «\} }||«\}}|d|}||dœ}ntd|z«‚||«\}}||«td| |dœ|¤ŽS)Nr)Úimport_openssh_private_genericÚ
read_bytesÚ read_stringÚ check_paddingr¿rør*r$zUnsupported ECC curve %sr”érrèz/Only uncompressed OpenSSH EC keys are supportedr)zIncorrect public key length)r%r$)r&r$zUnsupport SSH agent key type:)rârãr)Ú_opensshr2r3r4r5rÿr)rrÚ modulus_bitsrr?rFr    rKrå)ÚdataÚpasswordr2r3r4r5Úkey_typeÚ    decryptedÚ
eddsa_keysÚecdsa_curve_namer$rr†rârãr°r%ržrTr    Úseed_lenÚprivate_public_keyr&Ú_Úpaddeds                         r Ú_import_openssh_private_eccrCêsÚ€÷CóCñ9¸¸xÓHÑ€Hˆið    ˜    Ô#=¸rÐBð€Jð
×ј<Ô(á&1°)Ó&<Ñ#И)Ø ¤7Ñ *Ü'Ð(BÐEUÑ(UÓVÐ VÜÐ(Ñ)ˆØ×+Ñ+¨aÑ/°AÑ5ˆ á *¨9Ó 5ш
Iä 
˜1‘ Ó  !Ò #ÜÐNÓOÐ OÜ ˆz‹?˜a -Ñ/°!Ñ3Ò 3ÜÐ:Ó;Ð ;ä×$Ñ$ Z°°!°M±/Ð%BÓCˆÜ×$Ñ$ Z°°-±Ð0@Ð%AÓBˆá!+¨IÓ!6ш YÜ × Ñ ˜{Ó +ˆàÐ#3Ñ4‰à    ZÑ    à8BÀ8Ñ8LÑ5ˆ
Ð+¨Xá *¨9Ó 5ш
IÙ2°:Ó>шá(2°9Ó(=Ñ%ИIØ! ) 8Ð,ˆà¨Ñ4‰äÐ8¸8ÑCÓDÐDá˜IÓ&I€A€vِ&Ôä Ð @˜W¨gÑ @¸Ñ @Ð@rcóÒ—t|«dk7r td«‚td«}d}t|«}|ddz    }|dxxdzcc<tj|d¬    «}||k\r td
«‚|d k(ry |d zd z
|z}|d z|z|zd z|z}    |j |«}||z|z}    tj |    |«}
|
d z|k7r||
z
}
|
|fS#t$r td«‚wxYw)aiImport an Ed25519 ECC public key, encoded as raw bytes as described
    in RFC8032_.
 
    Args:
      encoded (bytes):
        The Ed25519 public key to import. It must be 32 bytes long.
 
    Returns:
      x and y (integer)
 
    Raises:
      ValueError: when the given key cannot be parsed.
 
    .. _RFC8032: https://datatracker.ietf.org/doc/html/rfc8032
    r*z9Incorrect length. Only Ed25519 public keys are supported.líÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿl£x²&(7Z/·
;(P8ÑsÝe:Ì8ÎÛ
w6Rr,r”r-r/r0zInvalid Ed25519 key (y)r©rrr)zInvalid Ed25519 public key)rFr?r    rJrKrpÚ_tonelli_shanks© rrír%rhÚx_lsbrãÚuÚvÚv_invÚx2râs            r rÿrÿ!s€ô" ˆ7ƒ|rÒÜÐTÓUÐUäÐRÓS€AØU€Aä'Ó€AØ ˆb‰EQ‰J€EØ€bƒEˆTMƒEÜ× Ñ  ¨hÔ7€Gؐ!‚|ÜÐ2Ó3Ð3ؐ!‚|Øà    !‰a‰˜1Ñ€AØ
1‰*q‰.˜AÑ     Ñ    ! QÑ&€Að7Ø—    ‘    ˜!“ ˆØ%‰i˜1‰_ˆÜ×)Ñ)¨"¨aÓ0ˆØ a‰K˜EÒ !ؘ'‘kˆGð GÐ Ðøô ò7ÜÐ5Ó6Ð6ð7ús Â<CÃC&có–—t|«dk7r td«‚t|«}|dxxdzcc<tj|d¬«}|S)ahImport a Curve25519 ECC public key,
    encoded as raw bytes as described in RFC7748_.
 
    Args:
      encoded (bytes):
        The Curve25519 public key to import. It must be 32 bytes long.
 
    Returns:
      x (integer)
 
    Raises:
      ValueError: when the given key cannot be parsed.
 
    .. _RFC7748: https://datatracker.ietf.org/doc/html/rfc7748
    r*zIncorrect Curve25519 key lengthr,r-r/r0)rFr?rJr    rK)rrdrâs   r rrNsJ€ô" ˆ7ƒ|rÒÜÐ:Ó;Ð;ä'Ó€Aà€bƒEˆTMƒEÜ× Ñ  ¨hÔ7€Gà €Nrcóf—t|«dk7r td«‚tj|d¬«}|S)adImport a Curve448 ECC public key,
    encoded as raw bytes as described in RFC7748_.
 
    Args:
      encoded (bytes):
        The Curve448 public key to import. It must be 56 bytes long.
 
    Returns:
      x (integer)
 
    Raises:
      ValueError: when the given key cannot be parsed.
 
    .. _RFC7748: https://datatracker.ietf.org/doc/html/rfc7748
    r7zIncorrect Curve448 key lengthr/r0)rFr?r    rK)rrâs  r rrjs3€ô" ˆ7ƒ|rÒÜÐ8Ó9Ð9ä× Ñ  °HÔ=€Gà €NrcóÔ—t|«dk7r td«‚tdj}|dz
}|dd}t    |d«dz    }t j |d¬    «}||k\r td
«‚|d k(ry |d zd z
|z}|d z|z|zd z
|z}    |j|«}||z|z}    t j|    |«}
|
d z|k7r||
z
}
|
|fS#t$r td«‚wxYw)agImport an Ed448 ECC public key, encoded as raw bytes as described
    in RFC8032_.
 
    Args:
      encoded (bytes):
        The Ed448 public key to import. It must be 57 bytes long.
 
    Returns:
        x and y (integer)
 
    Raises:
      ValueError: when the given key cannot be parsed.
 
    .. _RFC8032: https://datatracker.ietf.org/doc/html/rfc8032
    r2z7Incorrect length. Only Ed448 public keys are supported.Úcurve448i©˜Nr7r”r/r0zInvalid Ed448 key (y)rrEr)zInvalid Ed448 public key)    rFr?rrírr    rKrprFrGs            r rrƒs €ô" ˆ7ƒ|rÒÜÐRÓSÐSä
Ñ×Ñ€AØ    ˆE‰    €Aàˆ €AÜ ˜‘Ó  Ñ "€EÜ× Ñ  ¨hÔ7€Gؐ!‚|ÜÐ0Ó1Ð1ؐ!‚|Øà    !‰a‰˜1Ñ€AØ
1‰*q‰.˜AÑ     Ñ    ! QÑ&€Að5Ø—    ‘    ˜!“ ˆØ%‰i˜1‰_ˆÜ×)Ñ)¨"¨aÓ0ˆØ a‰K˜EÒ !ؘ'‘kˆGð GÐ Ðøô ò5ÜÐ3Ó4Ð4ð5ús Â<CÃC'có
—ddlm}t|«}| t|«}|jd«r/t    |«}|j ||«\}}}t ||«}|S|jd«ret    |«}d}    d}
tj|    dz|
zd    |tj¬
«}|j ||«\} }}|rd}    t| |«}|S|jd «r t|«St|«dkDrt|d«d k(r t||«St|«dkDr*t|d«dvr|€ td«‚t!||¬«Std«‚#t$r} | ‚d} ~ wt$r td «‚wxYw)ap Import an ECC key (public or private).
 
    Args:
      encoded (bytes or multi-line string):
        The ECC key to import.
        The function will try to automatically detect the right format.
 
        Supported formats for an ECC **public** key:
 
        * X.509 certificate: binary (DER) or ASCII (PEM).
        * X.509 ``subjectPublicKeyInfo``: binary (DER) or ASCII (PEM).
        * SEC1_ (or X9.62), as ``bytes``. NIST P curves only.
          You must also provide the ``curve_name`` (with a value from the `ECC table`_)
        * OpenSSH line, defined in RFC5656_ and RFC8709_ (ASCII).
          This is normally the content of files like ``~/.ssh/id_ecdsa.pub``.
 
        Supported formats for an ECC **private** key:
 
        * A binary ``ECPrivateKey`` structure, as defined in `RFC5915`_ (DER).
          NIST P curves only.
        * A `PKCS#8`_ structure (or the more recent Asymmetric Key
          Package, RFC5958_): binary (DER) or ASCII (PEM).
        * `OpenSSH 6.5`_ and newer versions (ASCII).
 
        Private keys can be in the clear or password-protected.
 
        For details about the PEM encoding, see `RFC1421`_/`RFC1423`_.
 
      passphrase (byte string):
        The passphrase to use for decrypting a private key.
        Encryption may be applied protected at the PEM level (not recommended)
        or at the PKCS#8 level (recommended).
        This parameter is ignored if the key in input is not encrypted.
 
      curve_name (string):
        For a SEC1 encoding only. This is the name of the curve,
        as defined in the `ECC table`_.
 
    .. note::
 
        To import EdDSA private and public keys, when encoded as raw ``bytes``, use:
 
        * :func:`Crypto.Signature.eddsa.import_public_key`, or
        * :func:`Crypto.Signature.eddsa.import_private_key`.
 
    .. note::
 
        To import X25519/X448 private and public keys, when encoded as raw ``bytes``, use:
 
        * :func:`Crypto.Protocol.DH.import_x25519_public_key`
        * :func:`Crypto.Protocol.DH.import_x25519_private_key`
        * :func:`Crypto.Protocol.DH.import_x448_public_key`
        * :func:`Crypto.Protocol.DH.import_x448_private_key`
 
    Returns:
      :class:`EccKey` : a new ECC key object
 
    Raises:
      ValueError: when the given key cannot be parsed (possibly because
        the pass phrase is wrong).
 
    .. _RFC1421: https://datatracker.ietf.org/doc/html/rfc1421
    .. _RFC1423: https://datatracker.ietf.org/doc/html/rfc1423
    .. _RFC5915: https://datatracker.ietf.org/doc/html/rfc5915
    .. _RFC5656: https://datatracker.ietf.org/doc/html/rfc5656
    .. _RFC8709: https://datatracker.ietf.org/doc/html/rfc8709
    .. _RFC5958: https://datatracker.ietf.org/doc/html/rfc5958
    .. _`PKCS#8`: https://datatracker.ietf.org/doc/html/rfc5208
    .. _`OpenSSH 6.5`: https://flak.tedunangst.com/post/new-openssh-key-format-and-bcrypt-pbkdf
    .. _SEC1: https://www.secg.org/sec1-v2.pdf
    rr³Ns-----BEGIN OPENSSH PRIVATE KEYs-----z-----BEGIN EC PARAMETERS-----z-----END EC PARAMETERS-----z.*?r`)Úflagsz(Invalid DER encoding inside the PEM file)r#r%é0r zNo curve name was provided)rTzECC key format is not supported)r­r´rr)rrrCÚreÚsubÚDOTALLr rr?r0rFrrõ) rrªrTr´Ú text_encodedÚopenssh_encodedÚmarkerÚenc_flagrgÚecparams_startÚ ecparams_endÚ der_encodedÚuefs              r Ú
import_keyr_¯s¥€õRägÓ€GØÐܘZÓ(ˆ
ð×ÑÐ;Ô<ܘW“~ˆ Ø,/¯J©J°|ÀZÓ,PÑ)ˆ˜ Ü,¨_¸jÓIˆØˆ à    ×    Ñ    ˜HÔ    %ä˜W“~ˆ ð9ˆØ4ˆ Ü—v‘v˜n¨uÑ4°|ÑCÀRØ*Ü$&§I¡Iô/ˆ ð),¯
©
°<ÀÓ(LÑ%ˆ V˜X٠؈Jð    IÜ  ¨jÓ9ˆFð
ˆ ð×ÑÐ:Ô;Ü% gÓ.Ð.ô ˆ7ƒ|aÒœD ¨¡Ó,°Ò4ܘ7 JÓ/Ð/ô ˆ7ƒ|aÒœD ¨¡Ó,Ð0BÑBØ Ð ÜÐ9Ó:Ð :Ü! '°jÔAÐAä
Ð6Ó
7Ð7øô)%ò    ØˆIûÜò    IÜÐGÓHÐ Hð    Iúsà EÅ    FÅ(E*Å*FÚ__main__lýö_,)¶NÌ$ÔcÐ hKf-5lk<X÷k©#EÚp256i¸ z    (P-256 G)ièÚmsz(P-256 arbitrary point))NNr„)@Ú
__future__rrTrÆrbÚCrypto.Util.py3compatrrrrrÚCrypto.Math.Numbersr    ÚCrypto.Util.asn1r
r r r ÚCrypto.PublicKeyrrrÚ Crypto.HashrrÚ Crypto.Randomrr<rrrrrDr?rÚobjectr"ràrårõr rrrr r0rCrÿrrrr_rÚtimer%rqrÕr'rUÚstartÚrangerdÚpointXÚprintrrr ú<module>rps‰ðõ>&ã    Û ÛçGÕGå'÷,ó,÷@ñ@÷)å*ç0Ñ0Ý'ô    ˜Jô    ôH6ˆVôH6òV'òTDóN5>òp@EóF8Nòv%TòP1ò +òB+ò\4Aòn*òZò8ò2)óX{8ð| ˆzÒãàJ€Aà F‰O× Ñ × "Ñ "Ó $€EØ €Eà ˆDI‰I‹K€EÙ 5‹\òˆØ˜‘‰ðá    ˆ+˜    ˜Ÿ    ™    ›  eÑ+¨uÑ4°tÑ;¸TÔBà ˆDI‰I‹K€EÙ 5‹\òˆØ˜!‘‰ðá    Ð
# i d§i¡i£k°EÑ&9¸UÑ%BÀTÑ%IÈ4ÕPð#r