3TfC2UddlmZddlZddlZddlmZddlmZddlm Z m Z ddl mZ GddZ Gdd ej ZGd d ej ZGd dej ZeZGddej ZeZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGdd eZGd!d"eZGd#d$eZGd%d&eZGd'd(eZ Gd)d*eZ!Gd+d,eZ"Gd-d.eZ#Gd/d0eZ$Gd1d2eZ%Gd3d4eZ&Gd5d6eZ'id7e$d8e!d9e$d:e#d;e!de"d?ed@edAedBedCedDedEedFedGeee%e&e'dHZ(dIe)dJ<GdKdLeZ* dV dWdMZ+ dV dXdNZ,GdOdPZ-GdQdRZ.GdSdTZ/ie jHe$e jFe#e jDe"e jBe!e j@e e j>ee j`e%e jbe&e jde'e j<ee j2ee j:ee j0ee j8ee j.ee j6ee j,ee j4ee j*eiZ3dYdUZ4y)Z) annotationsN)utils)ObjectIdentifier)_serializationhashesc<eZdZedZedZedZedZedZedZ edZ edZ ed Z ed Z ed Zed Zed ZedZedZedZedZedZedZy)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.pyr r s !67I 0I 0I !67I 0I 0I&'=>O&'>?O&'>?O /I 0I 0I 0I 0I 0I 0I 0I 0I 0Ir!r cleZdZeej ddZeej ddZy) EllipticCurvecy)z8 The name of the curve. e.g. secp256r1. Nr selfs r"namezEllipticCurve.name'r!cyz< Bit size of a secret scalar for the curve. Nr r&s r"key_sizezEllipticCurve.key_size.r)r!Nreturnstrr.int)r r r propertyabcabstractmethodr(r,r r!r"r$r$&sD     r!r$) metaclassc@eZdZeej ddZy)EllipticCurveSignatureAlgorithmcy)z@ The digest algorithm used with this signature. Nr r&s r" algorithmz)EllipticCurveSignatureAlgorithm.algorithm7r)r!Nr.8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm])r r r r2r3r4r9r r!r"r7r76s*  A  r!r7cReZdZej d dZejd dZeejd dZeejd dZ ej d dZ ejddZ ej ddZ y)EllipticCurvePrivateKeycy)z} Performs a key exchange operation using the provided algorithm with the provided peer's public key. Nr )r'r9peer_public_keys r"exchangez EllipticCurvePrivateKey.exchangeBr)r!cy)zB The EllipticCurvePublicKey for this private key. Nr r&s r" public_keyz"EllipticCurvePrivateKey.public_keyKr)r!cyz8 The EllipticCurve that this key is on. Nr r&s r"curvezEllipticCurvePrivateKey.curveQr)r!cyr+r r&s r"r,z EllipticCurvePrivateKey.key_sizeXr)r!cy)z Signs the data Nr )r'datasignature_algorithms r"signzEllipticCurvePrivateKey.sign_r)r!cy)z9 Returns an EllipticCurvePrivateNumbers. Nr r&s r"private_numbersz'EllipticCurvePrivateKey.private_numbersir)r!cyz6 Returns the key serialized as bytes. Nr )r'encodingformatencryption_algorithms r" private_bytesz%EllipticCurvePrivateKey.private_bytesor)r!N)r9ECDHr?EllipticCurvePublicKeyr.bytes)r.rTr.r$r0)rHrUrIr7r.rU)r.EllipticCurvePrivateNumbers)rO_serialization.EncodingrPz_serialization.PrivateFormatrQz)_serialization.KeySerializationEncryptionr.rU) r r r r3r4r@rBr2rEr,rJrLrRr r!r"r=r=As!  0F             =          ) - H     r!r=c>eZdZeej d dZeej d dZej d dZej d dZ ej d dZ e ddZ ej ddZ y)rTcyrDr r&s r"rEzEllipticCurvePublicKey.curver)r!cyr+r r&s r"r,zEllipticCurvePublicKey.key_sizer)r!cy)z8 Returns an EllipticCurvePublicNumbers. Nr r&s r"public_numbersz%EllipticCurvePublicKey.public_numbersr)r!cyrNr )r'rOrPs r" public_bytesz#EllipticCurvePublicKey.public_bytesr)r!cy)z5 Verifies the signature of the data. Nr )r' signaturerHrIs r"verifyzEllipticCurvePublicKey.verifyr)r!ctjd|t|ts t dt |dk(r t d|ddvr t dddlm}|j||S)NrHz'curve must be an EllipticCurve instancerz%data must not be an empty byte string)z%Unsupported elliptic curve point typebackend) r _check_bytes isinstancer$ TypeErrorlen ValueError,cryptography.hazmat.backends.openssl.backendrh load_elliptic_curve_public_bytes)clsrErHrhs r"from_encoded_pointz)EllipticCurvePublicKey.from_encoded_pointsp 64(%/EF F t9>DE E 7, ,DE EH77tDDr!cy)z" Checks equality. Nr r'others r"__eq__zEllipticCurvePublicKey.__eq__r)r!NrVr0r.EllipticCurvePublicNumbers)rOrXrPz_serialization.PublicFormatr.rU)rarUrHrUrIr7r.None)rEr$rHrUr.rTrtobjectr.bool)r r r r2r3r4rEr,r]r_rb classmethodrqrur r!r"rTrT~s          ) ,         =     E!E).E EE$   r!rTceZdZdZdZy)r sect571r1i:Nr r r r(r,r r!r"rr DHr!rceZdZdZdZy)r sect409r1Nrr r!r"rrrr!rceZdZdZdZy)r sect283r1Nrr r!r"rrrr!rceZdZdZdZy)r sect233r1Nrr r!r"rrrr!rceZdZdZdZy)r sect163r2Nrr r!r"rrrr!rceZdZdZdZy)r sect571k1i;Nrr r!r"rrrr!rceZdZdZdZy)r sect409k1rNrr r!r"rrrr!rceZdZdZdZy)r sect283k1rNrr r!r"rrrr!rceZdZdZdZy)r sect233k1rNrr r!r"rrrr!rceZdZdZdZy)r sect163k1rNrr r!r"rrrr!rceZdZdZdZy)r secp521r1i Nrr r!r"rrrr!rceZdZdZdZy)r secp384r1Nrr r!r"rrrr!rceZdZdZdZy)r secp256r1Nrr r!r"rrrr!rceZdZdZdZy)r secp256k1rNrr r!r"rrrr!rceZdZdZdZy)r secp224r1Nrr r!r"rr rr!rceZdZdZdZy)r secp192r1Nrr r!r"r r rr!r ceZdZdZdZy)BrainpoolP256R1brainpoolP256r1rNrr r!r"rr DHr!rceZdZdZdZy)BrainpoolP384R1brainpoolP384r1rNrr r!r"rrrr!rceZdZdZdZy)BrainpoolP512R1brainpoolP512r1iNrr r!r"rrrr!r prime192v1 prime256v1rrrrrrrrrrrrrrr)r~rrrz,typing.Dict[str, typing.Type[EllipticCurve]] _CURVE_TYPESc.eZdZ ddZe ddZy)ECDSAc||_yN _algorithm)r'r9s r"__init__zECDSA.__init__>s $r!c|jSrrr&s r"r9zECDSA.algorithmDsr!N)r9r;r:)r r r rr2r9r r!r"rr=s+$K$  Ar!rc0ddlm}|j|SNrrg)rnrh#generate_elliptic_curve_private_key)rErhossls r"generate_private_keyrKsM  3 3E ::r!cddlm}t|ts t d|dkr t dt|t s t d|j||S)Nrrgz&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)rnrhrjr1rkrmr$!derive_elliptic_curve_private_key) private_valuerErhrs r"derive_private_keyrSs[ M mS )@AADEE e] +IJJ  1 1- GGr!cleZdZd dZd d dZed dZeddZeddZddZ ddZ dd Z y)rwct|trt|ts tdt|ts td||_||_||_y)Nzx and y must be integers.r)rjr1rkr$_y_x_curve)r'xyrEs r"rz#EllipticCurvePublicNumbers.__init__gsL!S!As);78 8%/MN N r!Nc0ddlm}|j|Sr)rnrh"load_elliptic_curve_public_numbersr'rhrs r"rBz%EllipticCurvePublicNumbers.public_keyrs 66t<)rPr&s r"__repr__z#EllipticCurvePublicNumbers.__repr__s vd| r!)rr1rr1rEr$r)rh typing.Anyr.rTrVr0ryr-) r r r rrBr2rErrrurrr r!r"rwrwfsX =  L r!rwcbeZdZ ddZ d d dZed dZed dZd dZd dZ y)rWct|ts tdt|ts td||_||_y)Nz!private_value must be an integer.z>public_numbers must be an EllipticCurvePublicNumbers instance.)rjr1rkrw_private_value_public_numbers)r'rr]s r"rz$EllipticCurvePrivateNumbers.__init__sI--?@ @.*DE  ,-r!Nc0ddlm}|j|Sr)rnrh#load_elliptic_curve_private_numbersrs r" private_keyz'EllipticCurvePrivateNumbers.private_keys 77==r!c|jSr)rr&s r"rz)EllipticCurvePrivateNumbers.private_values"""r!c|jSr)rr&s r"r]z*EllipticCurvePrivateNumbers.public_numberss###r!ct|tstS|j|jk(xr|j|jk(Sr)rjrWrrr]rss r"ruz"EllipticCurvePrivateNumbers.__eq__sG%!<=! !   %"5"5 5 <##u';';; r!cDt|j|jfSr)rrr]r&s r"rz$EllipticCurvePrivateNumbers.__hash__sT'')<)<=>>r!)rr1r]rwr)rhrr.r=r0rvry) r r r rrr2rr]rurr r!r"rWrWsc .  .2L . %)>!> >##$$ ?r!rWc eZdZy)rSN)r r r r r!r"rSrSsr!rScF t|S#t$r tdwxYw)NzCThe provided object identifier has no matching elliptic curve class) _OID_TO_CURVEKeyError LookupError)oids r"get_curve_for_oidrs3 S!!      s  r)rEr$rhrr.r=)rr1rEr$rhrr.r=)rrr.ztyping.Type[EllipticCurve])5 __future__rr3typing cryptographyrcryptography.hazmat._oidrcryptography.hazmat.primitivesrr)cryptography.hazmat.primitives.asymmetric asym_utilsr ABCMetar$r7r=(EllipticCurvePrivateKeyWithSerializationrT'EllipticCurvePublicKeyWithSerializationrrrrrrrrrrrrrrrr rrrr__annotations__rrrrwrWrSrrrrrr r!r"rs# # 5AI11,  ckk     7  7 t,C(A s{{A H+A'                                m m m >)>)>> >  >  >>>>>>>>>> !>"#>$&&&+> :2  + 15; ;#-;;HH HH H&1 1 h+?+?\          $$o$$o$$o        !" #$  ' . r!