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
Ë
ž¬`iÅ"ãóZ—gd¢ZddlmZddlmZmZmZddlmZd„Z    d„Z
Gd„de «Z y    )
)ÚgenerateÚ    constructÚ
ElGamalKeyé)ÚRandom)Úgenerate_probable_safe_primeÚtest_probable_primeÚ    COMPOSITE)ÚIntegercóf—t«}t||¬«|_|jdz
dz    }    tt    j
d|j|¬«d|j«|_|j dvrŒL|jdz
|j zdk(rŒl|j j|j«}|jdz
|zdk(rŒ§    t    j
d|jdz
|¬«|_t|j |j|j«|_    |S)a Randomly generate a fresh, new ElGamal key.
 
    The key will be safe for use for both encryption and signature
    (although it should be used for **only one** purpose).
 
    Args:
      bits (int):
        Key length, or size (in bits) of the modulus *p*.
        The recommended value is 2048.
      randfunc (callable):
        Random number generation function; it should accept
        a single integer *N* and return a string of random
        *N* random bytes.
 
    Return:
        an :class:`ElGamalKey` object
    )Ú
exact_bitsÚrandfuncéé©Ú min_inclusiveÚ max_exclusiver )rrr)
rrÚpÚpowr
Ú random_rangeÚgÚinverseÚxÚy)Úbitsr ÚobjÚqÚginvs     õkH:\项目\archive\测试组\脚本\Change_password\venv_build\Lib\site-packages\Crypto/PublicKey/ElGamal.pyrr"s €ô&    ‹ €Cô )°DÀ8Ô L€C„EØ     ‰‰qÑ€Að ä”G×(Ñ(°qØ36·5±5Ø.6ô8à9:¸C¿E¹EóCˆŒð 5‰5F‰?Ø ð E‰EA‰I˜Ÿ™Ñ  !Ò #Ø ð
u‰u}‰}˜SŸU™UÓ#ˆØ E‰EA‰I˜Ñ  Ò "Ø ð    ô ×  Ñ  ¨qØ/2¯u©u°Q©wØ*2ô 4€C„Eô —‘s—u‘u˜cŸe™eÓ $€C„EØ €Jóc    ó&—t«}t|«dvr td«‚tt|««D]*}|j|}t ||t ||««Œ,t|j«tk(}||jdkxs|j|jk\z}|t|j|jdz
|j«dk7z}||jdkxs|j|jk\z}t|«dk(rh||jdkxs|j|jk\z}|t|j|j|j«|jk7z}|r td«‚|S)aÍConstruct an ElGamal key from a tuple of valid ElGamal components.
 
    The modulus *p* must be a prime.
    The following conditions must apply:
 
    .. math::
 
        \begin{align}
        &1 < g < p-1 \\
        &g^{p-1} = 1 \text{ mod } 1 \\
        &1 < x < p-1 \\
        &g^x = y \text{ mod } p
        \end{align}
 
    Args:
      tup (tuple):
        A tuple with either 3 or 4 integers,
        in the following order:
 
        1. Modulus (*p*).
        2. Generator (*g*).
        3. Public key (*y*).
        4. Private key (*x*). Optional.
 
    Raises:
        ValueError: when the key being imported fails the most basic ElGamal validity checks.
 
    Returns:
        an :class:`ElGamalKey` object
    )ééz%argument for construct() wrong lengthrr"zInvalid ElGamal key components)rÚlenÚ
ValueErrorÚrangeÚ_keydataÚsetattrr
rrr    rrrr)ÚtuprÚiÚfieldÚ    fmt_errors     rrr`sI€ô@    ‹ €CÜ
ˆ3ƒxuÑÜÐ@ÓAÐAÜ ”3s“8‹_ò-ˆØ— ‘ ˜Q‘ˆÜUœG C¨¡F›OÕ,ð-ô$ C§E¡EÓ*¬iÑ7€IØ —‘˜‘Ò)˜SŸU™U C§E¡E™\Ñ)€IØ ”S—U‘U˜CŸE™E !™G S§U¡UÓ+¨QÑ.Ñ.€IØ —‘q‘Ò(˜CŸE™E 3§5¡5™LÑ(€IÜ
ˆ3ƒx‚{ؐS—U‘U˜A‘XÒ- §¡¨¯©¡Ñ-ˆ    Ø”S˜Ÿ™ §¡ s§u¡uÓ-¨s¯u©uÑ4Ñ4ˆ    áÜÐ9Ó:Ð:à €JrcóŒ—eZdZdZgd¢Zdd„Zd„Zd„Zd„Zd„Z    d    „Z
d
„Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zy)raPClass defining an ElGamal key.
    Do not instantiate directly.
    Use :func:`generate` or :func:`construct` instead.
 
    :ivar p: Modulus
    :vartype d: integer
 
    :ivar g: Generator
    :vartype e: integer
 
    :ivar y: Public key component
    :vartype y: integer
 
    :ivar x: Private key component
    :vartype x: integer
    )rrrrNcóR—|€tj«j}||_y©N)rÚnewÚreadÚ    _randfunc)Úselfr s  rÚ__init__zElGamalKey.__init__³s €Ø Ð Ü—z‘z“|×(Ñ(ˆHØ!ˆrcóҗt|j||j«}t|j||j«|z|jz}t    |«t    |«gSr.)rrrrÚint)r2ÚMÚKÚaÚbs     rÚ_encryptzElGamalKey._encrypt¸sO€Ü
ˆdf‰fa˜Ÿ™Ó
 ˆÜ —‘˜˜4Ÿ6™6Ó " 1Ñ $¨¯©Ñ
/ˆÜA“œ˜A›ÐÐrcó —t|d«s td«‚tjd|jdz
|j
¬«}t |j||j«|dz|jz}t ||j|j«}|j|j«|dz|jz}|t |j||j«z|jz}t|«S)Nrú(Private key not available in this objectrrrr) ÚhasattrÚ    TypeErrorr
rrr1rrrrrr5)r2r6ÚrÚa_blindÚaxÚplaintext_blindÚ    plaintexts       rÚ_decryptzElGamalKey._decrypt½s΀ܘ˜cÔ"ÜÐFÓGÐ GÜ ×  Ñ  ¨qØ/3¯v©v°a©xØ*.¯.©.ô :ˆôt—v‘v˜q $§&¡&Ó)¨A¨a©DÑ0°D·F±FÑ:ˆÜ ˆw˜Ÿ™ §¡Ó 'ˆØŸ:™: d§f¡fÓ-°°!±Ñ4¸¿¹Ñ?ˆØ$¤s¨4¯6©6°1°d·f±fÓ'=Ñ=ÀÇÁÑGˆ    Ü9‹~Ðrcóš—t|d«s td«‚|jdz
}t|«}|j    |«dk7r t d«‚t |j||j«}t|«|j|zz
|z}|dkr ||z}|dkrŒ ||j|«z|z}t|«t|«gS)Nrr<rzBad K value: GCD(K,p-1)!=1r) r=r>rr
Úgcdr$rrrrr5)r2r6r7Úp1r8Útr9s       rÚ_signzElGamalKey._signÉs¸€Ü˜˜cÔ"ÜÐFÓGÐ GØ 6‰6!‰8ˆÜ A‹JˆØ E‰E"‹IqŠLÜÐ9Ó:Ð :Ü
ˆdf‰fa˜Ÿ™Ó
 ˆÜ 1‹:d—f‘f˜Q‘hÑ  "Ñ
$ˆØŠcQr‘T1ˆa‹cØ ˆQY‰Yr‹]‰?˜bÑ
 ˆÜA“œ˜A›ÐÐrcój—|Dcgc] }t|«‘Œ}}|ddks|d|jdz
kDryt|j|d|j«}|t|d|d|j«z|jz}t|j||j«}||k(ryycc}w)Nrr)r
rrrr)r2r6ÚsigrÚv1Úv2s      rÚ_verifyzElGamalKey._verifyÖs£€Ø#&Ö'˜aŒwqzÐ'ˆÐ'Ø ˆq‰6!Š8s˜1‘v˜dŸf™f Q™h’ØÜ ˆtv‰vs˜1‘v˜tŸv™vÓ &ˆØ Œs3q‘6˜3˜q™6 4§6¡6Ó*Ñ *¨d¯f©fÑ 4ˆÜ ˆtv‰vq˜$Ÿ&™&Ó !ˆØ ˆrŠ6ØØùò(s…B0có—t|d«ryy)z&Whether this is an ElGamal private keyrrr)r=©r2s rÚ has_privatezElGamalKey.has_privateás€ô 4˜Ô Øàrcó—y©NT©rPs rÚ can_encryptzElGamalKey.can_encryptéó€Ørcó—yrSrTrPs rÚcan_signzElGamalKey.can_signìrVrcóZ—t|j|j|jf«S)zfA matching ElGamal public key.
 
        Returns:
            a new :class:`ElGamalKey` object
        )rrrrrPs rÚ    publickeyzElGamalKey.publickeyïs"€ô ˜$Ÿ&™& $§&¡&¨$¯&©&Ð1Ó2Ð2rcóú—t|j««t|j««k7ryd}|jD]5}|xr/t|j|d«t|j|d«k(}Œ7|S)NFT)ÚboolrQr&ÚgetattrÚkey)r2ÚotherÚresultÚcomps    rÚ__eq__zElGamalKey.__eq__÷sz€Ü × Ñ Ó"Ó #¤t¨E×,=Ñ,=Ó,?Ó'@Ò @ØàˆØ—M‘Mò    AˆDØòA¤¨¯©°4¸Ó!>Ü!(¨¯©°D¸$Ó!?ñ"@‰Fð    Aðˆ rcó&—|j|« Sr.)rb)r2r_s  rÚ__ne__zElGamalKey.__ne__s€Ø—;‘;˜uÓ%Ð%Ð%rcó—ddlm}|‚)Nr)Ú PicklingError)Úpicklerf)r2rfs  rÚ __getstate__zElGamalKey.__getstate__s €å(ØÐrcó—t‚r.©ÚNotImplementedError)r2r6r7s   rÚsignzElGamalKey.sign ó€Ü!Ð!rcó—t‚r.rj)r2r6Ú    signatures   rÚverifyzElGamalKey.verifyrmrcó—t‚r.rj)r2rCr7s   rÚencryptzElGamalKey.encryptrmrcó—t‚r.rj)r2Ú
ciphertexts  rÚdecryptzElGamalKey.decryptrmrcó—t‚r.rj©r2r6ÚBs   rÚblindzElGamalKey.blindrmrcó—t‚r.rjrws   rÚunblindzElGamalKey.unblindrmrcó—t‚r.rjrPs rÚsizezElGamalKey.sizermrr.)Ú__name__Ú
__module__Ú __qualname__Ú__doc__r&r3r:rDrIrNrQrUrXrZrbrdrhrlrprrruryr{r}rTrrrr”sm„ñò8"€Hó"ò
 ò
 
ò  ò    òòòò3òò&òò"ò"ò"ò"ò"ò"ó"rrN) Ú__all__ÚCryptorÚCrypto.Math.Primalityrrr    ÚCrypto.Math.Numbersr
rrÚobjectrrTrrú<module>r‡s8ðò4 2€å÷EñEå'ò<ò|2ôhJ"õJ"r