
    h                         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         ]/var/www/html/retail-simulation-api/retail/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                   x    e Zd ZU ej                  ed<   ej                  ZeZd	de	de
de	fdZededd fd       Zy)

PrivateDSAr   r   r   r   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   public_dsa_keyder_signaturedsa_rdsa_sr1   r2   r   s
             r   rU   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.generateY   s    (((;
 	
r   N)F)rD   rE   rF   r   DSAPrivateKeyrH   rI   r   rV   rM   boolrU   rN   r   r^   rO   r   r   rQ   rQ   B   sZ    			GJ   $ 
 
 
 
r   rQ   c                   $    e Zd Zej                  Zy)PublicDSANSEC3SHA1N)rD   rE   rF   r	   DSANSEC3SHA1rK   rO   r   r   rb   rb   `   s    &&Ir   rb   c                       e Zd ZeZy)PrivateDSANSEC3SHA1N)rD   rE   rF   rb   rV   rO   r   r   re   re   d   s    #Jr   re   )r(   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr	   dns.rdtypes.ANY.DNSKEYr
   r   rQ   rb   re   rO   r   r   <module>rl      sM     8 1 @ U % )3
% 3
l
' 
<' '$* $r   