U q`)@sddlZddlmZddlmZddlmZmZmZddl m Z m Z ddl m Z mZmZmZddZd d ZGd d d eZGd dde ZGdddejZGdddejZGdddejZdS)N)utils)InvalidSignature)_calculate_digest_and_algorithm_check_not_prehashed_warn_sign_verify_deprecated)hashes serialization)AsymmetricSignatureContextAsymmetricVerificationContextdsarcCsx|j|j}|jd|}|jd}|jd|t||||j}||dk||d|j|d|dS)Nzunsigned char[]zunsigned int *r) _libZDSA_size _dsa_cdata_ffinewZDSA_signlenopenssl_assertbuffer)backend private_keydataZ sig_buf_lenZsig_bufbuflenresrO/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/backends/openssl/dsa.py _dsa_sig_signs rcCs8|jd|t||t||j}|dkr4|tdS)Nrr )r Z DSA_verifyrrZ_consume_errorsr)r public_key signaturerrrrr_dsa_sig_verify(src@s$eZdZddZddZddZdS)_DSAVerificationContextcCs.||_||_||_||_t|j|j|_dSN)_backend _public_key _signature _algorithmrHash _hash_ctx)selfrrr algorithmrrr__init__5s z _DSAVerificationContext.__init__cCs|j|dSr r&updater'rrrrr+=sz_DSAVerificationContext.updatecCs"|j}t|j|j|j|dSr )r&finalizerr!r"r#)r'Zdata_to_verifyrrrverify@s z_DSAVerificationContext.verifyN)__name__ __module__ __qualname__r)r+r.rrrrr4src@s>eZdZejejdddZeddddZ edd d Z dS) _DSASignatureContext)rr(cCs(||_||_||_t|j|j|_dSr )r! _private_keyr$rr%r&)r'rrr(rrrr)Isz_DSASignatureContext.__init__N)rreturncCs|j|dSr r*r,rrrr+Tsz_DSASignatureContext.updater4cCs|j}t|j|j|Sr )r&r-rr!r3)r'Z data_to_signrrrr-Ws z_DSASignatureContext.finalize) r/r0r1r DSAPrivateKeyr HashAlgorithmr)bytesr+r-rrrrr2Hs  r2c@s4eZdZddZejdddZejdddZdS) _DSAParameterscCs||_||_dSr )r!r)r'r dsa_cdatarrrr)]sz_DSAParameters.__init__r5cCs|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_pqgrrNULLr DSAParameterNumbers _bn_to_int)r'r=r>r?rrrparameter_numbersasz _DSAParameters.parameter_numberscCs |j|Sr )r!Zgenerate_dsa_private_key)r'rrrgenerate_private_keyosz#_DSAParameters.generate_private_keyN) r/r0r1r)r rBrDr6rErrrrr9\sr9c@seZdZddZedZeje dddZ e j ddd Z e jdd d Ze jdd d ZejejejedddZeejejejfedddZdS)_DSAPrivateKeycCsp||_||_||_|jjd}|jj|||jjj|jjj|j|d|jjk|jj |d|_ dSNr;r r!r _evp_pkeyrrr r@rArZ BN_num_bits _key_sizer'rr:evp_pkeyr=rrrr)tsz_DSAPrivateKey.__init__rJ)signature_algorithmr4cCstt|t|j||Sr )rrr2r!)r'rMrrrsignersz_DSAPrivateKey.signerr5c 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<rDy)public_numbersx)r!rrr r@rrrA DSA_get0_keyr DSAPrivateNumbersDSAPublicNumbersrBrC)r'r=r>r?pub_keyZpriv_keyrrrprivate_numberss.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_duprrrrAgcDSA_freerrSZBN_dupZ DSA_set0_keyZ_dsa_cdata_to_evp_pkey _DSAPublicKey)r'r:rVZ pub_key_duprrLrrrrs, z_DSAPrivateKey.public_keycCsH|jj|j}|j||jjjk|jj||jjj}t |j|Sr ) r!r rXrrrrArYrZr9r'r:rrr parameterssz_DSAPrivateKey.parameters)encodingformatencryption_algorithmr4cCs|j|||||j|jSr )r!Z_private_key_bytesrIr)r'r^r_r`rrr private_bytessz_DSAPrivateKey.private_bytes)rr(r4cCs t|j||\}}t|j||Sr )rr!r)r'rr(rrrsigns z_DSAPrivateKey.signN)r/r0r1r)rread_only_propertykey_sizerr7r rNr rTrW DSAPublicKeyr DSAParametersr]rEncodingZ PrivateFormatZKeySerializationEncryptionr8ratypingUnion asym_utils PrehashedrbrrrrrFss"    rFc@seZdZddZedZeej e dddZ e j ddd Ze jdd d Zejejed d dZeeejejej fdddZdS)r[cCsp||_||_||_|jjd}|jj|||jjj|jjj|j|d|jjk|jj |d|_ dSrGrHrKrrrr)sz_DSAPublicKey.__init__rJ)rrMr4cCs*ttd|t|t|j|||S)Nr)rr _check_bytesrrr!)r'rrMrrrverifiers z_DSAPublicKey.verifierr5cCs|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<rO) r!rrr r@rrrArSr rUrBrC)r'r=r>r?rVrrrrQs,z_DSAPublicKey.public_numberscCs2|jj|j}|jj||jjj}t|j|Sr )r!r rXrrrYrZr9r\rrrr]s z_DSAPublicKey.parameters)r^r_r4cCs|j||||jdSr )r!Z_public_key_bytesrI)r'r^r_rrr public_bytessz_DSAPublicKey.public_bytes)rrr(cCs"t|j||\}}t|j|||Sr )rr!r)r'rrr(rrrr.s z_DSAPublicKey.verifyN)r/r0r1r)rrcrdr8rr7r rmr rUrQrfr]rrgZ PublicFormatrnrhrirjrkr.rrrrr[s     r[)rhZ cryptographyrZcryptography.exceptionsrZ*cryptography.hazmat.backends.openssl.utilsrrrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricr r r rjrrrr2rfr9r6rFrer[rrrrs   d