a
    9g                     @   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	m
Z
 d dlmZ d dlmZ G dd	 d	e
ZG d
d de	ZG dd deZG dd deZdS )    N)default_backend)hashes)dsautils)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                   @   s`   e Zd ZU ejed< ejZejZ	e
 ZeeddddZedddZeed d	d
dZdS )	PublicDSAkeyN)	signaturedatareturnc                 C   sJ   |dd }|dd  }t t|dt|d}| j||| j d S )N      big)r   Zencode_dss_signatureint
from_bytesr   verifychosen_hash)selfr   r   Zsig_rZsig_ssig r   o/var/www/vosh/data/www/fastworkle.ru/webshop-tgbot-v.1.0/venv/lib/python3.9/site-packages/dns/dnssecalgs/dsa.pyr      s    zPublicDSA.verify)r   c                 C   s   | j  }| j jd d d }|dkr.tdd|d  }td|}||jjdd7 }||jj	|d7 }||jj
|d7 }||j|d7 }|S )z,Encode a public key per RFC 2536, section 2.   @   zunsupported DSA key size!B   r   )r   Zpublic_numberskey_size
ValueErrorstructpackZparameter_numbersqto_bytespgy)r   Zpndsa_toctetsresr   r   r   encode_key_bytes   s    
zPublicDSA.encode_key_bytes)r   r   c           	      C   s   |  | |j}td|dd \}|dd  }d|d  }|dd }|dd  }|d| }||d  }|d| }||d  }|d| }| tt|dtt|dt|dt|d	t
 dS )	Nr   r   r   r   r   r   r   r   )Z!_ensure_algorithm_key_combinationr   r    unpackr   ZDSAPublicNumbersr   r   ZDSAParameterNumbers
public_keyr   )	clsr   Zkeyptrtr(   Zdsa_qZdsa_pZdsa_gZdsa_yr   r   r   from_dnskey(   s0    




zPublicDSA.from_dnskey)__name__
__module____qualname__r   ZDSAPublicKey__annotations__key_clsr   ZDSA	algorithmr   SHA1r   bytesr   r*   classmethodr	   r0   r   r   r   r   r
      s   

r
   c                   @   sL   e Zd ZU ejed< ejZeZde	e
e
e	dddZeed ddd	Zd
S )
PrivateDSAr   FT)r   r   deterministicr   c                 C   s   | j  }|jdkrtd| j || jj}t|\}}|jd d d }d}	t	
d|tj||	dd tj||	dd }
|r|  |
| |
S )	z1Sign using a private key per RFC 2536, section 3.i   zDSA key size overflowr   r   r   r   r   )length	byteorder)r   r-   r   r   sign
public_clsr   r   Zdecode_dss_signaturer    r!   r   r#   r   )r   r   r   r;   Zpublic_dsa_keyZder_signatureZdsa_rZdsa_sr'   r(   r   r   r   r   r>   G   s     


zPrivateDSA.sign)r   r   c                 C   s   | t j|ddS )N)r   r+   )r   Zgenerate_private_key)r.   r   r   r   r   generate^   s    
zPrivateDSA.generateN)FT)r1   r2   r3   r   ZDSAPrivateKeyr4   r5   r
   r?   r8   boolr>   r9   r   r@   r   r   r   r   r:   B   s   

  r:   c                   @   s   e Zd ZejZdS )PublicDSANSEC3SHA1N)r1   r2   r3   r   ZDSANSEC3SHA1r6   r   r   r   r   rB   e   s   rB   c                   @   s   e Zd ZeZdS )PrivateDSANSEC3SHA1N)r1   r2   r3   rB   r?   r   r   r   r   rC   i   s   rC   )r    Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr   r   Zdns.dnssecalgs.cryptographyr   r   Zdns.dnssectypesr   Zdns.rdtypes.ANY.DNSKEYr	   r
   r:   rB   rC   r   r   r   r   <module>   s   6#