a b8&@s$UddlZddlZddlZddlmZddlmZddlmZm Z ddl mZ GdddZ Gdddej d ZGd d d ej d ZGd d d ej d ZeZGdddej d ZeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGd d!d!eZGd"d#d#eZGd$d%d%eZGd&d'd'eZGd(d)d)eZ Gd*d+d+eZ!Gd,d-d-eZ"Gd.d/d/eZ#Gd0d1d1eZ$Gd2d3d3eZ%Gd4d5d5eZ&e#e e#e"e eee!eeeeeeeeeee$e%e&d6Z'ej(e)ej*efe+d7<Gd8d9d9eZ,dIeej-ed:d;d<Z.dJe/eej-ed=d>d?Z0Gd@dAdAZ1GdBdCdCZ2GdDdEdEZ3e 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 jeiZ7eej*edFdGdHZ8dS)KN)utils)ObjectIdentifier)_serializationhashesc@seZdZedZedZedZedZedZedZ 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 SECT571R1rrS/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/asymmetric/ec.pyrs&rc@s4eZdZejedddZejedddZdS) EllipticCurvereturncCsdS)z8 The name of the curve. e.g. secp256r1. Nrselfrrrname)szEllipticCurve.namecCsdSz< Bit size of a secret scalar for the curve. Nrr"rrrkey_size/szEllipticCurve.key_sizeN) rrr abcabstractpropertystrr$intr&rrrrr(sr) metaclassc@s.eZdZejejeje j fdddZ dS)EllipticCurveSignatureAlgorithmr cCsdS)z@ The digest algorithm used with this signature. Nrr"rrr algorithm7sz)EllipticCurveSignatureAlgorithm.algorithmN) rrr r'r(typingUnion asym_utils Prehashedr HashAlgorithmr-rrrrr,6sr,c@seZdZejddedddZejddddZeje dd d Z eje dd d Z ejee ed ddZejddddZejejejejedddZdS)EllipticCurvePrivateKeyECDHEllipticCurvePublicKey)r-peer_public_keyr!cCsdS)z} Performs a key exchange operation using the provided algorithm with the provided peer's public key. Nr)r#r-r6rrrexchangeAsz EllipticCurvePrivateKey.exchanger cCsdS)zB The EllipticCurvePublicKey for this private key. Nrr"rrr public_keyJsz"EllipticCurvePrivateKey.public_keycCsdSz8 The EllipticCurve that this key is on. Nrr"rrrcurvePszEllipticCurvePrivateKey.curvecCsdSr%rr"rrrr&Vsz EllipticCurvePrivateKey.key_size)datasignature_algorithmr!cCsdS)z Signs the data Nr)r#r;r<rrrsign\szEllipticCurvePrivateKey.signEllipticCurvePrivateNumberscCsdS)z9 Returns an EllipticCurvePrivateNumbers. Nrr"rrrprivate_numbersfsz'EllipticCurvePrivateKey.private_numbers)encodingformatencryption_algorithmr!cCsdSz6 Returns the key serialized as bytes. Nr)r#r@rArBrrr private_byteslsz%EllipticCurvePrivateKey.private_bytesN)rrr r'abstractmethodbytesr7r8r(rr:r*r&r,r=r?rEncodingZ PrivateFormatZKeySerializationEncryptionrDrrrrr3@s. r3c@seZdZejedddZejedddZej ddddZ ej e j e j ed d d Zej eeed d ddZeeeddddZd S)r5r cCsdSr9rr"rrrr:|szEllipticCurvePublicKey.curvecCsdSr%rr"rrrr&szEllipticCurvePublicKey.key_sizeEllipticCurvePublicNumberscCsdS)z8 Returns an EllipticCurvePublicNumbers. Nrr"rrrpublic_numberssz%EllipticCurvePublicKey.public_numbers)r@rAr!cCsdSrCr)r#r@rArrr public_bytessz#EllipticCurvePublicKey.public_bytesN) signaturer;r<r!cCsdS)z5 Verifies the signature of the data. Nr)r#rKr;r<rrrverifyszEllipticCurvePublicKey.verifyr:r;r!cCs^td|t|tstdt|dkr2td|ddvrFtdddlm}| ||S)Nr;'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.backendrTZ load_elliptic_curve_public_bytes)clsr:r;rTrrrfrom_encoded_points     z)EllipticCurvePublicKey.from_encoded_point)rrr r'r(rr:r*r&rErIrrGZ PublicFormatrFrJr,rL classmethodr\rrrrr5{s*  r5c@seZdZdZdZdS)r sect571r1i:Nrrr r$r&rrrrrsrc@seZdZdZdZdS)r sect409r1Nr_rrrrrsrc@seZdZdZdZdS)r sect283r1Nr_rrrrrsrc@seZdZdZdZdS)r sect233r1Nr_rrrrrsrc@seZdZdZdZdS)r sect163r2Nr_rrrrrsrc@seZdZdZdZdS)r sect571k1i;Nr_rrrrrsrc@seZdZdZdZdS)r sect409k1raNr_rrrrrsrc@seZdZdZdZdS)r sect283k1rcNr_rrrrrsrc@seZdZdZdZdS)r sect233k1reNr_rrrrrsrc@seZdZdZdZdS)r sect163k1rgNr_rrrrrsrc@seZdZdZdZdS)r secp521r1i Nr_rrrrrsrc@seZdZdZdZdS)r secp384r1Nr_rrrrrsrc@seZdZdZdZdS)r secp256r1Nr_rrrrr sr c@seZdZdZdZdS)r secp256k1rqNr_rrrrr sr c@seZdZdZdZdS)r secp224r1Nr_rrrrr sr c@seZdZdZdZdS)r secp192r1Nr_rrrrr sr c@seZdZdZdZdS)BrainpoolP256R1brainpoolP256r1rqNr_rrrrrw srwc@seZdZdZdZdS)BrainpoolP384R1brainpoolP384r1roNr_rrrrrysryc@seZdZdZdZdS)BrainpoolP512R1brainpoolP512r1iNr_rrrrr{sr{)Z prime192v1Z prime256v1rursrprnrmrrrlrkrjrirhrfrdrbr`r^rxrzr| _CURVE_TYPESc@sHeZdZejejejfdddZ e ejejejfdddZ dS)ECDSA)r-cCs ||_dSN _algorithm)r#r-rrr__init__3szECDSA.__init__r cCs|jSrrr"rrrr-9szECDSA.algorithmN) rrr r.r/r0r1rr2rpropertyr-rrrrr~2s  r~)r:rTr!cCsddlm}||SNrrS)rZrTZ#generate_elliptic_curve_private_key)r:rTosslrrrgenerate_private_key@s r) private_valuer:rTr!cCsLddlm}t|tstd|dkr.tdt|ts@td|||S)NrrSz&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)rZrTrVr*rWrYrZ!derive_elliptic_curve_private_key)rr:rTrrrrderive_private_keyHs   rc@seZdZeeedddZdejedddZ e dd d Z e ee dd d d Z eedddZeedddZeedddZeedddZedddZedddZdS)rH)xyr:cCsDt|trt|tstdt|ts.td||_||_||_dS)Nzx and y must be integers.r)rVr*rWr_y_x_curve)r#rrr:rrrr\s z#EllipticCurvePublicNumbers.__init__NrTr!cCsddlm}||Sr)rZrTZ"load_elliptic_curve_public_numbersr#rTrrrrr8gs z%EllipticCurvePublicNumbers.public_keyr cCsBtjdtjdd|jjdd}dt|j|t|j|S)Nzencode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.rO stacklevel) warningswarnrPersistentlyDeprecated2019r:r&Z int_to_bytesrr)r# byte_lengthrrr encode_pointns   z'EllipticCurvePublicNumbers.encode_pointrMcCst|tstdtjdtjdd|dr|jdd}t |d|dkrt |d|dd }t ||ddd }||||St d nt d dS) NrNzSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrOrrrrbigz(Invalid elliptic curve point data lengthrR) rVrrWrrrr startswithr&rXr* from_bytesrY)r[r:r;rrrrrrr\s    z-EllipticCurvePublicNumbers.from_encoded_pointcCs|jSr)rr"rrrr:sz EllipticCurvePublicNumbers.curvecCs|jSr)rr"rrrrszEllipticCurvePublicNumbers.xcCs|jSr)rr"rrrrszEllipticCurvePublicNumbers.yotherr!cCsFt|tstS|j|jkoD|j|jkoD|jj|jjkoD|jj|jjkSr)rVrHNotImplementedrrr:r$r&r#rrrr__eq__s   z!EllipticCurvePublicNumbers.__eq__cCst|j|j|jj|jjfSr)hashrrr:r$r&r"rrr__hash__sz#EllipticCurvePublicNumbers.__hash__cCs d|S)NzC)rAr"rrr__repr__sz#EllipticCurvePublicNumbers.__repr__)N)rrr r*rrr.Anyr5r8rFrr]r\rr:rrobjectboolrrr)rrrrrrH[s   rHc@sreZdZeedddZdejedddZ e edd d Z e edd d Z e ed ddZedddZdS)r>)rrIcCs4t|tstdt|ts$td||_||_dS)Nz!private_value must be an integer.z>public_numbers must be an EllipticCurvePublicNumbers instance.)rVr*rWrH_private_value_public_numbers)r#rrIrrrrs  z$EllipticCurvePrivateNumbers.__init__NrcCsddlm}||Sr)rZrTZ#load_elliptic_curve_private_numbersrrrr private_keys z'EllipticCurvePrivateNumbers.private_keyr cCs|jSr)rr"rrrrsz)EllipticCurvePrivateNumbers.private_valuecCs|jSr)rr"rrrrIsz*EllipticCurvePrivateNumbers.public_numbersrcCs&t|tstS|j|jko$|j|jkSr)rVr>rrrIrrrrrs    z"EllipticCurvePrivateNumbers.__eq__cCst|j|jfSr)rrrIr"rrrrsz$EllipticCurvePrivateNumbers.__hash__)N)rrr r*rHrr.rr3rrrrIrrrrrrrrr>s   r>c@s eZdZdS)r4N)rrr rrrrr4sr4)oidr!cCs*z t|WSty$tdYn0dS)NzCThe provided object identifier has no matching elliptic curve class) _OID_TO_CURVEKeyError LookupError)rrrrget_curve_for_oids   r)N)N)9r'r.rZ cryptographyrZcryptography.hazmat._oidrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricr0rABCMetarr,r3Z(EllipticCurvePrivateKeyWithSerializationr5Z'EllipticCurvePublicKeyWithSerializationrrrrrrrrrrrrr r r r rwryr{r}Dictr)Type__annotations__r~rrr*rrHr>r4rrrrrrrrrs     8<  `.