o
    &zh)                     @  sb  d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZmZmZmZ d@ddZdAddZdBddZdCddZ dDddZ!dEd!d"Z"dFd$d%Z#dFd&d'Z$dGd(d)Z%d*d+ Z&dHd,d-Z'dHd.d/Z(	dIdJd6d7Z)e
d8Z*ed9d:G d;d< d<ee* Z+e
d=Z,G d>d? d?ej-ee, Z.dS )K    )annotationsN)	dataclass)AsyncIteratorGenericListOptionalTypeVarUnion)algoscmscorex509)PublicKeyInfo)hashesserialization)dsaeced448ed25519paddingrsanamesx509.GeneralNameserr_msg_prefixstrreturn	x509.Namec                 C  s:   zt dd | D }W | S  ty   t| dw )Nc                 s  s     | ]}|j d kr|jV  qdS )directory_nameN)namechosen).0gname r"   U/var/www/html/kangema/venv/lib/python3.10/site-packages/pyhanko_certvalidator/util.py	<genexpr>   s    z#extract_dir_name.<locals>.<genexpr>z>; only distinguished names are supported, and none were found.)nextStopIterationNotImplementedErroruntag)r   r   r   r"   r"   r#   extract_dir_name   s   
r)   	attr_certcms.AttributeCertificateV2c                 C  sR   | d d }|j dkr|j}n|j}t|d tjs|d }ntg }t|dS )Nac_infoissuerv1_formissuer_namez Could not extract AC issuer name)r   r   
isinstancer   Voidr   GeneralNamesr)   )r*   
issuer_recaa_namesissuerv2r"   r"   r#   extract_ac_issuer_dir_name#   s   



r6   cert3Union[x509.Certificate, cms.AttributeCertificateV2]c                 C  s   t | tjr	| jS t| S N)r0   r   Certificater-   r6   )r7   r"   r"   r#   get_issuer_dn2   s   r;   bytesc                 C  s6   t | tjr	| jS t| }d|j| d d jf }|S )Ns   %s:%dr,   serial_number)r0   r   r:   issuer_serialr6   sha256native)r7   r/   result_bytesr"   r"   r#   r>   ;   s   r>   ext_namec                   s6   zt  fdd| d d D W S  ty   Y d S w )Nc                 3  s(    | ]}|d  j  kr|d jV  qdS )extn_id
extn_valueN)r@   parsed)r    extrB   r"   r#   r$   M   s    z)get_ac_extension_value.<locals>.<genexpr>r,   
extensions)r%   r&   )r*   rB   r"   rG   r#   get_ac_extension_valueI   s   

rI   dps$Optional[x509.CRLDistributionPoints]c                 c  sZ    | d u rd S | D ]!}|d }t |tjrq	|jdkrq	|jD ]
}|jdkr)|V  qq	d S )Ndistribution_pointname_relative_to_crl_issueruniform_resource_identifier)r0   r   r1   r   r   )rJ   rL   distribution_point_namegeneral_namer"   r"   r#   _get_absolute_http_crlsV   s   


rQ   List[x509.DistributionPoint]c                 C     t | d}tt|S )Ncrl_distribution_pointsrI   listrQ   )r*   dps_extr"   r"   r#   _get_ac_crl_dpsi      
rX   c                 C  rS   )Nfreshest_crlrU   )r*   delta_dps_extr"   r"   r#   _get_ac_delta_crl_dpsp   rY   r\   c                C  sN   t | tj}|rt| j}nt| }|r%|r|| j |S |t|  |S r9   )	r0   r   r:   rV   rT   rX   extenddelta_crl_distribution_pointsr\   )r7   
use_deltasis_pkcsourcesr"   r"   r#   get_relevant_crl_dpsw   s   	rb   c                 c  sX    | d u rd S | D ] }|d j dkr)|d }|jdkrq	|j }| dr)|V  q	d S )Naccess_methodocspaccess_locationrN   )zhttp://zhttps://)r@   r   lower
startswith)aia_extentrylocationurlr"   r"   r#   _get_http_ocsp_urls   s   
rl   c                 C  s*   t | tjr
| j}nt| d}tt|S )Nauthority_information_access)r0   r   r:   "authority_information_access_valuerI   rV   rl   )r7   aiar"   r"   r#   get_ocsp_urls   s   
rp   c                 C  sd   t | tjr| j}| j}n
t| d}t| d}|d u}|d ur,tdd |D }||fS d}||fS )Nrm   rT   c                 s  s    | ]
}|d  j dkV  qdS )rc   rd   N)r@   )r    ri   r"   r"   r#   r$      s    z'get_declared_revinfo.<locals>.<genexpr>F)r0   r   r:   rn   crl_distribution_points_valuerI   any)r7   ro   crl_dpshas_crlhas_ocspr"   r"   r#   get_declared_revinfo   s   

rv   	signaturesigned_datapublic_key_infor   signed_digest_algorithmalgos.SignedDigestAlgorithmc                 C  s  ddl m}m} |j}|dkr|d d jd u r|d|jdkrG| }t|tj	s-J |d d j}|d urA||jkrA|ddd	i|d< t
| }	|d
krq|j}
t|	tjs]J tt|
  }|	| |t | d S |dkr|j}
t|	tjsJ t|tj	sJ |d }|d jdkstd|d d j}|d j}tt|  }tjtj|d|d}tt|
  }|	| ||| d S |dkr|j}
t|	tjsJ tt|
  }|	| || d S |dkr|j}
t|	tjsJ tt|
  }|	| |t| d S |dkr"t|	tjsJ |	| | d S |dkr8t|	t j!s0J |	| | d S td| d)N   )DSAParametersUnavailablePSSParameterMismatchr   	algorithm
parametersz,DSA public key parameters were not provided.
rsassa_psszPPublic key info includes PSS parameters that do not match those on the signaturer   rsassa_pkcs1v15mask_gen_algorithmmgf1zOnly MFG1 is supportedsalt_length)r   )mgfr   ecdsar   r   zSignature mechanism z is not supported.)"errorsr}   r~   signature_algor@   r   copyr0   r
   RSASSAPSSParamsr   load_der_public_keydump	hash_algor   RSAPublicKeygetattrr   upperverifyr   PKCS1v15r'   PSSMGF1r   DSAPublicKeyr   EllipticCurvePublicKeyECDSAr   Ed25519PublicKeyr   Ed448PublicKey)rw   rx   ry   rz   r   r}   r~   sig_algopss_key_paramspub_keyr   hmgamgf_md_namesalt_lenmgf_mdpss_padding	hash_specr"   r"   r#   validate_sig   sp   





r   ListElemT)frozenc                   @  sn   e Zd ZU ded< dZded< eddd	ZedddZdd Ze	dddZ
dddZdd Zdd ZdS )ConsListOptional[ListElem]headNzOptional[ConsList[ListElem]]tailr   ConsList[ListElem]c                   C  s
   t d dS )Nr   r   r"   r"   r"   r#   empty  s   
zConsList.emptyvaluer   c                 C  s   t | t  S r9   )r   r   )r   r"   r"   r#   sing  s   zConsList.singc                 c  s0    | }|j d ur|j V  |j}|j d usd S d S r9   )r   r   )selfcurr"   r"   r#   __iter__#  s   
zConsList.__iter__c                 C  s,   | }d }|j d ur|j}|j }|j d us	|S r9   )r   r   )r   r   resultr"   r"   r#   last)  s   

zConsList.lastc                 C  s
   t || S r9   r   )r   r   r"   r"   r#   cons2     
zConsList.consc                 C  s   dt tt |  dS )Nz	ConsList())rV   reversedr   r"   r"   r#   __repr__5  s   zConsList.__repr__c                 C  s
   | j d uS r9   r   r   r"   r"   r#   __bool__8  r   zConsList.__bool__)r   r   )r   r   r   r   )r   r   )r   r   r   r   )__name__
__module____qualname____annotations__r   staticmethodr   r   r   propertyr   r   r   r   r"   r"   r"   r#   r     s   
 
r   Tc                   @  s   e Zd Zdd ZdS )CancelableAsyncIteratorc                   s   t r9   )r'   r   r"   r"   r#   cancel@  s   zCancelableAsyncIterator.cancelN)r   r   r   r   r"   r"   r"   r#   r   ?  s    r   )r   r   r   r   r   r   )r*   r+   r   r   )r7   r8   r   r   )r7   r8   r   r<   )r*   r+   rB   r   )rJ   rK   )r*   r+   r   rR   )r7   r8   r   rR   )r7   r8   r9   )rw   r<   rx   r<   ry   r   rz   r{   )/
__future__r   abcdataclassesr   typingr   r   r   r   r   r	   
asn1cryptor
   r   r   r   asn1crypto.keysr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   r   r   r   r   r   r)   r6   r;   r>   rI   rQ   rX   r\   rb   rl   rp   rv   r   r   r   r   ABCr   r"   r"   r"   r#   <module>   s6      




	






	O%