o )%a@s ddlZddlZddlmZddlmZddlmZmZddl m Z m Z mZ Gdddej dZeZGd d d ej dZeZGd d d ej dZeZGd ddeZGdddeZGdddeZddedefddZddedefddZdefddZdefddZdS) N)utils) _get_backend)_serializationhashes)AsymmetricSignatureContextAsymmetricVerificationContextrc@s,eZdZejd ddZejd ddZdS) DSAParametersreturn DSAPrivateKeycCdS)z8 Generates and returns a DSAPrivateKey. Nselfr r O/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dsa.pygenerate_private_keyz"DSAParameters.generate_private_keyDSAParameterNumberscCr )z0 Returns a DSAParameterNumbers. Nr r r r rparameter_numbersrzDSAParameters.parameter_numbersN)r r )r r)__name__ __module__ __qualname__abcabstractmethodrrr r r rrs  r) metaclassc @seZdZejdefddZejdddZejde fddZ ejd e j de fd d Zejd ed ejeje j fdefddZejdddZejdejdejdejdefddZdS)r r cCr z6 The bit length of the prime modulus. Nr r r r rkey_size%rzDSAPrivateKey.key_size DSAPublicKeycCr )zD The DSAPublicKey associated with this private key. Nr r r r r public_key+rzDSAPrivateKey.public_keycCr )zL The DSAParameters object associated with this private key. Nr r r r r parameters1rzDSAPrivateKey.parameterssignature_algorithmcCr )zN Returns an AsymmetricSignatureContext used for signing data. Nr )rrr r rsigner7rzDSAPrivateKey.signerdata algorithmcCr )z Signs the data Nr )rr!r"r r rsign@rzDSAPrivateKey.signDSAPrivateNumberscCr )z. Returns a DSAPrivateNumbers. Nr r r r rprivate_numbersJrzDSAPrivateKey.private_numbersencodingformatencryption_algorithmcCr z6 Returns the key serialized as bytes. Nr )rr&r'r(r r r private_bytesPrzDSAPrivateKey.private_bytesN)r r)r r$)rrrrabstractpropertyintrrrrrr HashAlgorithmrr bytestypingUnion asym_utils Prehashedr#r%rEncoding PrivateFormatKeySerializationEncryptionr*r r r rr $sB    r c @seZdZejdefddZejdefddZ ejde de j de fdd Zejdd d Zejd ejdejde fddZejde de dejeje j ffddZdS)rr cCr rr r r r rr`rzDSAPublicKey.key_sizecCr )zK The DSAParameters object associated with this public key. Nr r r r rrfrzDSAPublicKey.parameters signaturercCr )zQ Returns an AsymmetricVerificationContext used for signing data. Nr )rr6rr r rverifierlrzDSAPublicKey.verifierDSAPublicNumberscCr )z- Returns a DSAPublicNumbers. Nr r r r rpublic_numbersvrzDSAPublicKey.public_numbersr&r'cCr r)r )rr&r'r r r public_bytes|rzDSAPublicKey.public_bytesr!r"cCr )z5 Verifies the signature of the data. Nr )rr6r!r"r r rverifyrzDSAPublicKey.verifyN)r r8)rrrrr+r,rrrrr.rr-rr7r9rr3 PublicFormatr:r/r0r1r2r;r r r rr_s>    rc@sheZdZdededefddZedZedZedZ dd e fd d Z d dZ ddZ ddZd S)rpqgcCs<t|trt|trt|tstd||_||_||_dS)Nz;DSAParameterNumbers p, q, and g arguments must be integers.) isinstancer, TypeError_p_q_g)rr=r>r?r r r__init__s zDSAParameterNumbers.__init__rBrCrDNr cCt|}||SN)rload_dsa_parameter_numbersrbackendr r rr zDSAParameterNumbers.parameterscCs2t|tstS|j|jko|j|jko|j|jkSrG)r@rNotImplementedr=r>r?rotherr r r__eq__s $zDSAParameterNumbers.__eq__cC ||k SrGr rMr r r__ne__ zDSAParameterNumbers.__ne__cC dj|dS)Nz9r r'r r r r__repr__zDSAParameterNumbers.__repr__rG)rrrr,rErread_only_propertyr=r>r?rrrOrQrUr r r rrs    rc@sZeZdZdedefddZedZedZ dde fd d Z d d Z d dZ ddZdS)r8yrcCs4t|ts tdt|tstd||_||_dS)Nz/DSAPublicNumbers y argument must be an integer.z9parameter_numbers must be a DSAParameterNumbers instance.)r@r,rAr_y_parameter_numbers)rrXrr r rrEs   zDSAPublicNumbers.__init__rYrZNr cCrFrG)rload_dsa_public_numbersrIr r rrrKzDSAPublicNumbers.public_keycC&t|tstS|j|jko|j|jkSrG)r@r8rLrXrrMr r rrOs   zDSAPublicNumbers.__eq__cCrPrGr rMr r rrQrRzDSAPublicNumbers.__ne__cCrS)NzJr rTr r r rrUrVzDSAPublicNumbers.__repr__rG)rrrr,rrErrWrXrrrrOrQrUr r r rr8s  r8c@sReZdZdedefddZedZedZ dde fd d Z d d Z d dZ dS)r$xr9cCs4t|ts tdt|tstd||_||_dS)Nz0DSAPrivateNumbers x argument must be an integer.z3public_numbers must be a DSAPublicNumbers instance.)r@r,rAr8_public_numbers_x)rr]r9r r rrEs   zDSAPrivateNumbers.__init__r_r^Nr cCrFrG)rload_dsa_private_numbersrIr r r private_keyrKzDSAPrivateNumbers.private_keycCr\rG)r@r$rLr]r9rMr r rrOs zDSAPrivateNumbers.__eq__cCrPrGr rMr r rrQrRzDSAPrivateNumbers.__ne__rG)rrrr,r8rErrWr]r9r rarOrQr r r rr$s  r$rr cCrFrG)rgenerate_dsa_parametersrrJr r rgenerate_parametersrKrdcCrFrG)r'generate_dsa_private_key_and_parametersrcr r rrrKrrcCsX|jdvr td|jdvrtdd|jkr%|jks*tdtddS)N)iii iz5p must be exactly 1024, 2048, 3072, or 4096 bits long)z,q must be exactly 160, 224, or 256 bits longzg, p don't satisfy 1 < g < p.)r= bit_length ValueErrorr>r?)rr r r_check_dsa_parameters srlnumberscCsT|jj}t||jdks|j|jkrtd|jjt|j|j|j kr(tddS)Nrzx must be > 0 and < q.z y must be equal to (g ** x % p).) r9rrlr]r>rkrXpowr?r=)rmrr r r_check_dsa_private_numberssrorG)rr/ cryptographyrcryptography.hazmat.backendsrcryptography.hazmat.primitivesrr)cryptography.hazmat.primitives.asymmetricrrr1ABCMetarDSAParametersWithNumbersr DSAPrivateKeyWithSerializationrDSAPublicKeyWithSerializationobjectrr8r$r,rdrrlror r r rs&  83''