3 l�_�@s�ddlmZmZmZddlmZddlmZddlm Z ddl m Z m Z ddl mZmZddlmZdd �Zd d �ZGd d �d e�ZGdd�de�ZdS)�)�absolute_import�division�print_function)�Enum)�x509)� _get_backend)�hashes� serialization)�ec�rsa)�_check_byteslikecCstd�}|j|�S)N)r�load_pem_pkcs7_certificates)�data�backend�r�/usr/lib64/python3.6/pkcs7.pyr sr cCstd�}|j|�S)N)r�load_der_pkcs7_certificates)rrrrrrsrc@s>eZdZdggfdd�Zdd�Zdd�Zdd �Zd d d �ZdS) �PKCS7SignatureBuilderNcCs||_||_||_dS)N)�_data�_signers�_additional_certs)�selfrZsignersZadditional_certsrrr�__init__szPKCS7SignatureBuilder.__init__cCs(td|�|jdk rtd��t||j�S)Nrzdata may only be set once)r r� ValueErrorrr)rrrrr�set_data s  zPKCS7SignatureBuilder.set_datacCsnt|tjtjtjtjtjf�s&td��t|tj �s:td��t|t j t j 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.)� isinstancerZSHA1ZSHA224ZSHA256ZSHA384ZSHA512� TypeErrorr� Certificater Z RSAPrivateKeyr ZEllipticCurvePrivateKeyrrr)r� certificateZ private_keyZhash_algorithmrrr� add_signer's"  z PKCS7SignatureBuilder.add_signercCs,t|tj�std��t|j|j|j|g�S)Nz&certificate must be a x509.Certificate)rrrrrrrr)rrrrr�add_certificateCs z%PKCS7SignatureBuilder.add_certificatecCs�t|j�dkrtd��|jdkr(td��t|�}tdd�|D��sJtd��|tjjtjj tjj fkrltd��t j |kr�t j |kr�td��t j |kr�|tjj tjjfkr�td ��t j|kr�t j|kr�td ��t|�}|j|||�S) NrzMust have at least one signerzYou must add data to signcss|]}t|t�VqdS)N)r� PKCS7Options)�.0�xrrr� Qsz-PKCS7SignatureBuilder.sign..z*options must be from the PKCS7Options enumz1Must be PEM, DER, or SMIME from the Encoding enumzAWhen passing the Text option you must also pass DetachedSignaturez9The Text option is only available for SMIME serializationzFNoAttributes is a superset of NoCapabilities. Do not pass both values.)�lenrrr�list�allr ZEncodingZPEMZDERZSMIMEr!�Text�DetachedSignature� NoAttributes�NoCapabilitiesrZ pkcs7_sign)r�encodingZoptionsrrrr�signKs8        zPKCS7SignatureBuilder.sign)N)�__name__� __module__� __qualname__rrrr r-rrrrrs rc@s$eZdZdZdZdZdZdZdZdS)r!zAdd text/plain MIME typez5Don't translate input data into canonical MIME formatz'Don't embed data in the PKCS7 structurezDon't embed SMIME capabilitiesz#Don't embed authenticatedAttributeszDon't embed signer certificateN) r.r/r0r(ZBinaryr)r+r*ZNoCertsrrrrr!~s r!N)Z __future__rrr�enumrZ cryptographyrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrr Z)cryptography.hazmat.primitives.asymmetricr r Zcryptography.utilsr r r�objectrr!rrrr�s    d