3 l�_ �@s$ddlmZmZmZddlZddlZddlmZddlm Z ej ej �Gdd�de ��Z ej ej �Gdd�de ��Zej ej �Gd d �d e ��Zej ej �Gd d �d e��Zej ej �Gd d�de ��ZeZddd�Zddd�Zdd�Zdd�ZGdd�de �ZGdd�de �ZGdd�de �ZdS)�)�absolute_import�division�print_functionN)�utils)� _get_backendc@seZdZejdd��ZdS)� DSAParameterscCsdS)z8 Generates and returns a DSAPrivateKey. N�)�selfrr�/usr/lib64/python3.6/dsa.py�generate_private_keysz"DSAParameters.generate_private_keyN)�__name__� __module__� __qualname__�abc�abstractmethodr rrrr rsrc@seZdZejdd��ZdS)�DSAParametersWithNumberscCsdS)z0 Returns a DSAParameterNumbers. Nr)r rrr �parameter_numberssz*DSAParametersWithNumbers.parameter_numbersN)r r rrrrrrrr rsrc@sReZdZejdd��Zejdd��Zejdd��Zejdd��Z ejd d ��Z d S) � DSAPrivateKeycCsdS)z6 The bit length of the prime modulus. Nr)r rrr �key_size#szDSAPrivateKey.key_sizecCsdS)zD The DSAPublicKey associated with this private key. Nr)r rrr � public_key)szDSAPrivateKey.public_keycCsdS)zL The DSAParameters object associated with this private key. Nr)r rrr � parameters/szDSAPrivateKey.parameterscCsdS)zN Returns an AsymmetricSignatureContext used for signing data. Nr)r �signature_algorithmrrr �signer5szDSAPrivateKey.signercCsdS)z Signs the data Nr)r �data� algorithmrrr �sign;szDSAPrivateKey.signN) r r rr�abstractpropertyrrrrrrrrrr r!s rc@s(eZdZejdd��Zejdd��ZdS)�DSAPrivateKeyWithSerializationcCsdS)z. Returns a DSAPrivateNumbers. Nr)r rrr �private_numbersDsz.DSAPrivateKeyWithSerialization.private_numberscCsdS)z6 Returns the key serialized as bytes. Nr)r �encoding�formatZencryption_algorithmrrr � private_bytesJsz,DSAPrivateKeyWithSerialization.private_bytesN)r r rrrrr!rrrr rBsrc@s`eZdZejdd��Zejdd��Zejdd��Zejdd��Z ejd d ��Z ejd d ��Z d S)� DSAPublicKeycCsdS)z6 The bit length of the prime modulus. Nr)r rrr rSszDSAPublicKey.key_sizecCsdS)zK The DSAParameters object associated with this public key. Nr)r rrr rYszDSAPublicKey.parameterscCsdS)zQ Returns an AsymmetricVerificationContext used for signing data. Nr)r � signaturerrrr �verifier_szDSAPublicKey.verifiercCsdS)z- Returns a DSAPublicNumbers. Nr)r rrr �public_numberseszDSAPublicKey.public_numberscCsdS)z6 Returns the key serialized as bytes. Nr)r rr rrr � public_byteskszDSAPublicKey.public_bytescCsdS)z5 Verifies the signature of the data. Nr)r r#rrrrr �verifyqszDSAPublicKey.verifyN) r r rrrrrrr$r%r&r'rrrr r"Qs r"cCst|�}|j|�S)N)rZgenerate_dsa_parameters)r�backendrrr �generate_parameters{sr)cCst|�}|j|�S)N)rZ'generate_dsa_private_key_and_parameters)rr(rrr r �sr cCsT|jj�d krtd��|jj�d kr,td ��d |jkoB|jknsPtd ��dS)N��� �z5p must be exactly 1024, 2048, 3072, or 4096 bits long����z,q must be exactly 160, 224, or 256 bits long�zg, p don't satisfy 1 < g < p.)r*r+r,r-)r.r/r0)�p� bit_length� ValueError�q�g)rrrr �_check_dsa_parameters�sr7cCsT|jj}t|�|jdks&|j|jkr.td��|jjt|j|j|j �krPtd��dS)Nrzx must be > 0 and < q.z y must be equal to (g ** x % p).) r%rr7�xr5r4�y�powr6r2)Znumbersrrrr �_check_dsa_private_numbers�s r;c@sTeZdZdd�Zejd�Zejd�Zejd�Zddd�Z d d �Z d d �Z d d�Z dS)�DSAParameterNumberscCsHt|tj� s*t|tj� s*t|tj� r2td��||_||_||_dS)Nz;DSAParameterNumbers p, q, and g arguments must be integers.)� isinstance�six� integer_types� TypeError�_p�_q�_g)r r2r5r6rrr �__init__�szDSAParameterNumbers.__init__rArBrCNcCst|�}|j|�S)N)rZload_dsa_parameter_numbers)r r(rrr r�szDSAParameterNumbers.parameterscCs2t|t�stS|j|jko0|j|jko0|j|jkS)N)r=r<�NotImplementedr2r5r6)r �otherrrr �__eq__�s zDSAParameterNumbers.__eq__cCs ||k S)Nr)r rFrrr �__ne__�szDSAParameterNumbers.__ne__cCs dj|d�S)Nz9)r )r )r rrr �__repr__�szDSAParameterNumbers.__repr__)N) r r rrDr�read_only_propertyr2r5r6rrGrHrIrrrr r<�s    r<c@sJeZdZdd�Zejd�Zejd�Zddd�Zdd �Z d d �Z d d �Z dS)�DSAPublicNumberscCs6t|tj�std��t|t�s&td��||_||_dS)Nz/DSAPublicNumbers y argument must be an integer.z9parameter_numbers must be a DSAParameterNumbers instance.)r=r>r?r@r<�_y�_parameter_numbers)r r9rrrr rD�s  zDSAPublicNumbers.__init__rLrMNcCst|�}|j|�S)N)rZload_dsa_public_numbers)r r(rrr r�szDSAPublicNumbers.public_keycCs&t|t�stS|j|jko$|j|jkS)N)r=rKrEr9r)r rFrrr rG�s  zDSAPublicNumbers.__eq__cCs ||k S)Nr)r rFrrr rH�szDSAPublicNumbers.__ne__cCs dj|d�S)NzJ)r )r )r rrr rI�szDSAPublicNumbers.__repr__)N) r r rrDrrJr9rrrGrHrIrrrr rK�s    rKc@sBeZdZdd�Zejd�Zejd�Zd dd�Zdd �Z d d �Z dS) �DSAPrivateNumberscCs6t|tj�std��t|t�s&td��||_||_dS)Nz0DSAPrivateNumbers x argument must be an integer.z3public_numbers must be a DSAPublicNumbers instance.)r=r>r?r@rK�_public_numbers�_x)r r8r%rrr rD�s  zDSAPrivateNumbers.__init__rPrONcCst|�}|j|�S)N)rZload_dsa_private_numbers)r r(rrr � private_key�szDSAPrivateNumbers.private_keycCs&t|t�stS|j|jko$|j|jkS)N)r=rNrEr8r%)r rFrrr rG�s zDSAPrivateNumbers.__eq__cCs ||k S)Nr)r rFrrr rHszDSAPrivateNumbers.__ne__)N) r r rrDrrJr8r%rQrGrHrrrr rN�s    rN)N)N)Z __future__rrrrr>Z cryptographyrZcryptography.hazmat.backendsrZ add_metaclass�ABCMeta�objectrrrrr"ZDSAPublicKeyWithSerializationr)r r7r;r<rKrNrrrr �s,   &    ''