File: //usr/lib/python3.9/site-packages/redis/__pycache__/ocsp.cpython-39.pyc
a
��b�, � @ s d dl Z d dlZd dlZd dlmZmZ d dlZd dlZd dlm Z m
Z
d dlmZ d dl
mZ d dlmZ d dlmZmZ d dlmZ d d lmZ d d
lmZmZ d dlmZmZ d dlmZ d d
lm Z m!Z! dd� Z"ddd�Z#dd� Z$dd� Z%ddd�Z&G dd� d�Z'dS )� N)�urljoin�urlparse)�hazmat�x509)�InvalidSignature)�backends)�DSAPublicKey)�ECDSA�EllipticCurvePublicKey)�PKCS1v15)�RSAPublicKey)�SHA1�Hash)�Encoding�PublicFormat)�ocsp)�AuthorizationError�ConnectionErrorc C s� | � � }z|t|t�r.|�|j|jt� |j� nTt|t�rN|�|j|j|j� n4t|t �rr|�|j|jt
|j�� n|�|j|j� W n ty� td��Y n0 d S )Nzfailed to valid ocsp response)
�
public_key�
isinstancer ZverifyZ signatureZtbs_response_bytesr Zsignature_hash_algorithmr r
r r r )�issuer_cert�
ocsp_response�pubkey� r �./usr/lib/python3.9/site-packages/redis/ocsp.py�_verify_response s0
�
�
�r Tc C sZ t �|�}|jt jjkr td��|jt jjkr^|jt jj krft
dt|j��d�d � d���nt
d��|j
tj�� kr~t
d��|jr�|jtj�� k r�t
d��|j}|j}|j}| }|d ur�|| jks�||kr�| }nt|j}t|| ||�} z| d
}
W n t�y t
d��Y n0 |
j�tj�}|d u �s:tjjj|jv�rBt
d��|
}|�rVt ||� d
S )z=A wrapper the return the validity of a known ocsp certificatez4you are not authorized to view this ocsp certificatezReceived an �.� z ocsp certificate statusz?failed to retrieve a sucessful response from the ocsp responderz)ocsp certificate was issued in the futurez1ocsp certificate has invalid update - in the pastNr z'no certificates found for the responderz'delegate not autorized for ocsp signingT)!r Zload_der_ocsp_responseZresponse_statusZOCSPResponseStatusZUNAUTHORIZEDr Z
SUCCESSFULZcertificate_statusZOCSPCertStatusZGOODr �str�splitZthis_update�datetimeZnowZnext_update�responder_nameZissuer_key_hashZresponder_key_hash�subject�certificates�_get_certificates�
IndexError�
extensionsZget_extension_for_classr ZExtendedKeyUsage�oidZExtendedKeyUsageOIDZOCSP_SIGNING�valuer )r �
ocsp_bytesZvalidater r! Zissuer_hash�responder_hashZcert_to_validate�certsZresponder_certsZresponder_cert�extr r r �_check_certificate2 sX
��������
r- c s6 �d u r� �fdd�| D �}n� �fdd�| D �}|S )Nc s( g | ] }t |��kr|j� jkr|�qS r )�_get_pubkey_hash�issuerr"