3
l�_ � @ s� d dl mZmZmZ d dlmZ d dlmZ d dlm Z d dl
mZmZ d dl
mZmZ d dlmZ dd � Zd
d� ZG dd
� d
e�ZG dd� de�ZdS )� )�absolute_import�division�print_function)�Enum)�x509)�_get_backend)�hashes�
serialization)�ec�rsa)�_check_byteslikec C s t d �}|j| �S )N)r �load_pem_pkcs7_certificates)�data�backend� r �/usr/lib64/python3.6/pkcs7.pyr
s r
c C s t d �}|j| �S )N)r �load_der_pkcs7_certificates)r r r r r r s r c @ s> e Zd Zdg g fdd�Zdd� Zdd� Zdd � Zdd
d�ZdS )
�PKCS7SignatureBuilderNc C s || _ || _|| _d S )N)�_data�_signers�_additional_certs)�selfr ZsignersZadditional_certsr r r �__init__ s zPKCS7SignatureBuilder.__init__c C s( t d|� | jd k rtd��t|| j�S )Nr zdata may only be set once)r r �
ValueErrorr r )r r r r r �set_data s
zPKCS7SignatureBuilder.set_datac C sn t |tjtjtjtjtjf�s&td��t |tj �s:td��t |t
jtj
f�sTtd��t| j| j|||fg �S )NzLhash_algorithm must be one of hashes.SHA1, SHA224, SHA256, SHA384, or SHA512z&certificate must be a x509.Certificatez.Only RSA & EC keys are supported at this time.)�
isinstancer ZSHA1ZSHA224ZSHA256ZSHA384ZSHA512� TypeErrorr �Certificater Z
RSAPrivateKeyr
ZEllipticCurvePrivateKeyr r r )r �certificateZprivate_keyZhash_algorithmr r r �
add_signer' s"
z PKCS7SignatureBuilder.add_signerc C s, t |tj�std��t| j| j| j|g �S )Nz&certificate must be a x509.Certificate)r r r r r r r r )r r r r r �add_certificateC s z%PKCS7SignatureBuilder.add_certificatec C s� t | j�dkrtd��| jd kr(td��t|�}tdd� |D ��sJtd��|tjjtjj tjj
fkrltd��tj|kr�tj
|kr�td��tj|kr�|tjj tjjfkr�td ��tj|kr�tj|kr�td
��t|�}|j| ||�S )Nr zMust have at least one signerzYou must add data to signc s s | ]}t |t�V qd S )N)r �PKCS7Options)�.0�xr r r �