o )%a)@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) _libDSA_size _dsa_cdata_ffinewDSA_signlenopenssl_assertbuffer)backend private_keydata sig_buf_lensig_bufbuflenresrJ/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/dsa.py _dsa_sig_signs rcCs8|jd|t||t||j}|dkr|tdS)Nrr )r DSA_verifyrr_consume_errorsr)r public_key signaturerrrrr_dsa_sig_verify(sr$c@s$eZdZddZddZddZdS)_DSAVerificationContextcCs.||_||_||_||_t|j|j|_dSN)_backend _public_key _signature _algorithmrHash _hash_ctx)selfrr"r# algorithmrrr__init__5s z _DSAVerificationContext.__init__cC|j|dSr&r,updater-rrrrr2=z_DSAVerificationContext.updatecCs"|j}t|j|j|j|dSr&)r,finalizer$r'r(r))r-data_to_verifyrrrverify@s z_DSAVerificationContext.verifyN)__name__ __module__ __qualname__r/r2r7rrrrr%4s r%c@sBeZdZdejdejfddZdeddfdd Z defd d Z dS) _DSASignatureContextrr.cCs(||_||_||_t|j|j|_dSr&)r' _private_keyr*rr+r,)r-rrr.rrrr/Isz_DSASignatureContext.__init__rreturnNcCr0r&r1r3rrrr2Tr4z_DSASignatureContext.updatecCs|j}t|j|j|Sr&)r,r5rr'r<)r- data_to_signrrrr5Ws z_DSASignatureContext.finalize) r8r9r:r DSAPrivateKeyr HashAlgorithmr/bytesr2r5rrrrr;Hs  r;c@s4eZdZddZdejfddZdejfddZdS) _DSAParameterscCs||_||_dSr&)r'r)r-r dsa_cdatarrrr/]s z_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_pqgrrNULLr DSAParameterNumbers _bn_to_int)r-rFrGrHrrrparameter_numbersasz _DSAParameters.parameter_numberscCs |j|Sr&)r'generate_dsa_private_key)r-rrrgenerate_private_keyos z#_DSAParameters.generate_private_keyN) r8r9r:r/r rKrMr?rOrrrrrB\srBc@seZdZddZedZdejde fddZ de j fdd Z de jfd d Zde jfd d ZdejdejdejdefddZdedejejejfdefddZdS)_DSAPrivateKeycCp||_||_||_|jjd}|jj|||jjj|jjj|j|d|jjk|jj |d|_ dSNrDr r'r _evp_pkeyrrr rIrJr BN_num_bits _key_sizer-rrCevp_pkeyrFrrrr/tsz_DSAPrivateKey.__init__rVsignature_algorithmr=cCstt|t|j||Sr&)rrr;r')r-rYrrrsignersz_DSAPrivateKey.signerc 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)NrDrrErMy)public_numbersx)r'rrr rIrrrJ DSA_get0_keyr DSAPrivateNumbersDSAPublicNumbersrKrL)r-rFrGrHpub_keypriv_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)NrDrr )r'r DSAparams_duprrrrJgcDSA_freerr_BN_dup DSA_set0_key_dsa_cdata_to_evp_pkey _DSAPublicKey)r-rCrb pub_key_duprrXrrrr"s"   z_DSAPrivateKey.public_keycCsH|jj|j}|j||jjjk|jj||jjj}t |j|Sr&) r'r rerrrrJrfrgrBr-rCrrr parameterss   z_DSAPrivateKey.parametersencodingformatencryption_algorithmcCs|j|||||j|jSr&)r'_private_key_bytesrTr)r-rorprqrrr private_bytessz_DSAPrivateKey.private_bytesrr.cCs t|j||\}}t|j||Sr&)rr'r)r-rr.rrrsignsz_DSAPrivateKey.signN)r8r9r:r/rread_only_propertykey_sizerr@r rZr r`rd DSAPublicKeyr" DSAParametersrnrEncoding PrivateFormatKeySerializationEncryptionrArstypingUnion asym_utils PrehashedrtrrrrrPss6   rPc@seZdZddZedZdedej de fddZ de j fd d Zde jfd d Zd ejdejdefddZdededejejej ffddZdS)rkcCrQrRrSrWrrrr/sz_DSAPublicKey.__init__rVr#rYr=cCs*ttd|t|t|j|||S)Nr#)rr _check_bytesrr%r')r-r#rYrrrverifiers   z_DSAPublicKey.verifiercCs|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)NrDrrEr[) r'rrr rIrrrJr_r rarKrL)r-rFrGrHrbrrrr]s(z_DSAPublicKey.public_numberscCs2|jj|j}|jj||jjj}t|j|Sr&)r'r rerrrfrgrBrmrrrrns   z_DSAPublicKey.parametersrorpcCs|j||||jdSr&)r'_public_key_bytesrT)r-rorprrr public_bytess z_DSAPublicKey.public_bytesrr.cCs"t|j||\}}t|j|||Sr&)rr'r$)r-r#rr.rrrr7sz_DSAPublicKey.verifyN)r8r9r:r/rrurvrArr@r rr rar]rxrnrry PublicFormatrr|r}r~rr7rrrrrks4     rk)r| cryptographyrcryptography.exceptionsr*cryptography.hazmat.backends.openssl.utilsrrrcryptography.hazmat.primitivesrr)cryptography.hazmat.primitives.asymmetricr r r r~rr$r%r;rxrBr?rPrwrkrrrrs   d