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
Ë
ž¬`iZãó—gd¢ZddlZddlZddlZddlmZmZmZmZm    Z    ddl
m Z ddl m Z mZddlmZddlmZmZmZmZmZddlmZdd    lmZmZmZdd
lmZmZm Z Gd „d e!«Z"d „Z#dd„Z$dd„Z%d„Z&d„Z'd„Z(d„Z)d„Z*dd„Z+e+Z,dZ-y))ÚgenerateÚ    constructÚDsaKeyÚ
import_keyéN)ÚbchrÚbordÚtobytesÚtostrÚ
iter_range)ÚRandom)ÚPKCS8ÚPEM)ÚSHA256)Ú    DerObjectÚ DerSequenceÚ
DerIntegerÚ DerObjectIdÚ DerBitString)ÚInteger)Útest_probable_primeÚ    COMPOSITEÚPROBABLY_PRIME)Ú_expand_subject_public_key_infoÚ_create_subject_public_key_infoÚ _extract_subject_public_key_infocó¤—eZdZdZgd¢Zd„Zd„Zd„Zd„Zd„Z    d„Z
d    „Z d
„Z d „Z d „Zd „Zd„Zd„Z        dd„ZeZe Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zy)ra¼Class defining an actual DSA key.
    Do not instantiate directly.
    Use :func:`generate`, :func:`construct` or :func:`import_key` instead.
 
    :ivar p: DSA modulus
    :vartype p: integer
 
    :ivar q: Order of the subgroup
    :vartype q: integer
 
    :ivar g: Generator
    :vartype g: integer
 
    :ivar y: Public key
    :vartype y: integer
 
    :ivar x: Private key
    :vartype x: integer
 
    :undocumented: exportKey, publickey
    ©ÚyÚgÚpÚqÚxc    ó2—t|j««}td«}|j|«stdt    ||z
«z«‚||z
}|r1|td«k7r#tdt    |td«z
«z«‚t |«|_y)N©rrr r!z$Some DSA components are missing = %s©r"zUnknown DSA components = %s)ÚsetÚkeysÚissubsetÚ
ValueErrorÚstrÚdictÚ_key)ÚselfÚkey_dictÚ    input_setÚ
public_setÚ    extra_sets     õgH:\项目\archive\测试组\脚本\Change_password\venv_build\Lib\site-packages\Crypto/PublicKey/DSA.pyÚ__init__zDsaKey.__init__gs–€Ü˜Ÿ ™ ›Ó(ˆ    ÜÐ.Ó/ˆ
Ø×"Ñ" 9Ô-ÜÐCÜ  ¨iÑ!7Ó8ñ9ó:ð :à 
Ñ*ˆ    Ù ˜¤c¨&£kÒ1ÜÐ:Ü  ¬S°«[Ñ!8Ó9ñ:ó;ð ;䘓Nˆ    ócó¤—|j«s td«‚d|cxkr|jkstd«‚td«‚dDcgc]}|j|‘Œc}\}}}}t j d|¬«}||zj|«}    ||z}
t|||«|z} |    ||z|
| zzz|z} tt| | f«Scc}w)Nz)DSA public key cannot be used for signingézk is not between 2 and q-1)r"r!r r)Ú min_inclusiveÚ max_exclusive) Ú has_privateÚ    TypeErrorr!r)r,rÚ random_rangeÚinverseÚpowÚmapÚint) r-ÚmÚkÚcompr"r!r rÚ blind_factorÚ inv_blind_kÚblind_xÚrÚss              r2Ú_signz DsaKey._signssà€Ø×ÑÔ!ÜÐGÓHÐ HؐA”˜Ÿ™’ÜÐ9Ó:Ð :ðÜÐ9Ó:Ð :à2FÖG¨$d—i‘i “oÒG‰
ˆˆ1ˆaä×+Ñ+¸!Ø9:ô<ˆ à# aÑ'×0Ñ0°Ó3ˆ ؐlÑ"ˆä 1a‹L˜1Ñ ˆØ ˜L¨1Ñ,¨w¸©{Ñ:Ñ ;¸qÑ @ˆÜ”3˜˜A˜ÓÐùòHsÁ C có2—|\}}dDcgc]}|j|‘Œc}\}}}}    d|cxkr|krnyd|cxkr|ksyyt|«j|«}
|
|z|z} |
|z|z} t|    | |«t|| |«z|z|z} | |k(Scc}w)N)rr!r rrF)r,rr<r=)r-r@ÚsigrFrGrBrr!r rÚwÚu1Úu2Úvs              r2Ú_verifyzDsaKey._verify„s²€Ø‰ˆˆ1Ø2FÖG¨$d—i‘i “oÒG‰
ˆˆ1ˆaØA”    ˜”    Øð$% q¤9¨1¢9Øð$-ØÜ A‹J× Ñ ˜qÓ !ˆØ!‰eq‰[ˆØ!‰eq‰[ˆÜ B˜‹]œS  B¨›]Ñ *¨QÑ .°!Ñ 3ˆØA‰vˆ ùòHsŠBcó—d|jvS)z!Whether this is a DSA private keyr"©r,©r-s r2r9zDsaKey.has_privates€ðd—i‘iÐÐr4có—y)NF©rRs r2Ú can_encryptzDsaKey.can_encrypt”s€Ør4có—y)NTrTrRs r2Úcan_signzDsaKey.can_sign—s€Ør4cóB‡—tˆfd„dD««}t|«S)z^A matching DSA public key.
 
        Returns:
            a new :class:`DsaKey` object
        c3ó@•K—|]}|‰j|f–—Œy­w©NrQ)Ú.0rAr-s  €r2ú    <genexpr>z$DsaKey.public_key.<locals>.<genexpr>¡søèø€Ò Q°q ! T§Y¡Y¨q¡\Ô!2Ñ Qùsƒr$)r+r)r-Úpublic_componentss` r2Ú
public_keyzDsaKey.public_keyšs#ø€ô!Ó QÐ<PÔ QÓQÐÜÐ'Ó(Ð(r4cóú—t|j««t|j««k7ryd}|jD]5}|xr/t|j|d«t|j|d«k(}Œ7|S)NFT)Úboolr9Ú_keydataÚgetattrr,)r-ÚotherÚresultrBs    r2Ú__eq__z DsaKey.__eq__¤sz€Ü × Ñ Ó"Ó #¤t¨E×,=Ñ,=Ó,?Ó'@Ò @ØàˆØ—M‘Mò    BˆDØòB¤¨¯©°D¸$Ó!?Ü!(¨¯©°T¸4Ó!@ñ"A‰Fð    Bðˆ r4có&—|j|« SrZ)re)r-rcs  r2Ú__ne__z DsaKey.__ne__®s€Ø—;‘;˜uÓ%Ð%Ð%r4có—ddlm}|‚)Nr)Ú PicklingError)Úpickleri)r-ris  r2Ú __getstate__zDsaKey.__getstate__±s €å(ØÐr4cóX—dDcgc]}t|j|«‘Œc}Scc}w)zPThe DSA domain parameters.
 
        Returns
            tuple : (p,q,g)
        )r r!r)r?r,)r-rBs  r2Údomainz DsaKey.domain¶s&€ð2AÖA¨”D—I‘I˜d‘OÕ$ÒAÐAùÒAs…'cóŠ—g}|jD]^}|dk(r9t|j«j«}|j    d|fz«ŒAt ||«sŒN|j    |«Œ`|j «r|j    d«d|jjt|«dj|«fzS)Nr zp(%d)Úprivatez <%s @0x%x %s>ú,) rarr Ú size_in_bitsÚappendÚhasattrr9Ú    __class__Ú__name__ÚidÚjoin)r-ÚattrsrAÚbitss    r2Ú__repr__zDsaKey.__repr__¿s¡€ØˆØ—‘ò     ˆAؐCŠxܘtŸv™v“×3Ñ3Ó5Ø— ‘ ˜W¨ wÑ.Õ/ܘ˜qÕ!Ø— ‘ ˜Q•ð      ð × Ñ Ô Ø L‰L˜Ô #à $§.¡.×"9Ñ"9¼2¸d»8ÀSÇXÁXÈeÃ_Ð!UÑUÐUr4cód—    t|j|«S#t$r t|«‚wxYwrZ)r?r,ÚKeyErrorÚAttributeError)r-Úitems  r2Ú __getattr__zDsaKey.__getattr__Ìs4€ð    'ܐt—y‘y ‘Ó'Ð 'øÜò    'Ü  Ó&Ð &ð    'ús‚š/Nc ó†—| t|«}|€tj}|dk(r¢dDcgc]}|j|j    «‘Œ!}}d„}|Dcgc]
}||«‘Œ }    }dg|    z}
dj |
D cgc]$} t jdt| ««| z‘Œ&c} «} dtj| «dd    zSt|j|j|jg«} |j«r¾|€d
}|rP|sd }t!|j"«j%«}t'j(|t*||| |¬ «}|rd }nd}d}n›|dk7r |r t-d«‚d|j|j|j|j.|j"g}t|«j%«}d}n3|r t-d«‚t1t*t!|j.«| «}d}|dk(r|S|dk(r&t3j$||dz||«}t|«St-d|z«‚cc}wcc}wcc} w)a¯Export this DSA key.
 
        Args:
          format (string):
            The encoding for the output:
 
            - *'PEM'* (default). ASCII as per `RFC1421`_/ `RFC1423`_.
            - *'DER'*. Binary ASN.1 encoding.
            - *'OpenSSH'*. ASCII one-liner as per `RFC4253`_.
              Only suitable for public keys, not for private keys.
 
          passphrase (string):
            *Private keys only*. The pass phrase to protect the output.
 
          pkcs8 (boolean):
            *Private keys only*. If ``True`` (default), the key is encoded
            with `PKCS#8`_. If ``False``, it is encoded in the custom
            OpenSSL/OpenSSH container.
 
          protection (string):
            *Only in combination with a pass phrase*.
            The encryption scheme to use to protect the output.
 
            If :data:`pkcs8` takes value ``True``, this is the PKCS#8
            algorithm to use for deriving the secret and encrypting
            the private DSA key.
            For a complete list of algorithms, see :mod:`Crypto.IO.PKCS8`.
            The default is *PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC*.
 
            If :data:`pkcs8` is ``False``, the obsolete PEM encryption scheme is
            used. It is based on MD5 for key derivation, and Triple DES for
            encryption. Parameter :data:`protection` is then ignored.
 
            The combination ``format='DER'`` and ``pkcs8=False`` is not allowed
            if a passphrase is present.
 
          randfunc (callable):
            A function that returns random bytes.
            By default it is :func:`Crypto.Random.get_random_bytes`.
 
        Returns:
          byte string : the encoded key
 
        Raises:
          ValueError : when the format is unknown or when you try to encrypt a private
            key with *DER* format and OpenSSL/OpenSSH.
 
        .. warning::
            If you don't provide a pass phrase, the private key will be
            exported in the clear!
 
        .. _RFC1421:    http://www.ietf.org/rfc/rfc1421.txt
        .. _RFC1423:    http://www.ietf.org/rfc/rfc1423.txt
        .. _RFC4253:    http://www.ietf.org/rfc/rfc4253.txt
        .. _`PKCS#8`:   http://www.ietf.org/rfc/rfc5208.txt
        NÚOpenSSH)r r!rrcóD—t|d«dzrtd«|zS|S)Nré€)rrr%s r2ÚfunczDsaKey.export_key.<locals>.funcs%€Ü˜˜1™“J Ò%Ü ›7 Q™;Ð&àHr4óssh-dssr4ú>Ióssh-dss éÿÿÿÿTz"PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC)Ú
key_paramsÚrandfunczENCRYPTED PRIVATEÚPRIVATErz#DSA private key cannot be encryptedrz DSA PRIVATEz*PKCS#8 is only meaningful for private keysÚPUBLICÚDERz KEYz3Unknown key format '%s'. Cannot export the DSA key.)r    r Úget_random_bytesr,Úto_bytesrwÚstructÚpackÚlenÚbinasciiÚ
b2a_base64rr r!rr9rr"Úencoder ÚwrapÚoidr)rrr)r-ÚformatÚpkcs8Ú
passphraseÚ
protectionrŠr"Útup1r„Útup2ÚkeypartsÚkpÚ    keystringÚparamsÚ private_keyÚ
binary_keyÚkey_typeÚintsÚpem_strs                   r2Ú
export_keyzDsaKey.export_keyÒs6€ðv Ð !Ü  Ó,ˆJà Ð Ü×.Ñ.ˆHà YÒ Ø5IÖJ°D—I‘I˜a‘L×)Ñ)Õ+ÐJˆDÐJò ð &*Ö* ‘D˜•GÐ*ˆDÐ*Ø"| dÑ*ˆHØŸ™ØGOÖPÀœVŸ[™[¨¬s°2«wÓ7¸"Ó<ÒPóˆIð¤×!4Ñ!4°YÓ!?ÀÀÐ!DÑDÐ Dô˜dŸf™f d§f¡f¨d¯f©fÐ5Ó6ˆØ × Ñ Ô Øˆ}ؐÙÙ!Ø!EJÜ(¨¯©Ó0×7Ñ7Ó9 Ü"ŸZ™ZØ +¬S°*Ø *°vØ)1ô"
ñ
Ø2‘Hà(HØ!‘
à˜U’?¡zÜ$Ð%JÓKÐKؘ4Ÿ6™6 4§6¡6¨4¯6©6°4·6±6¸4¿6¹6ÐBÜ(¨Ó.×5Ñ5Ó7
Ø(‘áÜ Ð!MÓNÐNä8¼Ü *¨4¯6©6Ó 2°Fó<ˆJàˆHà UŠ?ØÐ Ø UŠ?Ü—j‘jØ *¨H°vÑ,=Ø *¨HóˆGô˜7Ó#Ð #ÜÐNÐQWÑWÓXÐXùòsKùò+ùòQs©$H4ÁH9Á<)H>có—td«‚©Nz'Use module Crypto.Signature.DSS instead©ÚNotImplementedError)r-ÚMÚKs   r2Úsignz DsaKey.signUó€Ü!Ð"KÓLÐLr4có—td«‚r©rª)r-r¬Ú    signatures   r2Úverifyz DsaKey.verifyXr¯r4có—t‚rZrª)r-Ú    plaintextr­s   r2ÚencryptzDsaKey.encrypt[ó€Ü!Ð!r4có—t‚rZrª)r-Ú
ciphertexts  r2ÚdecryptzDsaKey.decrypt^r¶r4có—t‚rZrª©r-r¬ÚBs   r2Úblindz DsaKey.blindar¶r4có—t‚rZrªr»s   r2ÚunblindzDsaKey.unblinddr¶r4có—t‚rZrªrRs r2Úsizez DsaKey.sizegr¶r4)rNNNN)ruÚ
__module__Ú __qualname__Ú__doc__rar3rHrOr9rUrWr^rergrkrmrzrr§Ú    exportKeyÚ    publickeyr®r²rµr¹r½r¿rÁrTr4r2rrNs“„ñò,)€Hò
#ò ò"    ò ò
òò)òò&òò
Bò Vò'ð ?CØ,0ó{Yð|€IØ€IòMòMò"ò"ò"ò"ó"r4rc
óŽ—ddddœj|«}|€td|z«‚tjdz}||zdz
|zdz
}|dz
||zz
}t    d«}d|dz
z}t ||«t k7r`|d    «}t    jtj|«j««|dz
z}    |    |zdz}t ||«t k7rŒ`|j«|k(sJ‚d}
d|dz
z}    t|dz«D cgc]B} tjt    |
| z«j«z«j«‘ŒD} } | D cgc]} t    j| «‘Œ} } tt|«Dcgc]}| |d||zzz‘Œc}| |d|zdz
zd||zzz«}t    ||z«}|j«|k(sJ‚||d
zz}||dz
z
}|j«|k(rt ||«t k(rn
|
|dzz }
Œ#|dz
|z}tjd«D]w}d zt!d«zt    |«j«z}    t    jtj|    «j««}t#|||«}|dk7sŒwn||fScc} wcc} wcc}w) z+Generate a new set of DSA domain parametersé éàé)ééé zInvalid modulus length (%d)ér6éé@ésggen)Úgetr)rÚ digest_sizerrrÚ
from_bytesÚnewÚdigestrqr rÚsumÚ    itertoolsÚcountrr=)ÚLrŠÚNÚoutlenÚnÚb_r!Ú    upper_bitÚseedÚUÚoffsetÚjÚVrNÚiÚWÚXÚcr ÚerÙrs                      r2Ú_generate_domainrêks߀ð˜ 3Ñ(×,Ñ,¨QÓ/€AØ€yÜÐ6¸Ñ:Ó;Ð;ä × Ñ  !Ñ #€FØ    
ˆV‰a‰˜FÑ" QÑ&€AØ    
ˆQ‰!f‘*Ñ    €Bô    ‹
€Aؐa˜!‘e‘ €IÜ
˜a Ó
*¬nÒ
<Ù˜‹|ˆÜ × Ñ œvŸz™z¨$Ó/×6Ñ6Ó8Ó 9¸Yȹ]Ñ KˆØ     ‰M˜AÑ ˆô ˜a Ó
*¬nÓ
>‰>Ó ˜qÒ  Ð!Ð  ð€Fؐa˜!‘e‘ €IØ
ä! ! a¡%Ó(ö +Øôj‰j˜¤¨°©
Ó 3× <Ñ <Ó >Ñ>Ó?×FÑFÕHð +ˆð +à-.Ö 0¨Œg× Ñ  Õ#Ð 0ˆÐ 0Ü ´ZÀ³]ÖC°1‘˜˜q 6™zÑ*Ó+ÒCؐ1‘˜!˜r™' Q™Ñ'¨A°!°f±*Ñ,=Ñ>ó @ˆô A˜    ‘MÓ "ˆØ~‰~Ó 1Ò$Ð%Ð$à Q‘‰KˆØ Q‘‰KˆØ >‰>Ó ˜qÒ  Ü ˜q (Ó +¬~Ò =ØØ!a‘%‰ˆñ ð$
ˆQ‰1‰ €AÜ—‘ Ó#òˆØ 7‰NœT !›WÑ $¤w¨u£~×'>Ñ'>Ó'@Ñ @ˆÜ × Ñ œvŸz™z¨!›}×3Ñ3Ó5Ó 6ˆÜ 1a‹LˆØ ‹6Ù ð ð ˆq!Tˆ?Ðùò3 +ùâ 0ùÚCsÄAJ8ÅJ=ÆKcó —|€tj}|rxtt|«\}}}t    |«t
k(}|t    |«t
k(z}||dz
|zdk7z}||dkxs||k\z}|t |||«dk7z}|rtd«‚t||«\}}}}|j«}|j«}    ||k7rtd||fz«‚||    fdvrtd||    fz«‚d|cxkr|kstd«‚td«‚tj|    dz|¬    «}
|
|dz
zdz} t || |«} | |||| d
œ} t| «S) aÖGenerate a new DSA key pair.
 
    The algorithm follows Appendix A.1/A.2 and B.1 of `FIPS 186-4`_,
    respectively for domain generation and key pair generation.
 
    Args:
      bits (integer):
        Key length, or size (in bits) of the DSA modulus *p*.
        It must be 1024, 2048 or 3072.
 
      randfunc (callable):
        Random number generation function; it accepts a single integer N
        and return a string of random data N bytes long.
        If not specified, :func:`Crypto.Random.get_random_bytes` is used.
 
      domain (tuple):
        The DSA domain parameters *p*, *q* and *g* as a list of 3
        integers. Size of *p* and *q* must comply to `FIPS 186-4`_.
        If not specified, the parameters are created anew.
 
    Returns:
      :class:`DsaKey` : a new DSA key object
 
    Raises:
      ValueError : when **bits** is too little, too big, or not a multiple of 64.
 
    .. _FIPS 186-4: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf
    r6rzInvalid DSA domain parametersz?Mismatch between size of modulus (%d) and 'bits' parameter (%d)))rËrÈ)rÌrÉ)rÌrÊ)rÍrÊz;Lengths of p and q (%d, %d) are not compatibleto FIPS 186-3zIncorrent DSA generatorrÐ)Ú
exact_bitsrŠr) r rŽr>rrrr=r)rêrqÚrandomr)ryrŠrmr r!rÚ    fmt_errorÚ_rÚrÛrèr"rr.s              r2rr s¢€ð<ÐÜ×*Ñ*ˆá Ü”g˜vÓ&‰ˆˆ1ˆaô(¨Ó*¬iÑ7ˆ    ØÔ(¨Ó+¬yÑ8Ñ8ˆ    àq˜1‘u ‘k aÑ'Ñ'ˆ    ØQ˜!‘VÒ%˜q A™vÑ%ˆ    Ø”S˜˜A˜q“\ QÑ&Ñ&ˆ    Ù ÜÐ<Ó=Ð =ä% d¨HÓ5‰
ˆˆ1ˆaà    ‰Ó€AØ    ‰Ó€AàˆD‚yÜð6Ø9:¸D¸    ñBóCð    Cð    
ˆ1€vð0ñ0äð)Ø,-¨q¨6ñ2ó3ð    3ð ˆqŒ91Š9ÜÐ2Ó3Ð3ð ÜÐ2Ó3Ð3ô    ‰ ! b¡&°8Ô<€AØ    ˆQ‰U‰ a‰€AÜ ˆAˆq!‹ €Aà˜A 1¨!°Ñ4€HÜ (Ó Ðr4c    ó>—ttdtt|«««}t    |«}d}|r\t |j «tk(}|t |j«tk(z}||j dz
|jzdk7z}||jdkxs|j|j k\z}|t|j|j|j «dk7z}||jdkxs|j|j k\z}t|d«rh||jdkxs|j|jk\z}|t|j|j|j «|jk7z}|r td«‚|S)a²Construct a DSA key from a tuple of valid DSA components.
 
    Args:
      tup (tuple):
        A tuple of long integers, with 4 or 5 items
        in the following order:
 
            1. Public key (*y*).
            2. Sub-group generator (*g*).
            3. Modulus, finite field order (*p*).
            4. Sub-group order (*q*).
            5. Private key (*x*). Optional.
 
      consistency_check (boolean):
        If ``True``, the library will verify that the provided components
        fulfil the main DSA properties.
 
    Raises:
      ValueError: when the key being imported fails the most basic DSA validity checks.
 
    Returns:
      :class:`DsaKey` : a DSA key object
    rFr6rr"zInvalid DSA key components)r+Úzipr>rrrr rr!rr=rrsr"r))ÚtupÚconsistency_checkr.Úkeyrîs     r2rrésN€ô2”CÐ1´3´wÀÓ3DÓEÓF€HÜ
Ó
€Cà€IÚä'¨¯©Ó.´)Ñ;ˆ    ØÔ(¨¯©Ó/´9Ñ<Ñ<ˆ    às—u‘u˜q‘y C§E¡EÑ)¨aÑ/Ñ/ˆ    ØS—U‘U˜a‘ZÒ1 3§5¡5¨C¯E©E¡>Ñ1ˆ    Ø”S˜Ÿ™ §¡ s§u¡uÓ-°Ñ2Ñ2ˆ    àS—U‘U˜a‘ZÒ1 3§5¡5¨C¯E©E¡>Ñ1ˆ    Ü 3˜Ô Ø ˜Ÿ™ !™Ò5 s§u¡u°·±¡~Ñ 5ˆIØ œ˜SŸU™U C§E¡E¨3¯5©5Ó1°S·U±UÑ:Ñ :ˆIáÜÐ5Ó6Ð6à €Jr4có¾—|r td«‚t«j|dd¬«}|ddk7r td«‚dDcgc]}||‘Œ    }}t|«Scc}w)Nz-DSA private key already comes with parameterséT)Ú nr_elementsÚonly_ints_expectedrzNo version found)rÏér6rÑé)r)rÚdecoder)Úencodedršr¡ÚderrBròs      r2Ú_import_openssl_privaterþ!sg€Ù ÜÐHÓIÐIÜ
‹-×
˜w°AÈ$Ð
O€CØ
ˆ1v‚{ÜÐ+Ó,Ð,Ø!0Ö
1˜ˆ3ˆt‹9Ð
1€CÐ
1Ü S‹>Ðùò 2sÁ Acó"—t|«\}}}|tk7r td«‚|r |r td«‚t«j    |«j
}t t«j    |xs|««\}}}    ||    ||f}
t|
«S)NzNo DSA subjectPublicKeyInfozToo many DSA parameters)    rr—r)rrûÚvalueÚlistrr) rüršr¡ÚalgoidÚ encoded_keyÚ
emb_paramsrr r!rròs            r2Ú_import_subjectPublicKeyInfor+sˆ€ä'FÀwÓ'OÑ#€FˆK˜Ø ”‚}ÜÐ6Ó7Ð7Ù ‘*ÜÐ2Ó3Ð3ä‹ ×јKÓ(×.Ñ.€AÜ”;“=×'Ñ'¨Ò(<°*Ó=Ó>G€A€qˆ!Ø ˆaAˆ,€CÜ S‹>Ðr4có2—t|«}t|d|«SrZ)rr)rüršr¡Úsp_infos    r2Ú_import_x509_certr9s€ä.¨wÓ7€GÜ '¨°°vÓ >Ð>r4cóN—|r td«‚tj||«}|dtk7r td«‚t    «j |d«j }tt«j |d««\}}}t|||«||||f}t|«S)Nz"PKCS#8 already includes parametersrzNo PKCS#8 encoded DSA keyr6rÑ) r)r Úunwrapr—rrûrrrr=r)    rüršr¡rAr"r r!rròs             r2Ú _import_pkcs8r ?s—€Ù ÜÐ=Ó>Ð>Ü  ‰ W˜jÓ)€A؈tŒs‚{ÜÐ4Ó5Ð5Ü‹ ×јA˜a™DÓ!×'Ñ'€AÜ”;“=×'Ñ'¨¨!©Ó-Ó.G€A€qˆ!Ü ˆq!Q‹<˜˜A˜q !Ð
$€CÜ S‹>Ðr4cóˆ—ttttf}|D]}    ||||«cSt    d«‚#t$rYŒ'wxYw)z?Import a DSA key (public or private half), encoded in DER form.úDSA key format is not supported)rþrrr r))Úkey_dataršr¡Ú    decodingsÚdecodings     r2Ú_import_key_derrKs^€ô)Ü-Ü"Üð €Ið
òˆð    Ù˜H j°&Ó9Ò 9ðô Ð6Ó
7Ð7øôò    Ù ð    ús    5µ    AÁAcóÈ—t|«}| t|«}|jd«r4tjt    |«|«\}}}|rd}t ||d«S|jd«r¹t j|jd«d«}g}t|«dkDrJtjd|dd«d}|j|dd|z«|d|zd}t|«dkDrŒJ|dd    k(r0d
Dcgc]}tj||«‘Œ}    }t|    «St|«dkDrt!|d«d k(r t ||d«St#d «‚cc}w) aðImport a DSA key.
 
    Args:
      extern_key (string or byte string):
        The DSA key to import.
 
        The following formats are supported for a DSA **public** key:
 
        - X.509 certificate (binary DER or PEM)
        - X.509 ``subjectPublicKeyInfo`` (binary DER or PEM)
        - OpenSSH (ASCII one-liner, see `RFC4253`_)
 
        The following formats are supported for a DSA **private** key:
 
        - `PKCS#8`_ ``PrivateKeyInfo`` or ``EncryptedPrivateKeyInfo``
          DER SEQUENCE (binary or PEM)
        - OpenSSL/OpenSSH custom format (binary or PEM)
 
        For details about the PEM encoding, see `RFC1421`_/`RFC1423`_.
 
      passphrase (string):
        In case of an encrypted private key, this is the pass phrase
        from which the decryption key is derived.
 
        Encryption may be applied either at the `PKCS#8`_ or at the PEM level.
 
    Returns:
      :class:`DsaKey` : a DSA key object
 
    Raises:
      ValueError : when the given key cannot be parsed (possibly because
        the pass phrase is wrong).
 
    .. _RFC1421: http://www.ietf.org/rfc/rfc1421.txt
    .. _RFC1423: http://www.ietf.org/rfc/rfc1423.txt
    .. _RFC4253: http://www.ietf.org/rfc/rfc4253.txt
    .. _PKCS#8: http://www.ietf.org/rfc/rfc5208.txt
    Ns-----r‡ó r6rÏr†rr…)rÏrùr6rÑé0r )r    Ú
startswithrrûr
rr“Ú
a2b_base64Úsplitr’rÚunpackrrrrÔrrr))
Ú
extern_keyršrýÚmarkerÚenc_flagr ržÚlengthr"ròs
          r2rr\sf€ôP˜Ó$€JØÐܘZÓ(ˆ
à×јXÔ&ä"%§*¡*¬U°:Ó->À
Ó"Kшˆfh٠؈Jܘs J°Ó5Ð5à×ј[Ô)ä×'Ñ'¨
×(8Ñ(8¸Ó(>¸qÑ(AÓBˆ    ØˆÜ)‹n˜qÒ Ü—]‘] 4¨°2°A¨Ó7¸Ñ:ˆFØ O‰O˜I a¨¨F©
Ð3Ô 4Ø! ! f¡* +Ð.ˆIô)‹n˜qÓ ð A‰;˜*Ò $Ø<HÖI°q”7×%Ñ% h¨q¡kÕ2ÐIˆCÐIܘS“>Ð !ä
ˆ:ƒ˜Òœt J¨q¡MÓ2°dÒ:ä˜z¨:°tÓ<Ð<ä
Ð6Ó
7Ð7ùòJsÃ<Ez1.2.840.10040.4.1)NN)TrZ).Ú__all__r“rrØÚCrypto.Util.py3compatrrr    r
r ÚCryptor Ú    Crypto.IOr rÚ Crypto.HashrÚCrypto.Util.asn1rrrrrÚCrypto.Math.NumbersrÚCrypto.Math.PrimalityrrrÚCrypto.PublicKeyrrrÚobjectrrêrrrþrrr rrÚ    importKeyr—rTr4r2ú<module>r(sšðò2 =€ãÛ ÛçHÕHåß Ý÷õõ (÷3ñ3÷@ñ@ô@Z"ˆVôZ"òz2ójFóR.òpò ò?ò     ò8ó"C8ðN €    ðr4