
    #	h:0                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
Jr  S SKJrJr  S SKJr  S SKJrJr  S SKJrJrJr  S SKJr  \R6                  r\R8                  r\R:                  r\R<                  \R>                  \R@                  \RB                  \RD                  4   r#\R<                  \RH                  \RJ                  4   r& " S	 S
\
RN                  5      r( " S S5      r) " S S5      r*\RV                  r,\RZ                  r.\R^                  r0          SS jr1SS jr2SS jr3SS jr4 " S S\Rj                  Rl                  5      r7g)    )annotationsN)utilsx509)UnsupportedAlgorithm_Reasons)pkcs7)hashesserialization)ecpaddingrsa)_check_byteslikec                  ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
PKCS7Options'   z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 certificate N)__name__
__module____qualname____firstlineno__TextBinaryDetachedSignatureNoCapabilitiesNoAttributesNoCerts__static_attributes__r       d/var/www/html/env/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.pyr   r   '   s!    %DDFA5N8L.Gr   r   c                      \ rS rSrS/ / 4     S
S jjrSS jrSS.         SS jjr    SS jr S       SS jjrS	r	g)PKCS7SignatureBuilder0   Nc                (    Xl         X l        X0l        g N)_data_signers_additional_certs)selfdatasignersadditional_certss       r   __init__PKCS7SignatureBuilder.__init__1   s     
!1r   c                t    [        SU5        U R                  b  [        S5      e[        XR                  5      $ )Nr)   data may only be set once)r   r%   
ValueErrorr!   r&   r(   r)   s     r   set_dataPKCS7SignatureBuilder.set_dataB   s1    &::!899$T==99r   )rsa_paddingc                  [        U[        R                  [        R                  [        R                  [        R
                  45      (       d  [        S5      e[        U[        R                  5      (       d  [        S5      e[        U[        R                  [        R                  45      (       d  [        S5      eUbd  [        U[        R                  [        R                  45      (       d  [        S5      e[        U[        R                  5      (       d  [        S5      e[!        U R"                  / U R$                  QXX44P5      $ )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.zPadding must be PSS or PKCS1v15z&Padding is only supported for RSA keys)
isinstancer	   SHA224SHA256SHA384SHA512	TypeErrorr   Certificater   RSAPrivateKeyr   EllipticCurvePrivateKeyr   PSSPKCS1v15r!   r%   r&   )r(   certificateprivate_keyhash_algorithmr4   s        r   
add_signer PKCS7SignatureBuilder.add_signerI   s    	
 
 ,  +t'7'788DEE#++R-G-GH
 
 LMM"kGKK9I9I+JKK ABBk3+<+<== HII$JJ>G
 	
r   c                    [        U[        R                  5      (       d  [        S5      e[	        U R
                  U R                  / U R                  QUP5      $ )Nr6   )r7   r   r=   r<   r!   r%   r&   r'   r(   rB   s     r   add_certificate%PKCS7SignatureBuilder.add_certificatet   sP     +t'7'788DEE$JJ'M)?)?'M'M
 	
r   c                4   [        U R                  5      S:X  a  [        S5      eU R                  c  [        S5      e[	        U5      n[        S U 5       5      (       d  [        S5      eU[        R                  R                  [        R                  R                  [        R                  R                  4;  a  [        S5      e[        R                  U;   a  [        R                  U;  a  [        S5      e[        R                  U;   aC  U[        R                  R                  [        R                  R                  4;   a  [        S5      e[        R                  U;   a  [        R                  U;   a  [        S	5      e[         R"                  " XU5      $ )
Nr   zMust have at least one signerzYou must add data to signc              3  B   #    U  H  n[        U[        5      v   M     g 7fr$   r7   r   .0xs     r   	<genexpr>-PKCS7SignatureBuilder.sign.<locals>.<genexpr>        @1:a..   *options must be from the PKCS7Options enum1Must 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&   r0   r%   listallr
   EncodingPEMDERSMIMEr   r   r   r   r   
rust_pkcs7sign_and_serialize)r(   encodingoptionsbackends       r   signPKCS7SignatureBuilder.sign~   sj    t}}"<==::899w-@@@@IJJ""&&""&&""((
 

 C  (..g=$ 
 'H""&&""&&9
 -
 K  %%0++w6 
 ,,TWEEr   )r'   r%   r&   )r)   bytes | Noner*   zjlist[tuple[x509.Certificate, PKCS7PrivateKeyTypes, PKCS7HashTypes, padding.PSS | padding.PKCS1v15 | None]]r+   zlist[x509.Certificate])r)   bytesreturnr!   )
rB   x509.CertificaterC   PKCS7PrivateKeyTypesrD   PKCS7HashTypesr4   z%padding.PSS | padding.PKCS1v15 | Nonerg   r!   )rB   rh   rg   r!   r$   )r`   serialization.Encodingra   typing.Iterable[PKCS7Options]rb   z
typing.Anyrg   rf   )
r   r   r   r   r,   r2   rE   rI   rc   r   r   r   r   r!   r!   0   s     " 3522
2 12": >B)
%)
 *)
 '	)
 ;)
 
)
V
+
	
 #	4F(4F /4F 	4F
 
4F 4Fr   r!   c                  `    \ rS rSrSSS.   SS jjrS	S jr    S
S jr      SS jrSrg)PKCS7EnvelopeBuilder   Nr%   _recipientsc                   SSK Jn  UR                  [        R                  " 5       S9(       d  [        S[        R                  5      eXl        Ub  X l	        g / U l	        g )Nr   )rb   )r   zHRSA with PKCS1 v1.5 padding is not supported by this version of OpenSSL.)
,cryptography.hazmat.backends.openssl.backendrb   rsa_encryption_supportedr   rA   r   r   UNSUPPORTED_PADDINGr%   rq   )r(   r%   rq   ossls       r   r,   PKCS7EnvelopeBuilder.__init__   sW    	
 ,,W5E5E5G,H&,, 
 
*5*A;rr   c                p    [        SU5        U R                  b  [        S5      e[        XR                  S9$ )Nr)   r/   rp   )r   r%   r0   rn   rq   r1   s     r   r2   PKCS7EnvelopeBuilder.set_data   s3    &::!899#$<L<LMMr   c                
   [        U[        R                  5      (       d  [        S5      e[        UR	                  5       [
        R                  5      (       d  [        S5      e[        U R                  / U R                  QUPS9$ )Nr6   z)Only RSA keys are supported at this time.rp   )
r7   r   r=   r<   
public_keyr   RSAPublicKeyrn   r%   rq   rH   s     r   add_recipient"PKCS7EnvelopeBuilder.add_recipient   sz     +t'7'788DEE+002C4D4DEEGHH#**!!
 	
r   c                d   [        U R                  5      S:X  a  [        S5      eU R                  c  [        S5      e[	        U5      n[        S U 5       5      (       d  [        S5      eU[        R                  R                  [        R                  R                  [        R                  R                  4;  a  [        S5      e[        S U 5       5      (       a  [        S5      e[        R                  U;   a  [        R                  U;   a  [        S	5      e[        R                   " XU5      $ )
Nr   z Must have at least one recipientzYou must add data to encryptc              3  B   #    U  H  n[        U[        5      v   M     g 7fr$   rM   rN   s     r   rQ   /PKCS7EnvelopeBuilder.encrypt.<locals>.<genexpr>   rS   rT   rU   rV   c              3  h   #    U  H(  nU[         R                  [         R                  4;  v   M*     g 7fr$   )r   r   r   )rO   opts     r   rQ   r      s-      
 ))<+>+>??s   02zEOnly the following options are supported for encryption: Text, Binaryz3Cannot use Binary and Text options at the same time)rW   rq   r0   r%   rX   rY   r
   rZ   r[   r\   r]   anyr   r   r   r^   encrypt_and_serialize)r(   r`   ra   s      r   encryptPKCS7EnvelopeBuilder.encrypt   s   
 t A%?@@::;<<w-@@@@IJJ""&&""&&""((
 

 C 
  

 
 
   ')l.A.AW.L E  //HHr   )r%   re   rq   zlist[x509.Certificate] | None)r)   rf   rg   rn   )rB   rh   rg   rn   )r`   rk   ra   rl   rg   rf   )	r   r   r   r   r,   r2   r}   r   r   r   r   r   rn   rn      sh     #59	J J 3	J&N
%
 

$%I(%I /%I 
	%Ir   rn   c           	        [         R                  R                  5       nUR                  SS5        UR                  SSSUS9  SUl        [        5       nUR                  U 5        U(       a  UR                  SS5        UR                  U5        [         R                  R                  5       nUR                  SSS	S
9  UR                  SS5        UR                  SSS	S9  UR                  [         R                  R                  USS95        US	 UR                  U5        [        R                  " 5       n[         R                  R                  USSUR                  R!                  SS9S9nUR#                  U5        UR%                  5       $ )NMIME-Version1.0Content-Typezmultipart/signedzapplication/x-pkcs7-signature)protocolmicalgz!This is an S/MIME signed message

text/plainz	smime.p7s)nameContent-Transfer-Encodingbase64Content-Disposition
attachmentfilenameA   
maxlinelenr   Fz
)linesep)maxheaderlenmangle_from_policy)emailmessageMessage
add_headerpreambleOpenSSLMimePartset_payloadattachMIMEPart
base64mimebody_encodeioBytesIO	generatorBytesGeneratorr   cloneflattengetvalue)	r)   	signaturer   	text_modemmsg_partsig_partfpgs	            r   _smime_signed_encoder     sp    	ALL'LL0	   6AJ HNL9HHX}}%%'H7k   3X>|k   $$Y2$> 	 HHX	B&&
xx~~f~-	 	' 	A IIaL;;=r   c                t   [         R                  R                  5       nUR                  SS5        UR                  SSSS9  UR                  SSS	SS
9  UR                  SS5        UR	                  [         R
                  R                  U SS95        UR                  UR                  R                  SSS9S9$ )Nr   r   r   r   z	smime.p7mr   r   application/pkcs7-mimezenveloped-data)
smime_typer   r   r   r   r   
r   )r   max_line_length)r   )
r   r   r   r   r   r   r   as_bytesr   r   r)   r   s     r   _smime_enveloped_encoder   ?  s    ALL'LL&{LKLL #	   LL,h7MM%""..t.CD::QXX^^D!^L:MMr   c                    [         R                  " U 5      nUR                  5       S;  a  [        S5      e[	        UR                  SS95      $ )N>   r   application/x-pkcs7-mimezNot an S/MIME enveloped messageTdecode)r   message_from_bytesget_content_typer0   rf   get_payloadr   s     r   _smime_enveloped_decoder   P  sL      &A $  :;;d+,,r   c                    [         R                  " U 5      nUR                  S5      nUc  [        S5      eSU;  a  [        SU S35      e[	        UR                  SS95      $ )Nzcontent-typezgDecrypted MIME data has no 'Content-Type' header. Please remove the 'Text' option to parse it manually.r   z%Decrypted MIME data content type is 'zC', not 'text/plain'. Remove the 'Text' option to parse it manually.Tr   )r   r   getr0   rf   r   )r)   r   content_types      r   _smime_remove_text_headersr   Z  s~      &A 55(LD
 	
 <'3L> BK K
 	
 d+,,r   c                      \ rS rSrSS jrSrg)r   il  c                d    [        U R                  5       5      (       a  UR                  U 5        g g r$   )rX   	raw_items_write_headers)r(   r   s     r   r   OpenSSLMimePart._write_headerso  s'     !!$$T* "r   r   N)rg   None)r   r   r   r   r   r   r   r   r   r   r   l  s    +r   r   )
r)   rf   r   rf   r   strr   boolrg   rf   )r)   rf   rg   rf   )8
__future__r   email.base64mimer   email.generatoremail.messageemail.policyr   typingcryptographyr   r   cryptography.exceptionsr   r   "cryptography.hazmat.bindings._rustr   r^   cryptography.hazmat.primitivesr	   r
   )cryptography.hazmat.primitives.asymmetricr   r   r   cryptography.utilsr   load_pem_pkcs7_certificatesload_der_pkcs7_certificatesserialize_certificatesUnionr8   r9   r:   r;   rj   r>   r?   ri   Enumr   r!   rn   decrypt_derpkcs7_decrypt_derdecrypt_pempkcs7_decrypt_pemdecrypt_smimepkcs7_decrypt_smimer   r   r   r   r   r   r   r   r   r   <module>r      sQ  
 #     	  $ B B @ F F /(DD (DD #:: 
MM
MM
MM
MM ||r111 
/5:: /BF BFJRI RIj ** **  .. -
-!-+.-;?-
-`N"--$+emm,, +r   