§
    ®/$ZB   ã                   ó&  — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZ 	 ddlZn# e$ r dZY nw xY wdZdZdZd	Zd
ZdZd"d„Zd„ Zdddeefd„Zd"d„Zd„ Zd#d„Zd#d„Zd#d„Zedk    rždZ  ee ¦  «        Z! e"e!¦  «          ee ddd¦  «        Z# e"ee#z  ¦  «         dZ  ee dz  ddded¬¦  «        Z# e"e ee#z  z  ¦  «          e e$d¦  «         %                    ¦   «         ¦  «        Z& ee#d         e#d          e&d¬!¦  «        sJ ‚dS dS )$z,Pythonic XML Security Library implementationé    )Úprint_functionN)ÚStringIO)ÚBIOÚEVPÚRSAÚX509Úm2a÷  
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
  <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
  <Reference URI="%(ref_uri)s">
    <Transforms>
      <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
    </Transforms>
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
    <DigestValue>%(digest_value)s</DigestValue>
  </Reference>
</SignedInfo>
zÊ
<?xml version="1.0" encoding="UTF-8"?>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
%(signed_info)s
<SignatureValue>%(signature_value)s</SignatureValue>
%(key_info)s
%(ref_xml)s
</Signature>
aO  
<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
  <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
  <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
  <Reference URI="">
    <Transforms>
       <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
       <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    </Transforms>
    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    <DigestValue>%(digest_value)s</DigestValue>
  </Reference>
</SignedInfo>
z•<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
%(signed_info)s
<SignatureValue>%(signature_value)s</SignatureValue>
%(key_info)s
</Signature>z£
<KeyInfo>
  <KeyValue>
    <RSAKeyValue>
      <Modulus>%(modulus)s</Modulus>
      <Exponent>%(exponent)s</Exponent>
    </RSAKeyValue>
  </KeyValue>
</KeyInfo>
zì
<KeyInfo>
    <X509Data>
        <X509IssuerSerial>
            <X509IssuerName>%(issuer_name)s</X509IssuerName>
            <X509SerialNumber>%(serial_number)s</X509SerialNumber>
        </X509IssuerSerial>
    </X509Data>
</KeyInfo>
Tc                 ó(  — t          ¦   «         }t          �Dt          j                             t          | ¦  «        ¦  «        }|                     ||¬¦  «         n&ddlm}  || ¦  «                             ||¬¦  «         |                     ¦   «         S )z@Return the canonical (c14n) form of the xml document for hashingN)Ú	exclusiveé   )ÚSimpleXMLElement)r   ÚlxmlÚetreeÚparseÚ
write_c14nÚ	simplexmlr   Úgetvalue)ÚxmlÚc14n_excÚoutputÚetr   s        ú5/usr/lib/python3/dist-packages/pysimplesoap/xmlsec.pyÚcanonicalizer   b   s�   € õ ‰ZŒZ€FÝÐåŒZ×Ò�h s™mœmÑ,Ô,ˆØ
�Š�f¨ˆÑ1Ô1Ð1Ð1ð 	0Ð/Ð/Ð/Ð/Ð/ØÐ˜ÑÔ×(Ò(¨¸8Ð(ÑDÔDÐDØ�?Š?ÑÔÐó    c                 ór   — t          j        t          j        | ¦  «                             ¦   «         ¦  «        S )z/Create a SHA1 hash and return the base64 string)Úbase64Ú	b64encodeÚhashlibÚsha1Údigest)Úpayloads    r   Úsha1_hash_digestr"   q   s)   € åÔ�GœL¨Ñ1Ô1×8Ò8Ñ:Ô:Ñ;Ô;Ð;r   c           	      ób  ‡— t          | |¦  «        }||t          |¦  «        dœz  }	t          |	|¦  «        }	t          j        |ˆfd„¦  «        }
|
                     t          j        |	¦  «                             ¦   «         ¦  «        }|||	t          j	        |¦  «        t          |
||¦  «        dœS )zISign an XML document usign RSA (templates: enveloped -ref- or enveloping))Úref_uriÚdigest_valuec                  ó   •— ‰S )N© )ÚargsÚkwargsÚpasswords     €r   ú<lambda>zrsa_sign.<locals>.<lambda>�   s   ø€ ¸X€ r   )Úref_xmlr$   Úsigned_infoÚsignature_valueÚkey_info)r   r"   r   Úload_keyÚsignr   r   r    r   r   r/   )r   r$   Úprivate_keyr*   Úcertr   Úsign_templateÚkey_info_templater,   r-   ÚpkeyÚ	signatures      `        r   Úrsa_signr8   v   sÀ   ø€ õ
 ˜3 Ñ)Ô)€Gà¨gÝ3CÀGÑ3LÔ3Lð#Nð #Nñ N€Kå˜{¨HÑ5Ô5€KåŒ<˜Ð%EÐ%EÐ%EÐ%EÑFÔF€DØ—	’	�'œ, {Ñ3Ô3×:Ò:Ñ<Ô<Ñ=Ô=€Ið ¨7Ø&Ý%Ô/°	Ñ:Ô:Ý   tÐ->Ñ?Ô?ð	ð ð r   c                 óô  — |                      d¦  «        r)t          j        |¦  «        }t          j        |¦  «        }nt          j        t          ¦  «        }t          j        ¦   «         }| 	                    |¦  «         | 
                    d¬¦  «         |                     ¦   «          |                     t          | |¦  «        ¦  «         |                     t          j        |¦  «        ¦  «        }|dk    S )zDVerify a XML document signature usign RSA-SHA1, return True if validz-----BEGIN PUBLIC KEY-----r   )Úmdr   )Ú
startswithr   ÚMemoryBufferr   Úload_pub_key_bioÚload_pub_keyÚcertificater   ÚPKeyÚ
assign_rsaÚreset_contextÚverify_initÚverify_updater   Úverify_finalr   Ú	b64decode)r   r7   Úkeyr   ÚbioÚrsaÚpubkeyÚrets           r   Ú
rsa_verifyrL   Œ   sØ   € ð ‡~‚~Ð2Ñ3Ô3ð ,ÝÔ˜sÑ#Ô#ˆÝÔ" 3Ñ'Ô'ˆˆåÔ�{Ñ+Ô+ˆåŒX‰ZŒZ€FØ
×Ò�cÑÔÐà
×Ò˜FÐÑ#Ô#Ð#Ø
×ÒÑÔÐà
×Ò� c¨8Ñ4Ô4Ñ5Ô5Ð5Ø
×
Ò
�fÔ.¨yÑ9Ô9Ñ
:Ô
:€CØ�!Š8€Or   c                 óœ  — t          j        | j        dd…         ¦  «        }t          j        t          j        | j        ¦  «        ¦  «                             d¦  «                             d¦  «        }|rt          |¦  «        nd}||||r&| 
                    ¦   «                              ¦   «         nd|r|                     ¦   «         nddœz  S )zHConvert private key (PEM) to XML Signature format (RSAKeyValue/X509Data)é   NÚhexr   Ú )ÚmodulusÚexponentÚissuer_nameÚserial_number)r   r   Úer	   Ú	bn_to_hexÚ	mpi_to_bnÚnÚdecodeÚencodeÚx509_parse_certÚ
get_issuerÚas_textÚget_serial_number)r6   r3   r5   rR   rQ   Úx509s         r   r/   r/   ¡   sÃ   € åÔ ¤ q r r¤
Ñ+Ô+€HÝŒl�2œ<¨¬Ñ/Ô/Ñ0Ô0×7Ò7¸Ñ>Ô>×EÒEÀhÑOÔO€GØ$(Ð2�?˜4Ñ Ô Ð ¨d€DØØØØ6:ÐB�t—’Ñ(Ô(×0Ò0Ñ2Ô2Ð2ÀØ59ÐA˜×/Ò/Ñ1Ô1Ð1¸rð	 
ð  
ñ 
ð 
r   Fc                 ó.  — |r4t          j        | ¦  «        }t          j        |t          j        ¦  «        }n^|                      d¦  «        r4t          j        | ¦  «        }t          j        |t          j        ¦  «        }nt          j        | d¦  «        }|S )zECreate a X509 certificate from binary DER, plain text PEM or filenamez-----BEGIN CERTIFICATE-----r   )r   r<   r   Úload_cert_bioÚ
FORMAT_DERr;   Ú
FORMAT_PEMÚ	load_cert)r3   ÚbinaryrH   r_   s       r   r[   r[   ±   s�   € àð 'ÝÔ˜tÑ$Ô$ˆÝÔ! #¥t¤Ñ7Ô7ˆˆØ	�ŠÐ6Ñ	7Ô	7ð 'ÝÔ˜tÑ$Ô$ˆÝÔ! #¥t¤Ñ7Ô7ˆˆåŒ~˜d AÑ&Ô&ˆØ€Kr   c                 ó’   — t          | |¦  «        }|                     ¦   «                              ¦   «                              ¦   «         S )z:Return the public key (PEM format) from a X509 certificate)r[   Ú
get_pubkeyÚget_rsaÚas_pem)r3   re   r_   s      r   Úx509_extract_rsa_public_keyrj   ¾   s9   € å˜4 Ñ(Ô(€DØ�?Š?ÑÔ×$Ò$Ñ&Ô&×-Ò-Ñ/Ô/Ð/r   c                 óŽ   — t          | ¦  «        }t          ||¦  «        }|                     |                     ¦   «         ¦  «        S )zGValidate the certificate's authenticity using a certification authority)r[   Úverifyrg   )Úcacertr3   re   ÚcaÚcrts        r   Úx509_verifyrp   Ä   s8   € å	˜Ñ	 Ô	 €BÝ
˜$ Ñ
'Ô
'€CØ�:Š:�b—m’m‘o”oÑ&Ô&Ð&r   Ú__main__zL<Object xmlns="http://www.w3.org/2000/09/xmldsig#" Id="object">data</Object>z#objectzno_encriptada.keyr*   z=<?xml version="1.0" encoding="UTF-8"?><Object>data%s</Object>rP   )r4   r   zzunimercado.crtr-   r.   )r   )T)F)'Ú__doc__Ú
__future__r   r   r   ÚosÚ	cStringIOr   ÚM2Cryptor   r   r   r   r	   Ú
lxml.etreer   ÚImportErrorÚSIGN_REF_TMPLÚSIGNED_TMPLÚSIGN_ENV_TMPLÚSIGNATURE_TMPLÚKEY_INFO_RSA_TMPLÚKEY_INFO_X509_TMPLr   r"   r8   rL   r/   r[   rj   rp   Ú__name__Ú
sample_xmlr   ÚprintÚvarsÚopenÚreadÚ
public_keyr'   r   r   ú<module>r†      s—  ðð 3Ð 2Ø %Ð %Ð %Ð %Ð %Ð %Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ðØÐÐÐÐøØð ð ð Ø€D€D€Dðøøøð€ð€ð€ð€ð	Ð ð	Ð ðð ð ð ð<ð <ð <ð
 26¸DÈ4Ø(Ð<Mðð ð ð ð,ð ð ð ð*

ð 

ð 

ð 
ð 
ð 
ð 
ð0ð 0ð 0ð 0ð'ð 'ð 'ð 'ð ˆzÒÐàc€JØˆ\˜*Ñ%Ô%€FØ	€Eˆ6�N„N€NØˆ8�J 	Ð+>À
ÑKÔK€DØ	€Eˆ;˜ÑÑÔÐð U€JØˆ8�J ‘O RÐ)<¸jØ"/¸%ðAñ Aô A€Dà	€Eˆ:˜¨$Ñ.Ñ/Ñ0Ô0Ð0ð -Ð,¨T¨TÐ2CÑ-DÔ-D×-IÒ-IÑ-KÔ-KÑLÔL€JØˆ:�d˜=Ô)¨4Ð0AÔ+BÀJØ$ð&ñ &ô &ð &ð &ð &ð! Ðð &ð &s   ª/ ¯9¸9