a b"@sddlZddlmZddlmZddlmZmZddlm Z m Z ej rRddl mZddeed d d Zdd eedd ddZGddde jZGddde jZGdd d e jZdS)N)InvalidSignature)_calculate_digest_and_algorithm)hashes serialization)dsautils)Backendr_DSAPrivateKey)backend private_keydatareturncCsx|j|j}|jd|}|jd}|jd|t||||j}||dk||d|j|d|dS)Nzunsigned char[]zunsigned int *r) _libZDSA_size _dsa_cdata_ffinewZDSA_signlenopenssl_assertbuffer)r r r Z sig_buf_lenZsig_bufbuflenresrO/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/backends/openssl/dsa.py _dsa_sig_signs r _DSAPublicKey)r public_key signaturer r cCs8|jd|t||t||j}|dkr4|tdS)Nrr)rZ DSA_verifyrrZ_consume_errorsr)r rrr rrrr_dsa_sig_verify)s rc@s:eZdZddddZejdddZejddd Zd S) _DSAParametersrr cCs||_||_dSN)_backendr)selfr dsa_cdatarrr__init__;sz_DSAParameters.__init__r cCs|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|j|d|jjjktj |j |d|j |d|j |ddS)N BIGNUM **rpqg) r"rrr DSA_get0_pqgrrNULLrDSAParameterNumbers _bn_to_int)r#r)r*r+rrrparameter_numbers?sz _DSAParameters.parameter_numberscCs |j|Sr!)r"Zgenerate_dsa_private_keyr#rrrgenerate_private_keyMsz#_DSAParameters.generate_private_keyN) __name__ __module__ __qualname__r%rr.r0 DSAPrivateKeyr2rrrrr:src@seZdZUeed<ddddZeedddZej dd d Z ej dd d Z ej dd dZejejejedddZeejejejfedddZdS)r _key_sizerr cCsp||_||_||_|jjd}|jj|||jjj|jjj|j|d|jjk|jj |d|_ dSNr'r r"r _evp_pkeyrrrr,r-rZ BN_num_bitsr7r#r r$evp_pkeyr)rrrr%Tsz_DSAPrivateKey.__init__r&cCs|jSr!r7r1rrrkey_size`sz_DSAPrivateKey.key_sizec CsR|jjd}|jjd}|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|j|d|jjjk|jj|j|||j|d|jjjk|j|d|jjjkt j t j t j |j |d|j |d|j |dd|j |dd|j |ddS)Nr'rr(r0y)public_numbersx)r"rrrr,rrr- DSA_get0_keyrDSAPrivateNumbersDSAPublicNumbersr.r/)r#r)r*r+pub_keyZpriv_keyrrrprivate_numbersds.z_DSAPrivateKey.private_numberscCs|jj|j}|j||jjjk|jj||jjj}|jj d}|jj |j||jjj|j|d|jjjk|jj |d}|jj |||jjj}|j|dk|j |}t|j||S)Nr'rr)r"r DSAparams_duprrrr-gcDSA_freerrCZBN_dupZ DSA_set0_keyZ_dsa_cdata_to_evp_pkeyr)r#r$rFZ pub_key_duprr<rrrr}s"   z_DSAPrivateKey.public_keycCsH|jj|j}|j||jjjk|jj||jjj}t |j|Sr!) r"rrHrrrr-rIrJrr#r$rrr parameterss  z_DSAPrivateKey.parameters)encodingformatencryption_algorithmr cCs|j|||||j|jSr!)r"Z_private_key_bytesr:r)r#rMrNrOrrr private_bytessz_DSAPrivateKey.private_bytes)r algorithmr cCst||\}}t|j||Sr!)rrr")r#r rQ_rrrsignsz_DSAPrivateKey.signN)r3r4r5int__annotations__r%propertyr>rrDrG DSAPublicKeyr DSAParametersrLrEncodingZ PrivateFormatZKeySerializationEncryptionbytesrPtypingUnion asym_utils Prehashedr HashAlgorithmrSrrrrr Qs    c@seZdZUeed<ddddZeedddZej dd d Z ej dd d Z e je jed ddZeeejejejfddddZdS)rr7rr cCsp||_||_||_|jjd}|jj|||jjj|jjj|j|d|jjk|jj |d|_ dSr8r9r;rrrr%sz_DSAPublicKey.__init__r&cCs|jSr!r=r1rrrr>sz_DSAPublicKey.key_sizecCs|jjd}|jjd}|jjd}|jjd}|jj|j||||j|d|jjjk|j|d|jjjk|j|d|jjjk|jj|j||jjj|j|d|jjjkt j t j |j |d|j |d|j |dd|j |ddS)Nr'rr(r?) r"rrrr,rrr-rCrrEr.r/)r#r)r*r+rFrrrrAs(z_DSAPublicKey.public_numberscCs2|jj|j}|jj||jjj}t|j|Sr!)r"rrHrrrIrJrrKrrrrLs  z_DSAPublicKey.parameters)rMrNr cCs|j||||jdSr!)r"Z_public_key_bytesr:)r#rMrNrrr public_bytess z_DSAPublicKey.public_bytesN)rr rQr cCst||\}}t|j|||Sr!)rrr")r#rr rQrRrrrverifysz_DSAPublicKey.verify)r3r4r5rTrUr%rVr>rrErArXrLrrYZ PublicFormatrZr`r[r\r]r^rr_rarrrrrs    )r[Zcryptography.exceptionsrZ*cryptography.hazmat.backends.openssl.utilsrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricrrr] TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendrrZrrrXrr6r rWrrrrrs$     _