3
ãdeQH  ã               @   sN  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZ G dd„ dejƒZG d	d
„ d
ejƒZe	je	je	je	je	jfZe	jddœdd„ZG dd„ dejƒZG dd„ dƒZG dd„ de jd�ZG dd„ de jd�Z G dd„ de jd�Z!G dd„ dƒZ"G dd„ dƒZ#e$edœdd„Z%e$e!dœd d!„Z&dS )"é    N)ÚutilsÚx509)Úocsp)ÚhashesÚserialization)Ú CertificateIssuerPrivateKeyTypes)Ú_EARLIEST_UTC_TIMEÚ_convert_to_naive_utc_timeÚ_reject_duplicate_extensionc               @   s   e Zd ZdZdZdS )ÚOCSPResponderEncodingzBy HashzBy NameN)Ú__name__Ú
__module__Ú__qualname__ÚHASHÚNAME© r   r   úM/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/x509/ocsp.pyr      s   r   c               @   s$   e Zd ZdZdZdZdZdZdZdS )ÚOCSPResponseStatusr   é   é   é   é   é   N)	r   r   r   Ú
SUCCESSFULZMALFORMED_REQUESTÚINTERNAL_ERRORZ	TRY_LATERZSIG_REQUIREDÚUNAUTHORIZEDr   r   r   r   r      s   r   )Ú	algorithmÚreturnc             C   s   t | tƒstdƒ‚d S )Nz9Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512)Ú
isinstanceÚ_ALLOWED_HASHESÚ
ValueError)r   r   r   r   Ú_verify_algorithm.   s    
r!   c               @   s   e Zd ZdZdZdZdS )ÚOCSPCertStatusr   r   r   N)r   r   r   ZGOODÚREVOKEDÚUNKNOWNr   r   r   r   r"   5   s   r"   c            	   @   sH   e Zd Zejejejeeje	j
ej e	j
ej e	j
ej dœdd„ZdS )Ú_SingleResponse)ÚcertÚissuerr   Úcert_statusÚthis_updateÚnext_updateÚrevocation_timeÚrevocation_reasonc	       	      C   s  t |tjƒ st |tjƒ r$tdƒ‚t|ƒ t |tjƒs@tdƒ‚|d k	r^t |tjƒ r^tdƒ‚|| _|| _|| _|| _	|| _
t |tƒsŽtdƒ‚|tjk	rº|d k	r¨tdƒ‚|d k	r¸tdƒ‚nNt |tjƒsÎtdƒ‚t|ƒ}|tk rætdƒ‚|d k	�rt |tjƒ �rtd	ƒ‚|| _|| _|| _d S )
Nz%cert and issuer must be a Certificatez%this_update must be a datetime objectz-next_update must be a datetime object or Nonez8cert_status must be an item from the OCSPCertStatus enumzBrevocation_time can only be provided if the certificate is revokedzDrevocation_reason can only be provided if the certificate is revokedz)revocation_time must be a datetime objectz7The revocation_time must be on or after 1950 January 1.zCrevocation_reason must be an item from the ReasonFlags enum or None)r   r   ÚCertificateÚ	TypeErrorr!   ÚdatetimeZ_certZ_issuerÚ
_algorithmZ_this_updateZ_next_updater"   r#   r    r	   r   ÚReasonFlagsZ_cert_statusZ_revocation_timeZ_revocation_reason)	Úselfr&   r'   r   r(   r)   r*   r+   r,   r   r   r   Ú__init__<   sJ    


z_SingleResponse.__init__N)r   r   r   r   r-   r   ÚHashAlgorithmr"   r/   ÚtypingÚOptionalr1   r3   r   r   r   r   r%   ;   s   

r%   c               @   s    e Zd Zeejedœd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ejejed
œdd„ƒZeejejdœdd„ƒƒZdS )ÚOCSPRequest)r   c             C   s   dS )z3
        The hash of the issuer public key
        Nr   )r2   r   r   r   Úissuer_key_hash‚   s    zOCSPRequest.issuer_key_hashc             C   s   dS )z-
        The hash of the issuer name
        Nr   )r2   r   r   r   Úissuer_name_hash‰   s    zOCSPRequest.issuer_name_hashc             C   s   dS )zK
        The hash algorithm used in the issuer name and key hashes
        Nr   )r2   r   r   r   Úhash_algorithm�   s    zOCSPRequest.hash_algorithmc             C   s   dS )zM
        The serial number of the cert whose status is being checked
        Nr   )r2   r   r   r   Úserial_number—   s    zOCSPRequest.serial_number)Úencodingr   c             C   s   dS )z/
        Serializes the request to DER
        Nr   )r2   r<   r   r   r   Úpublic_bytesž   s    zOCSPRequest.public_bytesc             C   s   dS )zP
        The list of request extensions. Not single request extensions.
        Nr   )r2   r   r   r   Ú
extensions¤   s    zOCSPRequest.extensionsN)r   r   r   ÚpropertyÚabcÚabstractmethodÚbytesr8   r9   r   r4   r:   Úintr;   r   ÚEncodingr=   r   Ú
Extensionsr>   r   r   r   r   r7   �   s"   r7   )Ú	metaclassc               @   s   e Z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	ej dœdd„ƒƒZeeje
j
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dœdd„ƒƒZeejedœdd„ƒƒZdS )ÚOCSPSingleResponse)r   c             C   s   dS )zY
        The status of the certificate (an element from the OCSPCertStatus enum)
        Nr   )r2   r   r   r   Úcertificate_status­   s    z%OCSPSingleResponse.certificate_statusc             C   s   dS )z^
        The date of when the certificate was revoked or None if not
        revoked.
        Nr   )r2   r   r   r   r+   ´   s    z"OCSPSingleResponse.revocation_timec             C   s   dS )zi
        The reason the certificate was revoked or None if not specified or
        not revoked.
        Nr   )r2   r   r   r   r,   ¼   s    z$OCSPSingleResponse.revocation_reasonc             C   s   dS )z�
        The most recent time at which the status being indicated is known by
        the responder to have been correct
        Nr   )r2   r   r   r   r)   Ä   s    zOCSPSingleResponse.this_updatec             C   s   dS )zC
        The time when newer information will be available
        Nr   )r2   r   r   r   r*   Ì   s    zOCSPSingleResponse.next_updatec             C   s   dS )z3
        The hash of the issuer public key
        Nr   )r2   r   r   r   r8   Ó   s    z"OCSPSingleResponse.issuer_key_hashc             C   s   dS )z-
        The hash of the issuer name
        Nr   )r2   r   r   r   r9   Ú   s    z#OCSPSingleResponse.issuer_name_hashc             C   s   dS )zK
        The hash algorithm used in the issuer name and key hashes
        Nr   )r2   r   r   r   r:   á   s    z!OCSPSingleResponse.hash_algorithmc             C   s   dS )zM
        The serial number of the cert whose status is being checked
        Nr   )r2   r   r   r   r;   è   s    z OCSPSingleResponse.serial_numberN)r   r   r   r?   r@   rA   r"   rH   r5   r6   r/   r+   r   r1   r,   r)   r*   rB   r8   r9   r   r4   r:   rC   r;   r   r   r   r   rG   ¬   s6   rG   c               @   sd  e Zd Zeejeje dœdd„ƒƒZ	eeje
dœdd„ƒƒZeejej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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jej 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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dœd$d%„ƒƒZ'e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je-j.ed,œd-d.„ƒZ/d/S )0ÚOCSPResponse)r   c             C   s   dS )z_
        An iterator over the individual SINGLERESP structures in the
        response
        Nr   )r2   r   r   r   Ú	responsesñ   s    zOCSPResponse.responsesc             C   s   dS )zm
        The status of the response. This is a value from the OCSPResponseStatus
        enumeration
        Nr   )r2   r   r   r   Úresponse_statusù   s    zOCSPResponse.response_statusc             C   s   dS )zA
        The ObjectIdentifier of the signature algorithm
        Nr   )r2   r   r   r   Úsignature_algorithm_oid  s    z$OCSPResponse.signature_algorithm_oidc             C   s   dS )zX
        Returns a HashAlgorithm corresponding to the type of the digest signed
        Nr   )r2   r   r   r   Úsignature_hash_algorithm  s    z%OCSPResponse.signature_hash_algorithmc             C   s   dS )z%
        The signature bytes
        Nr   )r2   r   r   r   Ú	signature  s    zOCSPResponse.signaturec             C   s   dS )z+
        The tbsResponseData bytes
        Nr   )r2   r   r   r   Útbs_response_bytes  s    zOCSPResponse.tbs_response_bytesc             C   s   dS )z»
        A list of certificates used to help build a chain to verify the OCSP
        response. This situation occurs when the OCSP responder uses a delegate
        certificate.
        Nr   )r2   r   r   r   Úcertificates  s    zOCSPResponse.certificatesc             C   s   dS )z2
        The responder's key hash or None
        Nr   )r2   r   r   r   Úresponder_key_hash(  s    zOCSPResponse.responder_key_hashc             C   s   dS )z.
        The responder's Name or None
        Nr   )r2   r   r   r   Úresponder_name/  s    zOCSPResponse.responder_namec             C   s   dS )z4
        The time the response was produced
        Nr   )r2   r   r   r   Úproduced_at6  s    zOCSPResponse.produced_atc             C   s   dS )zY
        The status of the certificate (an element from the OCSPCertStatus enum)
        Nr   )r2   r   r   r   rH   =  s    zOCSPResponse.certificate_statusc             C   s   dS )z^
        The date of when the certificate was revoked or None if not
        revoked.
        Nr   )r2   r   r   r   r+   D  s    zOCSPResponse.revocation_timec             C   s   dS )zi
        The reason the certificate was revoked or None if not specified or
        not revoked.
        Nr   )r2   r   r   r   r,   L  s    zOCSPResponse.revocation_reasonc             C   s   dS )z�
        The most recent time at which the status being indicated is known by
        the responder to have been correct
        Nr   )r2   r   r   r   r)   T  s    zOCSPResponse.this_updatec             C   s   dS )zC
        The time when newer information will be available
        Nr   )r2   r   r   r   r*   \  s    zOCSPResponse.next_updatec             C   s   dS )z3
        The hash of the issuer public key
        Nr   )r2   r   r   r   r8   c  s    zOCSPResponse.issuer_key_hashc             C   s   dS )z-
        The hash of the issuer name
        Nr   )r2   r   r   r   r9   j  s    zOCSPResponse.issuer_name_hashc             C   s   dS )zK
        The hash algorithm used in the issuer name and key hashes
        Nr   )r2   r   r   r   r:   q  s    zOCSPResponse.hash_algorithmc             C   s   dS )zM
        The serial number of the cert whose status is being checked
        Nr   )r2   r   r   r   r;   x  s    zOCSPResponse.serial_numberc             C   s   dS )zR
        The list of response extensions. Not single response extensions.
        Nr   )r2   r   r   r   r>     s    zOCSPResponse.extensionsc             C   s   dS )zR
        The list of single response extensions. Not response extensions.
        Nr   )r2   r   r   r   Úsingle_extensions†  s    zOCSPResponse.single_extensions)r<   r   c             C   s   dS )z0
        Serializes the response to DER
        Nr   )r2   r<   r   r   r   r=   �  s    zOCSPResponse.public_bytesN)0r   r   r   r?   r@   rA   r5   ÚIteratorrG   rJ   r   rK   r   ZObjectIdentifierrL   r6   r   r4   rM   rB   rN   rO   ÚListr-   rP   rQ   ÚNamerR   r/   rS   r"   rH   r+   r1   r,   r)   r*   r8   r9   r:   rC   r;   rE   r>   rT   r   rD   r=   r   r   r   r   rI   ð   s‚   rI   c               @   s¸   e Zd Zddg fejejejejej	f  ejeje
e
eej	f  ejejej  ddœdd„Zejejej	d dœdd„Ze
e
eej	d dœd	d
„Zejed dœdd„Zedœdd„ZdS )ÚOCSPRequestBuilderN)ÚrequestÚrequest_hashr>   r   c             C   s   || _ || _|| _d S )N)Ú_requestÚ_request_hashÚ_extensions)r2   rY   rZ   r>   r   r   r   r3   •  s    zOCSPRequestBuilder.__init__)r&   r'   r   r   c             C   s^   | j d k	s| jd k	rtdƒ‚t|ƒ t|tjƒ s@t|tjƒ rHtdƒ‚t|||f| j| j	ƒS )Nz.Only one certificate can be added to a requestz%cert and issuer must be a Certificate)
r[   r\   r    r!   r   r   r-   r.   rX   r]   )r2   r&   r'   r   r   r   r   Úadd_certificate¥  s    z"OCSPRequestBuilder.add_certificate)r9   r8   r;   r   r   c             C   sŠ   | j d k	s| jd k	rtdƒ‚t|tƒs.tdƒ‚t|ƒ tjd|ƒ tjd|ƒ |j	t
|ƒksj|j	t
|ƒkrrtdƒ‚t| j ||||f| jƒS )Nz.Only one certificate can be added to a requestz serial_number must be an integerr9   r8   z`issuer_name_hash and issuer_key_hash must be the same length as the digest size of the algorithm)r[   r\   r    r   rC   r.   r!   r   Ú_check_bytesÚdigest_sizeÚlenrX   r]   )r2   r9   r8   r;   r   r   r   r   Úadd_certificate_by_hash¸  s     

z*OCSPRequestBuilder.add_certificate_by_hash)ÚextvalÚcriticalr   c             C   sH   t |tjƒstdƒ‚tj|j||ƒ}t|| jƒ t| j	| j
| j|g ƒS )Nz"extension must be an ExtensionType)r   r   ÚExtensionTyper.   Ú	ExtensionÚoidr
   r]   rX   r[   r\   )r2   rc   rd   Ú	extensionr   r   r   Úadd_extensionÖ  s    z OCSPRequestBuilder.add_extension)r   c             C   s&   | j d kr| jd krtdƒ‚tj| ƒS )Nz*You must add a certificate before building)r[   r\   r    r   Zcreate_ocsp_request)r2   r   r   r   Úbuildã  s    zOCSPRequestBuilder.build)r   r   r   r5   r6   ÚTupler   r-   r   r4   rB   rC   rV   rf   re   r3   r^   rb   Úboolri   r7   rj   r   r   r   r   rX   ”  s    FrX   c            
   @   s
  e Zd Zdddg feje ejejeje	f  ejej
ej  ej
ejej  dœdd„Zejejejeejejej ejej ejej d dœ	dd„Ze	ejd dœd	d
„Zejej d dœdd„Zejed dœdd„Zeejej edœdd„Zeeedœdd„ƒZdS )ÚOCSPResponseBuilderN)ÚresponseÚresponder_idÚcertsr>   c             C   s   || _ || _|| _|| _d S )N)Ú	_responseÚ_responder_idÚ_certsr]   )r2   rn   ro   rp   r>   r   r   r   r3   ë  s    	zOCSPResponseBuilder.__init__)	r&   r'   r   r(   r)   r*   r+   r,   r   c	       
   	   C   s<   | j d k	rtdƒ‚t||||||||ƒ}	t|	| j| j| jƒS )Nz#Only one response per OCSPResponse.)rq   r    r%   rm   rr   rs   r]   )
r2   r&   r'   r   r(   r)   r*   r+   r,   Z
singlerespr   r   r   Úadd_responseù  s     
z OCSPResponseBuilder.add_response)r<   Úresponder_certr   c             C   sP   | j d k	rtdƒ‚t|tjƒs&tdƒ‚t|tƒs8tdƒ‚t| j||f| j	| j
ƒS )Nz!responder_id can only be set oncez$responder_cert must be a Certificatez6encoding must be an element from OCSPResponderEncoding)rr   r    r   r   r-   r.   r   rm   rq   rs   r]   )r2   r<   ru   r   r   r   ro     s    

z OCSPResponseBuilder.responder_id)rp   r   c             C   s\   | j d k	rtdƒ‚t|ƒ}t|ƒdkr.tdƒ‚tdd„ |D ƒƒsHtdƒ‚t| j| j|| j	ƒS )Nz!certificates may only be set oncer   zcerts must not be an empty listc             s   s   | ]}t |tjƒV  qd S )N)r   r   r-   )Ú.0Úxr   r   r   ú	<genexpr>3  s    z3OCSPResponseBuilder.certificates.<locals>.<genexpr>z$certs must be a list of Certificates)
rs   r    Úlistra   Úallr.   rm   rq   rr   r]   )r2   rp   r   r   r   rP   +  s    
z OCSPResponseBuilder.certificates)rc   rd   r   c             C   sL   t |tjƒstdƒ‚tj|j||ƒ}t|| jƒ t| j	| j
| j| j|g ƒS )Nz"extension must be an ExtensionType)r   r   re   r.   rf   rg   r
   r]   rm   rq   rr   rs   )r2   rc   rd   rh   r   r   r   ri   <  s    z!OCSPResponseBuilder.add_extension)Úprivate_keyr   r   c             C   s6   | j d krtdƒ‚| jd kr$tdƒ‚tjtj| ||ƒS )Nz&You must add a response before signingz*You must add a responder_id before signing)rq   r    rr   r   Úcreate_ocsp_responser   r   )r2   r{   r   r   r   r   ÚsignL  s    

zOCSPResponseBuilder.sign)rK   r   c             C   s4   t |tƒstdƒ‚|tjkr$tdƒ‚tj|d d d ƒS )Nz7response_status must be an item from OCSPResponseStatusz$response_status cannot be SUCCESSFUL)r   r   r.   r   r    r   r|   )ÚclsrK   r   r   r   Úbuild_unsuccessfulZ  s    

z&OCSPResponseBuilder.build_unsuccessful)r   r   r   r5   r6   r%   rk   r   r-   r   rV   rf   re   r3   r   r4   r"   r/   r1   rt   ro   ÚIterablerP   rl   ri   r   rI   r}   Úclassmethodr   r   r   r   r   r   rm   ê  s2   L	





rm   )Údatar   c             C   s
   t j| ƒS )N)r   Úload_der_ocsp_request)r‚   r   r   r   rƒ   h  s    rƒ   c             C   s
   t j| ƒS )N)r   Úload_der_ocsp_response)r‚   r   r   r   r„   l  s    r„   )'r@   r/   r5   Zcryptographyr   r   Z"cryptography.hazmat.bindings._rustr   Zcryptography.hazmat.primitivesr   r   Z/cryptography.hazmat.primitives.asymmetric.typesr   Zcryptography.x509.baser   r	   r
   ÚEnumr   r   ÚSHA1ÚSHA224ÚSHA256ÚSHA384ÚSHA512r   r4   r!   r"   r%   ÚABCMetar7   rG   rI   rX   rm   rB   rƒ   r„   r   r   r   r   Ú<module>   s2   
F+D %V~