o
    "“i]m  ã                	   @  s&  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlm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 d dlmZmZ d d	lmZmZmZm Z  d d
l!m"Z"m#Z# d dl$m%Z% e ddd¡Z&ej'ej(ej)ej*ej+ej,ej-ej.ej/f Z0G dd„ de1ƒZ2d:dd„Z3d;dd„Z4d<d d!„Z5G d"d#„ d#ƒZ6G d$d%„ d%ƒZ7G d&d'„ d'e
j8ƒZ9G d(d)„ d)e1ƒZ:ej;Z;G d*d+„ d+ej<d,�Z=e= >ej=¡ G d-d.„ d.e=ƒZ?ej@Z@ejAZAejBZBejCZCejDZDejEZEejFZFejGZGejHZHG d/d0„ d0ƒZIG d1d2„ d2ƒZJG d3d4„ d4ƒZKG d5d6„ d6ƒZLd=d8d9„ZMdS )>é    )ÚannotationsN)ÚIterable)Úutils)Úx509)Úhashes)ÚdsaÚecÚed448Úed25519ÚpaddingÚrsaÚx448Úx25519)Ú CertificateIssuerPrivateKeyTypesÚCertificatePublicKeyTypes)Ú	ExtensionÚ
ExtensionsÚExtensionTypeÚ_make_sequence_methods)ÚNameÚ	_ASN1Type)ÚObjectIdentifieriž  é   c                      ó   e Zd Zd	‡ fdd„Z‡  ZS )
ÚAttributeNotFoundÚmsgÚstrÚoidr   ÚreturnÚNonec                   ó   t ƒ  |¡ || _d S ©N)ÚsuperÚ__init__r   )Úselfr   r   ©Ú	__class__© úV/var/www/html/premium_crap/venv/lib/python3.10/site-packages/cryptography/x509/base.pyr#   9   ó   
zAttributeNotFound.__init__)r   r   r   r   r   r   ©Ú__name__Ú
__module__Ú__qualname__r#   Ú__classcell__r'   r'   r%   r(   r   8   ó    r   Ú	extensionúExtension[ExtensionType]Ú
extensionsúlist[Extension[ExtensionType]]r   r   c                 C  s"   |D ]}|j | j krtdƒ‚qd S )Nz$This extension has already been set.)r   Ú
ValueError)r0   r2   Úer'   r'   r(   Ú_reject_duplicate_extension>   s
   ÿÿr6   r   r   Ú
attributesú0list[tuple[ObjectIdentifier, bytes, int | None]]c                 C  s$   |D ]\}}}|| krt dƒ‚qd S )Nz$This attribute has already been set.)r4   )r   r7   Úattr_oidÚ_r'   r'   r(   Ú_reject_duplicate_attributeH   s
   ÿÿr;   Útimeúdatetime.datetimec                 C  s6   | j dur|  ¡ }|r|nt ¡ }| jdd�| S | S )z’Normalizes a datetime to a naive datetime in UTC.

    time -- datetime to normalize. Assumed to be in UTC if not timezone
            aware.
    N©Útzinfo)r?   Ú	utcoffsetÚdatetimeÚ	timedeltaÚreplace)r<   Úoffsetr'   r'   r(   Ú_convert_to_naive_utc_timeR   s
   
rE   c                   @  sX   e Zd Zejjfdd	d
„Zeddd„ƒZeddd„ƒZddd„Z	ddd„Z
ddd„ZdS ) Ú	Attributer   r   ÚvalueÚbytesÚ_typeÚintr   r   c                 C  ó   || _ || _|| _d S r!   )Ú_oidÚ_valuerI   )r$   r   rG   rI   r'   r'   r(   r#   a   ó   
zAttribute.__init__c                 C  ó   | j S r!   )rL   ©r$   r'   r'   r(   r   k   ó   zAttribute.oidc                 C  rO   r!   )rM   rP   r'   r'   r(   rG   o   rQ   zAttribute.valuer   c                 C  s   d| j › d| j›d�S )Nz<Attribute(oid=z, value=ú)>)r   rG   rP   r'   r'   r(   Ú__repr__s   ó   zAttribute.__repr__ÚotherÚobjectÚboolc                 C  s2   t |tƒstS | j|jko| j|jko| j|jkS r!   )Ú
isinstancerF   ÚNotImplementedr   rG   rI   )r$   rU   r'   r'   r(   Ú__eq__v   s   

ÿ
ýzAttribute.__eq__c                 C  s   t | j| j| jfƒS r!   )Úhashr   rG   rI   rP   r'   r'   r(   Ú__hash__€   s   zAttribute.__hash__N)r   r   rG   rH   rI   rJ   r   r   )r   r   )r   rH   ©r   r   )rU   rV   r   rW   ©r   rJ   )r+   r,   r-   r   Ú
UTF8StringrG   r#   Úpropertyr   rS   rZ   r\   r'   r'   r'   r(   rF   `   s    ü



rF   c                   @  s8   e Zd Zddd„Zedƒ\ZZZdd	d
„Zddd„Z	dS )Ú
Attributesr7   úIterable[Attribute]r   r   c                 C  s   t |ƒ| _d S r!   )ÚlistÚ_attributes)r$   r7   r'   r'   r(   r#   …   s   zAttributes.__init__rd   r   c                 C  s   d| j › d�S )Nz<Attributes(rR   )rd   rP   r'   r'   r(   rS   �   s   zAttributes.__repr__r   r   rF   c                 C  s.   | D ]}|j |kr|  S qtd|› d�|ƒ‚)NzNo z attribute was found)r   r   )r$   r   Úattrr'   r'   r(   Úget_attribute_for_oid�   s
   
ÿz Attributes.get_attribute_for_oidN)r7   rb   r   r   r]   )r   r   r   rF   )
r+   r,   r-   r#   r   Ú__len__Ú__iter__Ú__getitem__rS   rf   r'   r'   r'   r(   ra   „   s
    

ra   c                   @  s   e Zd ZdZdZdS )ÚVersionr   é   N)r+   r,   r-   Úv1Úv3r'   r'   r'   r(   rj   ˜   s    rj   c                      r   )
ÚInvalidVersionr   r   Úparsed_versionrJ   r   r   c                   r    r!   )r"   r#   ro   )r$   r   ro   r%   r'   r(   r#   ž   r)   zInvalidVersion.__init__)r   r   ro   rJ   r   r   r*   r'   r'   r%   r(   rn   �   r/   rn   c                   @  s\   e Zd Zeejddd„ƒƒZeejddd„ƒƒZeejddd	„ƒƒZeejddd„ƒƒZ	dS )ÚRevokedCertificater   rJ   c                 C  ó   dS )zG
        Returns the serial number of the revoked certificate.
        Nr'   rP   r'   r'   r(   Úserial_number§   ó    z RevokedCertificate.serial_numberr=   c                 C  rq   )zH
        Returns the date of when this certificate was revoked.
        Nr'   rP   r'   r'   r(   Úrevocation_date®   rs   z"RevokedCertificate.revocation_datec                 C  rq   )zl
        Returns the date of when this certificate was revoked as a non-naive
        UTC datetime.
        Nr'   rP   r'   r'   r(   Úrevocation_date_utcµ   rs   z&RevokedCertificate.revocation_date_utcr   c                 C  rq   )zW
        Returns an Extensions object containing a list of Revoked extensions.
        Nr'   rP   r'   r'   r(   r2   ½   rs   zRevokedCertificate.extensionsNr^   ©r   r=   ©r   r   )
r+   r,   r-   r`   ÚabcÚabstractmethodrr   rt   ru   r2   r'   r'   r'   r(   rp   ¦   s    rp   )Ú	metaclassc                   @  sN   e Zd Zddd„Zedd
d„ƒZeddd„ƒZeddd„ƒZeddd„ƒZdS )Ú_RawRevokedCertificaterr   rJ   rt   r=   r2   r   c                 C  rK   r!   ©Ú_serial_numberÚ_revocation_dateÚ_extensions©r$   rr   rt   r2   r'   r'   r(   r#   Ê   rN   z_RawRevokedCertificate.__init__r   c                 C  rO   r!   )r}   rP   r'   r'   r(   rr   Ô   rQ   z$_RawRevokedCertificate.serial_numberc                 C  s   t jdtjdd� | jS )Nuk   Properties that return a naÃ¯ve datetime object have been deprecated. Please switch to revocation_date_utc.rk   )Ú
stacklevel)ÚwarningsÚwarnr   ÚDeprecatedIn42r~   rP   r'   r'   r(   rt   Ø   s   üz&_RawRevokedCertificate.revocation_datec                 C  s   | j jtjjd�S )Nr>   )r~   rC   rA   ÚtimezoneÚutcrP   r'   r'   r(   ru   â   s   z*_RawRevokedCertificate.revocation_date_utcc                 C  rO   r!   )r   rP   r'   r'   r(   r2   æ   rQ   z!_RawRevokedCertificate.extensionsN)rr   rJ   rt   r=   r2   r   r^   rv   rw   )	r+   r,   r-   r#   r`   rr   rt   ru   r2   r'   r'   r'   r(   r{   É   s    

	r{   c                   @  sX   e Zd Zdg g fd,dd	„Zd-dd„Zd.dd„Zddœd/dd„Z	d0dddœd1d*d+„ZdS )2Ú CertificateSigningRequestBuilderNÚsubject_nameúName | Noner2   r3   r7   r8   c                 C  s   || _ || _|| _dS )zB
        Creates an empty X.509 certificate request (v1).
        N)Ú_subject_namer   rd   )r$   rˆ   r2   r7   r'   r'   r(   r#   ü   s   	
z)CertificateSigningRequestBuilder.__init__Únamer   r   c                 C  s4   t |tƒs	tdƒ‚| jdurtdƒ‚t|| j| jƒS )zF
        Sets the certificate requestor's distinguished name.
        úExpecting x509.Name object.Nú&The subject name may only be set once.)rX   r   Ú	TypeErrorrŠ   r4   r‡   r   rd   ©r$   r‹   r'   r'   r(   rˆ   	  s   


ÿz-CertificateSigningRequestBuilder.subject_nameÚextvalr   ÚcriticalrW   c                 C  sF   t |tƒs	tdƒ‚t|j||ƒ}t|| jƒ t| jg | j¢|‘| j	ƒS )zE
        Adds an X.509 extension to the certificate request.
        ú"extension must be an ExtensionType)
rX   r   rŽ   r   r   r6   r   r‡   rŠ   rd   ©r$   r�   r‘   r0   r'   r'   r(   Úadd_extension  s   
ýz.CertificateSigningRequestBuilder.add_extension)Ú_tagr   r   rG   rH   r•   ú_ASN1Type | Nonec                C  s~   t |tƒs	tdƒ‚t |tƒstdƒ‚|durt |tƒstdƒ‚t|| jƒ |dur-|j}nd}t| j	| j
g | j¢|||f‘ƒS )zK
        Adds an X.509 attribute with an OID and associated value.
        zoid must be an ObjectIdentifierzvalue must be bytesNztag must be _ASN1Type)rX   r   rŽ   rH   r   r;   rd   rG   r‡   rŠ   r   )r$   r   rG   r•   Útagr'   r'   r(   Úadd_attribute'  s   


ýz.CertificateSigningRequestBuilder.add_attribute©Úrsa_paddingÚecdsa_deterministicÚprivate_keyr   Ú	algorithmú_AllowedHashTypes | NoneÚbackendú
typing.Anyrš   ú%padding.PSS | padding.PKCS1v15 | Noner›   úbool | NoneÚCertificateSigningRequestc                C  sv   | j du r	tdƒ‚|dur$t|tjtjfƒstdƒ‚t|tjƒs$tdƒ‚|dur2t|t	j
ƒs2tdƒ‚t | ||||¡S )zF
        Signs the request using the requestor's private key.
        Nz/A CertificateSigningRequest must have a subjectúPadding must be PSS or PKCS1v15ú&Padding is only supported for RSA keysú1Deterministic ECDSA is only supported for EC keys)rŠ   r4   rX   r   ÚPSSÚPKCS1v15rŽ   r   ÚRSAPrivateKeyr   ÚEllipticCurvePrivateKeyÚ	rust_x509Úcreate_x509_csr©r$   rœ   r�   rŸ   rš   r›   r'   r'   r(   ÚsignG  s&   
ÿûz%CertificateSigningRequestBuilder.sign)rˆ   r‰   r2   r3   r7   r8   )r‹   r   r   r‡   )r�   r   r‘   rW   r   r‡   )r   r   rG   rH   r•   r–   r   r‡   r!   )rœ   r   r�   rž   rŸ   r    rš   r¡   r›   r¢   r   r£   )r+   r,   r-   r#   rˆ   r”   r˜   r®   r'   r'   r'   r(   r‡   û   s    ü

û$üùr‡   c                   @  sŒ   e Zd ZU ded< ddddddg fd;dd„Zd<dd„Zd<dd„Zd=dd„Zd>dd „Zd?d#d$„Z	d?d%d&„Z
d@d+d,„Z	dAddd-œdBd9d:„ZdS )CÚCertificateBuilderr3   r   NÚissuer_namer‰   rˆ   Ú
public_keyú CertificatePublicKeyTypes | Nonerr   ú
int | NoneÚnot_valid_beforeúdatetime.datetime | NoneÚnot_valid_afterr2   r   r   c                 C  s6   t j| _|| _|| _|| _|| _|| _|| _|| _	d S r!   )
rj   rm   Ú_versionÚ_issuer_namerŠ   Ú_public_keyr}   Ú_not_valid_beforeÚ_not_valid_afterr   )r$   r°   rˆ   r±   rr   r´   r¶   r2   r'   r'   r(   r#   n  s   

zCertificateBuilder.__init__r‹   r   c                 C  sD   t |tƒs	tdƒ‚| jdurtdƒ‚t|| j| j| j| j	| j
| jƒS )z3
        Sets the CA's distinguished name.
        rŒ   Nú%The issuer name may only be set once.)rX   r   rŽ   r¸   r4   r¯   rŠ   r¹   r}   rº   r»   r   r�   r'   r'   r(   r°   �  s   

ùzCertificateBuilder.issuer_namec                 C  sD   t |tƒs	tdƒ‚| jdurtdƒ‚t| j|| j| j| j	| j
| jƒS )z:
        Sets the requestor's distinguished name.
        rŒ   Nr�   )rX   r   rŽ   rŠ   r4   r¯   r¸   r¹   r}   rº   r»   r   r�   r'   r'   r(   rˆ   “  s   

ùzCertificateBuilder.subject_nameÚkeyr   c              	   C  s`   t |tjtjtjtjt	j
tjtjfƒstdƒ‚| jdur tdƒ‚t| j| j|| j| j| j| jƒS )zT
        Sets the requestor's public key (as found in the signing request).
        z‰Expecting one of DSAPublicKey, RSAPublicKey, EllipticCurvePublicKey, Ed25519PublicKey, Ed448PublicKey, X25519PublicKey, or X448PublicKey.Nz$The public key may only be set once.)rX   r   ÚDSAPublicKeyr   ÚRSAPublicKeyr   ÚEllipticCurvePublicKeyr
   ÚEd25519PublicKeyr	   ÚEd448PublicKeyr   ÚX25519PublicKeyr   ÚX448PublicKeyrŽ   r¹   r4   r¯   r¸   rŠ   r}   rº   r»   r   )r$   r½   r'   r'   r(   r±   ¥  s2   ùþÿ
ùzCertificateBuilder.public_keyÚnumberrJ   c                 C  sh   t |tƒs	tdƒ‚| jdurtdƒ‚|dkrtdƒ‚| ¡ dkr$tdƒ‚t| j| j| j	|| j
| j| jƒS )z5
        Sets the certificate serial number.
        ú'Serial number must be of integral type.Nú'The serial number may only be set once.r   z%The serial number should be positive.é    ú3The serial number should not be more than 159 bits.)rX   rJ   rŽ   r}   r4   Ú
bit_lengthr¯   r¸   rŠ   r¹   rº   r»   r   ©r$   rÅ   r'   r'   r(   rr   Ê  s&   

ÿùz CertificateBuilder.serial_numberr<   r=   c                 C  sz   t |tjƒs
tdƒ‚| jdurtdƒ‚t|ƒ}|tk rtdƒ‚| jdur-|| jkr-tdƒ‚t| j	| j
| j| j|| j| jƒS )z7
        Sets the certificate activation time.
        úExpecting datetime object.Nz*The not valid before may only be set once.z>The not valid before date must be on or after 1950 January 1).zBThe not valid before date must be before the not valid after date.)rX   rA   rŽ   rº   r4   rE   Ú_EARLIEST_UTC_TIMEr»   r¯   r¸   rŠ   r¹   r}   r   ©r$   r<   r'   r'   r(   r´   å  s,   
ÿÿùz#CertificateBuilder.not_valid_beforec                 C  sz   t |tjƒs
tdƒ‚| jdurtdƒ‚t|ƒ}|tk rtdƒ‚| jdur-|| jk r-tdƒ‚t| j	| j
| j| j| j|| jƒS )z7
        Sets the certificate expiration time.
        rÌ   Nz)The not valid after may only be set once.z<The not valid after date must be on or after 1950 January 1.zAThe not valid after date must be after the not valid before date.)rX   rA   rŽ   r»   r4   rE   rÍ   rº   r¯   r¸   rŠ   r¹   r}   r   rÎ   r'   r'   r(   r¶     s.   
ÿ

ÿùz"CertificateBuilder.not_valid_afterr�   r   r‘   rW   c              	   C  sV   t |tƒs	tdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j
| j| j| jg | j¢|‘ƒS )z=
        Adds an X.509 extension to the certificate.
        r’   )rX   r   rŽ   r   r   r6   r   r¯   r¸   rŠ   r¹   r}   rº   r»   r“   r'   r'   r(   r”   !  s   
ùz CertificateBuilder.add_extensionr™   rœ   r   r�   rž   rŸ   r    rš   r¡   r›   r¢   ÚCertificatec                C  sÐ   | j du r	tdƒ‚| jdu rtdƒ‚| jdu rtdƒ‚| jdu r$tdƒ‚| jdu r-tdƒ‚| jdu r6tdƒ‚|durQt|tj	tj
fƒsGtdƒ‚t|tjƒsQtd	ƒ‚|dur_t|tjƒs_td
ƒ‚t | ||||¡S )zC
        Signs the certificate using the CA's private key.
        Nz&A certificate must have a subject namez&A certificate must have an issuer namez'A certificate must have a serial numberz/A certificate must have a not valid before timez.A certificate must have a not valid after timez$A certificate must have a public keyr¤   r¥   r¦   )rŠ   r4   r¸   r}   rº   r»   r¹   rX   r   r§   r¨   rŽ   r   r©   r   rª   r«   Úcreate_x509_certificater­   r'   r'   r(   r®   7  s:   





ÿûzCertificateBuilder.sign)r°   r‰   rˆ   r‰   r±   r²   rr   r³   r´   rµ   r¶   rµ   r2   r3   r   r   )r‹   r   r   r¯   )r½   r   r   r¯   )rÅ   rJ   r   r¯   )r<   r=   r   r¯   )r�   r   r‘   rW   r   r¯   r!   )rœ   r   r�   rž   rŸ   r    rš   r¡   r›   r¢   r   rÏ   )r+   r,   r-   Ú__annotations__r#   r°   rˆ   r±   rr   r´   r¶   r”   r®   r'   r'   r'   r(   r¯   k  s,   
 ø



%


üùr¯   c                   @  s|   e Zd ZU ded< ded< dddg g fd0dd„Zd1dd„Zd2dd„Zd3dd„Zd4dd„Zd5d d!„Z		d6ddd"œd7d.d/„Z
dS )8Ú CertificateRevocationListBuilderr3   r   úlist[RevokedCertificate]Ú_revoked_certificatesNr°   r‰   Úlast_updaterµ   Únext_updater2   Úrevoked_certificatesc                 C  s"   || _ || _|| _|| _|| _d S r!   )r¸   Ú_last_updateÚ_next_updater   rÔ   )r$   r°   rÕ   rÖ   r2   r×   r'   r'   r(   r#   n  s
   
z)CertificateRevocationListBuilder.__init__r   r   c                 C  s<   t |tƒs	tdƒ‚| jd urtdƒ‚t|| j| j| j| j	ƒS )NrŒ   r¼   )
rX   r   rŽ   r¸   r4   rÒ   rØ   rÙ   r   rÔ   )r$   r°   r'   r'   r(   r°   |  s   

ûz,CertificateRevocationListBuilder.issuer_namer=   c                 C  sr   t |tjƒs
tdƒ‚| jd urtdƒ‚t|ƒ}|tk rtdƒ‚| jd ur-|| jkr-tdƒ‚t| j	|| j| j
| jƒS )NrÌ   ú!Last update may only be set once.ú8The last update date must be on or after 1950 January 1.z9The last update date must be before the next update date.)rX   rA   rŽ   rØ   r4   rE   rÍ   rÙ   rÒ   r¸   r   rÔ   )r$   rÕ   r'   r'   r(   rÕ   ‹  s(   
ÿÿûz,CertificateRevocationListBuilder.last_updatec                 C  sr   t |tjƒs
tdƒ‚| jd urtdƒ‚t|ƒ}|tk rtdƒ‚| jd ur-|| jk r-tdƒ‚t| j	| j|| j
| jƒS )NrÌ   rÚ   rÛ   z8The next update date must be after the last update date.)rX   rA   rŽ   rÙ   r4   rE   rÍ   rØ   rÒ   r¸   r   rÔ   )r$   rÖ   r'   r'   r(   rÖ   £  s(   
ÿÿûz,CertificateRevocationListBuilder.next_updater�   r   r‘   rW   c                 C  sN   t |tƒs	tdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j
g | j¢|‘| jƒS )zM
        Adds an X.509 extension to the certificate revocation list.
        r’   )rX   r   rŽ   r   r   r6   r   rÒ   r¸   rØ   rÙ   rÔ   r“   r'   r'   r(   r”   »  s   
ûz.CertificateRevocationListBuilder.add_extensionÚrevoked_certificaterp   c                 C  s4   t |tƒs	tdƒ‚t| j| j| j| jg | j¢|‘ƒS )z8
        Adds a revoked certificate to the CRL.
        z)Must be an instance of RevokedCertificate)	rX   rp   rŽ   rÒ   r¸   rØ   rÙ   r   rÔ   )r$   rÜ   r'   r'   r(   Úadd_revoked_certificateÎ  s   
ûz8CertificateRevocationListBuilder.add_revoked_certificater™   rœ   r   r�   rž   rŸ   r    rš   r¡   r›   r¢   ÚCertificateRevocationListc                C  sš   | j d u r	tdƒ‚| jd u rtdƒ‚| jd u rtdƒ‚|d ur6t|tjtjfƒs,tdƒ‚t|t	j
ƒs6tdƒ‚|d urDt|tjƒsDtdƒ‚t | ||||¡S )NzA CRL must have an issuer namez"A CRL must have a last update timez"A CRL must have a next update timer¤   r¥   r¦   )r¸   r4   rØ   rÙ   rX   r   r§   r¨   rŽ   r   r©   r   rª   r«   Úcreate_x509_crlr­   r'   r'   r(   r®   ß  s.   
	

ÿûz%CertificateRevocationListBuilder.sign)
r°   r‰   rÕ   rµ   rÖ   rµ   r2   r3   r×   rÓ   )r°   r   r   rÒ   )rÕ   r=   r   rÒ   )rÖ   r=   r   rÒ   )r�   r   r‘   rW   r   rÒ   )rÜ   rp   r   rÒ   r!   )rœ   r   r�   rž   rŸ   r    rš   r¡   r›   r¢   r   rÞ   )r+   r,   r-   rÑ   r#   r°   rÕ   rÖ   r”   rÝ   r®   r'   r'   r'   r(   rÒ   j  s&   
 ú




üùrÒ   c                   @  sH   e Zd Zddg fddd	„Zddd„Zd dd„Zd!dd„Zd"d#dd„ZdS )$ÚRevokedCertificateBuilderNrr   r³   rt   rµ   r2   r3   c                 C  rK   r!   r|   r€   r'   r'   r(   r#     rN   z"RevokedCertificateBuilder.__init__rÅ   rJ   r   c                 C  sX   t |tƒs	tdƒ‚| jd urtdƒ‚|dkrtdƒ‚| ¡ dkr$tdƒ‚t|| j| jƒS )NrÆ   rÇ   r   z$The serial number should be positiverÈ   rÉ   )	rX   rJ   rŽ   r}   r4   rÊ   rà   r~   r   rË   r'   r'   r(   rr     s   

ÿ
ÿz'RevokedCertificateBuilder.serial_numberr<   r=   c                 C  sN   t |tjƒs
tdƒ‚| jd urtdƒ‚t|ƒ}|tk rtdƒ‚t| j|| j	ƒS )NrÌ   z)The revocation date may only be set once.z7The revocation date must be on or after 1950 January 1.)
rX   rA   rŽ   r~   r4   rE   rÍ   rà   r}   r   rÎ   r'   r'   r(   rt   #  s   
ÿ
ÿz)RevokedCertificateBuilder.revocation_dater�   r   r‘   rW   c                 C  sF   t |tƒs	tdƒ‚t|j||ƒ}t|| jƒ t| j| j	g | j¢|‘ƒS )Nr’   )
rX   r   rŽ   r   r   r6   r   rà   r}   r~   r“   r'   r'   r(   r”   3  s   
ýz'RevokedCertificateBuilder.add_extensionrŸ   r    rp   c                 C  s:   | j d u r	tdƒ‚| jd u rtdƒ‚t| j | jt| jƒƒS )Nz/A revoked certificate must have a serial numberz1A revoked certificate must have a revocation date)r}   r4   r~   r{   r   r   )r$   rŸ   r'   r'   r(   ÚbuildA  s   

ÿýzRevokedCertificateBuilder.build)rr   r³   rt   rµ   r2   r3   )rÅ   rJ   r   rà   )r<   r=   r   rà   )r�   r   r‘   rW   r   rà   r!   )rŸ   r    r   rp   )r+   r,   r-   r#   rr   rt   r”   rá   r'   r'   r'   r(   rà     s    ü



rà   rJ   c                   C  s   t  t d¡d¡d? S )Né   Úbigr   )rJ   Ú
from_bytesÚosÚurandomr'   r'   r'   r(   Úrandom_serial_numberO  rT   rç   )r0   r1   r2   r3   r   r   )r   r   r7   r8   r   r   )r<   r=   r   r=   r^   )NÚ
__future__r   rx   rA   rå   Útypingr‚   Úcollections.abcr   Úcryptographyr   Ú"cryptography.hazmat.bindings._rustr   r«   Úcryptography.hazmat.primitivesr   Ú)cryptography.hazmat.primitives.asymmetricr   r   r	   r
   r   r   r   r   Ú/cryptography.hazmat.primitives.asymmetric.typesr   r   Úcryptography.x509.extensionsr   r   r   r   Úcryptography.x509.namer   r   Úcryptography.x509.oidr   rÍ   ÚUnionÚSHA224ÚSHA256ÚSHA384ÚSHA512ÚSHA3_224ÚSHA3_256ÚSHA3_384ÚSHA3_512Ú_AllowedHashTypesÚ	Exceptionr   r6   r;   rE   rF   ra   ÚEnumrj   rn   rÏ   ÚABCMetarp   Úregisterr{   rÞ   r£   Úload_pem_x509_certificateÚload_der_x509_certificateÚload_pem_x509_certificatesÚload_pem_x509_csrÚload_der_x509_csrÚload_pem_x509_crlÚload_der_x509_crlr‡   r¯   rÒ   rà   rç   r'   r'   r'   r(   Ú<module>   sp   (
ùÿ




$ "p   I