a b@sddlZddlZddlmZmZddlmZGdddejdZ e Z GdddejdZ e Z Gd d d ejdZ e ZGd d d ZGd ddZGdddZdeeje dddZdeeje dddZeddddZeddddZdS)N)_serializationhashes)utilsc@s4eZdZejddddZejddddZdS) DSAParameters DSAPrivateKeyreturncCsdS)z8 Generates and returns a DSAPrivateKey. Nselfr r T/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/asymmetric/dsa.pygenerate_private_keysz"DSAParameters.generate_private_keyDSAParameterNumberscCsdS)z0 Returns a DSAParameterNumbers. Nr r r r r parameter_numbersszDSAParameters.parameter_numbersN)__name__ __module__ __qualname__abcabstractmethodr rr r r r rsr) metaclassc@seZdZejedddZejddddZeje dddZ eje e j ejejfe d d d Zejd dd dZejejejeje dddZdS)rrcCsdSz6 The bit length of the prime modulus. Nr r r r r key_size!szDSAPrivateKey.key_size DSAPublicKeycCsdS)zD The DSAPublicKey associated with this private key. Nr r r r r public_key'szDSAPrivateKey.public_keycCsdS)zL The DSAParameters object associated with this private key. Nr r r r r parameters-szDSAPrivateKey.parameters)data algorithmrcCsdS)z Signs the data Nr )r rrr r r sign3szDSAPrivateKey.signDSAPrivateNumberscCsdS)z. Returns a DSAPrivateNumbers. Nr r r r r private_numbers=szDSAPrivateKey.private_numbers)encodingformatencryption_algorithmrcCsdSz6 Returns the key serialized as bytes. Nr )r r r!r"r r r private_bytesCszDSAPrivateKey.private_bytesN)rrrrabstractpropertyintrrrrrbytestypingUnion asym_utils Prehashedr HashAlgorithmrrrEncodingZ PrivateFormatZKeySerializationEncryptionr$r r r r r s& rc@seZdZejedddZejedddZ ejddddZ eje j e j ed d d Zejeeejejejfd d ddZd S)rrcCsdSrr r r r r rSszDSAPublicKey.key_sizecCsdS)zK The DSAParameters object associated with this public key. Nr r r r r rYszDSAPublicKey.parametersDSAPublicNumberscCsdS)z- Returns a DSAPublicNumbers. Nr r r r r public_numbers_szDSAPublicKey.public_numbers)r r!rcCsdSr#r )r r r!r r r public_byteseszDSAPublicKey.public_bytesN) signaturerrrcCsdS)z5 Verifies the signature of the data. Nr )r r1rrr r r verifyoszDSAPublicKey.verify)rrrrr%r&rrrrr/rr-Z PublicFormatr'r0r(r)r*r+rr,r2r r r r rRs" rc@seZdZeeedddZeedddZeedddZeedd d Zde j e d d dZ e edddZedddZd S)r)pqgcCs<t|trt|trt|ts&td||_||_||_dS)Nz;DSAParameterNumbers p, q, and g arguments must be integers.) isinstancer& TypeError_p_q_g)r r3r4r5r r r __init__szDSAParameterNumbers.__init__rcCs|jSN)r8r r r r r3szDSAParameterNumbers.pcCs|jSr<)r9r r r r r4szDSAParameterNumbers.qcCs|jSr<)r:r r r r r5szDSAParameterNumbers.gNbackendrcCsddlm}||SNr)r>),cryptography.hazmat.backends.openssl.backendr>Zload_dsa_parameter_numbersr r>osslr r r rs zDSAParameterNumbers.parametersotherrcCs2t|tstS|j|jko0|j|jko0|j|jkSr<)r6rNotImplementedr3r4r5r rDr r r __eq__s zDSAParameterNumbers.__eq__cCs dj|dS)Nz9r r!r r r r __repr__szDSAParameterNumbers.__repr__)N)rrrr&r;propertyr3r4r5r(AnyrrobjectboolrGstrrIr r r r r~src@sreZdZeedddZeedddZeedddZde j e d d d Z e ed ddZedddZd S)r.)yrcCs4t|tstdt|ts$td||_||_dS)Nz/DSAPublicNumbers y argument must be an integer.z9parameter_numbers must be a DSAParameterNumbers instance.)r6r&r7r_y_parameter_numbers)r rOrr r r r;s  zDSAPublicNumbers.__init__rcCs|jSr<)rPr r r r rOszDSAPublicNumbers.ycCs|jSr<)rQr r r r rsz"DSAPublicNumbers.parameter_numbersNr=cCsddlm}||Sr?)r@r>Zload_dsa_public_numbersrAr r r rs zDSAPublicNumbers.public_keyrCcCs&t|tstS|j|jko$|j|jkSr<)r6r.rErOrrFr r r rGs    zDSAPublicNumbers.__eq__cCs dj|dS)NzJr rHr r r r rIszDSAPublicNumbers.__repr__)N)rrrr&rr;rJrOrr(rKrrrLrMrGrNrIr r r r r.s  r.c@sdeZdZeedddZeedddZeedddZde j e d d d Z e ed ddZd S)r)xr/cCs4t|tstdt|ts$td||_||_dS)Nz0DSAPrivateNumbers x argument must be an integer.z3public_numbers must be a DSAPublicNumbers instance.)r6r&r7r._public_numbers_x)r rRr/r r r r;s  zDSAPrivateNumbers.__init__rcCs|jSr<)rTr r r r rRszDSAPrivateNumbers.xcCs|jSr<)rSr r r r r/sz DSAPrivateNumbers.public_numbersNr=cCsddlm}||Sr?)r@r>Zload_dsa_private_numbersrAr r r private_keys zDSAPrivateNumbers.private_keyrCcCs&t|tstS|j|jko$|j|jkSr<)r6rrErRr/rFr r r rGs zDSAPrivateNumbers.__eq__)N)rrrr&r.r;rJrRr/r(rKrrUrLrMrGr r r r rs r)rr>rcCsddlm}||Sr?)r@r>Zgenerate_dsa_parametersrr>rBr r r generate_parameterss rWcCsddlm}||Sr?)r@r>Z'generate_dsa_private_key_and_parametersrVr r r r s r )rrcCsR|jdvrtd|jdvr,tdd|jkrD|jksNntddS)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.)r3 bit_length ValueErrorr4r5)rr r r _check_dsa_parameters sr^)numbersrcCsT|jj}t||jdks&|j|jkr.td|jjt|j|j|j krPtddS)Nrzx must be > 0 and < q.z y must be equal to (g ** x % p).) r/rr^rRr4r]rOpowr5r3)r_rr r r _check_dsa_private_numberss ra)N)N)rr(Zcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricrr*ABCMetarZDSAParametersWithNumbersrZDSAPrivateKeyWithSerializationrZDSAPublicKeyWithSerializationrr.rr&rKrWr r^rar r r r s0 /)/,%