3
ãdeß"  ã               @   s¾   d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dlm
Z e jrZd dlmZ dd	eed
œdd„Zddeeddœdd„ZG dd„ de	jƒZG dd	„ d	e	jƒZG dd„ de	jƒZdS )é    N)ÚInvalidSignature)Ú_calculate_digest_and_algorithm)ÚhashesÚserialization)Údsa)Úutils)ÚBackendr   Ú_DSAPrivateKey)ÚbackendÚprivate_keyÚdataÚreturnc             C   sx   | j j|jƒ}| jjd|ƒ}| jjdƒ}| j jd|t|ƒ|||jƒ}| j|dkƒ | j|d ƒ | jj|ƒd |d … S )Nzunsigned char[]zunsigned int *r   é   )	Ú_libZDSA_sizeÚ
_dsa_cdataÚ_ffiÚnewZDSA_signÚlenÚopenssl_assertÚbuffer)r
   r   r   Zsig_buf_lenZsig_bufÚbuflenÚres© r   ú_/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/dsa.pyÚ_dsa_sig_sign   s    r   Ú_DSAPublicKey)r
   Ú
public_keyÚ	signaturer   r   c             C   s8   | j jd|t|ƒ|t|ƒ|jƒ}|dkr4| jƒ  t‚d S )Nr   r   )r   Z
DSA_verifyr   r   Z_consume_errorsr   )r
   r   r   r   r   r   r   r   Ú_dsa_sig_verify&   s
    r   c               @   s:   e Zd Zddœdd„Zejdœdd„Zejdœdd	„Zd
S )Ú_DSAParametersr   )r
   c             C   s   || _ || _d S )N)Ú_backendr   )Úselfr
   Ú	dsa_cdatar   r   r   Ú__init__8   s    z_DSAParameters.__init__)r   c             C   sÂ   | j jjdƒ}| j jjdƒ}| j jjdƒ}| j jj| j|||ƒ | j j|d | j jjkƒ | j j|d | j jjkƒ | j j|d | j jjkƒ tj	| j j
|d ƒ| j j
|d ƒ| j j
|d ƒd�S )Nz	BIGNUM **r   )ÚpÚqÚg)r    r   r   r   ÚDSA_get0_pqgr   r   ÚNULLr   ÚDSAParameterNumbersÚ
_bn_to_int)r!   r$   r%   r&   r   r   r   Úparameter_numbers<   s    z _DSAParameters.parameter_numbersc             C   s   | j j| ƒS )N)r    Zgenerate_dsa_private_key)r!   r   r   r   Úgenerate_private_keyJ   s    z#_DSAParameters.generate_private_keyN)	Ú__name__Ú
__module__Ú__qualname__r#   r   r)   r+   ÚDSAPrivateKeyr,   r   r   r   r   r   7   s   r   c               @   sœ   e Zd ZU eddœdd„Zeedœdd„ƒZej	dœdd	„Z
ejdœd
d„Zejdœdd„Zejejejedœdd„Zeejejejf edœdd„ZdS )r	   r   )r
   c             C   sp   || _ || _|| _| j jjdƒ}| j jj||| j jj| j jjƒ | j j|d |jjkƒ | j jj	|d ƒ| _
d S )Nz	BIGNUM **r   )r    r   Ú	_evp_pkeyr   r   r   r'   r(   r   ÚBN_num_bitsÚ	_key_size)r!   r
   r"   Úevp_pkeyr$   r   r   r   r#   Q   s    z_DSAPrivateKey.__init__)r   c             C   s   | j S )N)r3   )r!   r   r   r   Úkey_size]   s    z_DSAPrivateKey.key_sizec             C   sR  | j jjdƒ}| j jjdƒ}| j jjdƒ}| j jjdƒ}| j jjdƒ}| j jj| j|||ƒ | j j|d | j jjkƒ | j j|d | j jjkƒ | j j|d | j jjkƒ | j jj| j||ƒ | j j|d | j jjkƒ | j j|d | j jjkƒ t	j
t	jt	j| j j|d ƒ| j j|d ƒ| j j|d ƒd�| j j|d ƒd�| j j|d ƒd�S )Nz	BIGNUM **r   )r$   r%   r&   )r+   Úy)Úpublic_numbersÚx)r    r   r   r   r'   r   r   r(   ÚDSA_get0_keyr   ÚDSAPrivateNumbersÚDSAPublicNumbersr)   r*   )r!   r$   r%   r&   Úpub_keyZpriv_keyr   r   r   Úprivate_numbersa   s(    z_DSAPrivateKey.private_numbersc             C   sÒ   | j jj| jƒ}| j j|| j jjkƒ | j jj|| j jjƒ}| j jj	dƒ}| j jj
| j|| j jjƒ | j j|d | j jjkƒ | j jj|d ƒ}| j jj||| j jjƒ}| j j|dkƒ | j j|ƒ}t| j ||ƒS )Nz	BIGNUM **r   r   )r    r   ÚDSAparams_dupr   r   r   r(   ÚgcÚDSA_freer   r9   ZBN_dupZDSA_set0_keyZ_dsa_cdata_to_evp_pkeyr   )r!   r"   r<   Zpub_key_dupr   r4   r   r   r   r   z   s    z_DSAPrivateKey.public_keyc             C   sH   | j jj| jƒ}| j j|| j jjkƒ | j jj|| j jjƒ}t	| j |ƒS )N)
r    r   r>   r   r   r   r(   r?   r@   r   )r!   r"   r   r   r   Ú
parameters�   s
    z_DSAPrivateKey.parameters)ÚencodingÚformatÚencryption_algorithmr   c             C   s   | j j|||| | j| jƒS )N)r    Z_private_key_bytesr1   r   )r!   rB   rC   rD   r   r   r   Úprivate_bytes•   s    z_DSAPrivateKey.private_bytes)r   Ú	algorithmr   c             C   s   t ||ƒ\}}t| j| |ƒS )N)r   r   r    )r!   r   rF   Ú_r   r   r   Úsign¤   s    z_DSAPrivateKey.signN)r-   r.   r/   Úintr3   r#   Úpropertyr5   r   r:   r=   ÚDSAPublicKeyr   ÚDSAParametersrA   r   ÚEncodingZPrivateFormatZKeySerializationEncryptionÚbytesrE   ÚtypingÚUnionÚ
asym_utilsÚ	Prehashedr   ÚHashAlgorithmrH   r   r   r   r   r	   N   s   

c               @   sŠ   e Zd ZU eddœdd„Zeedœdd„ƒZej	dœdd	„Z
ejdœd
d„Zejejedœdd„Zeeejejejf ddœdd„ZdS )r   r   )r
   c             C   sp   || _ || _|| _| j jjdƒ}| j jj||| j jj| j jjƒ | j j|d |jjkƒ | j jj	|d ƒ| _
d S )Nz	BIGNUM **r   )r    r   r1   r   r   r   r'   r(   r   r2   r3   )r!   r
   r"   r4   r$   r   r   r   r#   °   s    z_DSAPublicKey.__init__)r   c             C   s   | j S )N)r3   )r!   r   r   r   r5   »   s    z_DSAPublicKey.key_sizec             C   s  | j jjdƒ}| j jjdƒ}| j jjdƒ}| j jjdƒ}| j jj| j|||ƒ | j j|d | j jjkƒ | j j|d | j jjkƒ | j j|d | j jjkƒ | j jj| j|| j jjƒ | j j|d | j jjkƒ t	j
t	j| j j|d ƒ| j j|d ƒ| j j|d ƒd�| j j|d ƒd�S )Nz	BIGNUM **r   )r$   r%   r&   )r+   r6   )r    r   r   r   r'   r   r   r(   r9   r   r;   r)   r*   )r!   r$   r%   r&   r<   r   r   r   r7   ¿   s"    z_DSAPublicKey.public_numbersc             C   s2   | j jj| jƒ}| j jj|| j jjƒ}t| j |ƒS )N)r    r   r>   r   r   r?   r@   r   )r!   r"   r   r   r   rA   Õ   s    z_DSAPublicKey.parameters)rB   rC   r   c             C   s   | j j||| | jd ƒS )N)r    Z_public_key_bytesr1   )r!   rB   rC   r   r   r   Úpublic_bytesÜ   s    z_DSAPublicKey.public_bytesN)r   r   rF   r   c             C   s   t ||ƒ\}}t| j| ||ƒS )N)r   r   r    )r!   r   r   rF   rG   r   r   r   Úverifyå   s    z_DSAPublicKey.verify)r-   r.   r/   rI   r3   r#   rJ   r5   r   r;   r7   rL   rA   r   rM   ZPublicFormatrN   rT   rO   rP   rQ   rR   r   rS   rU   r   r   r   r   r   ­   s   
	)rO   Zcryptography.exceptionsr   Z*cryptography.hazmat.backends.openssl.utilsr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   rQ   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   rN   r   r   rL   r   r0   r	   rK   r   r   r   r   r   Ú<module>   s"   _