Ë
    ýQµià  ã                  ó  — d dl mZ d dlZd dlZd dlZ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mZ d dlmZ dd„Zdd	„Z	 	 	 	 	 	 dd
„Zej4                  ej6                  ej8                  ej:                  ej<                  f   Zej4                  ej@                  ejB                  f   Z" G d„ de
jF                  «      Z$ G d„ d«      Z%	 	 	 	 	 	 	 	 	 	 dd„Z& G d„ dejN                  jP                  «      Z)y)é    )ÚannotationsN)ÚutilsÚx509)Úpkcs7)ÚhashesÚserialization)ÚecÚrsa)Ú_check_byteslikec                ó0   — ddl m} |j                  | «      S ©Nr   )Úbackend)Ú,cryptography.hazmat.backends.openssl.backendr   Úload_pem_pkcs7_certificates©Údatar   s     úT/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/pkcs7.pyr   r      ó   € ÝDà×.Ñ.¨tÓ4Ð4ó    c                ó0   — ddl m} |j                  | «      S r   )r   r   Úload_der_pkcs7_certificatesr   s     r   r   r      r   r   c                ó.   — t        j                  | |«      S ©N)Ú
rust_pkcs7Úserialize_certificates)ÚcertsÚencodings     r   r   r   !   s   € ô ×,Ñ,¨U°HÓ=Ð=r   c                  ó$   — e Zd ZdZdZdZdZdZdZy)ÚPKCS7OptionszAdd text/plain MIME typez5Don't translate input data into canonical MIME formatz'Don't embed data in the PKCS7 structurezDon't embed SMIME capabilitiesz#Don't embed authenticatedAttributeszDon't embed signer certificateN)	Ú__name__Ú
__module__Ú__qualname__ÚTextÚBinaryÚDetachedSignatureÚNoCapabilitiesÚNoAttributesÚNoCerts© r   r   r   r   4   s!   „ Ø%€DØD€FØAÐØ5€NØ8€LØ.�Gr   r   c                  óp   — e Zd Zdg g f	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 d	d„Z	 	 	 	 d
d„Z	 d	 	 	 	 	 	 	 dd„Zy)ÚPKCS7SignatureBuilderNc                ó.   — || _         || _        || _        y r   )Ú_dataÚ_signersÚ_additional_certs)Úselfr   ÚsignersÚadditional_certss       r   Ú__init__zPKCS7SignatureBuilder.__init__>   s   € ð ˆŒ
ØˆŒØ!1ˆÕr   c                ót   — t        d|«       | j                  �t        d«      ‚t        || j                  «      S )Nr   zdata may only be set once)r   r-   Ú
ValueErrorr+   r.   )r0   r   s     r   Úset_datazPKCS7SignatureBuilder.set_dataN   s3   € Ü˜ Ô&Ø�:‰:Ð!ÜÐ8Ó9Ð9ä$ T¨4¯=©=Ó9Ð9r   c                óª  — t        |t        j                  t        j                  t        j                  t        j
                  f«      st        d«      ‚t        |t        j                  «      st        d«      ‚t        |t        j                  t        j                  f«      st        d«      ‚t        | j                  | j                  |||fgz   «      S )NzFhash_algorithm must be one of hashes.SHA224, SHA256, SHA384, or SHA512ú&certificate must be a x509.Certificatez.Only RSA & EC keys are supported at this time.)Ú
isinstancer   ÚSHA224ÚSHA256ÚSHA384ÚSHA512Ú	TypeErrorr   ÚCertificater
   ÚRSAPrivateKeyr	   ÚEllipticCurvePrivateKeyr+   r-   r.   )r0   ÚcertificateÚprivate_keyÚhash_algorithms       r   Ú
add_signerz PKCS7SignatureBuilder.add_signerU   s¸   € ô Øä—‘Ü—‘Ü—‘Ü—‘ð	ô
ô ð,óð ô ˜+¤t×'7Ñ'7Ô8ÜÐDÓEÐEäØœ#×+Ñ+¬R×-GÑ-GÐHô
ô ÐLÓMÐMä$Ø�J‰JØ�M‰M˜k¨;¸ÐGÐHÑHó
ð 	
r   c                óª   — t        |t        j                  «      st        d«      ‚t	        | j
                  | j                  | j                  |gz   «      S )Nr8   )r9   r   r?   r>   r+   r-   r.   r/   )r0   rB   s     r   Úadd_certificatez%PKCS7SignatureBuilder.add_certificateu   sI   € ô ˜+¤t×'7Ñ'7Ô8ÜÐDÓEÐEä$Ø�J‰J˜Ÿ™ t×'=Ñ'=ÀÀÑ'Mó
ð 	
r   c                ó
  — t        | j                  «      dk(  rt        d«      ‚| j                  €t        d«      ‚t	        |«      }t        d„ |D «       «      st        d«      ‚|t        j                  j                  t        j                  j                  t        j                  j                  fvrt        d«      ‚t        j                  |v rt        j                  |vrt        d«      ‚t        j                  |v rA|t        j                  j                  t        j                  j                  fv rt        d«      ‚t        j                  |v rt        j                  |v rt        d	«      ‚t!        j"                  | ||«      S )
Nr   zMust have at least one signerzYou must add data to signc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   )r9   r   )Ú.0Úxs     r   ú	<genexpr>z-PKCS7SignatureBuilder.sign.<locals>.<genexpr>Š   s   è ø€ Ò@°1”:˜a¤×.Ñ@ùs   ‚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.)Úlenr.   r5   r-   ÚlistÚallr   ÚEncodingÚPEMÚDERÚSMIMEr   r#   r%   r'   r&   r   Úsign_and_serialize)r0   r   Úoptionsr   s       r   ÚsignzPKCS7SignatureBuilder.sign   si  € ô ˆt�}‰}Ó Ò"ÜÐ<Ó=Ð=Ø�:‰:ÐÜÐ8Ó9Ð9Ü�w“-ˆÜÑ@¸Ô@Ô@ÜÐIÓJÐJØÜ×"Ñ"×&Ñ&Ü×"Ñ"×&Ñ&Ü×"Ñ"×(Ñ(ð
ñ 
ô
 ØCóð ô ×Ñ Ñ(Ü×.Ñ.°gÑ=äð$óð ô
 ×Ñ Ñ'¨HÜ×"Ñ"×&Ñ&Ü×"Ñ"×&Ñ&ð9
ñ -
ô ØKóð ô ×%Ñ%¨Ñ0Ü×+Ñ+¨wÑ6äðóð ô
 ×,Ñ,¨T°8¸WÓEÐEr   )r   ztyping.Optional[bytes]r1   zQtyping.List[typing.Tuple[x509.Certificate, PKCS7PrivateKeyTypes, PKCS7HashTypes]]r2   útyping.List[x509.Certificate])r   ÚbytesÚreturnr+   )rB   úx509.CertificaterC   ÚPKCS7PrivateKeyTypesrD   ÚPKCS7HashTypesrY   r+   )rB   rZ   rY   r+   r   )r   úserialization.EncodingrU   ztyping.Iterable[PKCS7Options]r   z
typing.AnyrY   rX   )r    r!   r"   r3   r6   rE   rG   rV   r)   r   r   r+   r+   =   s«   „ ð (,ð Ø:<ð2à$ð2ð
ð2ð 8ó2ó :ð
à%ð
ð *ð
ð 'ð	
ð
 
ó
ð@
Ø+ð
à	ó
ð #ð	4Fà(ð4Fð /ð4Fð ð	4Fð
 
ô4Fr   r+   c                ó6  — t         j                  j                  «       }|j                  dd«       |j                  ddd|¬«       d|_        t        «       }|j                  | «       |r|j                  dd«       |j                  |«       t         j                  j                  «       }|j                  ddd	¬
«       |j                  dd«       |j                  ddd	¬«       |j                  t         j                  j                  |d¬«      «       |d= |j                  |«       t        j                  «       }t         j                  j                  |dd|j                  j!                  d¬«      ¬«      }|j#                  |«       |j%                  «       S )NzMIME-Versionz1.0zContent-Typezmultipart/signedzapplication/x-pkcs7-signature)ÚprotocolÚmicalgz!This is an S/MIME signed message
z
text/plainz	smime.p7s)ÚnamezContent-Transfer-EncodingÚbase64zContent-DispositionÚ
attachment)ÚfilenameéA   )Ú
maxlinelenr   Fz
)Úlinesep)ÚmaxheaderlenÚmangle_from_Úpolicy)ÚemailÚmessageÚMessageÚ
add_headerÚpreambleÚOpenSSLMimePartÚset_payloadÚattachÚMIMEPartÚ
base64mimeÚbody_encodeÚioÚBytesIOÚ	generatorÚBytesGeneratorrj   ÚcloneÚflattenÚgetvalue)	r   Ú	signaturer`   Ú	text_modeÚmÚmsg_partÚsig_partÚfpÚgs	            r   Ú_smime_encoder„   ¶   sp  € ô 	�‰×ÑÓ€AØ‡L�L� Ô'Ø‡L�LØØØ0Øð	 ô ð 6€A„JäÓ €HØ×Ñ˜ÔÙØ×Ñ˜N¨LÔ9Ø‡H�HˆXÔä�}‰}×%Ñ%Ó'€HØ×ÑØÐ7¸kð ô ð ×ÑÐ3°XÔ>Ø×ÑØ˜|°kð ô ð ×ÑÜ×Ñ×$Ñ$ Y¸2Ð$Ó>ôð 	�Ð Ø‡H�HˆXÔä	�‰‹€BÜ�‰×&Ñ&Ø
ØØØ�x‰x�~‰~ fˆ~Ó-ð	 	'ó 	€Að ‡I�Iˆa„LØ�;‰;‹=Ðr   c                  ó   — e Zd Zdd„Zy)rp   c                óZ   — t        | j                  «       «      r|j                  | «       y y r   )rN   Ú	raw_itemsÚ_write_headers)r0   rx   s     r   rˆ   zOpenSSLMimePart._write_headersé   s$   € Ü�—‘Ó Ô!Ø×$Ñ$ TÕ*ð "r   N)rY   ÚNone)r    r!   r"   rˆ   r)   r   r   rp   rp   æ   s   „ ô+r   rp   )r   rX   rY   rW   )r   rW   r   r]   rY   rX   )
r   rX   r}   rX   r`   Ústrr~   ÚboolrY   rX   )*Ú
__future__r   Úemail.base64mimerk   Úemail.generatorÚemail.messageÚemail.policyrv   ÚtypingÚcryptographyr   r   Ú"cryptography.hazmat.bindings._rustr   r   Úcryptography.hazmat.primitivesr   r   Ú)cryptography.hazmat.primitives.asymmetricr	   r
   Úcryptography.utilsr   r   r   r   ÚUnionr:   r;   r<   r=   r\   r@   rA   r[   ÚEnumr   r+   r„   rl   rs   rp   r)   r   r   ú<module>r™      s  ðõ
 #ã Û Û Û Û 	Û ç $Ý Bß @ß =Ý /ó5ó5ð>Ø(ð>à$ð>ð ó>ð —‘Ø
‡M�MØ
‡M�MØ
‡M�MØ
‡M�Mðñ€ð —|‘|Ø×Ñ�r×1Ñ1Ð1ñÐ ô
/�5—:‘:ô /÷vFñ vFðr-Ø
ð-Ø!ð-Ø+.ð-Ø;?ð-à
ó-ô`+�e—m‘m×,Ñ,õ +r   