
    Zh                         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	e
      Z G d
 de	      Z G d de      Z G d de      Zy)    N)default_backend)hashes)dsautils)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                       e Zd ZU ej                  ed<   ej                  Zej                  Z	 e
j                         ZdededdfdZdefdZededd fd       Zy)		PublicDSAkey	signaturedatareturnNc                     |dd }|dd  }t        j                  t        j                  |d      t        j                  |d            }| j                  j                  ||| j                         y )N      big)r   encode_dss_signatureint
from_bytesr   verifychosen_hash)selfr   r   sig_rsig_ssigs         n/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/dns/dnssecalgs/dsa.pyr   zPublicDSA.verify   s_    !B"#((NN5%(#..*F
 	T4#3#34    c                    | j                   j                         }| j                   j                  dz  dz
  dz  }|dkD  rt        d      d|dz  z   }t	        j
                  d|      }||j                  j                  j                  dd      z  }||j                  j                  j                  |d      z  }||j                  j                  j                  |d      z  }||j                  j                  |d      z  }|S )z,Encode a public key per RFC 2536, section 2.   @   zunsupported DSA key size!B   r   )r   public_numberskey_size
ValueErrorstructpackparameter_numbersqto_bytespgy)r   pndsa_toctetsress        r   encode_key_byteszPublicDSA.encode_key_bytes   s    XX$$&""a'",219788eaikk$&r##%%..r599r##%%..vu==r##%%..vu==rtt}}VU++
r   c                    | j                  |       |j                  }t        j                  d|dd       \  }|dd  }d|dz  z   }|dd }|dd  }|d| }||d  }|d| }||d  }|d| } | t	        j
                  t        j                  |d      t	        j                  t        j                  |d      t        j                  |d      t        j                  |d                  j                  t                           S )	Nr#   r   r   r"   r!   r$   r   r   )!_ensure_algorithm_key_combinationr   r(   unpackr   DSAPublicNumbersr   r   DSAParameterNumbers
public_keyr   )	clsr   keyptrtr2   dsa_qdsa_pdsa_gdsa_ys	            r   from_dnskeyzPublicDSA.from_dnskey(   s	   --c2}}T6!A;/a!eqq q q $$ue,''NN5%0NN5%0NN5%0 j*+	
 		
r   )__name__
__module____qualname__r   DSAPublicKey__annotations__key_clsr	   DSA	algorithmr   SHA1r   bytesr   r4   classmethodr
   rC    r   r   r   r      sw    			GI&++-K5 5U 5t 5%  
f 
 
 
r   r   c            	           e Zd ZU ej                  ed<   ej                  ZeZ	 	 d
de	de
de
de	fdZededd fd       Zy	)
PrivateDSAr   r   r   deterministicr   c                     | j                   j                         }|j                  dkD  rt        d      | j                   j	                  || j
                  j                        }t        j                  |      \  }}|j                  dz  dz
  dz  }d}	t        j                  d|      t        j                  ||	d      z   t        j                  ||	d      z   }
|r | j                         j                  |
|       |
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   decode_dss_signaturer(   r)   r   r,   r   )r   r   r   rR   public_dsa_keyder_signaturedsa_rdsa_sr1   r2   r   s              r   rV   zPrivateDSA.signG   s     ,,.""T)455dDOO,G,GH11-@u((A-2q8KKe$ll55lABll55lAB 	
 OO$$Y5r   r&   c                 <     | t        j                  |            S )N)r&   r6   )r   generate_private_key)r<   r&   s     r   generatezPrivateDSA.generate^   s    (((;
 	
r   N)FT)rD   rE   rF   r   DSAPrivateKeyrH   rI   r   rW   rM   boolrV   rN   r   r_   rO   r   r   rQ   rQ   B   ss    			GJ
 "	  	
 
. 
 
 
 
r   rQ   c                   $    e Zd Zej                  Zy)PublicDSANSEC3SHA1N)rD   rE   rF   r	   DSANSEC3SHA1rK   rO   r   r   rc   rc   e   s    &&Ir   rc   c                       e Zd ZeZy)PrivateDSANSEC3SHA1N)rD   rE   rF   rc   rW   rO   r   r   rf   rf   i   s    #Jr   rf   )r(   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr	   dns.rdtypes.ANY.DNSKEYr
   r   rQ   rc   rf   rO   r   r   <module>rm      sN     8 1 @ U % )3
% 3
l 
'  
F' '$* $r   