3 lá˜_¶6ã&@sîddlmZmZmZddlZddlZddlZddlmZddl m Z ddl m Z Gdd„de ƒZejejƒGdd „d e ƒƒZejejƒGd d „d e ƒƒZejejƒGd d „d e ƒƒZejejƒGdd„deƒƒZejejƒGdd„de ƒƒZeZejeƒGdd„de ƒƒZejeƒGdd„de ƒƒZejeƒGdd„de ƒƒZejeƒGdd„de ƒƒZejeƒGdd„de ƒƒZejeƒGdd„de ƒƒZejeƒGdd„de ƒƒZejeƒGd d!„d!e ƒƒZejeƒGd"d#„d#e ƒƒZ ejeƒGd$d%„d%e ƒƒZ!ejeƒGd&d'„d'e ƒƒZ"ejeƒGd(d)„d)e ƒƒZ#ejeƒGd*d+„d+e ƒƒZ$ejeƒGd,d-„d-e ƒƒZ%ejeƒGd.d/„d/e ƒƒZ&ejeƒGd0d1„d1e ƒƒZ'ejeƒGd2d3„d3e ƒƒZ(ejeƒGd4d5„d5e ƒƒZ)ejeƒGd6d7„d7e ƒƒZ*e'e$e'e&e$e#e"e%e!e eeeeeeeee(e)e*d8œZ+ejeƒGd9d:„d:e ƒƒZ,dGd;d<„Z-dHd=d>„Z.Gd?d@„d@e ƒZ/GdAdB„dBe ƒZ0GdCdD„dDe ƒZ1ej'e'ej&e&ej%e%ej$e$ej#e#ej"e"ej2e(ej3e)ej4e*ej!e!ejeej e ejeejeejeejeejeejeejeiZ5dEdF„Z6dS)Ié)Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚObjectIdentifier)Ú _get_backendc@s¤eZdZedƒZedƒZedƒZedƒZedƒZedƒZ edƒZ edƒZ ed ƒZ ed ƒZ ed ƒZed ƒZed ƒZedƒZedƒZedƒZedƒZedƒZedƒZdS)Ú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Ú SECP521R1ÚBRAINPOOLP256R1ÚBRAINPOOLP384R1ÚBRAINPOOLP512R1Ú SECT163K1Ú SECT163R2Ú SECT233K1Ú SECT233R1Ú SECT283K1Ú SECT283R1Ú SECT409K1Ú SECT409R1Ú SECT571K1Ú SECT571R1©rrú/usr/lib64/python3.6/ec.pyrs&rc@s(eZdZejdd„ƒZejdd„ƒZdS)Ú EllipticCurvecCsdS)z8 The name of the curve. e.g. secp256r1. Nr)Úselfrrr Úname)szEllipticCurve.namecCsdS)z< Bit size of a secret scalar for the curve. Nr)r"rrr Úkey_size/szEllipticCurve.key_sizeN)r r r ÚabcÚabstractpropertyr#r$rrrr r!'sr!c@seZdZejdd„ƒZdS)ÚEllipticCurveSignatureAlgorithmcCsdS)z@ The digest algorithm used with this signature. Nr)r"rrr Ú algorithm8sz)EllipticCurveSignatureAlgorithm.algorithmN)r r r r%r&r(rrrr r'6sr'c@s`eZdZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZ ejd d „ƒZ ejd d „ƒZ d S)ÚEllipticCurvePrivateKeycCsdS)zN Returns an AsymmetricSignatureContext used for signing data. Nr)r"Úsignature_algorithmrrr ÚsignerAszEllipticCurvePrivateKey.signercCsdS)z} Performs a key exchange operation using the provided algorithm with the provided peer's public key. Nr)r"r(Zpeer_public_keyrrr ÚexchangeGsz EllipticCurvePrivateKey.exchangecCsdS)zB The EllipticCurvePublicKey for this private key. Nr)r"rrr Ú public_keyNsz"EllipticCurvePrivateKey.public_keycCsdS)z8 The EllipticCurve that this key is on. Nr)r"rrr ÚcurveTszEllipticCurvePrivateKey.curvecCsdS)z< Bit size of a secret scalar for the curve. Nr)r"rrr r$Zsz EllipticCurvePrivateKey.key_sizecCsdS)z Signs the data Nr)r"Údatar*rrr Úsign`szEllipticCurvePrivateKey.signN) r r r r%Úabstractmethodr+r,r-r&r.r$r0rrrr r)?s r)c@s(eZdZejdd„ƒZejdd„ƒZdS)Ú(EllipticCurvePrivateKeyWithSerializationcCsdS)z9 Returns an EllipticCurvePrivateNumbers. Nr)r"rrr Úprivate_numbersisz8EllipticCurvePrivateKeyWithSerialization.private_numberscCsdS)z6 Returns the key serialized as bytes. Nr)r"ÚencodingÚformatZencryption_algorithmrrr Ú private_bytesosz6EllipticCurvePrivateKeyWithSerialization.private_bytesN)r r r r%r1r3r6rrrr r2gsr2c@sleZdZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZ ejd d „ƒZ ejd d „ƒZ e d d„ƒZ dS)ÚEllipticCurvePublicKeycCsdS)zQ Returns an AsymmetricVerificationContext used for signing data. Nr)r"Ú signaturer*rrr ÚverifierxszEllipticCurvePublicKey.verifiercCsdS)z8 The EllipticCurve that this key is on. Nr)r"rrr r.~szEllipticCurvePublicKey.curvecCsdS)z< Bit size of a secret scalar for the curve. Nr)r"rrr r$„szEllipticCurvePublicKey.key_sizecCsdS)z8 Returns an EllipticCurvePublicNumbers. Nr)r"rrr Úpublic_numbersŠsz%EllipticCurvePublicKey.public_numberscCsdS)z6 Returns the key serialized as bytes. Nr)r"r4r5rrr Ú public_bytes�sz#EllipticCurvePublicKey.public_bytescCsdS)z5 Verifies the signature of the data. Nr)r"r8r/r*rrr Úverify–szEllipticCurvePublicKey.verifycCsbtjd|ƒt|tƒstdƒ‚t|ƒdkr2tdƒ‚tj|dƒd krJtdƒ‚dd l m }|j ||ƒS) Nr/z'curve must be an EllipticCurve instancerz%data must not be an empty byte stringéééz%Unsupported elliptic curve point type)Úbackend)r=r>r?) rÚ _check_bytesÚ isinstancer!Ú TypeErrorÚlenÚ ValueErrorÚsixZ indexbytesZ,cryptography.hazmat.backends.openssl.backendr@Z load_elliptic_curve_public_bytes)Úclsr.r/r@rrr Úfrom_encoded_pointœs    z)EllipticCurvePublicKey.from_encoded_pointN)r r r r%r1r9r&r.r$r:r;r<Ú classmethodrHrrrr r7vsr7c@seZdZdZdZdS)rÚ sect571r1i:N)r r r r#r$rrrr r±src@seZdZdZdZdS)rÚ sect409r1i™N)r r r r#r$rrrr r·src@seZdZdZdZdS)rÚ sect283r1iN)r r r r#r$rrrr r½src@seZdZdZdZdS)rÚ sect233r1ééN)r r r r#r$rrrr rÃsrc@seZdZdZdZdS)rÚ sect163r2é£N)r r r r#r$rrrr rÉsrc@seZdZdZdZdS)rÚ sect571k1i;N)r r r r#r$rrrr rÏsrc@seZdZdZdZdS)rÚ sect409k1i™N)r r r r#r$rrrr rÕsrc@seZdZdZdZdS)rÚ sect283k1iN)r r r r#r$rrrr rÛsrc@seZdZdZdZdS)rÚ sect233k1rNN)r r r r#r$rrrr rásrc@seZdZdZdZdS)rÚ sect163k1rPN)r r r r#r$rrrr rçsrc@seZdZdZdZdS)rÚ secp521r1i N)r r r r#r$rrrr rísrc@seZdZdZdZdS)rÚ secp384r1i€N)r r r r#r$rrrr rósrc@seZdZdZdZdS)rÚ secp256r1éN)r r r r#r$rrrr rùsrc@seZdZdZdZdS)rÚ secp256k1rYN)r r r r#r$rrrr rÿsrc@seZdZdZdZdS)r Ú secp224r1éàN)r r r r#r$rrrr r sr c@seZdZdZdZdS)r Ú secp192r1éÀN)r r r r#r$rrrr r sr c@seZdZdZdZdS)ÚBrainpoolP256R1ÚbrainpoolP256r1rYN)r r r r#r$rrrr r_sr_c@seZdZdZdZdS)ÚBrainpoolP384R1ÚbrainpoolP384r1i€N)r r r r#r$rrrr rasrac@seZdZdZdZdS)ÚBrainpoolP512R1ÚbrainpoolP512r1iN)r r r r#r$rrrr rcsrc)Z prime192v1Z prime256v1r]r[rXrWrVrZrUrTrSrRrQrOrMrLrKrJr`rbrdc@seZdZdd„ZejdƒZdS)ÚECDSAcCs ||_dS)N)Ú _algorithm)r"r(rrr Ú__init__>szECDSA.__init__rfN)r r r rgrÚread_only_propertyr(rrrr re<srecCst|ƒ}|j|ƒS)N)rZ#generate_elliptic_curve_private_key)r.r@rrr Úgenerate_private_keyDsricCsJt|ƒ}t|tjƒstdƒ‚|dkr,tdƒ‚t|tƒs>tdƒ‚|j||ƒS)Nz&private_value must be an integer type.rz)private_value must be a positive integer.z/curve must provide the EllipticCurve interface.)rrBrFÚ integer_typesrCrEr!Z!derive_elliptic_curve_private_key)Ú private_valuer.r@rrr Úderive_private_keyIs  rlc@speZdZdd„Zddd„Zdd„Zedd „ƒZej d ƒZ ej d ƒZ ej d ƒZ d d„Z dd„Zdd„Zdd„ZdS)ÚEllipticCurvePublicNumberscCsLt|tjƒ st|tjƒ r$tdƒ‚t|tƒs6tdƒ‚||_||_||_dS)Nzx and y must be integers.z/curve must provide the EllipticCurve interface.)rBrFrjrCr!Ú_yÚ_xÚ_curve)r"ÚxÚyr.rrr rgXs  z#EllipticCurvePublicNumbers.__init__NcCst|ƒ}|j|ƒS)N)rZ"load_elliptic_curve_public_numbers)r"r@rrr r-esz%EllipticCurvePublicNumbers.public_keycCsBtjdtjdd�|jjdd}dtj|j|ƒtj|j|ƒS)NzÑencode_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.r=)Ú stacklevelééó) ÚwarningsÚwarnrÚPersistentlyDeprecated2019r.r$Z int_to_bytesrqrr)r"Ú byte_lengthrrr Ú encode_pointis z'EllipticCurvePublicNumbers.encode_pointcCs¢t|tƒstdƒ‚tjdtjdd�|jdƒr–|jdd}t |ƒd|dkrŒtj |d|d…d ƒ}tj ||dd…d ƒ}||||ƒSt d ƒ‚nt d ƒ‚dS) Nz'curve must be an EllipticCurve instancez�Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointr=)rsrvrtruéZbigz(Invalid elliptic curve point data lengthz%Unsupported elliptic curve point type) rBr!rCrwrxrryÚ startswithr$rDZint_from_bytesrE)rGr.r/rzrqrrrrr rHzs    z-EllipticCurvePublicNumbers.from_encoded_pointrprorncCsFt|tƒstS|j|jkoD|j|jkoD|jj|jjkoD|jj|jjkS)N)rBrmÚNotImplementedrqrrr.r#r$)r"Úotherrrr Ú__eq__—s    z!EllipticCurvePublicNumbers.__eq__cCs ||k S)Nr)r"rrrr Ú__ne__¢sz!EllipticCurvePublicNumbers.__ne__cCst|j|j|jj|jjfƒS)N)Úhashrqrrr.r#r$)r"rrr Ú__hash__¥sz#EllipticCurvePublicNumbers.__hash__cCs dj|ƒS)NzC)r5)r"rrr Ú__repr__¨sz#EllipticCurvePublicNumbers.__repr__)N)r r r rgr-r{rIrHrrhr.rqrrr€r�rƒr„rrrr rmWs      rmc@sJeZdZdd„Zddd„ZejdƒZejdƒZdd „Z d d „Z d d „Z dS)ÚEllipticCurvePrivateNumberscCs6t|tjƒstdƒ‚t|tƒs&tdƒ‚||_||_dS)Nz!private_value must be an integer.z>public_numbers must be an EllipticCurvePublicNumbers instance.)rBrFrjrCrmÚ_private_valueÚ_public_numbers)r"rkr:rrr rg°s  z$EllipticCurvePrivateNumbers.__init__NcCst|ƒ}|j|ƒS)N)rZ#load_elliptic_curve_private_numbers)r"r@rrr Ú private_key½sz'EllipticCurvePrivateNumbers.private_keyr†r‡cCs&t|tƒstS|j|jko$|j|jkS)N)rBr…r~rkr:)r"rrrr r€Äs  z"EllipticCurvePrivateNumbers.__eq__cCs ||k S)Nr)r"rrrr r�Ísz"EllipticCurvePrivateNumbers.__ne__cCst|j|jfƒS)N)r‚rkr:)r"rrr rƒÐsz$EllipticCurvePrivateNumbers.__hash__)N) r r r rgrˆrrhrkr:r€r�rƒrrrr r…¯s    r…c@s eZdZdS)ÚECDHN)r r r rrrr r‰Ôsr‰c Cs*yt|Stk r$tdƒ‚YnXdS)NzCThe provided object identifier has no matching elliptic curve class)Ú _OID_TO_CURVEÚKeyErrorÚ LookupError)Zoidrrr Úget_curve_for_oidïs r�)N)N)7Z __future__rrrr%rwrFZ cryptographyrZcryptography.hazmat._oidrZcryptography.hazmat.backendsrÚobjectrZ add_metaclassÚABCMetar!r'r)r2r7Z'EllipticCurvePublicKeyWithSerializationZregister_interfacerrrrrrrrrrrrrrr r r_rarcZ _CURVE_TYPESrerirlrmr…r‰rrrrŠr�rrrr ÚsÐ   '7  X%