ó
OvWc           @  s
  d  Z  d d l m Z d d l Z e j d k r> e Z Z n  d d l Z d d l	 m
 Z
 d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m Z m Z d d l m Z d	 Z d
 Z d Z d Z d Z d d d „  ƒ  YZ d Z d d d „  ƒ  YZ d S(   uF   Pythonic simple SOAP Client plugins for WebService Security extensionsiÿÿÿÿ(   t   unicode_literalsNu   3(   t   Decimali   (   t
   __author__t   __copyright__t   __license__t   __version__(   t   SimpleXMLElementuQ   http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsduR   http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsdu"   http://www.w3.org/2000/09/xmldsig#uU   http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3u^   http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binaryt   UsernameTokenc           B  s/   e  Z d  Z d d d „ Z d „  Z d „  Z RS(   uG   WebService Security extension to add a basic credentials to xml requestu    c         C  s"   i i | d 6| d 6d 6|  _  d  S(   Nu   wsse:Usernameu   wsse:Passwordu   wsse:UsernameToken(   t   token(   t   selft   usernamet   password(    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyt   __init__+   s    c   
      C  sg   | d d | ƒ} d }	 |	 | k r4 | |	 |  _  n  | j |	 |  j  d t d t ƒt | |	 ƒ d <d S(   u)   Add basic credentials to outgoing messageu   Headert   nsu   wsse:Securityt   add_children_nsu
   xmlns:wsseN(   R   t   marshallt   Falset   WSSE_URI(
   R	   t   clientt   requestt   methodt   argst   kwargst   headerst   soap_urit   headert   k(    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyt
   preprocess3   s    c         C  s   d S(   u   Analyze incoming credentialsN(    (   R	   R   t   responseR   R   R   R   R   (    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyt   postprocess@   s    (   t   __name__t
   __module__t   __doc__R   R   R   (    (    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyR   (   s   	uZ  <?xml version="1.0" encoding="UTF-8"?>
<wsse:Security soapenv:mustUnderstand="1" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId-45851B081998E431E8132880700036719" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
%(certificate)s</wsse:BinarySecurityToken>
    <ds:Signature Id="Signature-13" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        %(signed_info)s
        <ds:SignatureValue>%(signature_value)s</ds:SignatureValue>
        <ds:KeyInfo Id="KeyId-45851B081998E431E8132880700036720">
            <wsse:SecurityTokenReference wsu:Id="STRId-45851B081998E431E8132880700036821" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                <wsse:Reference URI="#CertId-45851B081998E431E8132880700036719" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
            </wsse:SecurityTokenReference>
        </ds:KeyInfo>
    </ds:Signature>
</wsse:Security>
t   BinaryTokenSignaturec           B  sA   e  Z d  Z d d d d d „ Z d „  Z d „  Z d d „ Z RS(   uE   WebService Security extension to add a basic signature to xml requestu    c         C  sY   d j  g  t | ƒ D] } | j d ƒ s | ^ q ƒ |  _ | |  _ | |  _ | |  _ d  S(   Nu    u   ---(   t   joint   opent
   startswitht   certificatet   private_keyR   t   cacert(   R	   R%   R&   R   R'   t   line(    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyR   Y   s
    !		c         C  sÔ   | d d | ƒ} | d d | ƒ}	 d | d <t  | d <x1 | D]( \ }
 } |
 j d ƒ r@ | | |
 <q@ q@ Wt | ƒ } d d	 l m } | j | d
 |  j |  j ƒ } |  j | d <t	 t
 | ƒ } |	 j | ƒ d S(   u   Sign the outgoing SOAP requestu   BodyR   u   Headeru   id-14u   wsu:Idu	   xmlns:wsuu   xmlnsi   (   t   xmlsecu   #id-14u   certificateN(   t   WSU_URIR$   t   reprt    R)   t   rsa_signR&   R   R%   R   t   BIN_TOKEN_TMPLt   import_node(   R	   R   R   R   R   R   R   R   t   bodyR   t   attrt   valuet   ref_xmlR)   t   varst   wsse(    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyR   a   s    

c         C  sj  d d l  m } | d d | ƒ}	 | d d | ƒ}
 |
 d d t ƒ} | d d t ƒ} |  j | d t ƒ |  j | d	 t ƒ t | ƒ j d
 ƒ } | j | d t	 ƒ} |  j
 sÃ t j d ƒ n* | j |  j
 | d t	 ƒsí t d ƒ ‚ n  |  j |	 d t ƒ |	 d } | d d t ƒ} | d ƒ } | d ƒ } |  j | d ƒ d d | ƒ |  j | d ƒ d t d ƒ |  j | d ƒ d ƒ d t d ƒ x1 | D]( \ } } | j d ƒ r| |	 | <qqW| j t |	 ƒ ƒ } | j | ƒ } t | d ƒ d ƒ ƒ } | | k r t d ƒ ‚ n  t | d <t | ƒ } | j | t | ƒ | ƒ } | sft d ƒ ‚ n  d S(    u-   Verify the signature of the incoming responsei   (   R)   u   BodyR   u   Headeru   Securityu   BinarySecurityTokenu   EncodingTypeu	   ValueTypeu   base64t   binaryu/   No CA provided, WSSE not validating certificateu"   WSSE certificate validation failedu	   xmlns:wsuu   wsu:Idu	   Signatureu
   SignedInfou   SignatureValueu	   Referenceu   URIu   #u   SignatureMethodu	   Algorithmu   rsa-sha1u   DigestMethodu   sha1u   xmlnsu   DigestValueu   WSSE SHA1 hash digests mismatchu+   WSSE RSA-SHA1 signature verification failedN(   R,   R)   R   t   _BinaryTokenSignature__checkt   Base64Binary_URIt
   X509v3_URIt   strt   decodet   x509_extract_rsa_public_keyt   TrueR'   t   warningst   warnt   x509_verifyt   RuntimeErrorR*   t   XMLDSIG_URIR$   t   canonicalizeR+   t   sha1_hash_digestt
   rsa_verify(   R	   R   R   R   R   R   R   R   R)   R0   R   R5   t   certt   cert_dert
   public_keyt   ref_urit	   signaturet   signed_infot   signature_valueR1   R2   R3   t   computed_hasht   digest_valuet   xmlt   ok(    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyR   x   sH    	

u   WSSE sanity check failedc         C  s   | | k r t  | ƒ ‚ n  d  S(   N(   RA   (   R	   R2   t   expectedt   msg(    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyt   __check¬   s    N(   R   R   R    t   NoneR   R   R   R7   (    (    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyR!   V   s
   		4(    (    (   R    t
   __future__R    t   syst   versionR:   t
   basestringt   unicodet   datetimet   decimalR   t   ost   loggingt   hashlibR>   R,   R   R   R   R   t	   simplexmlR   R   R*   RB   R9   R8   R   R.   R!   (    (    (    sP   /data/av2000/soap/soapenv/local/lib/python2.7/site-packages/pysimplesoap/wsse.pyt   <module>   s(   ",