U
    m5{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dœdd„Z3ddddœdd„Z4dddœ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,d-„ d-ƒZIG d.d/„ d/ƒZJG d0d1„ d1ƒZKG d2d3„ d3ƒZLd4d5œd6d7„ZMdS )8é    )Ú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                      s&   e Zd Zddddœ‡ fdd„Z‡  ZS )ÚAttributeNotFoundÚstrr   ÚNone)ÚmsgÚoidÚreturnc                   s   t ƒ  |¡ || _d S ©N)ÚsuperÚ__init__r   )Úselfr   r   ©Ú	__class__© ú:/tmp/pip-unpacked-wheel-6hw_jadn/cryptography/x509/base.pyr!   9   s    zAttributeNotFound.__init__©Ú__name__Ú
__module__Ú__qualname__r!   Ú__classcell__r%   r%   r#   r&   r   8   s   r   zExtension[ExtensionType]úlist[Extension[ExtensionType]]r   )Ú	extensionÚ
extensionsr   c                 C  s"   |D ]}|j | j krtdƒ‚qd S )Nz$This extension has already been set.)r   Ú
ValueError)r-   r.   Úer%   r%   r&   Ú_reject_duplicate_extension>   s    r1   r   ú0list[tuple[ObjectIdentifier, bytes, int | None]])r   Ú
attributesr   c                 C  s$   |D ]\}}}|| krt dƒ‚qd S )Nz$This attribute has already been set.)r/   )r   r3   Zattr_oidÚ_r%   r%   r&   Ú_reject_duplicate_attributeH   s    r5   údatetime.datetime©Útimer   c                 C  s:   | j dk	r2|  ¡ }|r|nt ¡ }| jdd�| S | S d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)r8   Úoffsetr%   r%   r&   Ú_convert_to_naive_utc_timeR   s
    
r@   c                   @  sx   e Zd Zejjfdddddœdd„Zeddœd	d
„ƒZeddœdd„ƒZddœdd„Z	dddœdd„Z
ddœdd„ZdS )Ú	Attributer   ÚbytesÚintr   )r   ÚvalueÚ_typer   c                 C  s   || _ || _|| _d S r   )Ú_oidÚ_valuerE   )r"   r   rD   rE   r%   r%   r&   r!   a   s    zAttribute.__init__©r   c                 C  s   | j S r   )rF   ©r"   r%   r%   r&   r   k   s    zAttribute.oidc                 C  s   | j S r   )rG   rI   r%   r%   r&   rD   o   s    zAttribute.valuer   c                 C  s   d| j › d| j›d�S )Nz<Attribute(oid=z, value=ú)>)r   rD   rI   r%   r%   r&   Ú__repr__s   s    zAttribute.__repr__ÚobjectÚbool)Úotherr   c                 C  s2   t |tƒstS | j|jko0| j|jko0| j|jkS r   )Ú
isinstancerA   ÚNotImplementedr   rD   rE   )r"   rN   r%   r%   r&   Ú__eq__v   s    

ÿ
ýzAttribute.__eq__c                 C  s   t | j| j| jfƒS r   )Úhashr   rD   rE   rI   r%   r%   r&   Ú__hash__€   s    zAttribute.__hash__N)r(   r)   r*   r   Z
UTF8StringrD   r!   Úpropertyr   rK   rQ   rS   r%   r%   r%   r&   rA   `   s   ü

rA   c                   @  sH   e Zd Zdddœdd„Zedƒ\ZZZddœd	d
„Zdddœdd„Z	dS )Ú
AttributeszIterable[Attribute]r   )r3   r   c                 C  s   t |ƒ| _d S r   )ÚlistÚ_attributes)r"   r3   r%   r%   r&   r!   …   s    zAttributes.__init__rW   r   rH   c                 C  s   d| j › d�S )Nz<Attributes(rJ   )rW   rI   r%   r%   r&   rK   �   s    zAttributes.__repr__r   rA   )r   r   c                 C  s2   | D ]}|j |kr|  S qtd|› d�|ƒ‚d S )NzNo z attribute was found)r   r   )r"   r   Úattrr%   r%   r&   Úget_attribute_for_oid�   s    

z Attributes.get_attribute_for_oidN)
r(   r)   r*   r!   r   Ú__len__Ú__iter__Ú__getitem__rK   rY   r%   r%   r%   r&   rU   „   s   rU   c                   @  s   e Zd ZdZdZdS )ÚVersionr   é   N)r(   r)   r*   Zv1Úv3r%   r%   r%   r&   r]   ˜   s   r]   c                      s&   e Zd Zddddœ‡ fdd„Z‡  ZS )ÚInvalidVersionr   rC   r   )r   Úparsed_versionr   c                   s   t ƒ  |¡ || _d S r   )r    r!   ra   )r"   r   ra   r#   r%   r&   r!   ž   s    zInvalidVersion.__init__r'   r%   r%   r#   r&   r`   �   s   r`   c                   @  sl   e Zd Zeejddœdd„ƒƒZeejddœdd„ƒƒZeejddœdd	„ƒƒZeejd
dœdd„ƒƒZ	dS )ÚRevokedCertificaterC   rH   c                 C  s   dS )zG
        Returns the serial number of the revoked certificate.
        Nr%   rI   r%   r%   r&   Úserial_number§   s    z RevokedCertificate.serial_numberr6   c                 C  s   dS )zH
        Returns the date of when this certificate was revoked.
        Nr%   rI   r%   r%   r&   Úrevocation_date®   s    z"RevokedCertificate.revocation_datec                 C  s   dS )zl
        Returns the date of when this certificate was revoked as a non-naive
        UTC datetime.
        Nr%   rI   r%   r%   r&   Úrevocation_date_utcµ   s    z&RevokedCertificate.revocation_date_utcr   c                 C  s   dS )zW
        Returns an Extensions object containing a list of Revoked extensions.
        Nr%   rI   r%   r%   r&   r.   ½   s    zRevokedCertificate.extensionsN)
r(   r)   r*   rT   ÚabcÚabstractmethodrc   rd   re   r.   r%   r%   r%   r&   rb   ¦   s   rb   )Ú	metaclassc                   @  sf   e Zd Zddddœdd„Zeddœdd	„ƒZeddœd
d„ƒZeddœdd„ƒZeddœdd„ƒZdS )Ú_RawRevokedCertificaterC   r6   r   ©rc   rd   r.   c                 C  s   || _ || _|| _d S r   ©Ú_serial_numberÚ_revocation_dateÚ_extensions©r"   rc   rd   r.   r%   r%   r&   r!   Ê   s    z_RawRevokedCertificate.__init__rH   c                 C  s   | j S r   )rl   rI   r%   r%   r&   rc   Ô   s    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.r^   )Ú
stacklevel)ÚwarningsÚwarnr   ZDeprecatedIn42rm   rI   r%   r%   r&   rd   Ø   s    üz&_RawRevokedCertificate.revocation_datec                 C  s   | j jtjjd�S )Nr9   )rm   r>   r<   ÚtimezoneÚutcrI   r%   r%   r&   re   â   s    z*_RawRevokedCertificate.revocation_date_utcc                 C  s   | j S r   )rn   rI   r%   r%   r&   r.   æ   s    z!_RawRevokedCertificate.extensionsN)	r(   r)   r*   r!   rT   rc   rd   re   r.   r%   r%   r%   r&   ri   É   s   
	ri   c                	   @  s„   e Zd Zdg g fddddœdd„Zdd d	œd
d„Zddd dœdd„Zddœdddd dœdd„Zd"dddœdddddddœd d!„ZdS )#Ú CertificateSigningRequestBuilderNúName | Noner,   r2   )Úsubject_namer.   r3   c                 C  s   || _ || _|| _dS )zB
        Creates an empty X.509 certificate request (v1).
        N)Ú_subject_namern   rW   )r"   rw   r.   r3   r%   r%   r&   r!   ü   s    	z)CertificateSigningRequestBuilder.__init__r   ©Únamer   c                 C  s4   t |tƒstdƒ‚| jdk	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.)rO   r   Ú	TypeErrorrx   r/   ru   rn   rW   ©r"   rz   r%   r%   r&   rw   	  s    

  ÿz-CertificateSigningRequestBuilder.subject_namer   rM   ©ÚextvalÚcriticalr   c                 C  sD   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j|f•| j	ƒS )zE
        Adds an X.509 extension to the certificate request.
        ú"extension must be an ExtensionType)
rO   r   r}   r   r   r1   rn   ru   rx   rW   ©r"   r€   r�   r-   r%   r%   r&   Úadd_extension  s    

ýz.CertificateSigningRequestBuilder.add_extension)Ú_tagr   rB   z_ASN1Type | None)r   rD   r…   r   c                C  s|   t |tƒstdƒ‚t |tƒs$tdƒ‚|dk	r>t |tƒs>tdƒ‚t|| jƒ |dk	rZ|j}nd}t| j	| j
| j|||f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)rO   r   r}   rB   r   r5   rW   rD   ru   rx   rn   )r"   r   rD   r…   Útagr%   r%   r&   Úadd_attribute'  s    


ýz.CertificateSigningRequestBuilder.add_attribute©Úrsa_paddingÚecdsa_deterministicr   ú_AllowedHashTypes | Noneú
typing.Anyú%padding.PSS | padding.PKCS1v15 | Noneúbool | NoneÚCertificateSigningRequest©Úprivate_keyÚ	algorithmÚbackendr‰   rŠ   r   c                C  sv   | j dkrtdƒ‚|dk	rHt|tjtjfƒs4tdƒ‚t|tjƒsHtdƒ‚|dk	rdt|t	j
ƒsdt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)rx   r/   rO   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)N)r(   r)   r*   r!   rw   r„   r‡   r�   r%   r%   r%   r&   ru   û   s   üû$ üùru   c                
   @  sÖ   e Zd ZU ded< ddddddg fddddddddd	œd
d„Zdd dœdd„Zdd dœdd„Zdd dœdd„Zdd dœdd„Zdd dœdd„Z	dd dœdd„Z
d d!d d"œd#d$„Zd/ddd%œd&d'd(d)d*d+d,œd-d.„ZdS )0ÚCertificateBuilderr,   rn   Nrv   z CertificatePublicKeyTypes | Noneú
int | Noneúdatetime.datetime | Noner   )Úissuer_namerw   Ú
public_keyrc   Únot_valid_beforeÚnot_valid_afterr.   r   c                 C  s6   t j| _|| _|| _|| _|| _|| _|| _|| _	d S r   )
r]   r_   Ú_versionÚ_issuer_namerx   Ú_public_keyrl   Ú_not_valid_beforeÚ_not_valid_afterrn   )r"   r¡   rw   r¢   rc   r£   r¤   r.   r%   r%   r&   r!   n  s    
zCertificateBuilder.__init__r   ry   c                 C  sD   t |tƒstdƒ‚| jdk	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.)rO   r   r}   r¦   r/   rž   rx   r§   rl   r¨   r©   rn   r~   r%   r%   r&   r¡   �  s    

ùzCertificateBuilder.issuer_namec                 C  sD   t |tƒstdƒ‚| jdk	r$tdƒ‚t| j|| j| j| j	| j
| jƒS )z:
        Sets the requestor's distinguished name.
        r{   Nr|   )rO   r   r}   rx   r/   rž   r¦   r§   rl   r¨   r©   rn   r~   r%   r%   r&   rw   “  s    

ùzCertificateBuilder.subject_namer   )Ú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k	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.)rO   r   ZDSAPublicKeyr   ZRSAPublicKeyr   ZEllipticCurvePublicKeyr
   ZEd25519PublicKeyr	   ZEd448PublicKeyr   ZX25519PublicKeyr   ZX448PublicKeyr}   r§   r/   rž   r¦   rx   rl   r¨   r©   rn   )r"   r«   r%   r%   r&   r¢   ¥  s2    ùþÿ
ùzCertificateBuilder.public_keyrC   ©Únumberr   c                 C  sh   t |tƒstdƒ‚| jdk	r$tdƒ‚|dkr4tdƒ‚| ¡ dkrHt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.)rO   rC   r}   rl   r/   Ú
bit_lengthrž   r¦   rx   r§   r¨   r©   rn   ©r"   r­   r%   r%   r&   rc   Ê  s&    

ÿùz CertificateBuilder.serial_numberr6   r7   c                 C  sz   t |tjƒstdƒ‚| jdk	r&tdƒ‚t|ƒ}|tk r>tdƒ‚| jdk	rZ|| jkrZt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.)rO   r<   r}   r¨   r/   r@   Ú_EARLIEST_UTC_TIMEr©   rž   r¦   rx   r§   rl   rn   ©r"   r8   r%   r%   r&   r£   å  s,    
ÿÿùz#CertificateBuilder.not_valid_beforec                 C  sz   t |tjƒstdƒ‚| jdk	r&tdƒ‚t|ƒ}|tk r>tdƒ‚| jdk	rZ|| jk rZt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.)rO   r<   r}   r©   r/   r@   rµ   r¨   rž   r¦   rx   r§   rl   rn   r¶   r%   r%   r&   r¤     s2    
ÿÿþÿùz"CertificateBuilder.not_valid_afterr   rM   r   c              	   C  sT   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j
| j| j| j| j|f•ƒS )z=
        Adds an X.509 extension to the certificate.
        r‚   )rO   r   r}   r   r   r1   rn   rž   r¦   rx   r§   rl   r¨   r©   rƒ   r%   r%   r&   r„   !  s    

ùz CertificateBuilder.add_extensionrˆ   r   r‹   rŒ   r�   rŽ   ÚCertificater�   c                C  sÐ   | j dkrtdƒ‚| jdkr$tdƒ‚| jdkr6tdƒ‚| jdkrHtdƒ‚| jdkrZtdƒ‚| jdkrltdƒ‚|dk	r¢t|tj	tj
fƒsŽtdƒ‚t|tjƒs¢td	ƒ‚|dk	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–   )rx   r/   r¦   rl   r¨   r©   r§   rO   r   r—   r˜   r}   r   r™   r   rš   r›   Zcreate_x509_certificaterœ   r%   r%   r&   r�   7  s:    





ÿûzCertificateBuilder.sign)N)r(   r)   r*   Ú__annotations__r!   r¡   rw   r¢   rc   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ddddddœd	d
„Zdd dœdd„Zdd dœdd„Zdd dœdd„Zddd dœdd„Zdd dœdd„Z	d)dddœd d!d"d#d$d%d&œd'd(„Z
dS )*Ú CertificateRevocationListBuilderr,   rn   zlist[RevokedCertificate]Ú_revoked_certificatesNrv   r    )r¡   Úlast_updateÚnext_updater.   Úrevoked_certificatesc                 C  s"   || _ || _|| _|| _|| _d S r   )r¦   Ú_last_updateÚ_next_updatern   rº   )r"   r¡   r»   r¼   r.   r½   r%   r%   r&   r!   n  s
    z)CertificateRevocationListBuilder.__init__r   )r¡   r   c                 C  s<   t |tƒstdƒ‚| jd k	r$tdƒ‚t|| j| j| j| j	ƒS )Nr{   rª   )
rO   r   r}   r¦   r/   r¹   r¾   r¿   rn   rº   )r"   r¡   r%   r%   r&   r¡   |  s    

ûz,CertificateRevocationListBuilder.issuer_namer6   )r»   r   c                 C  sr   t |tjƒstdƒ‚| jd k	r&tdƒ‚t|ƒ}|tk r>tdƒ‚| jd k	rZ|| jkrZt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.)rO   r<   r}   r¾   r/   r@   rµ   r¿   r¹   r¦   rn   rº   )r"   r»   r%   r%   r&   r»   ‹  s(    
ÿÿûz,CertificateRevocationListBuilder.last_update)r¼   r   c                 C  sr   t |tjƒstdƒ‚| jd k	r&tdƒ‚t|ƒ}|tk r>tdƒ‚| jd k	rZ|| jk rZtdƒ‚t| j	| j|| j
| jƒS )Nr´   rÀ   rÁ   z8The next update date must be after the last update date.)rO   r<   r}   r¿   r/   r@   rµ   r¾   r¹   r¦   rn   rº   )r"   r¼   r%   r%   r&   r¼   £  s(    
ÿÿûz,CertificateRevocationListBuilder.next_updater   rM   r   c                 C  sL   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j
| j|f•| jƒS )zM
        Adds an X.509 extension to the certificate revocation list.
        r‚   )rO   r   r}   r   r   r1   rn   r¹   r¦   r¾   r¿   rº   rƒ   r%   r%   r&   r„   »  s    

ûz.CertificateRevocationListBuilder.add_extensionrb   )Úrevoked_certificater   c                 C  s2   t |tƒstdƒ‚t| j| j| j| j| j|f•ƒS )z8
        Adds a revoked certificate to the CRL.
        z)Must be an instance of RevokedCertificate)	rO   rb   r}   r¹   r¦   r¾   r¿   rn   rº   )r"   rÂ   r%   r%   r&   Úadd_revoked_certificateÎ  s    

ûz8CertificateRevocationListBuilder.add_revoked_certificaterˆ   r   r‹   rŒ   r�   rŽ   ÚCertificateRevocationListr�   c                C  sš   | j d krtdƒ‚| jd kr$tdƒ‚| jd kr6tdƒ‚|d k	rlt|tjtjfƒsXtdƒ‚t|t	j
ƒsltdƒ‚|d k	rˆt|tjƒsˆt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¦   r/   r¾   r¿   rO   r   r—   r˜   r}   r   r™   r   rš   r›   Zcreate_x509_crlrœ   r%   r%   r&   r�   ß  s.    	


ÿûz%CertificateRevocationListBuilder.sign)N)r(   r)   r*   r¸   r!   r¡   r»   r¼   r„   rÃ   r�   r%   r%   r%   r&   r¹   j  s$   
ú üùr¹   c                   @  sj   e Zd Zddg fddddœdd„Zdd d	œd
d„Zdd dœdd„Zddd dœdd„Zddddœdd„ZdS )ÚRevokedCertificateBuilderNrŸ   r    r,   rj   c                 C  s   || _ || _|| _d S r   rk   ro   r%   r%   r&   r!     s    z"RevokedCertificateBuilder.__init__rC   r¬   c                 C  sX   t |tƒstdƒ‚| jd k	r$tdƒ‚|dkr4tdƒ‚| ¡ dkrHtdƒ‚t|| j| jƒS )Nr®   r¯   r   z$The serial number should be positiver°   r±   )	rO   rC   r}   rl   r/   r²   rÅ   rm   rn   r³   r%   r%   r&   rc     s    

ÿ  ÿz'RevokedCertificateBuilder.serial_numberr6   r7   c                 C  sN   t |tjƒstdƒ‚| jd k	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.)
rO   r<   r}   rm   r/   r@   rµ   rÅ   rl   rn   r¶   r%   r%   r&   rd   #  s    
ÿ  ÿz)RevokedCertificateBuilder.revocation_dater   rM   r   c                 C  sD   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j|f•ƒS )Nr‚   )
rO   r   r}   r   r   r1   rn   rÅ   rl   rm   rƒ   r%   r%   r&   r„   3  s    

ýz'RevokedCertificateBuilder.add_extensionrŒ   rb   )r“   r   c                 C  s:   | j d krtdƒ‚| jd k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)rl   r/   rm   ri   r   rn   )r"   r“   r%   r%   r&   ÚbuildA  s    

ÿýzRevokedCertificateBuilder.build)N)r(   r)   r*   r!   rc   rd   r„   rÆ   r%   r%   r%   r&   rÅ     s   ü
rÅ   rC   rH   c                   C  s   t  t d¡d¡d? S )Né   Úbigr   )rC   Ú
from_bytesÚosÚurandomr%   r%   r%   r&   Úrandom_serial_numberO  s    rÌ   )NÚ
__future__r   rf   r<   rÊ   Útypingrq   Ú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   r1   r5   r@   rA   rU   ÚEnumr]   r`   r·   ÚABCMetarb   Úregisterri   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_crlru   rž   r¹   rÅ   rÌ   r%   r%   r%   r&   Ú<module>   sn   (
ùÿ

$ "p   I