/$ZB &dZddlmZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z  ddlZn #e$rdZYnwxYwdZdZdZd Zd Zd Zd"d ZdZddd eefdZd"dZdZd#dZd#dZd#dZedkrdZ ee Z!e"e!ee dddZ#e"ee#zdZ ee dzdddedZ#e"e ee#zzee$d%Z&ee#de#d e&d!sJdSdS)$z,Pythonic XML Security Library implementation)print_functionN)StringIO)BIOEVPRSAX509m2a %(digest_value)s z %(signed_info)s %(signature_value)s %(key_info)s %(ref_xml)s aO %(digest_value)s z %(signed_info)s %(signature_value)s %(key_info)s z %(modulus)s %(exponent)s z %(issuer_name)s %(serial_number)s Tc(t}tDtjt|}|||n&ddlm}|||||S)z@Return the canonical (c14n) form of the xml document for hashingN) exclusive)SimpleXMLElement)rlxmletreeparse write_c14n simplexmlr getvalue)xmlc14n_excoutputetr s 5/usr/lib/python3/dist-packages/pysimplesoap/xmlsec.py canonicalizerbsZZF  Z  hsmm , , f 1111 0/////((8(DDD ??  crtjtj|S)z/Create a SHA1 hash and return the base64 string)base64 b64encodehashlibsha1digest)payloads rsha1_hash_digestr"qs)  GL1188:: ; ;;rc bt||}||t|dz} t| |} tj|fd} | t j| } ||| tj | t| ||dS)zISign an XML document usign RSA (templates: enveloped -ref- or enveloping))ref_uri digest_valuecS)N)argskwargspasswords rzrsa_sign..sXr)ref_xmlr$ signed_infosignature_valuekey_info) rr"rload_keysignrrr rrr/) rr$ private_keyr*certr sign_templatekey_info_templater,r-pkey signatures ` rrsa_signr8vs 3))Gg3CG3L3L#N#NNK{H55K < %E%E%E%E F FD ',{33::<<==I7&%/ :: t->??   rc|dr)tj|}tj|}ntjt }tj}| || d| | t|||tj|}|dkS)zDVerify a XML document signature usign RSA-SHA1, return True if validz-----BEGIN PUBLIC KEY-----r)mdr ) startswithr MemoryBufferrload_pub_key_bio load_pub_key certificaterPKey assign_rsa reset_context verify_init verify_updater verify_finalr b64decode)rr7keyrbiorsapubkeyrets r rsa_verifyrLs ~~233,s##"3''{++ XZZF c F###  c844555   f.y99 : :C !8Orctj|jdd}tjtj|jdd}|rt|nd}||||r&| nd|r| nddzS)zHConvert private key (PEM) to XML Signature format (RSAKeyValue/X509Data)Nhexr)modulusexponent issuer_name serial_number) rrer bn_to_hex mpi_to_bnndecodeencodex509_parse_cert get_issueras_textget_serial_number)r6r3r5rRrQx509s rr/r/sqrr ++Hl2<//0077>>EEhOOG$( 2?4 dD 6:Bt((0022259A//111r     rFc.|r4tj|}tj|tj}n^|dr4tj|}tj|tj}ntj|d}|S)zECreate a X509 certificate from binary DER, plain text PEM or filenamez-----BEGIN CERTIFICATE-----r )rr<r load_cert_bio FORMAT_DERr; FORMAT_PEM load_cert)r3binaryrHr_s rr[r[s 't$$!#t77 6 7 7't$$!#t77~dA&& Krct||}|S)z:Return the public key (PEM format) from a X509 certificate)r[ get_pubkeyget_rsaas_pem)r3rer_s rx509_extract_rsa_public_keyrjs9 4 ( (D ??   $ $ & & - - / //rct|}t||}||S)zGValidate the certificate's authenticity using a certification authority)r[verifyrg)cacertr3recacrts r x509_verifyrps8  B $ ' 'C ::bmmoo & &&r__main__zLdataz#objectzno_encriptada.keyr*z=data%srP)r4rzzunimercado.crtr-r.)r)T)F)'__doc__ __future__rrros cStringIOrM2Cryptorrrrr lxml.etreer ImportError SIGN_REF_TMPL SIGNED_TMPL SIGN_ENV_TMPLSIGNATURE_TMPLKEY_INFO_RSA_TMPLKEY_INFO_X509_TMPLrr"r8rLr/r[rjrp__name__ sample_xmlrprintvarsopenread public_keyr'rrrs32%%%%%%  ,,,,,,,,,,,,,, DDD           <<< 26D4( K KD E; UJ 8JOR)