pg8 UddlZddlZddlZddlmZddlmZddlmZm Z ddl mZ GddZ Gddej ZGd d ej ZGd d ej ZeZGddej ZeZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGd d!eZGd"d#eZGd$d%eZGd&d'eZGd(d)eZ Gd*d+eZ!Gd,d-eZ"Gd.d/eZ#Gd0d1eZ$Gd2d3eZ%Gd4d5eZ&id6e#d7e d8e#d9e"d:e d;eded?ed@edAedBedCedDedEedFeee$e%e&dGZ'ej(e)ej*efe+dH<GdIdJeZ, dYdKedLej-dMefdNZ. dYdOe/dKedLej-dMefdPZ0GdQdRZ1GdSdTZ2GdUdVZ3ie j#e#e j"e"e j!e!e j e e jee jee j4e$e j5e%e j6e&e jee jee jee jee jee jee jee jee jee jeiZ7dWedMej*efdXZ8dS)ZN)utils)ObjectIdentifier)_serializationhashesceZdZedZedZedZedZedZedZ edZ edZ ed Z ed Z ed Zed Zed ZedZedZedZedZedZedZdS)EllipticCurveOIDz1.2.840.10045.3.1.1z 1.3.132.0.33z 1.3.132.0.10z1.2.840.10045.3.1.7z 1.3.132.0.34z 1.3.132.0.35z1.3.36.3.3.2.8.1.1.7z1.3.36.3.3.2.8.1.1.11z1.3.36.3.3.2.8.1.1.13z 1.3.132.0.1z 1.3.132.0.15z 1.3.132.0.26z 1.3.132.0.27z 1.3.132.0.16z 1.3.132.0.17z 1.3.132.0.36z 1.3.132.0.37z 1.3.132.0.38z 1.3.132.0.39N)__name__ __module__ __qualname__r SECP192R1 SECP224R1 SECP256K1 SECP256R1 SECP384R1 SECP521R1BRAINPOOLP256R1BRAINPOOLP384R1BRAINPOOLP512R1 SECT163K1 SECT163R2 SECT233K1 SECT233R1 SECT283K1 SECT283R1 SECT409K1 SECT409R1 SECT571K1 SECT571R1N/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ec.pyrrsC  !677I  00I  00I  !677I  00I  00I&&'=>>O&&'>??O&&'>??O  //I  00I  00I  00I  00I  00I  00I  00I  00I  00IIIr rcZeZdZejdefdZejdefdZdS) EllipticCurvereturncdS)z8 The name of the curve. e.g. secp256r1. Nrselfs r!namezEllipticCurve.name)r cdSz< Bit size of a secret scalar for the curve. Nrr&s r!key_sizezEllipticCurve.key_size/r)r N) r r r abcabstractpropertystrr(intr,rr r!r#r#(sh c      #      r r#) metaclasscbeZdZejdejeje j ffdZ dS)EllipticCurveSignatureAlgorithmr$cdS)z@ The digest algorithm used with this signature. Nrr&s r! algorithmz)EllipticCurveSignatureAlgorithm.algorithm7r)r N) r r r r-r.typingUnion asym_utils Prehashedr HashAlgorithmr5rr r!r3r36sP j*F,@@ A      r r3c JeZdZejdddddefdZejddZejde fdZ ejde fd Z ejd ed e defd ZejddZejdejdejdejdefdZdS)EllipticCurvePrivateKeyr5ECDHpeer_public_keyEllipticCurvePublicKeyr$cdS)z} Performs a key exchange operation using the provided algorithm with the provided peer's public key. Nr)r'r5r>s r!exchangez EllipticCurvePrivateKey.exchangeAr)r cdS)zB The EllipticCurvePublicKey for this private key. Nrr&s r! public_keyz"EllipticCurvePrivateKey.public_keyJr)r cdSz8 The EllipticCurve that this key is on. Nrr&s r!curvezEllipticCurvePrivateKey.curvePr)r cdSr+rr&s r!r,z EllipticCurvePrivateKey.key_sizeVr)r datasignature_algorithmcdS)z Signs the data Nr)r'rHrIs r!signzEllipticCurvePrivateKey.sign\r)r EllipticCurvePrivateNumberscdS)z9 Returns an EllipticCurvePrivateNumbers. Nrr&s r!private_numbersz'EllipticCurvePrivateKey.private_numbersfr)r encodingformatencryption_algorithmcdSz6 Returns the key serialized as bytes. Nr)r'rOrPrQs r! private_bytesz%EllipticCurvePrivateKey.private_byteslr)r N)r$r?)r$rL)r r r r-abstractmethodbytesrArCr.r#rFr0r,r3rKrNrEncoding PrivateFormatKeySerializationEncryptionrTrr r!r<r<@s  2J            }      #       =               ) , -G         r r<c eZdZejdefdZejdefdZej ddZ ej de j de j defdZej d ed ed edd fd Zeded eddfdZd S)r?r$cdSrErr&s r!rFzEllipticCurvePublicKey.curve|r)r cdSr+rr&s r!r,zEllipticCurvePublicKey.key_sizer)r EllipticCurvePublicNumberscdS)z8 Returns an EllipticCurvePublicNumbers. Nrr&s r!public_numbersz%EllipticCurvePublicKey.public_numbersr)r rOrPcdSrSr)r'rOrPs r! public_bytesz#EllipticCurvePublicKey.public_bytesr)r signaturerHrINcdS)z5 Verifies the signature of the data. Nr)r'rbrHrIs r!verifyzEllipticCurvePublicKey.verifyr)r rFc"tjd|t|tst dt |dkrt d|ddvrt dddlm}| ||S)NrH'curve must be an EllipticCurve instancerz%data must not be an empty byte string)%Unsupported elliptic curve point typebackend) r _check_bytes isinstancer# TypeErrorlen ValueError,cryptography.hazmat.backends.openssl.backendrl load_elliptic_curve_public_bytes)clsrFrHrls r!from_encoded_pointz)EllipticCurvePublicKey.from_encoded_points 64(((%// GEFF F t99>>DEE E 7, , ,DEE EHHHHHH77tDDDr )r$r])r r r r-r.r#rFr0r,rUr_rrW PublicFormatrVrar3rd classmethodrurr r!r?r?{s] }      #            ) +           =       E!E).E !EEE[EEEr r?ceZdZdZdZdS)r sect571r1i:Nr r r r(r,rr r!rr DHHHr rceZdZdZdZdS)r sect409r1Nrzrr r!rrr{r rceZdZdZdZdS)r sect283r1Nrzrr r!rrr{r rceZdZdZdZdS)r sect233r1Nrzrr r!rrr{r rceZdZdZdZdS)r sect163r2Nrzrr r!rrr{r rceZdZdZdZdS)r sect571k1i;Nrzrr r!rrr{r rceZdZdZdZdS)r sect409k1r~Nrzrr r!rrr{r rceZdZdZdZdS)r sect283k1rNrzrr r!rrr{r rceZdZdZdZdS)r sect233k1rNrzrr r!rrr{r rceZdZdZdZdS)r sect163k1rNrzrr r!rrr{r rceZdZdZdZdS)r secp521r1i Nrzrr r!rrr{r rceZdZdZdZdS)r secp384r1Nrzrr r!rrr{r rceZdZdZdZdS)r secp256r1Nrzrr r!rrr{r rceZdZdZdZdS)r secp256k1rNrzrr r!rrr{r rceZdZdZdZdS)r secp224r1Nrzrr r!r r r{r r ceZdZdZdZdS)r secp192r1Nrzrr r!r r r{r r ceZdZdZdZdS)BrainpoolP256R1brainpoolP256r1rNrzrr r!rr  DHHHr rceZdZdZdZdS)BrainpoolP384R1brainpoolP384r1rNrzrr r!rrrr rceZdZdZdZdS)BrainpoolP512R1brainpoolP512r1iNrzrr r!rrrr r prime192v1 prime256v1rrrrrrrrrrrrrrr})ryrrr _CURVE_TYPESceZdZdejejejffdZ e dejejejffdZ dS)ECDSAr5c||_dSN _algorithm)r'r5s r!__init__zECDSA.__init__3s$r r$c|jSrrr&s r!r5zECDSA.algorithm9s r N) r r r r6r7r8r9rr:rpropertyr5rr r!rr2s|$< 4f6J JK$$$$  j*F,@@ AXr rrFrlr$c8ddlm}||SNrrk)rrrl#generate_elliptic_curve_private_key)rFrlossls r!generate_private_keyr@s+MLLLLL  3 3E : ::r private_valuecddlm}t|tst d|dkrt dt|t st d|||S)Nrrkz&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)rrrlrnr0rorqr#!derive_elliptic_curve_private_key)rrFrlrs r!derive_private_keyrHs MLLLLL mS ) )B@AAADEEE e] + +KIJJJ  1 1- G GGr ceZdZdededefdZddejdefdZ de fd Z e ded e ddfd Z edefd Zedefd ZedefdZdedefdZdefdZdefdZdS)r]xyrFct|trt|tstdt|tstd||_||_||_dS)Nzx and y must be integers.r)rnr0ror#_y_x_curve)r'rrrFs r!rz#EllipticCurvePublicNumbers.__init__\so!S!! 9As);); 9788 8%// OMNN N r Nrlr$c8ddlm}||Sr)rrrl"load_elliptic_curve_public_numbersr'rlrs r!rCz%EllipticCurvePublicNumbers.public_keygs6      66t<<A-!3K4yyA Oa///NN4K!O(;#)rPr&s r!__repr__z#EllipticCurvePublicNumbers.__repr__s vd|| r r)r r r r0r#rr6Anyr?rCrVrrwrurrFrrobjectboolrrr/rrr r!r]r][s # # m    ==&*=8N==== e    "F!F).F %FFF[F4}X3X3X  F  t     L#LLLL #      r r]ceZdZdedefdZ d dejdefdZ e defdZ e defd Z d e defd Zdefd ZdS)rLrr_ct|tstdt|tstd||_||_dS)Nz!private_value must be an integer.z>public_numbers must be an EllipticCurvePublicNumbers instance.)rnr0ror]_private_value_public_numbers)r'rr_s r!rz$EllipticCurvePrivateNumbers.__init__sh--- A?@@ @.*DEE   ,-r Nrlr$c8ddlm}||Sr)rrrl#load_elliptic_curve_private_numbersrs r! private_keyz'EllipticCurvePrivateNumbers.private_keys6      77===r c|jSr)rr&s r!rz)EllipticCurvePrivateNumbers.private_values ""r c|jSr)rr&s r!r_z*EllipticCurvePrivateNumbers.public_numberss ##r rczt|tstS|j|jko|j|jkSr)rnrLrrr_rs r!rz"EllipticCurvePrivateNumbers.__eq__sC%!<== "! !  %"5 5 <#u';; r c8t|j|jfSr)rrr_r&s r!rz$EllipticCurvePrivateNumbers.__hash__sT')<=>>>r r)r r r r0r]rr6rr<rrrr_rrrrrr r!rLrLs .  .2L . . . . %)>>z> >>>>#s###X#$ :$$$X$ F t    ?#??????r rLceZdZdS)r=N)r r r rr r!r=r=sDr r=oidcX t|S#t$rtdwxYw)NzCThe provided object identifier has no matching elliptic curve class) _OID_TO_CURVEKeyError LookupError)rs r!get_curve_for_oidrsD S!!         s )r)9r-r6r cryptographyrcryptography.hazmat._oidrcryptography.hazmat.primitivesrr)cryptography.hazmat.primitives.asymmetricr8rABCMetar#r3r<(EllipticCurvePrivateKeyWithSerializationr?'EllipticCurvePublicKeyWithSerializationrrrrrrrrrrrrrrr r rrrrDictr/Type__annotations__rrrr0rr]rLr=rrrrrrr r!r s9  555555AAAAAAAA 11111111,      ck               5 5 5 5 5  5 5 5 5 p,C(9E9E9E9E9Es{9E9E9E9Ex+A'                                m m m >)>)>> >  >  >>>>>>>>>> !>"#>$&&&+>>> fk#v{=99:2      +   15;; ;#):;;;;;HHH HZH HHHH&] ] ] ] ] ] ] ] @+?+?+?+?+?+?+?+?\                $o$o$o        !" #$  ' . +  M0J      r