o
    %zh>                     @   sX  d Z ddlmZmZmZ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mZmZmZ ddlmZmZmZmZmZmZmZmZ G dd	 d	eZG d
d deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#G dd deZ$G dd deZ%G dd deZ&G dd deZ'G d d! d!eZ(dS )"z
ASN.1 type classes for certificate revocation lists (CRL). Exports the
following items:

 - CertificateList()

Other type classes are defined that help compose the types listed above.
    )unicode_literalsdivisionabsolute_importprint_functionN   )SignedDigestAlgorithm)	Boolean
EnumeratedGeneralizedTimeIntegerObjectIdentifierOctetBitStringParsableOctetStringSequence
SequenceOf)AuthorityInfoAccessSyntaxAuthorityKeyIdentifierCRLDistributionPointsDistributionPointNameGeneralNamesNameReasonFlagsTimec                   @   s   e Zd ZddddZdS )Versionv1v2v3)r   r      N__name__
__module____qualname___map r#   r#   I/var/www/html/kangema/venv/lib/python3.10/site-packages/asn1crypto/crl.pyr   +   s
    
r   c                
   @   sd   e Zd Zdedddfdedddfd	ed
ddfdedddfdedddfdedddfgZdS )IssuingDistributionPointdistribution_pointr   Texplicitoptionalonly_contains_user_certsr   F)implicitdefaultonly_contains_ca_certsr   only_some_reasons   )r+   r)   indirect_crl   only_contains_attribute_certs   N)r   r    r!   r   r   r   _fieldsr#   r#   r#   r$   r%   3   s    r%   c                   @   s    e Zd ZddddddddZd	S )
TBSCertListExtensionIdissuer_alt_name
crl_numberdelta_crl_indicatorissuing_distribution_pointauthority_key_identifierfreshest_crlauthority_information_access)z	2.5.29.18z	2.5.29.20z	2.5.29.27z	2.5.29.28z	2.5.29.35z	2.5.29.46z1.3.6.1.5.5.7.1.1Nr   r#   r#   r#   r$   r5   >   s    
r5   c                   @   s@   e Zd ZdefdeddifdefgZdZee	e	e
eeedZdS )	TBSCertListExtensionextn_idcriticalr,   F
extn_valuer>   r@   )r6   r7   r8   r9   r:   r;   r<   N)r   r    r!   r5   r   r   r4   	_oid_pairr   r   r%   r   r   r   
_oid_specsr#   r#   r#   r$   r=   J   s    
r=   c                   @      e Zd ZeZdS )TBSCertListExtensionsN)r   r    r!   r=   _child_specr#   r#   r#   r$   rE   ]       rE   c                   @   s2   e Zd Zddddddddd	d
d
Zedd ZdS )	CRLReasonunspecifiedkey_compromiseca_compromiseaffiliation_changed
supersededcessation_of_operationcertificate_holdremove_from_crlprivilege_withdrawnaa_compromise)
r   r   r   r/   r1   r3         	   
   c                 C   s    ddddddddd	d
d
| j  S )a  
        :return:
            A unicode string with revocation description that is suitable to
            show to end-users. Starts with a lower case letter and phrased in
            such a way that it makes sense after the phrase "because of" or
            "due to".
        zan unspecified reasonza compromised keyzthe CA being compromisedzan affiliation changezcertificate supersessionza cessation of operationza certificate holdzremoval from the CRLzprivilege withdrawlzthe AA being compromised)
rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   nativeselfr#   r#   r$   human_friendlyo   s   zCRLReason.human_friendlyN)r   r    r!   r"   propertyr[   r#   r#   r#   r$   rH   a   s    rH   c                   @   s   e Zd ZdddddZdS )CRLEntryExtensionId
crl_reasonhold_instruction_codeinvalidity_datecertificate_issuer)z	2.5.29.21z	2.5.29.23z	2.5.29.24z	2.5.29.29Nr   r#   r#   r#   r$   r]      s    
r]   c                   @   s:   e Zd ZdefdeddifdefgZdZee	e
edZdS )	CRLEntryExtensionr>   r?   r,   Fr@   rA   )r^   r_   r`   ra   N)r   r    r!   r]   r   r   r4   rB   rH   r   r
   r   rC   r#   r#   r#   r$   rb      s    
rb   c                   @   rD   )CRLEntryExtensionsN)r   r    r!   rb   rF   r#   r#   r#   r$   rc      rG   rc   c                   @   s   e Zd ZdefdefdeddifgZdZdZdZ	dZ
dZdZdd	 Zed
d Zedd Zedd Zedd Zedd ZdS )RevokedCertificateuser_certificaterevocation_datecrl_entry_extensionsr)   TFNc                 C   sd   t  | _| d D ]$}|d j}d| }t| |r!t| ||d j |d jr,| j| qd| _dS )v
        Sets common named extensions to private attributes and creates a list
        of critical extensions
        rg   r>   	_%s_valuer@   r?   TNset_critical_extensionsrX   hasattrsetattrparsedadd_processed_extensionsrZ   	extensionnameattribute_namer#   r#   r$   _set_extensions   s   



z"RevokedCertificate._set_extensionsc                 C      | j s|   | jS z
        Returns a set of the names (or OID if not a known extension) of the
        extensions marked as critical

        :return:
            A set of unicode strings
        rq   rv   rl   rY   r#   r#   r$   critical_extensions      
z&RevokedCertificate.critical_extensionsc                 C      | j du r	|   | jS )z
        This extension indicates the reason that a certificate was revoked.

        :return:
            None or a CRLReason object
        F)rq   rv   _crl_reason_valuerY   r#   r#   r$   crl_reason_value   s   
	z#RevokedCertificate.crl_reason_valuec                 C   r|   )a=  
        This extension indicates the suspected date/time the private key was
        compromised or the certificate became invalid. This would usually be
        before the revocation date, which is when the CA processed the
        revocation.

        :return:
            None or a GeneralizedTime object
        F)rq   rv   _invalidity_date_valuerY   r#   r#   r$   invalidity_date_value   s   
z(RevokedCertificate.invalidity_date_valuec                 C   r|   )a  
        This extension indicates the issuer of the certificate in question,
        and is used in indirect CRLs. CRL entries without this extension are
        for certificates issued from the last seen issuer.

        :return:
            None or an x509.GeneralNames object
        F)rq   rv   _certificate_issuer_valuerY   r#   r#   r$   certificate_issuer_value   s   
z+RevokedCertificate.certificate_issuer_valuec                 C   sB   | j du rd| _ | jr| jD ]}|jdkr|j| _  | j S q| j S )zi
        :return:
            None, or an asn1crypto.x509.Name object for the issuer of the cert
        FNdirectory_name)_issuer_namer   rt   chosen)rZ   general_namer#   r#   r$   issuer_name   s   


zRevokedCertificate.issuer_name)r   r    r!   r   r   rc   r4   rq   rl   r}   r   r   r   rv   r\   rz   r~   r   r   r   r#   r#   r#   r$   rd      s,    



rd   c                   @   rD   )RevokedCertificatesN)r   r    r!   rd   rF   r#   r#   r#   r$   r     rG   r   c                   @   sT   e Zd Zdeddifdefdefdefdeddifdeddifd	ed
ddfgZ	dS )TbsCertListversionr)   T	signatureissuerthis_updatenext_updaterevoked_certificatescrl_extensionsr   r'   N)
r   r    r!   r   r   r   r   r   rE   r4   r#   r#   r#   r$   r     s    r   c                   @   s  e Zd ZdefdefdefgZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdd Zedd	 Zed
d Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Z edd Z!ed d! Z"ed"d# Z#ed$d% Z$dS )&CertificateListtbs_cert_listsignature_algorithmr   FNc                 C   sh   t  | _| d d D ]$}|d j}d| }t| |r#t| ||d j |d jr.| j| q
d| _dS )	rh   r   r   r>   ri   r@   r?   TNrj   rr   r#   r#   r$   rv   4  s   



zCertificateList._set_extensionsc                 C   rw   rx   ry   rY   r#   r#   r$   rz   F  r{   z#CertificateList.critical_extensionsc                 C   r|   )z
        This extension allows associating one or more alternative names with
        the issuer of the CRL.

        :return:
            None or an x509.GeneralNames object
        F)rq   rv   _issuer_alt_name_valuerY   r#   r#   r$   issuer_alt_name_valueT     

z%CertificateList.issuer_alt_name_valuec                 C   r|   )z
        This extension adds a monotonically increasing number to the CRL and is
        used to distinguish different versions of the CRL.

        :return:
            None or an Integer object
        F)rq   rv   _crl_number_valuerY   r#   r#   r$   crl_number_valueb  r   z CertificateList.crl_number_valuec                 C   r|   )z
        This extension indicates a CRL is a delta CRL, and contains the CRL
        number of the base CRL that it is a delta from.

        :return:
            None or an Integer object
        F)rq   rv   _delta_crl_indicator_valuerY   r#   r#   r$   delta_crl_indicator_valuep  r   z)CertificateList.delta_crl_indicator_valuec                 C   r|   )z
        This extension includes information about what types of revocations
        and certificates are part of the CRL.

        :return:
            None or an IssuingDistributionPoint object
        F)rq   rv   !_issuing_distribution_point_valuerY   r#   r#   r$    issuing_distribution_point_value~  r   z0CertificateList.issuing_distribution_point_valuec                 C   r|   )z
        This extension helps in identifying the public key with which to
        validate the authenticity of the CRL.

        :return:
            None or an AuthorityKeyIdentifier object
        F)rq   rv   _authority_key_identifier_valuerY   r#   r#   r$   authority_key_identifier_value  r   z.CertificateList.authority_key_identifier_valuec                 C   r|   )z
        This extension is used in complete CRLs to indicate where a delta CRL
        may be located.

        :return:
            None or a CRLDistributionPoints object
        F)rq   rv   _freshest_crl_valuerY   r#   r#   r$   freshest_crl_value  r   z"CertificateList.freshest_crl_valuec                 C   r|   )z
        This extension is used to provide a URL with which to download the
        certificate used to sign this CRL.

        :return:
            None or an AuthorityInfoAccessSyntax object
        F)rq   rv   #_authority_information_access_valuerY   r#   r#   r$   "authority_information_access_value  r   z2CertificateList.authority_information_access_valuec                 C   s   | d d S )z_
        :return:
            An asn1crypto.x509.Name object for the issuer of the CRL
        r   r   r#   rY   r#   r#   r$   r     s   zCertificateList.issuerc                 C   s   | j sdS | j d jS )z
        :return:
            None or a byte string of the key_identifier from the authority key
            identifier extension
        Nkey_identifier)r   rX   rY   r#   r#   r$   r:     s   z(CertificateList.authority_key_identifierc                 C   sp   | j du r5g | _ | jr5| jD ]&}|d jdkr4|d }|jdkr!q|j}| dd dkr4| j | q| j S )	z
        :return:
            A list of unicode strings that are URLs that should contain either
            an individual DER-encoded X.509 certificate, or a DER-encoded CMS
            message containing multiple certificates
        Naccess_method
ca_issuersaccess_locationuniform_resource_identifierr      zhttp://)_issuer_cert_urlsr   rX   rt   lowerappend)rZ   entrylocationurlr#   r#   r$   issuer_cert_urls  s   
	

z CertificateList.issuer_cert_urlsc                 C   sb   | j du r.g | _ | jdur.| jD ]}|d }|jdkrq|jD ]}|jdkr,| j | qq| j S )z
        Returns delta CRL URLs - only applies to complete CRLs

        :return:
            A list of zero or more DistributionPoint objects
        Nr&   name_relative_to_crl_issuerr   )_delta_crl_distribution_pointsr   rt   r   r   )rZ   r&   distribution_point_namer   r#   r#   r$   delta_crl_distribution_points  s   
	




z-CertificateList.delta_crl_distribution_pointsc                 C   s
   | d j S )zE
        :return:
            A byte string of the signature
        r   rW   rY   r#   r#   r$   r     s   
zCertificateList.signaturec                 C   $   | j du rt|   | _ | j S )zf
        :return:
            The SHA1 hash of the DER-encoded bytes of this certificate list
        N)_sha1hashlibsha1dumpdigestrY   r#   r#   r$   r        
zCertificateList.sha1c                 C   r   )zi
        :return:
            The SHA-256 hash of the DER-encoded bytes of this certificate list
        N)_sha256r   sha256r   r   rY   r#   r#   r$   r     r   zCertificateList.sha256)%r   r    r!   r   r   r   r4   rq   rl   r   r   r   r   r   r   r   r   r   r   r   rv   r\   rz   r   r   r   r   r   r   r   r   r:   r   r   r   r   r   r#   r#   r#   r$   r     sb    














r   ))__doc__
__future__r   r   r   r   r   algosr   corer   r	   r
   r   r   r   r   r   r   x509r   r   r   r   r   r   r   r   r   r%   r5   r=   rE   rH   r]   rb   rc   rd   r   r   r   r#   r#   r#   r$   <module>   s&   	,(&	k