o
     `4'                     @   s   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZmZmZ dd Zd	d
 ZeeG dd deZeeG dd deZeejG dd deZeejG dd deZeejG dd deZdS )    )absolute_importdivisionprint_function)utils)InvalidSignature)_calculate_digest_and_algorithm_check_not_prehashed_warn_sign_verify_deprecated)hashes)AsymmetricSignatureContextAsymmetricVerificationContextdsac                 C   sx   | j |j}| jd|}| jd}| j d|t||||j}| |dk | |d  | j|d |d  S )Nzunsigned char[]zunsigned int *r      )	_libZDSA_size
_dsa_cdata_ffinewZDSA_signlenopenssl_assertbuffer)backendprivate_keydataZsig_buf_lenZsig_bufbuflenres r   ~home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/dsa.py_dsa_sig_sign   s   r   c                 C   s8   | j d|t||t||j}|dkr|   td S )Nr   r   )r   Z
DSA_verifyr   r   Z_consume_errorsr   )r   
public_key	signaturer   r   r   r   r   _dsa_sig_verify&   s   r    c                   @   $   e Zd Zdd Zdd Zdd ZdS )_DSAVerificationContextc                 C   s.   || _ || _|| _|| _t| j| j | _d S N)_backend_public_key
_signature
_algorithmr
   Hash	_hash_ctx)selfr   r   r   	algorithmr   r   r   __init__4   s
   z _DSAVerificationContext.__init__c                 C      | j | d S r#   r)   updater*   r   r   r   r   r/   <      z_DSAVerificationContext.updatec                 C   s"   | j  }t| j| j| j| d S r#   )r)   finalizer    r$   r%   r&   )r*   Zdata_to_verifyr   r   r   verify?   s   
z_DSAVerificationContext.verifyN)__name__
__module____qualname__r,   r/   r3   r   r   r   r   r"   2   s    r"   c                   @   r!   )_DSASignatureContextc                 C   s(   || _ || _|| _t| j| j | _d S r#   )r$   _private_keyr'   r
   r(   r)   )r*   r   r   r+   r   r   r   r,   I   s   z_DSASignatureContext.__init__c                 C   r-   r#   r.   r0   r   r   r   r/   O   r1   z_DSASignatureContext.updatec                 C   s   | j  }t| j| j|S r#   )r)   r2   r   r$   r8   )r*   Zdata_to_signr   r   r   r2   R   s   
z_DSASignatureContext.finalizeN)r4   r5   r6   r,   r/   r2   r   r   r   r   r7   G   s    r7   c                   @   r!   )_DSAParametersc                 C   s   || _ || _d S r#   )r$   r   )r*   r   	dsa_cdatar   r   r   r,   Y   s   
z_DSAParameters.__init__c                 C   s   | j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk | j |d | j jjk tj	| j 
|d | j 
|d | j 
|d dS )N	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 | S r#   )r$   Zgenerate_dsa_private_key)r*   r   r   r   generate_private_keyk   s   z#_DSAParameters.generate_private_keyN)r4   r5   r6   r,   rD   rE   r   r   r   r   r9   W   s    r9   c                   @   sN   e Zd Zdd ZedZdd Zdd Zdd	 Z	d
d Z
dd Zdd ZdS )_DSAPrivateKeyc                 C   p   || _ || _|| _| j jd}| j j||| j jj| j jj | j |d |jjk | j j	|d | _
d S Nr;   r   r$   r   	_evp_pkeyr   r   r   r@   rA   r   ZBN_num_bits	_key_sizer*   r   r:   evp_pkeyr=   r   r   r   r,   q   s   z_DSAPrivateKey.__init__rK   c                 C   s   t   t| t| j| |S r#   )r	   r   r7   r$   )r*   signature_algorithmr   r   r   signer   s   z_DSAPrivateKey.signerc              	   C   sR  | j jd}| j jd}| j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk | j |d | j jjk | j j| j|| | j |d | j jjk | j |d | j jjk t	j
t	jt	j| j |d | j |d | j |d d| j |d d| j |d dS )Nr;   r   r<   rD   y)public_numbersx)r$   r   r   r   r@   r   r   rA   DSA_get0_keyr   ZDSAPrivateNumbersDSAPublicNumbersrB   rC   )r*   r=   r>   r?   pub_keyZpriv_keyr   r   r   private_numbers   s.   z_DSAPrivateKey.private_numbersc                 C   s   | j j| j}| j || j jjk | j j|| j jj}| j j	d}| j j
| j|| j jj | j |d | j jjk | j j|d }| j j||| j jj}| j |dk | j |}t| j ||S )Nr;   r   r   )r$   r   DSAparams_dupr   r   r   rA   gcDSA_freer   rT   ZBN_dupZDSA_set0_keyZ_dsa_cdata_to_evp_pkey_DSAPublicKey)r*   r:   rV   Zpub_key_dupr   rM   r   r   r   r      s"   
z_DSAPrivateKey.public_keyc                 C   sH   | j j| j}| j || j jjk | j j|| j jj}t	| j |S r#   )
r$   r   rX   r   r   r   rA   rY   rZ   r9   r*   r:   r   r   r   
parameters   s   
z_DSAPrivateKey.parametersc                 C   s   | j |||| | j| jS r#   )r$   Z_private_key_bytesrJ   r   )r*   encodingformatZencryption_algorithmr   r   r   private_bytes   s   z_DSAPrivateKey.private_bytesc                 C   s    t | j||\}}t| j| |S r#   )r   r$   r   )r*   r   r+   r   r   r   sign   s   z_DSAPrivateKey.signN)r4   r5   r6   r,   r   read_only_propertykey_sizerO   rW   r   r]   r`   ra   r   r   r   r   rF   o   s    

rF   c                   @   sF   e Zd Zdd ZedZdd Zdd Zdd	 Z	d
d Z
dd ZdS )r[   c                 C   rG   rH   rI   rL   r   r   r   r,      s   z_DSAPublicKey.__init__rK   c                 C   s*   t   td| t| t| j| ||S )Nr   )r	   r   _check_bytesr   r"   r$   )r*   r   rN   r   r   r   verifier   s   
z_DSAPublicKey.verifierc                 C   s  | j jd}| j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk | j |d | j jjk | j j| j|| j jj | j |d | j jjk t	j
t	j| j |d | j |d | j |d d| j |d dS )Nr;   r   r<   rP   )r$   r   r   r   r@   r   r   rA   rT   r   rU   rB   rC   )r*   r=   r>   r?   rV   r   r   r   rR      s(   z_DSAPublicKey.public_numbersc                 C   s2   | j j| j}| j j|| j jj}t| j |S r#   )r$   r   rX   r   r   rY   rZ   r9   r\   r   r   r   r]      s
   
z_DSAPublicKey.parametersc                 C   s   | j ||| | jd S r#   )r$   Z_public_key_bytesrJ   )r*   r^   r_   r   r   r   public_bytes   s   z_DSAPublicKey.public_bytesc                 C   s"   t | j||\}}t| j| ||S r#   )r   r$   r    )r*   r   r   r+   r   r   r   r3     s   z_DSAPublicKey.verifyN)r4   r5   r6   r,   r   rb   rc   re   rR   r]   rf   r3   r   r   r   r   r[      s    
	r[   N)
__future__r   r   r   cryptographyr   Zcryptography.exceptionsr   Z*cryptography.hazmat.backends.openssl.utilsr   r   r	   Zcryptography.hazmat.primitivesr
   Z)cryptography.hazmat.primitives.asymmetricr   r   r   r   r    Zregister_interfaceobjectr"   r7   ZDSAParametersWithNumbersr9   ZDSAPrivateKeyWithSerializationrF   ZDSAPublicKeyWithSerializationr[   r   r   r   r   <module>   s$   


Y