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__© ú\C:\Users\psant\Downloads\PAF backend\school\venv\Lib\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   Z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
   
rD   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Ú_valuerH   )r$   r   rF   rH   r'   r'   r(   r#   a   ó   
zAttribute.__init__c                 C  ó   | j S r!   )rK   ©r$   r'   r'   r(   r   k   ó   zAttribute.oidc                 C  rN   r!   )rL   rO   r'   r'   r(   rF   o   rP   zAttribute.valuer   c                 C  s   d| j › d| j›d�S )Nz<Attribute(oid=z, value=ú)>)r   rF   rO   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!   )Ú
isinstancerE   ÚNotImplementedr   rF   rH   )r$   rT   r'   r'   r(   Ú__eq__v   s   

ÿ
ýzAttribute.__eq__c                 C  s   t | j| j| jfƒS r!   )Úhashr   rF   rH   rO   r'   r'   r(   Ú__hash__€   s   zAttribute.__hash__N)r   r   rF   rG   rH   rI   r   r   )r   r   )r   rG   ©r   r   )rT   rU   r   rV   ©r   rI   )r+   r,   r-   r   Z
UTF8StringrF   r#   Úpropertyr   rR   rY   r[   r'   r'   r'   r(   rE   `   s    ü



rE   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__rb   r   c                 C  s   d| j › d�S )Nz<Attributes(rQ   )rb   rO   r'   r'   r(   rR   �   s   zAttributes.__repr__r   r   rE   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   r`   r   r   r\   )r   r   r   rE   )
r+   r,   r-   r#   r   Ú__len__Ú__iter__Ú__getitem__rR   rd   r'   r'   r'   r(   r_   „   s
    

r_   c                   @  s   e Zd ZdZdZdS )ÚVersionr   é   N)r+   r,   r-   Zv1Úv3r'   r'   r'   r(   rh   ˜   s    rh   c                      r   )
ÚInvalidVersionr   r   Úparsed_versionrI   r   r   c                   r    r!   )r"   r#   rl   )r$   r   rl   r%   r'   r(   r#   ž   r)   zInvalidVersion.__init__)r   r   rl   rI   r   r   r*   r'   r'   r%   r(   rk   �   r/   rk   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   rI   c                 C  ó   dS )zG
        Returns the serial number of the revoked certificate.
        Nr'   rO   r'   r'   r(   Úserial_number§   ó    z RevokedCertificate.serial_numberr<   c                 C  rn   )zH
        Returns the date of when this certificate was revoked.
        Nr'   rO   r'   r'   r(   Úrevocation_date®   rp   z"RevokedCertificate.revocation_datec                 C  rn   )zl
        Returns the date of when this certificate was revoked as a non-naive
        UTC datetime.
        Nr'   rO   r'   r'   r(   Úrevocation_date_utcµ   rp   z&RevokedCertificate.revocation_date_utcr   c                 C  rn   )zW
        Returns an Extensions object containing a list of Revoked extensions.
        Nr'   rO   r'   r'   r(   r2   ½   rp   zRevokedCertificate.extensionsNr]   ©r   r<   ©r   r   )
r+   r,   r-   r^   ÚabcÚabstractmethodro   rq   rr   r2   r'   r'   r'   r(   rm   ¦   s    rm   )Ú	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 )Ú_RawRevokedCertificatero   rI   rq   r<   r2   r   c                 C  rJ   r!   ©Ú_serial_numberÚ_revocation_dateÚ_extensions©r$   ro   rq   r2   r'   r'   r(   r#   Ê   rM   z_RawRevokedCertificate.__init__r   c                 C  rN   r!   )rz   rO   r'   r'   r(   ro   Ô   rP   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.ri   )Ú
stacklevel)ÚwarningsÚwarnr   ZDeprecatedIn42r{   rO   r'   r'   r(   rq   Ø   s   üz&_RawRevokedCertificate.revocation_datec                 C  s   | j jtjjd�S )Nr=   )r{   rB   r@   ÚtimezoneÚutcrO   r'   r'   r(   rr   â   s   z*_RawRevokedCertificate.revocation_date_utcc                 C  rN   r!   )r|   rO   r'   r'   r(   r2   æ   rP   z!_RawRevokedCertificate.extensionsN)ro   rI   rq   r<   r2   r   r]   rs   rt   )	r+   r,   r-   r#   r^   ro   rq   rr   r2   r'   r'   r'   r(   rx   É   s    

	rx   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|   rb   )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.)rW   r   Ú	TypeErrorr†   r4   rƒ   r|   rb   ©r$   r‡   r'   r'   r(   r„   	  s   


ÿz-CertificateSigningRequestBuilder.subject_nameÚextvalr   ÚcriticalrV   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 ExtensionTypeN)
rW   r   rŠ   r   r   r6   r|   rƒ   r†   rb   ©r$   rŒ   r�   r0   r'   r'   r(   Úadd_extension  s   
ýz.CertificateSigningRequestBuilder.add_extension)Ú_tagr   r   rF   rG   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)rW   r   rŠ   rG   r   r:   rb   rF   rƒ   r†   r|   )r$   r   rF   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   rW   r   ÚPSSÚPKCS1v15rŠ   r   ÚRSAPrivateKeyr   ÚEllipticCurvePrivateKeyÚ	rust_x509Z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�   rV   r   rƒ   )r   r   rF   rG   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 | Nonero   ú
int | NoneÚnot_valid_beforeúdatetime.datetime | NoneÚnot_valid_afterr2   r   r   c                 C  s6   t j| _|| _|| _|| _|| _|| _|| _|| _	d S r!   )
rh   rj   Ú_versionÚ_issuer_namer†   Ú_public_keyrz   Ú_not_valid_beforeÚ_not_valid_afterr|   )r$   r«   r„   r¬   ro   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.)rW   r   rŠ   r³   r4   rª   r†   r´   rz   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‰   )rW   r   rŠ   r†   r4   rª   r³   r´   rz   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.)rW   r   ZDSAPublicKeyr   ZRSAPublicKeyr   ZEllipticCurvePublicKeyr
   ZEd25519PublicKeyr	   ZEd448PublicKeyr   ZX25519PublicKeyr   ZX448PublicKeyrŠ   r´   r4   rª   r³   r†   rz   rµ   r¶   r|   )r$   r¸   r'   r'   r(   r¬   ¥  s2   ùþÿ
ùzCertificateBuilder.public_keyÚnumberrI   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.)rW   rI   rŠ   rz   r4   Ú
bit_lengthrª   r³   r†   r´   rµ   r¶   r|   ©r$   r¹   r'   r'   r(   ro   Ê  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.)rW   r@   rŠ   rµ   r4   rD   Ú_EARLIEST_UTC_TIMEr¶   rª   r³   r†   r´   rz   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.)rW   r@   rŠ   r¶   r4   rD   rÁ   rµ   rª   r³   r†   r´   rz   r|   rÂ   r'   r'   r(   r±     s2   
ÿÿþÿùz"CertificateBuilder.not_valid_afterrŒ   r   r�   rV   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Ž   N)rW   r   rŠ   r   r   r6   r|   rª   r³   r†   r´   rz   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³   rz   rµ   r¶   r´   rW   r   r£   r¤   rŠ   r   r¥   r   r¦   r§   Zcreate_x509_certificater¨   r'   r'   r(   r©   7  s:   





ÿûzCertificateBuilder.sign)r«   r…   r„   r…   r¬   r­   ro   r®   r¯   r°   r±   r°   r2   r3   r   r   )r‡   r   r   rª   )r¸   r   r   rª   )r¹   rI   r   rª   )r;   r<   r   rª   )rŒ   r   r�   rV   r   rª   r!   )r˜   r   r™   rš   r›   rœ   r–   r�   r—   rž   r   rÃ   )r+   r,   r-   Ú__annotations__r#   r«   r„   r¬   ro   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·   )
rW   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.)rW   r@   rŠ   rË   r4   rD   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.)rW   r@   rŠ   rÌ   r4   rD   rÁ   rË   rÅ   r³   r|   rÇ   )r$   rÉ   r'   r'   r(   rÉ   £  s(   
ÿÿûz,CertificateRevocationListBuilder.next_updaterŒ   r   r�   rV   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Ž   N)rW   r   rŠ   r   r   r6   r|   rÅ   r³   rË   rÌ   rÇ   r�   r'   r'   r(   r�   »  s   
ûz.CertificateRevocationListBuilder.add_extensionÚrevoked_certificaterm   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 RevokedCertificateN)	rW   rm   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Ì   rW   r   r£   r¤   rŠ   r   r¥   r   r¦   r§   Z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�   rV   r   rÅ   )rÏ   rm   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 )$ÚRevokedCertificateBuilderNro   r®   rq   r°   r2   r3   c                 C  rJ   r!   ry   r}   r'   r'   r(   r#     rM   z"RevokedCertificateBuilder.__init__r¹   rI   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½   )	rW   rI   rŠ   rz   r4   r¾   rÒ   r{   r|   r¿   r'   r'   r(   ro     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.)
rW   r@   rŠ   r{   r4   rD   rÁ   rÒ   rz   r|   rÂ   r'   r'   r(   rq   #  s   
ÿ
ÿz)RevokedCertificateBuilder.revocation_daterŒ   r   r�   rV   c                 C  sF   t |tƒs	tdƒ‚t|j||ƒ}t|| jƒ t| j| j	g | j¢|‘ƒS )NrŽ   )
rW   r   rŠ   r   r   r6   r|   rÒ   rz   r{   r�   r'   r'   r(   r�   3  s   
ýz'RevokedCertificateBuilder.add_extensionr›   rœ   rm   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)rz   r4   r{   rx   r   r|   )r$   r›   r'   r'   r(   ÚbuildA  s   

ÿýzRevokedCertificateBuilder.build)ro   r®   rq   r°   r2   r3   )r¹   rI   r   rÒ   )r;   r<   r   rÒ   )rŒ   r   r�   rV   r   rÒ   r!   )r›   rœ   r   rm   )r+   r,   r-   r#   ro   rq   r�   rÓ   r'   r'   r'   r(   rÒ     s    ü



rÒ   rI   c                   C  s   t  t d¡d¡d? S )Né   Úbigr   )rI   Ú
from_bytesÚosÚurandomr'   r'   r'   r(   Úrandom_serial_numberO  rS   rÙ   )r0   r1   r2   r3   r   r   )r   r   r7   r8   r   r   )r;   r<   r   r<   r]   )NÚ
__future__r   ru   r@   r×   Útypingr   Úcollections.abcr   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r§   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr   r   r	   r
   r   r   r   r   Z/cryptography.hazmat.primitives.asymmetric.typesr   r   Zcryptography.x509.extensionsr   r   r   r   Zcryptography.x509.namer   r   Zcryptography.x509.oidr   rÁ   ÚUnionÚSHA224ÚSHA256ÚSHA384ÚSHA512ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512Z_AllowedHashTypesÚ	Exceptionr   r6   r:   rD   rE   r_   ÚEnumrh   rk   rÃ   ÚABCMetarm   Úregisterrx   rÑ   rŸ   Zload_pem_x509_certificateZload_der_x509_certificateZload_pem_x509_certificatesZload_pem_x509_csrZload_der_x509_csrZload_pem_x509_crlZload_der_x509_crlrƒ   rª   rÅ   rÒ   rÙ   r'   r'   r'   r(   Ú<module>   sp   (
ùÿ




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