U q`9&@s8UddlZddlZddlZddlmZddlmZddlmZddl m Z m Z ddl m Z mZmZGdddeZGd d d ejd ZGd d d ejd ZGdddejd ZeZGdddejd ZeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGd d!d!eZ Gd"d#d#eZ!Gd$d%d%eZ"Gd&d'd'eZ#Gd(d)d)eZ$Gd*d+d+eZ%Gd,d-d-eZ&Gd.d/d/eZ'Gd0d1d1eZ(Gd2d3d3eZ)Gd4d5d5eZ*Gd6d7d7eZ+e(e%e(e'e%e$e#e&e"e!e eeeeeeee)e*e+d8Z,ej-e.ej/efe0d9<Gd:d;d;eZ1dKeed<d=d>Z2dLe3eed?d@dAZ4GdBdCdCeZ5GdDdEdEeZ6GdFdGdGeZ7ej(e(ej'e'ej&e&ej%e%ej$e$ej#e#ej8e)ej9e*ej:e+ej"e"ejeej!e!ejeej e ejeejeejeejeejeiZ;eej/edHdIdJZr5r$cCsdS)z5 Verifies the signature of the data. Nr )r&rJr>r5r r r!verifyszEllipticCurvePublicKey.verifyr=r>r$cCs^td|t|tstdt|dkr2td|ddkrFtdddlm}| ||S)Nr>'curve must be an EllipticCurve instancerz%data must not be an empty byte string)%Unsupported elliptic curve point type)backend) r _check_bytes isinstancer" TypeErrorlen ValueErrorZ,cryptography.hazmat.backends.openssl.backendrVZ load_elliptic_curve_public_bytes)clsr=r>rVr r r!from_encoded_points     z)EllipticCurvePublicKey.from_encoded_point)r r r r*rGrHr/rrKr+r"r=r-r)rMrrIZ PublicFormatrNrO classmethodr]r r r r!r8s6   r8c@seZdZdZdZdS)r sect571r1i:Nr r r r'r)r r r r!rsrc@seZdZdZdZdS)r sect409r1Nr`r r r r!rsrc@seZdZdZdZdS)r sect283r1Nr`r r r r!rsrc@seZdZdZdZdS)r sect233r1Nr`r r r r!rsrc@seZdZdZdZdS)r sect163r2Nr`r r r r!rsrc@seZdZdZdZdS)r sect571k1i;Nr`r r r r!rsrc@seZdZdZdZdS)r sect409k1rbNr`r r r r!rsrc@seZdZdZdZdS)r sect283k1rdNr`r r r r!rsrc@seZdZdZdZdS)r sect233k1rfNr`r r r r!rsrc@seZdZdZdZdS)r sect163k1rhNr`r r r r!rsrc@seZdZdZdZdS)r secp521r1i Nr`r r r r!rsrc@seZdZdZdZdS)r secp384r1Nr`r r r r!rsrc@seZdZdZdZdS)r secp256r1Nr`r r r r!r src@seZdZdZdZdS)r secp256k1rrNr`r r r r!rsrc@seZdZdZdZdS)r secp224r1Nr`r r r r!rsrc@seZdZdZdZdS)r secp192r1Nr`r r r r!r sr c@seZdZdZdZdS)BrainpoolP256R1brainpoolP256r1rrNr`r r r r!rx srxc@seZdZdZdZdS)BrainpoolP384R1brainpoolP384r1rpNr`r r r r!rz%srzc@seZdZdZdZdS)BrainpoolP512R1brainpoolP512r1iNr`r r r r!r|*sr|)Z prime192v1Z prime256v1rvrtrqrornrsrmrlrkrjrirgrercrar_ryr{r} _CURVE_TYPESc@seZdZddZedZdS)ECDSAcCs ||_dSN) _algorithm)r&r0r r r!__init__IszECDSA.__init__rN)r r r rrread_only_propertyr0r r r r!rHsr)r=r$cCst|}||Sr)rZ#generate_elliptic_curve_private_key)r=rVr r r!generate_private_keyOsr) private_valuer=r$cCsHt|}t|tstd|dkr*tdt|tsrrrr r r!r]s    z-EllipticCurvePublicNumbers.from_encoded_pointrrrcCsFt|tstS|j|jkoD|j|jkoD|jj|jjkoD|jj|jjkSr)rXrLNotImplementedrrr=r'r)r&otherr r r!__eq__s   z!EllipticCurvePublicNumbers.__eq__cCs ||k Srr rr r r!__ne__sz!EllipticCurvePublicNumbers.__ne__cCst|j|j|jj|jjfSr)hashrrr=r'r)r%r r r!__hash__sz#EllipticCurvePublicNumbers.__hash__cCs d|S)NzC)rCr%r r r!__repr__sz#EllipticCurvePublicNumbers.__repr__)N)r r r r-r"rr8r;rHrr^r]rrr=rrrrrrr r r r!rLfs     rLc@sXeZdZeedddZdedddZe dZ e d Z d d Z d d Z ddZdS)r@)rrMcCs4t|tstdt|ts$td||_||_dS)Nz!private_value must be an integer.z>public_numbers must be an EllipticCurvePublicNumbers instance.)rXr-rYrL_private_value_public_numbers)r&rrMr r r!rs  z$EllipticCurvePrivateNumbers.__init__Nr#cCst|}||Sr)rZ#load_elliptic_curve_private_numbersrr r r! private_keysz'EllipticCurvePrivateNumbers.private_keyrrcCs&t|tstS|j|jko$|j|jkSr)rXr@rrrMrr r r!rs    z"EllipticCurvePrivateNumbers.__eq__cCs ||k Srr rr r r!rsz"EllipticCurvePrivateNumbers.__ne__cCst|j|jfSr)rrrMr%r r r!rsz$EllipticCurvePrivateNumbers.__hash__)N)r r r r-rLrr4rrrrrMrrrr r r r!r@s    r@c@s eZdZdS)r7N)r r r r r r r!r7sr7)oidr$cCs,z t|WStk r&tdYnXdS)NzCThe provided object identifier has no matching elliptic curve class) _OID_TO_CURVEKeyError LookupError)rr r r!get_curve_for_oids  r)N)N)=r*r1rZ cryptographyrZcryptography.hazmat._oidrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricrrr3objectr ABCMetar"r/r4Z(EllipticCurvePrivateKeyWithSerializationr8Z'EllipticCurvePublicKeyWithSerializationrrrrrrrrrrrrrrrr rxrzr|r~Dictr,Type__annotations__rrr-rrLr@r7rrrrrr r r r!s    AF  X'