o
    =jŽe  ã                	   @  sè  d dl m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 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 Z-G dd„ de.ƒZ/d5dd„Z0d6dd„Z1d7d d!„Z2G d"d#„ d#ƒZ3G d$d%„ d%ƒZ4G d&d'„ d'ej5ƒZ6G d(d)„ d)e.ƒZ7ej8Z8ej9Z9ej:Z:ej;Z;ej<Z<ej=Z=ej>Z>ej?Z?ej@Z@ejAZAejBZBG d*d+„ d+ƒZCG d,d-„ d-ƒZDG d.d/„ d/ƒZEG d0d1„ d1ƒZFd8d3d4„ZGdS )9é    )ÚannotationsN)ÚIterable)Úutils)Úx509)Úhashes)ÚdsaÚecÚed448Úed25519ÚpaddingÚrsaÚx448Úx25519)Ú CertificateIssuerPrivateKeyTypesÚCertificatePublicKeyTypes)Ú	ExtensionÚ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\Anu Raj Backend\school\venv\Lib\site-packages\cryptography/x509/base.pyr"   6   ó   
zAttributeNotFound.__init__)r   r   r   r   r   r   ©Ú__name__Ú
__module__Ú__qualname__r"   Ú__classcell__r&   r&   r$   r'   r   5   ó    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)r/   r1   Úer&   r&   r'   Ú_reject_duplicate_extension;   s
   ÿÿr5   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.)r3   )r   r6   Zattr_oidÚ_r&   r&   r'   Ú_reject_duplicate_attributeE   s
   ÿÿr9   Ú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_timeO   s
   
rB   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Ú_valuerF   )r#   r   rD   rF   r&   r&   r'   r"   ^   ó   
zAttribute.__init__c                 C  ó   | j S r    )rI   ©r#   r&   r&   r'   r   h   ó   zAttribute.oidc                 C  rL   r    )rJ   rM   r&   r&   r'   rD   l   rN   zAttribute.valuer   c                 C  s   d| j › d| j›d�S )Nz<Attribute(oid=z, value=ú)>)r   rD   rM   r&   r&   r'   Ú__repr__p   ó   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    )Ú
isinstancerC   ÚNotImplementedr   rD   rF   )r#   rR   r&   r&   r'   Ú__eq__s   s   

ÿ
ýzAttribute.__eq__c                 C  s   t | j| j| jfƒS r    )Úhashr   rD   rF   rM   r&   r&   r'   Ú__hash__}   s   zAttribute.__hash__N)r   r   rD   rE   rF   rG   r   r   )r   r   )r   rE   ©r   r   )rR   rS   r   rT   ©r   rG   )r*   r+   r,   r   Z
UTF8StringrD   r"   Úpropertyr   rP   rW   rY   r&   r&   r&   r'   rC   ]   s    ü



rC   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 )Ú
Attributesr6   úIterable[Attribute]r   r   c                 C  s   t |ƒ| _d S r    )ÚlistÚ_attributes)r#   r6   r&   r&   r'   r"   ‚   s   zAttributes.__init__r`   r   c                 C  s   d| j › d�S )Nz<Attributes(rO   )r`   rM   r&   r&   r'   rP   Š   s   zAttributes.__repr__r   r   rC   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)r6   r^   r   r   rZ   )r   r   r   rC   )
r*   r+   r,   r"   r   Ú__len__Ú__iter__Ú__getitem__rP   rb   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'   rf   •   s    rf   c                      r   )
ÚInvalidVersionr   r   Úparsed_versionrG   r   r   c                   r   r    )r!   r"   rj   )r#   r   rj   r$   r&   r'   r"   ›   r(   zInvalidVersion.__init__)r   r   rj   rG   r   r   r)   r&   r&   r$   r'   ri   š   r.   ri   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 | Noner1   r2   r6   r7   c                 C  s   || _ || _|| _dS )zB
        Creates an empty X.509 certificate request (v1).
        N)Ú_subject_nameÚ_extensionsr`   )r#   rl   r1   r6   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.)rU   r   Ú	TypeErrorrn   r3   rk   ro   r`   ©r#   rp   r&   r&   r'   rl   Â   s   


ÿz-CertificateSigningRequestBuilder.subject_nameÚextvalr   ÚcriticalrT   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)
rU   r   rs   r   r   r5   ro   rk   rn   r`   ©r#   ru   rv   r/   r&   r&   r'   Úadd_extensionÎ   s   
ýz.CertificateSigningRequestBuilder.add_extension)Ú_tagr   r   rD   rE   rz   ú_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)rU   r   rs   rE   r   r9   r`   rD   rk   rn   ro   )r#   r   rD   rz   Ú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)rn   r3   rU   r   ÚPSSÚPKCS1v15rs   r   ÚRSAPrivateKeyr   ÚEllipticCurvePrivateKeyÚ	rust_x509Zcreate_x509_csr©r#   r�   r‚   r„   r   r€   r&   r&   r'   Úsign   s&   
ÿûz%CertificateSigningRequestBuilder.sign)rl   rm   r1   r2   r6   r7   )rp   r   r   rk   )ru   r   rv   rT   r   rk   )r   r   rD   rE   rz   r{   r   rk   r    )r�   r   r‚   rƒ   r„   r…   r   r†   r€   r‡   r   rˆ   )r*   r+   r,   r"   rl   ry   r}   r’   r&   r&   r&   r'   rk   ´   s    ü

û$üùrk   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ÚCertificateBuilderr2   ro   NÚissuer_namerm   rl   Ú
public_keyú CertificatePublicKeyTypes | NoneÚserial_numberú
int | NoneÚnot_valid_beforeúdatetime.datetime | NoneÚnot_valid_afterr1   r   r   c                 C  s6   t j| _|| _|| _|| _|| _|| _|| _|| _	d S r    )
rf   rh   Ú_versionÚ_issuer_namern   Ú_public_keyÚ_serial_numberÚ_not_valid_beforeÚ_not_valid_afterro   )r#   r”   rl   r•   r—   r™   r›   r1   r&   r&   r'   r"   '  s   

zCertificateBuilder.__init__rp   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.
        rq   Nú%The issuer name may only be set once.)rU   r   rs   r�   r3   r“   rn   rž   rŸ   r    r¡   ro   rt   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.
        rq   Nrr   )rU   r   rs   rn   r3   r“   r�   rž   rŸ   r    r¡   ro   rt   r&   r&   r'   rl   L  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.)rU   r   ZDSAPublicKeyr   ZRSAPublicKeyr   ZEllipticCurvePublicKeyr
   ZEd25519PublicKeyr	   ZEd448PublicKeyr   ZX25519PublicKeyr   ZX448PublicKeyrs   rž   r3   r“   r�   rn   rŸ   r    r¡   ro   )r#   r£   r&   r&   r'   r•   ^  s2   ùþÿ
ùzCertificateBuilder.public_keyÚnumberrG   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.)rU   rG   rs   rŸ   r3   Ú
bit_lengthr“   r�   rn   rž   r    r¡   ro   ©r#   r¤   r&   r&   r'   r—   ƒ  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.)rU   r>   rs   r    r3   rB   Ú_EARLIEST_UTC_TIMEr¡   r“   r�   rn   rž   rŸ   ro   ©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.)rU   r>   rs   r¡   r3   rB   r¬   r    r“   r�   rn   rž   rŸ   ro   r­   r&   r&   r'   r›   »  s2   
ÿÿþÿùz"CertificateBuilder.not_valid_afterru   r   rv   rT   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.
        rw   N)rU   r   rs   r   r   r5   ro   r“   r�   rn   rž   rŸ   r    r¡   rx   r&   r&   r'   ry   Ú  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‹   )rn   r3   r�   rŸ   r    r¡   rž   rU   r   rŒ   r�   rs   r   rŽ   r   r�   r�   Zcreate_x509_certificater‘   r&   r&   r'   r’   ð  s:   





ÿûzCertificateBuilder.sign)r”   rm   rl   rm   r•   r–   r—   r˜   r™   rš   r›   rš   r1   r2   r   r   )rp   r   r   r“   )r£   r   r   r“   )r¤   rG   r   r“   )r:   r;   r   r“   )ru   r   rv   rT   r   r“   r    )r�   r   r‚   rƒ   r„   r…   r   r†   r€   r‡   r   r®   )r*   r+   r,   Ú__annotations__r"   r”   rl   r•   r—   r™   r›   ry   r’   r&   r&   r&   r'   r“   $  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Ú CertificateRevocationListBuilderr2   ro   úlist[RevokedCertificate]Ú_revoked_certificatesNr”   rm   Úlast_updaterš   Únext_updater1   Úrevoked_certificatesc                 C  s"   || _ || _|| _|| _|| _d S r    )r�   Ú_last_updateÚ_next_updatero   r²   )r#   r”   r³   r´   r1   rµ   r&   r&   r'   r"   '  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 )Nrq   r¢   )
rU   r   rs   r�   r3   r°   r¶   r·   ro   r²   )r#   r”   r&   r&   r'   r”   5  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.)rU   r>   rs   r¶   r3   rB   r¬   r·   r°   r�   ro   r²   )r#   r³   r&   r&   r'   r³   D  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.)rU   r>   rs   r·   r3   rB   r¬   r¶   r°   r�   ro   r²   )r#   r´   r&   r&   r'   r´   \  s(   
ÿÿûz,CertificateRevocationListBuilder.next_updateru   r   rv   rT   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.
        rw   N)rU   r   rs   r   r   r5   ro   r°   r�   r¶   r·   r²   rx   r&   r&   r'   ry   t  s   
ûz.CertificateRevocationListBuilder.add_extensionÚrevoked_certificateÚRevokedCertificatec                 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)	rU   r»   rs   r°   r�   r¶   r·   ro   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�   r3   r¶   r·   rU   r   rŒ   r�   rs   r   rŽ   r   r�   r�   Zcreate_x509_crlr‘   r&   r&   r'   r’   ˜  s.   
	

ÿûz%CertificateRevocationListBuilder.sign)
r”   rm   r³   rš   r´   rš   r1   r2   rµ   r±   )r”   r   r   r°   )r³   r;   r   r°   )r´   r;   r   r°   )ru   r   rv   rT   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´   ry   r¼   r’   r&   r&   r&   r'   r°   #  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 )$ÚRevokedCertificateBuilderNr—   r˜   Úrevocation_daterš   r1   r2   c                 C  rH   r    )rŸ   Ú_revocation_datero   )r#   r—   r¿   r1   r&   r&   r'   r"   À  rK   z"RevokedCertificateBuilder.__init__r¤   rG   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¨   )	rU   rG   rs   rŸ   r3   r©   r¾   rÀ   ro   rª   r&   r&   r'   r—   Ê  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.)
rU   r>   rs   rÀ   r3   rB   r¬   r¾   rŸ   ro   r­   r&   r&   r'   r¿   Ü  s   
ÿ
ÿz)RevokedCertificateBuilder.revocation_dateru   r   rv   rT   c                 C  sF   t |tƒs	tdƒ‚t|j||ƒ}t|| jƒ t| j| j	g | j¢|‘ƒS )Nrw   )
rU   r   rs   r   r   r5   ro   r¾   rŸ   rÀ   rx   r&   r&   r'   ry   ì  s   
ýz'RevokedCertificateBuilder.add_extensionr„   r…   r»   c                 C  s.   | j d u r	tdƒ‚| jd u rtdƒ‚t | ¡S )Nz/A revoked certificate must have a serial numberz1A revoked certificate must have a revocation date)rŸ   r3   rÀ   r�   Zcreate_revoked_certificate)r#   r„   r&   r&   r'   Úbuildú  s   

ÿ
zRevokedCertificateBuilder.build)r—   r˜   r¿   rš   r1   r2   )r¤   rG   r   r¾   )r:   r;   r   r¾   )ru   r   rv   rT   r   r¾   r    )r„   r…   r   r»   )r*   r+   r,   r"   r—   r¿   ry   rÁ   r&   r&   r&   r'   r¾   ¿  s    ü



r¾   rG   c                   C  s   t  t d¡d¡d? S )Né   Úbigr   )rG   Ú
from_bytesÚosÚurandomr&   r&   r&   r'   Úrandom_serial_number  rQ   rÇ   )r/   r0   r1   r2   r   r   )r   r   r6   r7   r   r   )r:   r;   r   r;   r[   )HÚ
__future__r   r>   rÅ   ÚtypingÚ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   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   r5   r9   rB   rC   r]   ÚEnumrf   ri   r®   r»   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_crlrk   r“   r°   r¾   rÇ   r&   r&   r&   r'   Ú<module>   sh   (
ùÿ




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