a
    `mgi                  	   @  s4  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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 Z.G dd de/Z0ddddddZ1ddddddZ2dddddZ3G dd dZ4G d d! d!Z5G d"d# d#ej6Z7G d$d% d%e/Z8ej9Z9G d&d' d'ej:d(Z;e;<ej; G d)d* d*e;Z=ej>Z>ej?Z?ej@Z@ejAZAejBZBejCZCejDZDejEZEejFZFG d+d, d,ZGG d-d. d.ZHG d/d0 d0ZIG d1d2 d2ZJd3d4d5d6ZKdS )7    )annotationsN)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__ O/var/www/html/idle/venv/lib64/python3.9/site-packages/cryptography/x509/base.pyr    8   s    zAttributeNotFound.__init____name__
__module____qualname__r    __classcell__r$   r$   r"   r%   r   7   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    r0   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   r2   Zattr_oid_r$   r$   r%   _reject_duplicate_attributeG   s    r4   datetime.datetimetimer   c                 C  s:   | j dur2|  }|r|nt }| jdd| S | S dS )zNormalizes a datetime to a naive datetime in UTC.

    time -- datetime to normalize. Assumed to be in UTC if not timezone
            aware.
    Ntzinfo)r9   	utcoffsetdatetime	timedeltareplace)r7   offsetr$   r$   r%   _convert_to_naive_utc_timeQ   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_valuerD   )r!   r   rC   rD   r$   r$   r%   r    `   s    zAttribute.__init__r   c                 C  s   | j S r   )rE   r!   r$   r$   r%   r   j   s    zAttribute.oidc                 C  s   | j S r   )rF   rH   r$   r$   r%   rC   n   s    zAttribute.valuer   c                 C  s   d| j  d| jdS )Nz<Attribute(oid=z, value=)>)r   rC   rH   r$   r$   r%   __repr__r   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   )
isinstancer@   NotImplementedr   rC   rD   )r!   rM   r$   r$   r%   __eq__u   s    


zAttribute.__eq__c                 C  s   t | j| j| jfS r   )hashr   rC   rD   rH   r$   r$   r%   __hash__   s    zAttribute.__hash__N)r'   r(   r)   r   Z
UTF8StringrC   r    propertyr   rJ   rP   rR   r$   r$   r$   r%   r@   _   s   

r@   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typing.Iterable[Attribute]r   )r2   r   c                 C  s   t || _d S r   )list_attributes)r!   r2   r$   r$   r%   r       s    zAttributes.__init__rV   r   rG   c                 C  s   d| j  dS )Nz<Attributes(rI   )rV   rH   r$   r$   r%   rJ      s    zAttributes.__repr__r   r@   )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__rJ   rX   r$   r$   r$   r%   rT      s   rT   c                   @  s   e Zd ZdZdZdS )Versionr      N)r'   r(   r)   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   rB   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 )RevokedCertificaterB   rG   c                 C  s   dS )zG
        Returns the serial number of the revoked certificate.
        Nr$   rH   r$   r$   r%   serial_number   s    z RevokedCertificate.serial_numberr5   c                 C  s   dS )zH
        Returns the date of when this certificate was revoked.
        Nr$   rH   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$   rH   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$   rH   r$   r$   r%   r-      s    zRevokedCertificate.extensionsN)
r'   r(   r)   rS   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 )_RawRevokedCertificaterB   r5   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__rG   c                 C  s   | j S r   )rl   rH   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   rH   r$   r$   r%   rd      s    z&_RawRevokedCertificate.revocation_datec                 C  s   | j jtjjdS )Nr8   )rm   r=   r;   timezoneutcrH   r$   r$   r%   re      s    z*_RawRevokedCertificate.revocation_date_utcc                 C  s   | j S r   )rn   rH   r$   r$   r%   r-      s    z!_RawRevokedCertificate.extensionsN)	r'   r(   r)   r    rS   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 ZdS )" CertificateSigningRequestBuilderNName | Noner+   r1   )subject_namer-   r2   c                 C  s   || _ || _|| _dS )zB
        Creates an empty X.509 certificate request (v1).
        N)_subject_namern   rV   )r!   rw   r-   r2   r$   r$   r%   r       s    	z)CertificateSigningRequestBuilder.__init__r   namer   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.)rN   r   	TypeErrorrx   r.   ru   rn   rV   r!   rz   r$   r$   r%   rw     s    


z-CertificateSigningRequestBuilder.subject_namer   rL   extvalcriticalr   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)
rN   r   r}   r   r   r0   rn   ru   rx   rV   r!   r   r   r,   r$   r$   r%   add_extension  s    
z.CertificateSigningRequestBuilder.add_extension)_tagr   rA   z_ASN1Type | None)r   rC   r   r   c                C  s~   t |tstdt |ts$td|dur>t |ts>tdt|| j |durZ|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)rN   r   r}   rA   r   r4   rV   rC   ru   rx   rn   )r!   r   rC   r   tagr$   r$   r%   add_attribute&  s    


z.CertificateSigningRequestBuilder.add_attributersa_paddingr   _AllowedHashTypes | None
typing.Any%padding.PSS | padding.PKCS1v15 | NoneCertificateSigningRequestprivate_key	algorithmbackendr   r   c                C  sX   | j du rtd|durHt|tjtjfs4tdt|tjsHt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)rx   r.   rN   r
   PSSPKCS1v15r}   r   RSAPrivateKey	rust_x509Zcreate_x509_csrr!   r   r   r   r   r$   r$   r%   signF  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-ZdS )/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    b  s    
zCertificateBuilder.__init__r   ry   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.)rN   r   r}   r   r.   r   rx   r   rl   r   r   rn   r~   r$   r$   r%   r   u  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|   )rN   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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).
        zExpecting one of DSAPublicKey, RSAPublicKey, EllipticCurvePublicKey, Ed25519PublicKey, Ed448PublicKey, X25519PublicKey, or X448PublicKey.Nz$The public key may only be set once.)rN   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_keyrB   numberr   c                 C  sh   t |tstd| jdu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.)rN   rB   r}   rl   r.   
bit_lengthr   r   rx   r   r   r   rn   r!   r   r$   r$   r%   rc     s&    

z CertificateBuilder.serial_numberr5   r6   c                 C  sz   t |tjstd| jdur&tdt|}|tk r>td| jdu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.)rN   r;   r}   r   r.   r?   _EARLIEST_UTC_TIMEr   r   r   rx   r   rl   rn   r!   r7   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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.)rN   r;   r}   r   r.   r?   r   r   r   r   rx   r   rl   rn   r   r$   r$   r%   r     s2    
z"CertificateBuilder.not_valid_afterr   rL   r   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   )rN   r   r}   r   r   r0   rn   r   r   rx   r   rl   r   r   r   r$   r$   r%   r     s    
z CertificateBuilder.add_extensionr   r   r   r   r   Certificater   c                C  s   | j du rtd| jdu r$td| jdu r6td| jdu rHtd| jdu rZtd| jdu rltd|durt|tj	tj
fstdt|tjst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   )rx   r.   r   rl   r   r   r   rN   r
   r   r   r}   r   r   r   Zcreate_x509_certificater   r$   r$   r%   r   ,  s(    





zCertificateBuilder.sign)N)r'   r(   r)   __annotations__r    r   rw   r   rc   r   r   r   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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'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    X  s
    z)CertificateRevocationListBuilder.__init__r   )r   r   c                 C  s<   t |tstd| jd ur$tdt|| j| j| j| j	S )Nr{   r   )
rN   r   r}   r   r.   r   r   r   rn   r   )r!   r   r$   r$   r%   r   f  s    

z,CertificateRevocationListBuilder.issuer_namer5   )r   r   c                 C  sr   t |tjstd| jd ur&tdt|}|tk r>td| jd u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.)rN   r;   r}   r   r.   r?   r   r   r   r   rn   r   )r!   r   r$   r$   r%   r   u  s(    
z,CertificateRevocationListBuilder.last_update)r   r   c                 C  sr   t |tjstd| jd ur&tdt|}|tk r>td| jd u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.)rN   r;   r}   r   r.   r?   r   r   r   r   rn   r   )r!   r   r$   r$   r%   r     s(    
z,CertificateRevocationListBuilder.next_updater   rL   r   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   )rN   r   r}   r   r   r0   rn   r   r   r   r   r   r   r$   r$   r%   r     s    
z.CertificateRevocationListBuilder.add_extensionrb   )revoked_certificater   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)	rN   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   CertificateRevocationListr   c                C  s|   | j d u rtd| jd u r$td| jd u r6td|d urlt|tjtjfsXtdt|t	j
slt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   rN   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   T  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__rB   r   c                 C  sX   t |tstd| jd u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   )	rN   rB   r}   rl   r.   r   r   rm   rn   r   r$   r$   r%   rc     s    


z'RevokedCertificateBuilder.serial_numberr5   r6   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.)
rN   r;   r}   rm   r.   r?   r   r   rl   rn   r   r$   r$   r%   rd     s    

z)RevokedCertificateBuilder.revocation_dater   rL   r   c                 C  sF   t |tstdt|j||}t|| j t| j| j	g | j|S )Nr   )
rN   r   r}   r   r   r0   rn   r   rl   rm   r   r$   r$   r%   r     s    
z'RevokedCertificateBuilder.add_extensionr   rb   )r   r   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)rl   r.   rm   ri   r   rn   )r!   r   r$   r$   r%   build   s    

zRevokedCertificateBuilder.build)N)r'   r(   r)   r    rc   rd   r   r   r$   r$   r$   r%   r     s   
r   rB   rG   c                   C  s   t tddd? S )N   bigr   )rB   
from_bytesosurandomr$   r$   r$   r%   random_serial_number.  s    r   )L
__future__r   rf   r;   r   typingrq   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   r0   r4   r?   r@   rT   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>   sj   (


$ "e v I