
    /$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    rd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     ZZFZhsmm,,
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)    GL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g3CG3L3L#N #N NK{H55K<%E%E%E%EFFD		',{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''{++XZZF
c
F###

c844555


f.y99
:
:C!8Or   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    qrr
++Hl2<//0077>>EEhOOG$(2?4   dD6:Bt((0022259A//111r	 
  
 
 
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~dA&&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::bmmoo&&&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 % % % % % %   				       , , , , , , , , , , , , , ,   DDD	 	    < < <
 26D4(<M   ,   *

 

 

 
 
 
 
0 0 0 0' ' ' ' zcJ\*%%F	E6NNN8J	+>
KKD	E; UJ8JOR)<j"/%A A AD	E:$./000 -,TT2C-D-D-I-I-K-KLLJ:d=)40A+BJ$& & & & & &!  & &s   / 99