
    g                         S SK r S SKJr  S SKJr  S SKJrJr  S SKJ	r	J
r
  S SKJr  S SKJr   " S S	\
5      r " S
 S\	5      r " S S\5      r " S S\5      rg)    N)default_backend)hashes)dsautils)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                       \ rS rSr% \R
                  \S'   \R
                  r\R                  r
\R                  " 5       rS\S\SS4S jrS\4S jr\S\SS 4S	 j5       rS
rg)	PublicDSA   key	signaturedatareturnNc                     USS nUSS  n[         R                  " [        R                  US5      [        R                  US5      5      nU R                  R                  XRU R                  5        g )N      big)r   encode_dss_signatureint
from_bytesr   verifychosen_hash)selfr   r   sig_rsig_ssigs         K/home/matz/Project1/venv/lib/python3.13/site-packages/dns/dnssecalgs/dsa.pyr   PublicDSA.verify   s]    !B"#((NN5%(#..*F
 	4#3#34    c                    U R                   R                  5       nU R                   R                  S-  S-
  S-  nUS:  a  [        S5      eSUS-  -   n[        R
                  " SU5      nXAR                  R                  R                  SS5      -  nXAR                  R                  R                  US5      -  nXAR                  R                  R                  US5      -  nXAR                  R                  US5      -  nU$ )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_bytesPublicDSA.encode_key_bytes   s    XX$$&""a'",219788eaikk$&##%%..r599##%%..vu==##%%..vu==tt}}VU++
r!   c                     U R                  U5        UR                  n[        R                  " SUSS 5      u  nUSS  nSUS-  -   nUSS nUSS  nUSU nX$S  nUSU nX$S  nUSU nU " [        R
                  " [        R                  US5      [        R                  " [        R                  US5      [        R                  US5      [        R                  US5      5      5      R                  [        5       5      S9$ )	Nr%   r   r   r$   r#   r&   r   r   )!_ensure_algorithm_key_combinationr   r*   unpackr   DSAPublicNumbersr   r   DSAParameterNumbers
public_keyr   )	clsr   keyptrtr4   dsa_qdsa_pdsa_gdsa_ys	            r   from_dnskey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____firstlineno__r   DSAPublicKey__annotations__key_clsr	   DSA	algorithmr   SHA1r   bytesr   r6   classmethodr
   rF   __static_attributes__rH   r!   r   r   r      su    			GI++-K5 5U 5t 5%  
f 
 
 
r!   r   c            	           \ rS rSr% \R
                  \S'   \R
                  r\r	  SS\
S\S\S\
4S jjr\S\SS 4S	 j5       rS
rg)
PrivateDSAB   r   r   r   deterministicr   c                    U R                   R                  5       nUR                  S:  a  [        S5      eU R                   R	                  XR
                  R                  5      n[        R                  " U5      u  pgUR                  S-  S-
  S-  nSn	[        R                  " SU5      [        R                  XiSS9-   [        R                  XySS9-   n
U(       a  U R                  5       R                  X5        U
$ )	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   rY   public_dsa_keyder_signaturedsa_rdsa_sr3   r4   r   s              r   r]   PrivateDSA.signG   s     ,,.""T)455dOO,G,GH11-@((A-2q8KKe$ll55lABll55lAB 	
 OO$$Y5r!   r(   c                 2    U " [         R                  " US9S9$ )N)r(   r9   )r   generate_private_key)r?   r(   s     r   generatePrivateDSA.generate^   s    (((;
 	
r!   rH   N)FT)rI   rJ   rK   rL   r   DSAPrivateKeyrN   rO   r   r^   rS   boolr]   rT   r   rg   rU   rH   r!   r   rW   rW   B   ss    			GJ
 "	  	
 
. 
 
 
 
r!   rW   c                   ,    \ rS rSr\R
                  rSrg)PublicDSANSEC3SHA1e   rH   N)rI   rJ   rK   rL   r	   DSANSEC3SHA1rQ   rU   rH   r!   r   rl   rl   e   s    &&Ir!   rl   c                       \ rS rSr\rSrg)PrivateDSANSEC3SHA1i   rH   N)rI   rJ   rK   rL   rl   r^   rU   rH   r!   r   rp   rp   i   s    #Jr!   rp   )r*   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr	   dns.rdtypes.ANY.DNSKEYr
   r   rW   rl   rp   rH   r!   r   <module>rx      sN     8 1 @ U % )3
% 3
l 
'  
F' '$* $r!   