
    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dS )    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dS )		PublicDSAkey	signaturedatareturnNc                     |dd         }|dd          }t          j        t                              |d          t                              |d                    }| j                            ||| j                   d S )N      big)r   encode_dss_signatureint
from_bytesr   verifychosen_hash)selfr   r   sig_rsig_ssigs         N/wd/webapps/venvs/v2025_4um/lib/python3.11/site-packages/dns/dnssecalgs/dsa.pyr   zPublicDSA.verify   sr    !B$"##(NN5%((#..*F*F
 
 	T4#344444    c                    | j                                         }| j         j        dz  dz
  dz  }|dk    rt          d          d|dz  z   }t	          j        d|          }||j        j                            dd          z  }||j        j	                            |d          z  }||j        j
                            |d          z  }||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    X$$&&"a'",21997888eaik$&&r#%..r5999r#%..vu===r#%..vu===rt}}VU+++
r   c                    |                      |           |j        }t          j        d|dd                   \  }|dd          }d|dz  z   }|dd         }|dd          }|d|         }||d          }|d|         }||d          }|d|         } | t	          j        t                              |d          t	          j        t                              |d          t                              |d          t                              |d                              	                    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(   sB   --c222}T6!A#;//a!eqtqx qx qx s$ue,,'NN5%00NN5%00NN5%00   j**++	
 	
 	
 		
r   )__name__
__module____qualname__r   DSAPublicKey__annotations__key_clsr	   DSA	algorithmr   SHA1r   bytesr   r4   classmethodr
   rC    r   r   r   r      s         		GI&+--K5 5U 5t 5 5 5 5%     
f 
 
 
 
 [
 
 
r   r   c            	       t    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dS )
PrivateDSAr   FTr   r   deterministicr   c                    | j                                         }|j        dk    rt          d          | j                             || j        j                  }t          j        |          \  }}|j        dz  dz
  dz  }d}	t          j
        d|          t                              ||	d          z   t                              ||	d          z   }
|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   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5$/-
 
 1-@@u(A-2q8Ke$$ll55lAABll55lAAB 	
  	6OO$$Y555r   r&   c                 @     | t          j        |                    S )N)r&   r6   )r   generate_private_key)r<   r&   s     r   generatezPrivateDSA.generate`   s,    s((;;;
 
 
 	
r   N)FT)rD   rE   rF   r   DSAPrivateKeyrH   rI   r   rW   rM   boolrV   rN   r   r_   rO   r   r   rQ   rQ   B   s         		GJ
 "	   	
 
   2 
 
 
 
 
 [
 
 
r   rQ   c                       e Zd Zej        ZdS )PublicDSANSEC3SHA1N)rD   rE   rF   r	   DSANSEC3SHA1rK   rO   r   r   rc   rc   g   s        &IIIr   rc   c                       e Zd ZeZdS )PrivateDSANSEC3SHA1N)rD   rE   rF   rc   rW   rO   r   r   rf   rf   k   s        #JJJr   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      s<    8 8 8 8 8 8 1 1 1 1 1 1 @ @ @ @ @ @ @ @ U U U U U U U U % % % % % % ) ) ) ) ) )3
 3
 3
 3
 3
% 3
 3
 3
l"
 "
 "
 "
 "
' "
 "
 "
J' ' ' ' ' ' ' '$ $ $ $ $* $ $ $ $ $r   