3
ãde–ˆ  ã            	   @   s  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
mZ d dlmZmZmZmZmZmZmZ d dlmZ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j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.ee ej/ee  ddœdd„Z0e!ej/ej1e!e2ej3e4 f  ddœdd„Z5ejejdœdd„Z6G dd„ dƒZ7G dd„ dƒZ8G dd„ dej9ƒZ:G dd„ de-ƒZ;G dd „ d e j<d!�Z=e=j>ej=ƒ G d"d#„ d#e j<d!�Z?e?j>ej?ƒ G d$d%„ d%e?ƒZ@G d&d'„ d'e j<d!�ZAeAj>ejAƒ G d(d)„ d)e j<d!�ZBeBj>ejBƒ dEe2ejCe=d*œd+d,„ZDe2ej/e= d-œd.d/„ZEdFe2ejCe=d*œd0d1„ZFdGe2ejCeBd*œd2d3„ZGdHe2ejCeBd*œd4d5„ZHdIe2ejCeAd*œd6d7„ZIdJe2ejCeAd*œd8d9„ZJG d:d;„ d;ƒZKG d<d=„ d=ƒZLG d>d?„ d?ƒZMG d@dA„ dAƒZNe4dBœdCdD„ZOdS )Ké    N)Úutils)Úx509)ÚhashesÚserialization)ÚdsaÚecÚed448Úed25519ÚrsaÚx448Úx25519)Ú CertificateIssuerPrivateKeyTypesÚCertificateIssuerPublicKeyTypesÚCertificatePublicKeyTypes)Ú	ExtensionÚ
ExtensionsÚExtensionTypeÚ_make_sequence_methods)ÚNameÚ	_ASN1Type)ÚObjectIdentifieriž  é   c                   s&   e Zd Zeeddœ‡ fdd„Z‡  ZS )ÚAttributeNotFoundN)ÚmsgÚoidÚreturnc                s   t ƒ j|ƒ || _d S )N)ÚsuperÚ__init__r   )Úselfr   r   )Ú	__class__© úM/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/x509/base.pyr   6   s    zAttributeNotFound.__init__)Ú__name__Ú
__module__Ú__qualname__Ústrr   r   Ú__classcell__r    r    )r   r!   r   5   s   r   )Ú	extensionÚ
extensionsr   c             C   s&   x |D ]}|j | j krtdƒ‚qW d S )Nz$This extension has already been set.)r   Ú
ValueError)r'   r(   Úer    r    r!   Ú_reject_duplicate_extension;   s    
r+   )r   Ú
attributesr   c             C   s(   x"|D ]\}}}|| krt dƒ‚qW d S )Nz$This attribute has already been set.)r)   )r   r,   Zattr_oidÚ_r    r    r!   Ú_reject_duplicate_attributeE   s    r.   )Útimer   c             C   s:   | j dk	r2| jƒ }|r|ntjƒ }| 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)r0   Ú	utcoffsetÚdatetimeÚ	timedeltaÚreplace)r/   Úoffsetr    r    r!   Ú_convert_to_naive_utc_timeQ   s
    
r6   c               @   sx   e Zd Zejjfeeeddœdd„Z	e
edœdd„ƒZe
edœdd	„ƒZedœd
d„Zeedœdd„Zedœdd„ZdS )Ú	AttributeN)r   ÚvalueÚ_typer   c             C   s   || _ || _|| _d S )N)Ú_oidÚ_valuer9   )r   r   r8   r9   r    r    r!   r   `   s    zAttribute.__init__)r   c             C   s   | j S )N)r:   )r   r    r    r!   r   j   s    zAttribute.oidc             C   s   | j S )N)r;   )r   r    r    r!   r8   n   s    zAttribute.valuec             C   s   d| j › d| j›d�S )Nz<Attribute(oid=z, value=z)>)r   r8   )r   r    r    r!   Ú__repr__r   s    zAttribute.__repr__)Úotherr   c             C   s2   t |tƒstS | j|jko0| j|jko0| j|jkS )N)Ú
isinstancer7   ÚNotImplementedr   r8   r9   )r   r=   r    r    r!   Ú__eq__u   s
    
zAttribute.__eq__c             C   s   t | j| j| jfƒS )N)Úhashr   r8   r9   )r   r    r    r!   Ú__hash__   s    zAttribute.__hash__)r"   r#   r$   r   Z
UTF8Stringr8   r   ÚbytesÚintr   Úpropertyr   r%   r<   ÚobjectÚboolr@   rB   r    r    r    r!   r7   _   s   
r7   c               @   sN   e Zd Zeje ddœdd„Zedƒ\ZZ	Z
edœdd„Zeed	œd
d„ZdS )Ú
AttributesN)r,   r   c             C   s   t |ƒ| _d S )N)ÚlistÚ_attributes)r   r,   r    r    r!   r   „   s    zAttributes.__init__rJ   )r   c             C   s   d| j › d�S )Nz<Attributes(z)>)rJ   )r   r    r    r!   r<   Œ   s    zAttributes.__repr__)r   r   c             C   s2   x| D ]}|j |kr|S qW 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_oid)r"   r#   r$   ÚtypingÚIterabler7   r   r   Ú__len__Ú__iter__Ú__getitem__r%   r<   r   rL   r    r    r    r!   rH   ƒ   s
   rH   c               @   s   e Zd ZdZdZdS )ÚVersionr   é   N)r"   r#   r$   Úv1Úv3r    r    r    r!   rR   —   s   rR   c                   s&   e Zd Zeeddœ‡ fdd„Z‡  ZS )ÚInvalidVersionN)r   Úparsed_versionr   c                s   t ƒ j|ƒ || _d S )N)r   r   rW   )r   r   rW   )r   r    r!   r   �   s    zInvalidVersion.__init__)r"   r#   r$   r%   rD   r   r&   r    r    )r   r!   rV   œ   s   rV   c               @   s¼  e Zd Zejejedœdd„ƒZe	eje
dœdd„ƒƒZe	ejedœdd„ƒƒZejedœd	d
„ƒZe	ejejdœdd„ƒƒZe	ejejdœdd„ƒƒZe	ejedœdd„ƒƒZe	ejedœdd„ƒƒZe	ejejej dœdd„ƒƒZe	ejedœdd„ƒƒZe	ejedœdd„ƒƒZe	ejedœdd„ƒƒZe	ejedœdd„ƒƒZe	ejedœdd„ƒƒZeje e!dœd d!„ƒZ"eje
dœd"d#„ƒZ#eje$j%ed$œd%d&„ƒZ&ejd d'd(œd)d*„ƒZ'd'S )+ÚCertificate)Ú	algorithmr   c             C   s   dS )z4
        Returns bytes using digest passed.
        Nr    )r   rY   r    r    r!   Úfingerprint£   s    zCertificate.fingerprint)r   c             C   s   dS )z3
        Returns certificate serial number
        Nr    )r   r    r    r!   Úserial_number©   s    zCertificate.serial_numberc             C   s   dS )z1
        Returns the certificate version
        Nr    )r   r    r    r!   Úversion°   s    zCertificate.versionc             C   s   dS )z(
        Returns the public key
        Nr    )r   r    r    r!   Ú
public_key·   s    zCertificate.public_keyc             C   s   dS )z?
        Not before time (represented as UTC datetime)
        Nr    )r   r    r    r!   Únot_valid_before½   s    zCertificate.not_valid_beforec             C   s   dS )z>
        Not after time (represented as UTC datetime)
        Nr    )r   r    r    r!   Únot_valid_afterÄ   s    zCertificate.not_valid_afterc             C   s   dS )z1
        Returns the issuer name object.
        Nr    )r   r    r    r!   ÚissuerË   s    zCertificate.issuerc             C   s   dS )z2
        Returns the subject name object.
        Nr    )r   r    r    r!   ÚsubjectÒ   s    zCertificate.subjectc             C   s   dS )zt
        Returns a HashAlgorithm corresponding to the type of the digest signed
        in the certificate.
        Nr    )r   r    r    r!   Úsignature_hash_algorithmÙ   s    z$Certificate.signature_hash_algorithmc             C   s   dS )zJ
        Returns the ObjectIdentifier of the signature algorithm.
        Nr    )r   r    r    r!   Úsignature_algorithm_oidã   s    z#Certificate.signature_algorithm_oidc             C   s   dS )z/
        Returns an Extensions object.
        Nr    )r   r    r    r!   r(   ê   s    zCertificate.extensionsc             C   s   dS )z.
        Returns the signature bytes.
        Nr    )r   r    r    r!   Ú	signatureñ   s    zCertificate.signaturec             C   s   dS )zR
        Returns the tbsCertificate payload bytes as defined in RFC 5280.
        Nr    )r   r    r    r!   Útbs_certificate_bytesø   s    z!Certificate.tbs_certificate_bytesc             C   s   dS )zh
        Returns the tbsCertificate payload bytes with the SCT list extension
        stripped.
        Nr    )r   r    r    r!   Útbs_precertificate_bytesÿ   s    z$Certificate.tbs_precertificate_bytes)r=   r   c             C   s   dS )z"
        Checks equality.
        Nr    )r   r=   r    r    r!   r@     s    zCertificate.__eq__c             C   s   dS )z"
        Computes a hash.
        Nr    )r   r    r    r!   rB     s    zCertificate.__hash__)Úencodingr   c             C   s   dS )zB
        Serializes the certificate to PEM or DER format.
        Nr    )r   rg   r    r    r!   Úpublic_bytes  s    zCertificate.public_bytesN)r`   r   c             C   s   dS )zÕ
        This method verifies that certificate issuer name matches the
        issuer subject name and that the certificate is signed by the
        issuer's private key. No other validation is performed.
        Nr    )r   r`   r    r    r!   Úverify_directly_issued_by  s    z%Certificate.verify_directly_issued_by)(r"   r#   r$   ÚabcÚabstractmethodr   ÚHashAlgorithmrC   rZ   rE   rD   r[   rR   r\   r   r]   r2   r^   r_   r   r`   ra   rM   ÚOptionalrb   r   rc   r   r(   rd   re   rf   rF   rG   r@   rB   r   ÚEncodingrh   ri   r    r    r    r!   rX   ¢   s`   rX   )Ú	metaclassc               @   sV   e Zd Zeejedœdd„ƒƒZeejejdœdd„ƒƒZ	eeje
dœdd„ƒƒZdS )	ÚRevokedCertificate)r   c             C   s   dS )zG
        Returns the serial number of the revoked certificate.
        Nr    )r   r    r    r!   r[   '  s    z RevokedCertificate.serial_numberc             C   s   dS )zH
        Returns the date of when this certificate was revoked.
        Nr    )r   r    r    r!   Úrevocation_date.  s    z"RevokedCertificate.revocation_datec             C   s   dS )zW
        Returns an Extensions object containing a list of Revoked extensions.
        Nr    )r   r    r    r!   r(   5  s    zRevokedCertificate.extensionsN)r"   r#   r$   rE   rj   rk   rD   r[   r2   rq   r   r(   r    r    r    r!   rp   &  s   rp   c               @   sX   e Zd Zeejedœdd„Zeedœdd„ƒZeejdœdd„ƒZ	eedœd	d
„ƒZ
dS )Ú_RawRevokedCertificate)r[   rq   r(   c             C   s   || _ || _|| _d S )N)Ú_serial_numberÚ_revocation_dateÚ_extensions)r   r[   rq   r(   r    r    r!   r   B  s    z_RawRevokedCertificate.__init__)r   c             C   s   | j S )N)rs   )r   r    r    r!   r[   L  s    z$_RawRevokedCertificate.serial_numberc             C   s   | j S )N)rt   )r   r    r    r!   rq   P  s    z&_RawRevokedCertificate.revocation_datec             C   s   | j S )N)ru   )r   r    r    r!   r(   T  s    z!_RawRevokedCertificate.extensionsN)r"   r#   r$   rD   r2   r   r   rE   r[   rq   r(   r    r    r    r!   rr   A  s   rr   c               @   sæ  e Zd Zejejedœdd„ƒZeje	j
edœdd„ƒZejeeje dœdd	„ƒZeejeje	j
 d
œdd„ƒƒZeejed
œdd„ƒƒZeejed
œdd„ƒƒZeejejej d
œdd„ƒƒZeejejd
œdd„ƒƒZeejed
œdd„ƒƒZeejed
œdd„ƒƒZeejed
œdd„ƒƒZejeedœdd„ƒZ ejed
œdd„ƒZ!ej"eed œd!d"„ƒZ#ej"e$ej%e d œd#d"„ƒZ#ejej&ee$f ej&eej%e f d œd$d"„ƒZ#ejej'e d
œd%d&„ƒZ(eje)ed'œd(d)„ƒZ*d*S )+ÚCertificateRevocationList)rg   r   c             C   s   dS )z:
        Serializes the CRL to PEM or DER format.
        Nr    )r   rg   r    r    r!   rh   Z  s    z&CertificateRevocationList.public_bytes)rY   r   c             C   s   dS )z4
        Returns bytes using digest passed.
        Nr    )r   rY   r    r    r!   rZ   `  s    z%CertificateRevocationList.fingerprint)r[   r   c             C   s   dS )zs
        Returns an instance of RevokedCertificate or None if the serial_number
        is not in the CRL.
        Nr    )r   r[   r    r    r!   Ú(get_revoked_certificate_by_serial_numberf  s    zBCertificateRevocationList.get_revoked_certificate_by_serial_number)r   c             C   s   dS )zt
        Returns a HashAlgorithm corresponding to the type of the digest signed
        in the certificate.
        Nr    )r   r    r    r!   rb   o  s    z2CertificateRevocationList.signature_hash_algorithmc             C   s   dS )zJ
        Returns the ObjectIdentifier of the signature algorithm.
        Nr    )r   r    r    r!   rc   y  s    z1CertificateRevocationList.signature_algorithm_oidc             C   s   dS )zC
        Returns the X509Name with the issuer of this CRL.
        Nr    )r   r    r    r!   r`   €  s    z CertificateRevocationList.issuerc             C   s   dS )z?
        Returns the date of next update for this CRL.
        Nr    )r   r    r    r!   Únext_update‡  s    z%CertificateRevocationList.next_updatec             C   s   dS )z?
        Returns the date of last update for this CRL.
        Nr    )r   r    r    r!   Úlast_updateŽ  s    z%CertificateRevocationList.last_updatec             C   s   dS )zS
        Returns an Extensions object containing a list of CRL extensions.
        Nr    )r   r    r    r!   r(   •  s    z$CertificateRevocationList.extensionsc             C   s   dS )z.
        Returns the signature bytes.
        Nr    )r   r    r    r!   rd   œ  s    z#CertificateRevocationList.signaturec             C   s   dS )zO
        Returns the tbsCertList payload bytes as defined in RFC 5280.
        Nr    )r   r    r    r!   Útbs_certlist_bytes£  s    z,CertificateRevocationList.tbs_certlist_bytes)r=   r   c             C   s   dS )z"
        Checks equality.
        Nr    )r   r=   r    r    r!   r@   ª  s    z CertificateRevocationList.__eq__c             C   s   dS )z<
        Number of revoked certificates in the CRL.
        Nr    )r   r    r    r!   rO   °  s    z!CertificateRevocationList.__len__)Úidxr   c             C   s   d S )Nr    )r   r{   r    r    r!   rQ   ¶  s    z%CertificateRevocationList.__getitem__c             C   s   d S )Nr    )r   r{   r    r    r!   rQ   º  s    c             C   s   dS )zS
        Returns a revoked certificate (or slice of revoked certificates).
        Nr    )r   r{   r    r    r!   rQ   ¾  s    c             C   s   dS )z8
        Iterator over the revoked certificates
        Nr    )r   r    r    r!   rP   Æ  s    z"CertificateRevocationList.__iter__)r]   r   c             C   s   dS )zQ
        Verifies signature of revocation list against given public key.
        Nr    )r   r]   r    r    r!   Úis_signature_validÌ  s    z,CertificateRevocationList.is_signature_validN)+r"   r#   r$   rj   rk   r   rn   rC   rh   r   rl   rZ   rD   rM   rm   rp   rw   rE   rb   r   rc   r   r`   r2   rx   ry   r   r(   rd   rz   rF   rG   r@   rO   ÚoverloadrQ   ÚsliceÚListÚUnionÚIteratorrP   r   r|   r    r    r    r!   rv   Y  s^    rv   c               @   s@  e Zd Zejeedœdd„ƒZejedœdd„ƒZ	eje
dœdd„ƒZeejedœd	d
„ƒƒZeejejej dœdd„ƒƒZeejedœdd„ƒƒZeejedœdd„ƒƒZeejedœdd„ƒƒZejejedœdd„ƒZeejedœdd„ƒƒZeejedœdd„ƒƒZeejedœdd„ƒƒZ ejeedœdd„ƒZ!dS ) ÚCertificateSigningRequest)r=   r   c             C   s   dS )z"
        Checks equality.
        Nr    )r   r=   r    r    r!   r@   Ù  s    z CertificateSigningRequest.__eq__)r   c             C   s   dS )z"
        Computes a hash.
        Nr    )r   r    r    r!   rB   ß  s    z"CertificateSigningRequest.__hash__c             C   s   dS )z(
        Returns the public key
        Nr    )r   r    r    r!   r]   å  s    z$CertificateSigningRequest.public_keyc             C   s   dS )z2
        Returns the subject name object.
        Nr    )r   r    r    r!   ra   ë  s    z!CertificateSigningRequest.subjectc             C   s   dS )zt
        Returns a HashAlgorithm corresponding to the type of the digest signed
        in the certificate.
        Nr    )r   r    r    r!   rb   ò  s    z2CertificateSigningRequest.signature_hash_algorithmc             C   s   dS )zJ
        Returns the ObjectIdentifier of the signature algorithm.
        Nr    )r   r    r    r!   rc   ü  s    z1CertificateSigningRequest.signature_algorithm_oidc             C   s   dS )z@
        Returns the extensions in the signing request.
        Nr    )r   r    r    r!   r(     s    z$CertificateSigningRequest.extensionsc             C   s   dS )z/
        Returns an Attributes object.
        Nr    )r   r    r    r!   r,   
  s    z$CertificateSigningRequest.attributes)rg   r   c             C   s   dS )z;
        Encodes the request to PEM or DER format.
        Nr    )r   rg   r    r    r!   rh     s    z&CertificateSigningRequest.public_bytesc             C   s   dS )z.
        Returns the signature bytes.
        Nr    )r   r    r    r!   rd     s    z#CertificateSigningRequest.signaturec             C   s   dS )zd
        Returns the PKCS#10 CertificationRequestInfo bytes as defined in RFC
        2986.
        Nr    )r   r    r    r!   Útbs_certrequest_bytes  s    z/CertificateSigningRequest.tbs_certrequest_bytesc             C   s   dS )z8
        Verifies signature of signing request.
        Nr    )r   r    r    r!   r|   &  s    z,CertificateSigningRequest.is_signature_valid)r   r   c             C   s   dS )z:
        Get the attribute value for a given OID.
        Nr    )r   r   r    r    r!   rL   -  s    z/CertificateSigningRequest.get_attribute_for_oidN)"r"   r#   r$   rj   rk   rF   rG   r@   rD   rB   r   r]   rE   r   ra   rM   rm   r   rl   rb   r   rc   r   r(   rH   r,   r   rn   rC   rh   rd   rƒ   r|   rL   r    r    r    r!   r‚   Ø  sD   r‚   )ÚdataÚbackendr   c             C   s
   t j| ƒS )N)Ú	rust_x509Úload_pem_x509_certificate)r„   r…   r    r    r!   r‡   9  s    r‡   )r„   r   c             C   s
   t j| ƒS )N)r†   Úload_pem_x509_certificates)r„   r    r    r!   rˆ   ?  s    rˆ   c             C   s
   t j| ƒS )N)r†   Úload_der_x509_certificate)r„   r…   r    r    r!   r‰   D  s    r‰   c             C   s
   t j| ƒS )N)r†   Úload_pem_x509_csr)r„   r…   r    r    r!   rŠ   K  s    rŠ   c             C   s
   t j| ƒS )N)r†   Úload_der_x509_csr)r„   r…   r    r    r!   r‹   R  s    r‹   c             C   s
   t j| ƒS )N)r†   Úload_pem_x509_crl)r„   r…   r    r    r!   rŒ   Y  s    rŒ   c             C   s
   t j| ƒS )N)r†   Úload_der_x509_crl)r„   r…   r    r    r!   r�   `  s    r�   c            	   @   s®   e Zd Zdg g feje ejee  ejej	e
eeje f  dœdd„Zed dœdd„Zeed dœd	d
„Zddœe
eeje d dœdd„Zdeeje ejedœdd„ZdS )Ú CertificateSigningRequestBuilderN)Úsubject_namer(   r,   c             C   s   || _ || _|| _dS )zB
        Creates an empty X.509 certificate request (v1).
        N)Ú_subject_nameru   rJ   )r   r�   r(   r,   r    r    r!   r   g  s    z)CertificateSigningRequestBuilder.__init__)Ú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.
        zExpecting x509.Name object.Nz&The subject name may only be set once.)r>   r   Ú	TypeErrorr�   r)   rŽ   ru   rJ   )r   r‘   r    r    r!   r�   v  s    

z-CertificateSigningRequestBuilder.subject_name)ÚextvalÚcriticalr   c             C   sD   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j|g | j	ƒS )zE
        Adds an X.509 extension to the certificate request.
        z"extension must be an ExtensionType)
r>   r   r’   r   r   r+   ru   rŽ   r�   rJ   )r   r“   r”   r'   r    r    r!   Úadd_extension‚  s    

z.CertificateSigningRequestBuilder.add_extension)Ú_tag)r   r8   r–   r   c            C   s~   t |tƒstdƒ‚t |tƒs$tdƒ‚|dk	r@t |tƒ r@tdƒ‚t|| jƒ |dk	r\|j}nd}t| j	| j
| j|||fg ƒ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)r>   r   r’   rC   r   r.   rJ   r8   rŽ   r�   ru   )r   r   r8   r–   Útagr    r    r!   Úadd_attribute”  s    


z.CertificateSigningRequestBuilder.add_attribute)Úprivate_keyrY   r…   r   c             C   s    | j dkrtdƒ‚tj| ||ƒS )zF
        Signs the request using the requestor's private key.
        Nz/A CertificateSigningRequest must have a subject)r�   r)   r†   Zcreate_x509_csr)r   r™   rY   r…   r    r    r!   Úsign´  s    	
z%CertificateSigningRequestBuilder.sign)N)r"   r#   r$   rM   rm   r   r   r   r   ÚTupler   rC   rD   r   r�   rG   r•   r   r˜   r   Ú_AllowedHashTypesÚAnyr‚   rš   r    r    r    r!   rŽ   f  s   >	rŽ   c            
   @   s  e Zd ZU ejee  ddddddg feje	 eje	 eje
 eje ejej ejej ejee  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ejd dœdd„Zejd dœdd„Zeed dœdd„Zdeeje ejedœdd„ZdS )ÚCertificateBuilderN)Úissuer_namer�   r]   r[   r^   r_   r(   r   c             C   s6   t j| _|| _|| _|| _|| _|| _|| _|| _	d S )N)
rR   rU   Ú_versionÚ_issuer_namer�   Ú_public_keyrs   Ú_not_valid_beforeÚ_not_valid_afterru   )r   rŸ   r�   r]   r[   r^   r_   r(   r    r    r!   r   Å  s    
zCertificateBuilder.__init__)r‘   r   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.
        zExpecting x509.Name object.Nz%The issuer name may only be set once.)r>   r   r’   r¡   r)   rž   r�   r¢   rs   r£   r¤   ru   )r   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.
        zExpecting x509.Name object.Nz&The subject name may only be set once.)r>   r   r’   r�   r)   rž   r¡   r¢   rs   r£   r¤   ru   )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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.)r>   r   ZDSAPublicKeyr
   ZRSAPublicKeyr   ZEllipticCurvePublicKeyr	   ZEd25519PublicKeyr   ZEd448PublicKeyr   ZX25519PublicKeyr   ZX448PublicKeyr’   r¢   r)   rž   r¡   r�   rs   r£   r¤   ru   )r   r¥   r    r    r!   r]   ü  s*    

zCertificateBuilder.public_key)Únumberr   c             C   sh   t |tƒstdƒ‚| jdk	r$tdƒ‚|dkr4tdƒ‚|jƒ dkrHtdƒ‚t| j| j| j	|| j
| j| jƒS )z5
        Sets the certificate serial number.
        z'Serial number must be of integral type.Nz'The serial number may only be set once.r   z%The serial number should be positive.é    z3The serial number should not be more than 159 bits.)r>   rD   r’   rs   r)   Ú
bit_lengthrž   r¡   r�   r¢   r£   r¤   ru   )r   r¦   r    r    r!   r[   !  s"    

z CertificateBuilder.serial_number)r/   r   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.
        z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.)r>   r2   r’   r£   r)   r6   Ú_EARLIEST_UTC_TIMEr¤   rž   r¡   r�   r¢   rs   ru   )r   r/   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.
        zExpecting datetime object.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.)r>   r2   r’   r¤   r)   r6   r©   r£   rž   r¡   r�   r¢   rs   ru   )r   r/   r    r    r!   r_   [  s(    


z"CertificateBuilder.not_valid_after)r“   r”   r   c          	   C   sT   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j
| j| j| j| j|g ƒS )z=
        Adds an X.509 extension to the certificate.
        z"extension must be an ExtensionType)r>   r   r’   r   r   r+   ru   rž   r¡   r�   r¢   rs   r£   r¤   )r   r“   r”   r'   r    r    r!   r•   {  s    
z CertificateBuilder.add_extension)r™   rY   r…   r   c             C   sz   | 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ƒ‚tj| ||ƒ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 key)	r�   r)   r¡   rs   r£   r¤   r¢   r†   Zcreate_x509_certificate)r   r™   rY   r…   r    r    r!   rš   ‘  s    	





zCertificateBuilder.sign)N)r"   r#   r$   rM   r   r   r   ru   rm   r   r   rD   r2   r   rŸ   r�   r]   r[   r^   r_   rG   r•   r   rœ   r�   rX   rš   r    r    r    r!   rž   Â  s*   
D
"!rž   c               @   sâ   e Zd ZU ejee  eje 	dddg g fej
e ej
ej ej
ej ejee  eje dœdd„Zed dœdd„Zejd dœd	d
„Zejd dœdd„Zeed dœdd„Zed dœdd„Zdeej
e ejedœdd„ZdS )Ú CertificateRevocationListBuilderN)rŸ   ry   rx   r(   Úrevoked_certificatesc             C   s"   || _ || _|| _|| _|| _d S )N)r¡   Ú_last_updateÚ_next_updateru   Ú_revoked_certificates)r   rŸ   ry   rx   r(   r«   r    r    r!   r   ³  s
    z)CertificateRevocationListBuilder.__init__)rŸ   r   c             C   s<   t |tƒstdƒ‚| jd k	r$tdƒ‚t|| j| j| j| j	ƒS )NzExpecting x509.Name object.z%The issuer name may only be set once.)
r>   r   r’   r¡   r)   rª   r¬   r­   ru   r®   )r   rŸ   r    r    r!   rŸ   Á  s    

z,CertificateRevocationListBuilder.issuer_name)ry   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 )NzExpecting datetime object.z!Last update may only be set once.z8The last update date must be on or after 1950 January 1.z9The last update date must be before the next update date.)r>   r2   r’   r¬   r)   r6   r©   r­   rª   r¡   ru   r®   )r   ry   r    r    r!   ry   Ð  s"    
z,CertificateRevocationListBuilder.last_update)rx   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 )NzExpecting datetime object.z!Last update may only be set once.z8The last update date must be on or after 1950 January 1.z8The next update date must be after the last update date.)r>   r2   r’   r­   r)   r6   r©   r¬   rª   r¡   ru   r®   )r   rx   r    r    r!   rx   è  s"    
z,CertificateRevocationListBuilder.next_update)r“   r”   r   c             C   sL   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j
| j|g | jƒS )zM
        Adds an X.509 extension to the certificate revocation list.
        z"extension must be an ExtensionType)r>   r   r’   r   r   r+   ru   rª   r¡   r¬   r­   r®   )r   r“   r”   r'   r    r    r!   r•      s    

z.CertificateRevocationListBuilder.add_extension)Úrevoked_certificater   c             C   s2   t |tƒstdƒ‚t| j| j| j| j| j|g ƒS )z8
        Adds a revoked certificate to the CRL.
        z)Must be an instance of RevokedCertificate)	r>   rp   r’   rª   r¡   r¬   r­   ru   r®   )r   r¯   r    r    r!   Úadd_revoked_certificate  s    
z8CertificateRevocationListBuilder.add_revoked_certificate)r™   rY   r…   r   c             C   sD   | j d krtdƒ‚| jd kr$tdƒ‚| jd kr6tdƒ‚tj| ||ƒS )NzA CRL must have an issuer namez"A CRL must have a last update timez"A CRL must have a next update time)r¡   r)   r¬   r­   r†   Zcreate_x509_crl)r   r™   rY   r…   r    r    r!   rš   $  s    


z%CertificateRevocationListBuilder.sign)N)r"   r#   r$   rM   r   r   r   ru   rp   r®   rm   r   r2   r   rŸ   ry   rx   rG   r•   r°   r   rœ   r�   rv   rš   r    r    r    r!   rª   ¯  s&   

@	rª   c               @   s†   e Zd Zddg feje ejej ejee	  dœdd„Z
ed dœdd„Zejd dœd	d
„Ze	ed dœdd„Zdejedœdd„ZdS )ÚRevokedCertificateBuilderN)r[   rq   r(   c             C   s   || _ || _|| _d S )N)rs   rt   ru   )r   r[   rq   r(   r    r    r!   r   7  s    z"RevokedCertificateBuilder.__init__)r¦   r   c             C   sX   t |tƒstdƒ‚| jd k	r$tdƒ‚|dkr4tdƒ‚|jƒ dkrHtdƒ‚t|| j| jƒS )Nz'Serial number must be of integral type.z'The serial number may only be set once.r   z$The serial number should be positiver§   z3The serial number should not be more than 159 bits.)	r>   rD   r’   rs   r)   r¨   r±   rt   ru   )r   r¦   r    r    r!   r[   A  s    

z'RevokedCertificateBuilder.serial_number)r/   r   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 )NzExpecting datetime object.z)The revocation date may only be set once.z7The revocation date must be on or after 1950 January 1.)
r>   r2   r’   rt   r)   r6   r©   r±   rs   ru   )r   r/   r    r    r!   rq   S  s    
z)RevokedCertificateBuilder.revocation_date)r“   r”   r   c             C   sD   t |tƒstdƒ‚t|j||ƒ}t|| jƒ t| j| j	| j|g ƒS )Nz"extension must be an ExtensionType)
r>   r   r’   r   r   r+   ru   r±   rs   rt   )r   r“   r”   r'   r    r    r!   r•   c  s    
z'RevokedCertificateBuilder.add_extension)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)rs   r)   rt   rr   r   ru   )r   r…   r    r    r!   Úbuildq  s    

zRevokedCertificateBuilder.build)N)r"   r#   r$   rM   rm   rD   r2   r   r   r   r   r[   rq   rG   r•   r�   rp   r²   r    r    r    r!   r±   6  s   .r±   )r   c               C   s   t jtjdƒdƒd? S )Né   Úbigr   )rD   Ú
from_bytesÚosÚurandomr    r    r    r!   Úrandom_serial_number  s    r¸   )N)N)N)N)N)N)Prj   r2   r¶   rM   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r†   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   r   r	   r
   r   r   Z/cryptography.hazmat.primitives.asymmetric.typesr   r   r   Zcryptography.x509.extensionsr   r   r   r   Zcryptography.x509.namer   r   Zcryptography.x509.oidr   r©   r€   ÚSHA224ÚSHA256ÚSHA384ÚSHA512ZSHA3_224ZSHA3_256ZSHA3_384ZSHA3_512rœ   Ú	Exceptionr   r   r+   r›   rC   rm   rD   r.   r6   r7   rH   ÚEnumrR   rV   ÚABCMetarX   Úregisterrp   rr   rv   r‚   r�   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   rž   rª   r±   r¸   r    r    r    r!   Ú<module>   s€   $	
$ |]\ n I