source: TI12-security/trunk/documentation/epydoc/ndg.security.common.XMLSec-pysrc.html @ 4245

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/documentation/epydoc/ndg.security.common.XMLSec-pysrc.html@4245
Revision 4245, 238.5 KB checked in by pjkersha, 11 years ago (diff)

Working unit tests for WSGI based Attribute Authority.

  • Altered so that all Attribute Config is picked up from the Paste ini file. Separate cfg or xml based config file is still supported.

TODO:

  • Simplify unit test config for client.
Line 
1<?xml version="1.0" encoding="ascii"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3          "DTD/xhtml1-transitional.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5<head>
6  <title>ndg.security.common.XMLSec</title>
7  <link rel="stylesheet" href="epydoc.css" type="text/css" />
8  <script type="text/javascript" src="epydoc.js"></script>
9</head>
10
11<body bgcolor="white" text="black" link="blue" vlink="#204080"
12      alink="#204080">
13<!-- ==================== NAVIGATION BAR ==================== -->
14<table class="navbar" border="0" width="100%" cellpadding="0"
15       bgcolor="#a0c0ff" cellspacing="0">
16  <tr valign="middle">
17  <!-- Home link -->
18      <th>&nbsp;&nbsp;&nbsp;<a
19        href="ndg-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
20
21  <!-- Tree link -->
22      <th>&nbsp;&nbsp;&nbsp;<a
23        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
24
25  <!-- Index link -->
26      <th>&nbsp;&nbsp;&nbsp;<a
27        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
28
29  <!-- Help link -->
30      <th>&nbsp;&nbsp;&nbsp;<a
31        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
32
33  <!-- Project homepage -->
34      <th class="navbar" align="right" width="100%">
35        <table border="0" cellpadding="0" cellspacing="0">
36          <tr><th class="navbar" align="center"
37            >NDG Security</th>
38          </tr></table></th>
39  </tr>
40</table>
41<table width="100%" cellpadding="0" cellspacing="0">
42  <tr valign="top">
43    <td width="100%">
44      <span class="breadcrumbs">
45        <a href="ndg-module.html">Package&nbsp;ndg</a> ::
46        <a href="ndg.security-module.html">Package&nbsp;security</a> ::
47        <a href="ndg.security.common-module.html">Package&nbsp;common</a> ::
48        Module&nbsp;XMLSec
49      </span>
50    </td>
51    <td>
52      <table cellpadding="0" cellspacing="0">
53        <!-- hide/show private -->
54        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
55    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
56      </table>
57    </td>
58  </tr>
59</table>
60<h1 class="epydoc">Source Code for <a href="ndg.security.common.XMLSec-module.html">Module ndg.security.common.XMLSec</a></h1>
61<pre class="py-src">
62<a name="L1"></a><tt class="py-lineno">  1</tt>  <tt class="py-line"><tt class="py-docstring">"""NDG XML Security - Encryption and Digital Signature</tt> </tt>
63<a name="L2"></a><tt class="py-lineno">  2</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
64<a name="L3"></a><tt class="py-lineno">  3</tt>  <tt class="py-line"><tt class="py-docstring">NERC Data Grid Project</tt> </tt>
65<a name="L4"></a><tt class="py-lineno">  4</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
66<a name="L5"></a><tt class="py-lineno">  5</tt>  <tt class="py-line"><tt class="py-name">__author__</tt> <tt class="py-op">=</tt> <tt class="py-string">"P J Kershaw"</tt> </tt>
67<a name="L6"></a><tt class="py-lineno">  6</tt>  <tt class="py-line"><tt class="py-name">__date__</tt> <tt class="py-op">=</tt> <tt class="py-string">"05/04/05"</tt> </tt>
68<a name="L7"></a><tt class="py-lineno">  7</tt>  <tt class="py-line"><tt class="py-name">__copyright__</tt> <tt class="py-op">=</tt> <tt class="py-string">"(C) 2007 STFC &amp; NERC"</tt> </tt>
69<a name="L8"></a><tt class="py-lineno">  8</tt>  <tt class="py-line"><tt class="py-name">__license__</tt> <tt class="py-op">=</tt> \ </tt>
70<a name="L9"></a><tt class="py-lineno">  9</tt>  <tt class="py-line"><tt class="py-string">"""This software may be distributed under the terms of the Q Public </tt> </tt>
71<a name="L10"></a><tt class="py-lineno"> 10</tt>  <tt class="py-line"><tt class="py-string">License, version 1.0 or later."""</tt> </tt>
72<a name="L11"></a><tt class="py-lineno"> 11</tt>  <tt class="py-line"><tt class="py-name">__contact__</tt> <tt class="py-op">=</tt> <tt class="py-string">"P.J.Kershaw@rl.ac.uk"</tt> </tt>
73<a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable ndg.__revision__=ndg-module.html#__revision__,Variable ndg.security.__revision__=ndg.security-module.html#__revision__,Variable ndg.security.__revision__=ndg.security-module.html#__revision__,Variable ndg.security.client.LogClient.__revision__=ndg.security.client.LogClient-module.html#__revision__,Variable ndg.security.client.SimpleCAClient.__revision__=ndg.security.client.SimpleCAClient-module.html#__revision__,Variable ndg.security.client.__revision__=ndg.security.client-module.html#__revision__,Variable ndg.security.client.ndgSessionClient.__revision__=ndg.security.client.ndgSessionClient-module.html#__revision__,Variable ndg.security.common.AttAuthority.__revision__=ndg.security.common.AttAuthority-module.html#__revision__,Variable ndg.security.common.AttCert.__revision__=ndg.security.common.AttCert-module.html#__revision__,Variable ndg.security.common.CredWallet.__revision__=ndg.security.common.CredWallet-module.html#__revision__,Variable ndg.security.common.SQLObject.__revision__=ndg.security.common.SQLObject-module.html#__revision__,Variable ndg.security.common.SecurityCGI.__revision__=ndg.security.common.SecurityCGI-module.html#__revision__,Variable ndg.security.common.SessionMgr.__revision__=ndg.security.common.SessionMgr-module.html#__revision__,Variable ndg.security.common.X509.__revision__=ndg.security.common.X509-module.html#__revision__,Variable ndg.security.common.XMLSec.__revision__=ndg.security.common.XMLSec-module.html#__revision__,Variable ndg.security.common.__revision__=ndg.security.common-module.html#__revision__,Variable ndg.security.common.authz.__revision__=ndg.security.common.authz-module.html#__revision__,Variable ndg.security.common.authz.pdp.__revision__=ndg.security.common.authz.pdp-module.html#__revision__,Variable ndg.security.common.authz.pdp.browse.__revision__=ndg.security.common.authz.pdp.browse-module.html#__revision__,Variable ndg.security.common.authz.pdp.proftp.__revision__=ndg.security.common.authz.pdp.proftp-module.html#__revision__,Variable ndg.security.common.authz.pep.__revision__=ndg.security.common.authz.pep-module.html#__revision__,Variable ndg.security.common.ca.__revision__=ndg.security.common.ca-module.html#__revision__,Variable ndg.security.common.gatekeeper.__revision__=ndg.security.common.gatekeeper-module.html#__revision__,Variable ndg.security.common.logService.__revision__=ndg.security.common.logService-module.html#__revision__,Variable ndg.security.common.logService.log_services_server.__revision__=ndg.security.common.logService.log_services_server-module.html#__revision__,Variable ndg.security.common.m2CryptoSSLUtility.__revision__=ndg.security.common.m2CryptoSSLUtility-module.html#__revision__,Variable ndg.security.common.openssl.__revision__=ndg.security.common.openssl-module.html#__revision__,Variable ndg.security.common.pylons.security_util.__revision__=ndg.security.common.pylons.security_util-module.html#__revision__,Variable ndg.security.common.saml.__revision__=ndg.security.common.saml-module.html#__revision__,Variable ndg.security.common.sessionCookie.__revision__=ndg.security.common.sessionCookie-module.html#__revision__,Variable ndg.security.common.utils.ClassFactory.__revision__=ndg.security.common.utils.ClassFactory-module.html#__revision__,Variable ndg.security.common.utils.ConfigFileParsers.__revision__=ndg.security.common.utils.ConfigFileParsers-module.html#__revision__,Variable ndg.security.common.wssecurity.BaseSignatureHandler.__revision__=ndg.security.common.wssecurity.BaseSignatureHandler-module.html#__revision__,Variable ndg.security.common.wssecurity.__revision__=ndg.security.common.wssecurity-module.html#__revision__,Variable ndg.security.common.wssecurity.dom.__revision__=ndg.security.common.wssecurity.dom-module.html#__revision__,Variable ndg.security.common.wssecurity.etree.__revision__=ndg.security.common.wssecurity.etree-module.html#__revision__,Variable ndg.security.common.xmlsec.__revision__=ndg.security.common.xmlsec-module.html#__revision__,Variable ndg.security.common.xmlsec.dom.__revision__=ndg.security.common.xmlsec.dom-module.html#__revision__,Variable ndg.security.common.xmlsec.etree.__revision__=ndg.security.common.xmlsec.etree-module.html#__revision__,Variable ndg.security.common.zsi_utils.httpproxy.__revision__=ndg.security.common.zsi_utils.httpproxy-module.html#__revision__,Variable ndg.security.server.AttAuthority.__revision__=ndg.security.server.AttAuthority-module.html#__revision__,Variable ndg.security.server.Log.__revision__=ndg.security.server.Log-module.html#__revision__,Variable ndg.security.server.SessionMgr.__revision__=ndg.security.server.SessionMgr-module.html#__revision__,Variable ndg.security.server.__revision__=ndg.security.server-module.html#__revision__,Variable ndg.security.server.authenservice.MyProxy.__revision__=ndg.security.server.authenservice.MyProxy-module.html#__revision__,Variable ndg.security.server.authenservice.__revision__=ndg.security.server.authenservice-module.html#__revision__,Variable ndg.security.server.authenservice.session_mgr_my_proxy_client.__revision__=ndg.security.server.authenservice.session_mgr_my_proxy_client-module.html#__revision__,Variable ndg.security.server.ca.__revision__=ndg.security.server.ca-module.html#__revision__,Variable ndg.security.server.conf.__revision__=ndg.security.server.conf-module.html#__revision__,Variable ndg.security.server.conf.attCertLog.__revision__=ndg.security.server.conf.attCertLog-module.html#__revision__,Variable ndg.security.server.conf.certs.__revision__=ndg.security.server.conf.certs-module.html#__revision__,Variable ndg.security.server.conf.certs.ca.__revision__=ndg.security.server.conf.certs.ca-module.html#__revision__,Variable ndg.security.server.conf.userRoles.__revision__=ndg.security.server.conf.userRoles-module.html#__revision__,Variable ndg.security.server.initCredReposDb.__revision__=ndg.security.server.initCredReposDb-module.html#__revision__,Variable ndg.security.server.log.__revision__=ndg.security.server.log-module.html#__revision__,Variable ndg.security.server.pylons.container.lib.openid_provider_util.__revision__=ndg.security.server.pylons.container.lib.openid_provider_util-module.html#__revision__,Variable ndg.security.server.share.__revision__=ndg.security.server.share-module.html#__revision__,Variable ndg.security.server.twisted.__revision__=ndg.security.server.twisted-module.html#__revision__,Variable ndg.security.server.wsgi.openid_provider.__revision__=ndg.security.server.wsgi.openid_provider-module.html#__revision__,Variable ndg.security.server.wsgi.soap.__revision__=ndg.security.server.wsgi.soap-module.html#__revision__,Variable ndg.security.server.wsgi.wssecurity.__revision__=ndg.security.server.wsgi.wssecurity-module.html#__revision__,Variable ndg.security.test.Log.LogTest.__revision__=ndg.security.test.Log.LogTest-module.html#__revision__,Variable ndg.security.test.Log.__revision__=ndg.security.test.Log-module.html#__revision__,Variable ndg.security.test.X509.X509Test.__revision__=ndg.security.test.X509.X509Test-module.html#__revision__,Variable ndg.security.test.X509.__revision__=ndg.security.test.X509-module.html#__revision__,Variable ndg.security.test.XMLSecDoc.__revision__=ndg.security.test.XMLSecDoc-module.html#__revision__,Variable ndg.security.test.XMLSecDoc.xmlSecDocTest.__revision__=ndg.security.test.XMLSecDoc.xmlSecDocTest-module.html#__revision__,Variable ndg.security.test.__revision__=ndg.security.test-module.html#__revision__,Variable ndg.security.test.attAuthority.AttAuthorityClientTest.__revision__=ndg.security.test.attAuthority.AttAuthorityClientTest-module.html#__revision__,Variable ndg.security.test.attAuthority.__revision__=ndg.security.test.attAuthority-module.html#__revision__,Variable ndg.security.test.attAuthority.attCertLog.__revision__=ndg.security.test.attAuthority.attCertLog-module.html#__revision__,Variable ndg.security.test.attAuthority.ca.__revision__=ndg.security.test.attAuthority.ca-module.html#__revision__,Variable ndg.security.test.attAuthority.siteAServer.__revision__=ndg.security.test.attAuthority.siteAServer-module.html#__revision__,Variable ndg.security.test.attAuthority.siteAUserRoles.__revision__=ndg.security.test.attAuthority.siteAUserRoles-module.html#__revision__,Variable ndg.security.test.attAuthority.siteBServer.__revision__=ndg.security.test.attAuthority.siteBServer-module.html#__revision__,Variable ndg.security.test.attAuthority.siteBUserRoles.__revision__=ndg.security.test.attAuthority.siteBUserRoles-module.html#__revision__,Variable ndg.security.test.attCert.AttCertTest.__revision__=ndg.security.test.attCert.AttCertTest-module.html#__revision__,Variable ndg.security.test.attCert.__revision__=ndg.security.test.attCert-module.html#__revision__,Variable ndg.security.test.authenservice.__revision__=ndg.security.test.authenservice-module.html#__revision__,Variable ndg.security.test.authenservice.test_authen_service.__revision__=ndg.security.test.authenservice.test_authen_service-module.html#__revision__,Variable ndg.security.test.authz.pdp.testProftPDP.__revision__=ndg.security.test.authz.pdp.testProftPDP-module.html#__revision__,Variable ndg.security.test.ca.__revision__=ndg.security.test.ca-module.html#__revision__,Variable ndg.security.test.ca.caClientTest.__revision__=ndg.security.test.ca.caClientTest-module.html#__revision__,Variable ndg.security.test.myProxy.MyProxyClientTest.__revision__=ndg.security.test.myProxy.MyProxyClientTest-module.html#__revision__,Variable ndg.security.test.myProxy.__revision__=ndg.security.test.myProxy-module.html#__revision__,Variable ndg.security.test.saml.__revision__=ndg.security.test.saml-module.html#__revision__,Variable ndg.security.test.sessionCookie.SessionCookieTest.__revision__=ndg.security.test.sessionCookie.SessionCookieTest-module.html#__revision__,Variable ndg.security.test.sessionCookie.__revision__=ndg.security.test.sessionCookie-module.html#__revision__,Variable ndg.security.test.sessionMgr.__revision__=ndg.security.test.sessionMgr-module.html#__revision__,Variable ndg.security.test.sessionMgr.ca.__revision__=ndg.security.test.sessionMgr.ca-module.html#__revision__,Variable ndg.security.test.sessionMgr.test.__revision__=ndg.security.test.sessionMgr.test-module.html#__revision__,Variable ndg.security.test.sessionMgrClient.SessionMgrClientTest.__revision__=ndg.security.test.sessionMgrClient.SessionMgrClientTest-module.html#__revision__,Variable ndg.security.test.sessionMgrClient.__revision__=ndg.security.test.sessionMgrClient-module.html#__revision__,Variable ndg.security.test.sessionMgrClient.ca.__revision__=ndg.security.test.sessionMgrClient.ca-module.html#__revision__,Variable ndg.security.test.sessionMgrClient.server.__revision__=ndg.security.test.sessionMgrClient.server-module.html#__revision__,Variable ndg.security.test.wsSecurity.__revision__=ndg.security.test.wsSecurity-module.html#__revision__,Variable ndg.security.test.wsSecurity.client.__revision__=ndg.security.test.wsSecurity.client-module.html#__revision__,Variable ndg.security.test.wsSecurity.server.__revision__=ndg.security.test.wsSecurity.server-module.html#__revision__,Variable ndg.security.test.xmlsec.__revision__=ndg.security.test.xmlsec-module.html#__revision__,Variable ndg.security.test.xmlsec.dom.__revision__=ndg.security.test.xmlsec.dom-module.html#__revision__,Variable ndg.security.test.xmlsec.etree.test_etree.__revision__=ndg.security.test.xmlsec.etree.test_etree-module.html#__revision__"><a title="ndg.__revision__
74ndg.security.__revision__
75ndg.security.__revision__
76ndg.security.client.LogClient.__revision__
77ndg.security.client.SimpleCAClient.__revision__
78ndg.security.client.__revision__
79ndg.security.client.ndgSessionClient.__revision__
80ndg.security.common.AttAuthority.__revision__
81ndg.security.common.AttCert.__revision__
82ndg.security.common.CredWallet.__revision__
83ndg.security.common.SQLObject.__revision__
84ndg.security.common.SecurityCGI.__revision__
85ndg.security.common.SessionMgr.__revision__
86ndg.security.common.X509.__revision__
87ndg.security.common.XMLSec.__revision__
88ndg.security.common.__revision__
89ndg.security.common.authz.__revision__
90ndg.security.common.authz.pdp.__revision__
91ndg.security.common.authz.pdp.browse.__revision__
92ndg.security.common.authz.pdp.proftp.__revision__
93ndg.security.common.authz.pep.__revision__
94ndg.security.common.ca.__revision__
95ndg.security.common.gatekeeper.__revision__
96ndg.security.common.logService.__revision__
97ndg.security.common.logService.log_services_server.__revision__
98ndg.security.common.m2CryptoSSLUtility.__revision__
99ndg.security.common.openssl.__revision__
100ndg.security.common.pylons.security_util.__revision__
101ndg.security.common.saml.__revision__
102ndg.security.common.sessionCookie.__revision__
103ndg.security.common.utils.ClassFactory.__revision__
104ndg.security.common.utils.ConfigFileParsers.__revision__
105ndg.security.common.wssecurity.BaseSignatureHandler.__revision__
106ndg.security.common.wssecurity.__revision__
107ndg.security.common.wssecurity.dom.__revision__
108ndg.security.common.wssecurity.etree.__revision__
109ndg.security.common.xmlsec.__revision__
110ndg.security.common.xmlsec.dom.__revision__
111ndg.security.common.xmlsec.etree.__revision__
112ndg.security.common.zsi_utils.httpproxy.__revision__
113ndg.security.server.AttAuthority.__revision__
114ndg.security.server.Log.__revision__
115ndg.security.server.SessionMgr.__revision__
116ndg.security.server.__revision__
117ndg.security.server.authenservice.MyProxy.__revision__
118ndg.security.server.authenservice.__revision__
119ndg.security.server.authenservice.session_mgr_my_proxy_client.__revision__
120ndg.security.server.ca.__revision__
121ndg.security.server.conf.__revision__
122ndg.security.server.conf.attCertLog.__revision__
123ndg.security.server.conf.certs.__revision__
124ndg.security.server.conf.certs.ca.__revision__
125ndg.security.server.conf.userRoles.__revision__
126ndg.security.server.initCredReposDb.__revision__
127ndg.security.server.log.__revision__
128ndg.security.server.pylons.container.lib.openid_provider_util.__revision__
129ndg.security.server.share.__revision__
130ndg.security.server.twisted.__revision__
131ndg.security.server.wsgi.openid_provider.__revision__
132ndg.security.server.wsgi.soap.__revision__
133ndg.security.server.wsgi.wssecurity.__revision__
134ndg.security.test.Log.LogTest.__revision__
135ndg.security.test.Log.__revision__
136ndg.security.test.X509.X509Test.__revision__
137ndg.security.test.X509.__revision__
138ndg.security.test.XMLSecDoc.__revision__
139ndg.security.test.XMLSecDoc.xmlSecDocTest.__revision__
140ndg.security.test.__revision__
141ndg.security.test.attAuthority.AttAuthorityClientTest.__revision__
142ndg.security.test.attAuthority.__revision__
143ndg.security.test.attAuthority.attCertLog.__revision__
144ndg.security.test.attAuthority.ca.__revision__
145ndg.security.test.attAuthority.siteAServer.__revision__
146ndg.security.test.attAuthority.siteAUserRoles.__revision__
147ndg.security.test.attAuthority.siteBServer.__revision__
148ndg.security.test.attAuthority.siteBUserRoles.__revision__
149ndg.security.test.attCert.AttCertTest.__revision__
150ndg.security.test.attCert.__revision__
151ndg.security.test.authenservice.__revision__
152ndg.security.test.authenservice.test_authen_service.__revision__
153ndg.security.test.authz.pdp.testProftPDP.__revision__
154ndg.security.test.ca.__revision__
155ndg.security.test.ca.caClientTest.__revision__
156ndg.security.test.myProxy.MyProxyClientTest.__revision__
157ndg.security.test.myProxy.__revision__
158ndg.security.test.saml.__revision__
159ndg.security.test.sessionCookie.SessionCookieTest.__revision__
160ndg.security.test.sessionCookie.__revision__
161ndg.security.test.sessionMgr.__revision__
162ndg.security.test.sessionMgr.ca.__revision__
163ndg.security.test.sessionMgr.test.__revision__
164ndg.security.test.sessionMgrClient.SessionMgrClientTest.__revision__
165ndg.security.test.sessionMgrClient.__revision__
166ndg.security.test.sessionMgrClient.ca.__revision__
167ndg.security.test.sessionMgrClient.server.__revision__
168ndg.security.test.wsSecurity.__revision__
169ndg.security.test.wsSecurity.client.__revision__
170ndg.security.test.wsSecurity.server.__revision__
171ndg.security.test.xmlsec.__revision__
172ndg.security.test.xmlsec.dom.__revision__
173ndg.security.test.xmlsec.etree.test_etree.__revision__" class="py-name" href="#" onclick="return doclink('link-0', '__revision__', 'link-0');">__revision__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'$Id: XMLSec.py 4061 2008-07-23 14:58:43Z pjkersha $'</tt> </tt>
174<a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"> </tt>
175<a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"> </tt>
176<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Variable ZSI.schema.SchemaInstanceType.types=ZSI.schema.SchemaInstanceType-class.html#types"><a title="ZSI.schema.SchemaInstanceType.types" class="py-name" href="#" onclick="return doclink('link-1', 'types', 'link-1');">types</a></tt> </tt>
177<a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
178<a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"> </tt>
179<a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-comment"># For removal of BEGIN and END CERTIFICATE markers from X.509 certs</tt> </tt>
180<a name="L19"></a><tt class="py-lineno"> 19</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
181<a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"> </tt>
182<a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"><tt class="py-comment"># Include for re-parsing doc ready for canonicalization in sign method - see</tt> </tt>
183<a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># associated note</tt> </tt>
184<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Variable ndg.security.test.xmlsec.etree.parsetest.xml=ndg.security.test.xmlsec.etree.parsetest-module.html#xml"><a title="ndg.security.test.xmlsec.etree.parsetest.xml" class="py-name" href="#" onclick="return doclink('link-2', 'xml', 'link-2');">xml</a></tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Module ndg.security.common.wssecurity.dom=ndg.security.common.wssecurity.dom-module.html,Module ndg.security.common.xmlsec.dom=ndg.security.common.xmlsec.dom-module.html,Package ndg.security.test.xmlsec.dom=ndg.security.test.xmlsec.dom-module.html"><a title="ndg.security.common.wssecurity.dom
185ndg.security.common.xmlsec.dom
186ndg.security.test.xmlsec.dom" class="py-name" href="#" onclick="return doclink('link-3', 'dom', 'link-3');">dom</a></tt><tt class="py-op">.</tt><tt class="py-name">ext</tt><tt class="py-op">.</tt><tt class="py-name">reader</tt><tt class="py-op">.</tt><tt class="py-name">PyExpat</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Reader</tt> </tt>
187<a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">Ft</tt><tt class="py-op">.</tt><tt class="py-name">Xml</tt><tt class="py-op">.</tt><tt class="py-name">Domlette</tt> <tt class="py-keyword">import</tt> <tt class="py-name">NonvalidatingReader</tt> </tt>
188<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line"> </tt>
189<a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line"><tt class="py-comment"># Use to find parent node when parsing docs</tt> </tt>
190<a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="ndg.security.test.xmlsec.etree.parsetest.xml" class="py-name" href="#" onclick="return doclink('link-4', 'xml', 'link-2');">xml</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="ndg.security.common.wssecurity.dom
191ndg.security.common.xmlsec.dom
192ndg.security.test.xmlsec.dom" class="py-name" href="#" onclick="return doclink('link-5', 'dom', 'link-3');">dom</a></tt><tt class="py-op">.</tt><tt class="py-name">Element</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Element</tt> </tt>
193<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"> </tt>
194<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt id="link-6" class="py-name" targets="Variable ndg.security.common.XMLSec.getParentNode=ndg.security.common.XMLSec-module.html#getParentNode"><a title="ndg.security.common.XMLSec.getParentNode" class="py-name" href="#" onclick="return doclink('link-6', 'getParentNode', 'link-6');">getParentNode</a></tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt id="link-7" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.docNode=ndg.security.common.XMLSec.XMLSecDoc-class.html#docNode"><a title="ndg.security.common.XMLSec.XMLSecDoc.docNode" class="py-name" href="#" onclick="return doclink('link-7', 'docNode', 'link-7');">docNode</a></tt><tt class="py-op">:</tt> <tt class="py-op">[</tt><tt class="py-name">elem</tt> <tt class="py-keyword">for</tt> <tt class="py-name">elem</tt> <tt class="py-keyword">in</tt> <tt id="link-8" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.docNode" class="py-name" href="#" onclick="return doclink('link-8', 'docNode', 'link-7');">docNode</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Variable ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.childNodes=ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy-class.html#childNodes"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.childNodes" class="py-name" href="#" onclick="return doclink('link-9', 'childNodes', 'link-9');">childNodes</a></tt> \ </tt>
195<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line">                                 <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">elem</tt><tt class="py-op">,</tt> <tt class="py-name">Element</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
196<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"> </tt>
197<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-comment"># Digest and signature/verify</tt> </tt>
198<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">from</tt> <tt class="py-name">sha</tt> <tt class="py-keyword">import</tt> <tt class="py-name">sha</tt> </tt>
199<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">M2Crypto</tt> <tt class="py-keyword">import</tt> <tt id="link-10" class="py-name" targets="Variable ZSI.wstools.Namespaces.OASIS.X509TOKEN.X509=ZSI.wstools.Namespaces.OASIS.X509TOKEN-class.html#X509,Module ndg.security.common.X509=ndg.security.common.X509-module.html,Package ndg.security.test.X509=ndg.security.test.X509-module.html"><a title="ZSI.wstools.Namespaces.OASIS.X509TOKEN.X509
200ndg.security.common.X509
201ndg.security.test.X509" class="py-name" href="#" onclick="return doclink('link-10', 'X509', 'link-10');">X509</a></tt><tt class="py-op">,</tt> <tt class="py-name">BIO</tt><tt class="py-op">,</tt> <tt class="py-name">RSA</tt> </tt>
202<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-11" class="py-name" targets="Package ndg=ndg-module.html,Class ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg=ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg-class.html,Package ndg.security.client.ssoclient.ssoclient.templates.ndg=ndg.security.client.ssoclient.ssoclient.templates.ndg-module.html,Package ndg.security.server.pylons.container.templates.bak.ndg=ndg.security.server.pylons.container.templates.bak.ndg-module.html,Package ndg.security.server.pylons.container.templates.ndg=ndg.security.server.pylons.container.templates.ndg-module.html,Class ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg=ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg-class.html,Package ndg.security.server.sso.sso.templates.ndg=ndg.security.server.sso.sso.templates.ndg-module.html"><a title="ndg
203ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg
204ndg.security.client.ssoclient.ssoclient.templates.ndg
205ndg.security.server.pylons.container.templates.bak.ndg
206ndg.security.server.pylons.container.templates.ndg
207ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg
208ndg.security.server.sso.sso.templates.ndg" class="py-name" href="#" onclick="return doclink('link-11', 'ndg', 'link-11');">ndg</a></tt><tt class="py-op">.</tt><tt id="link-12" class="py-name" targets="Package ndg.security=ndg.security-module.html,Package ndg.security=ndg.security-module.html,Class ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg.security=ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg.security-class.html,Package ndg.security.client.ssoclient.ssoclient.templates.ndg.security=ndg.security.client.ssoclient.ssoclient.templates.ndg.security-module.html,Package ndg.security.server.pylons.container.templates.bak.ndg.security=ndg.security.server.pylons.container.templates.bak.ndg.security-module.html,Package ndg.security.server.pylons.container.templates.ndg.security=ndg.security.server.pylons.container.templates.ndg.security-module.html,Class ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg.security=ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg.security-class.html,Package ndg.security.server.sso.sso.templates.ndg.security=ndg.security.server.sso.sso.templates.ndg.security-module.html"><a title="ndg.security
209ndg.security
210ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg.security
211ndg.security.client.ssoclient.ssoclient.templates.ndg.security
212ndg.security.server.pylons.container.templates.bak.ndg.security
213ndg.security.server.pylons.container.templates.ndg.security
214ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg.security
215ndg.security.server.sso.sso.templates.ndg.security" class="py-name" href="#" onclick="return doclink('link-12', 'security', 'link-12');">security</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Class ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg.security.common=ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg.security.common-class.html,Package ndg.security.common=ndg.security.common-module.html,Class ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg.security.common=ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg.security.common-class.html"><a title="ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.ndg.security.common
216ndg.security.common
217ndg.security.server.sso.sso.config.ssoServiceMiddleware.ndg.security.common" class="py-name" href="#" onclick="return doclink('link-13', 'common', 'link-13');">common</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="ZSI.wstools.Namespaces.OASIS.X509TOKEN.X509
218ndg.security.common.X509
219ndg.security.test.X509" class="py-name" href="#" onclick="return doclink('link-14', 'X509', 'link-10');">X509</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Function ndg.security.common.X509.X509CertRead()=ndg.security.common.X509-module.html#X509CertRead"><a title="ndg.security.common.X509.X509CertRead" class="py-name" href="#" onclick="return doclink('link-15', 'X509CertRead', 'link-15');">X509CertRead</a></tt><tt class="py-op">,</tt> <tt id="link-16" class="py-name" targets="Class ndg.security.common.X509.X509Stack=ndg.security.common.X509.X509Stack-class.html"><a title="ndg.security.common.X509.X509Stack" class="py-name" href="#" onclick="return doclink('link-16', 'X509Stack', 'link-16');">X509Stack</a></tt> </tt>
220<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">base64</tt> </tt>
221<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"> </tt>
222<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-comment"># Canonicalization</tt> </tt>
223<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">from</tt> <tt class="py-name">ZSI</tt><tt class="py-op">.</tt><tt class="py-name">wstools</tt><tt class="py-op">.</tt><tt class="py-name">c14n</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Canonicalize</tt> </tt>
224<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-17" class="py-name"><a title="ndg.security.test.xmlsec.etree.parsetest.xml" class="py-name" href="#" onclick="return doclink('link-17', 'xml', 'link-2');">xml</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="ndg.security.common.wssecurity.dom
225ndg.security.common.xmlsec.dom
226ndg.security.test.xmlsec.dom" class="py-name" href="#" onclick="return doclink('link-18', 'dom', 'link-3');">dom</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">Node</tt> </tt>
227<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="ndg.security.test.xmlsec.etree.parsetest.xml" class="py-name" href="#" onclick="return doclink('link-19', 'xml', 'link-2');">xml</a></tt><tt class="py-op">.</tt><tt class="py-name">xpath</tt><tt class="py-op">.</tt><tt class="py-name">Context</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Context</tt> </tt>
228<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-20" class="py-name"><a title="ndg.security.test.xmlsec.etree.parsetest.xml" class="py-name" href="#" onclick="return doclink('link-20', 'xml', 'link-2');">xml</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">xpath</tt> </tt>
229<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"> </tt>
230<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">ZSI</tt><tt class="py-op">.</tt><tt class="py-name">wstools</tt><tt class="py-op">.</tt><tt class="py-name">Namespaces</tt> <tt class="py-keyword">import</tt> <tt class="py-name">DSIG</tt><tt class="py-op">,</tt> <tt class="py-name">XMLNS</tt> </tt>
231<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"> </tt>
232<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line">     </tt>
233<a name="getElements"></a><div id="getElements-def"><a name="L47"></a><tt class="py-lineno"> 47</tt> <a class="py-toggle" href="#" id="getElements-toggle" onclick="return toggle('getElements');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec-module.html#getElements">getElements</a><tt class="py-op">(</tt><tt class="py-param">node</tt><tt class="py-op">,</tt> <tt class="py-param">nameList</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
234</div><div id="getElements-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="getElements-expanded"><a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line">    <tt class="py-docstring">'''DOM Helper function for getting child elements from a given node'''</tt> </tt>
235<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">    <tt class="py-comment"># Avoid sub-string matches</tt> </tt>
236<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-name">nameList</tt> <tt class="py-op">=</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">nameList</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">[</tt><tt class="py-name">nameList</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">nameList</tt> </tt>
237<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">n</tt> <tt class="py-keyword">for</tt> <tt class="py-name">n</tt> <tt class="py-keyword">in</tt> <tt class="py-name">node</tt><tt class="py-op">.</tt><tt id="link-21" class="py-name"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.childNodes" class="py-name" href="#" onclick="return doclink('link-21', 'childNodes', 'link-9');">childNodes</a></tt> <tt class="py-keyword">if</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">n</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Variable ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.localName=ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy-class.html#localName"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.localName" class="py-name" href="#" onclick="return doclink('link-22', 'localName', 'link-22');">localName</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">nameList</tt><tt class="py-op">]</tt> </tt>
238</div><a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"> </tt>
239<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"> </tt>
240<a name="XMLSecDocError"></a><div id="XMLSecDocError-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="XMLSecDocError-toggle" onclick="return toggle('XMLSecDocError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDocError-class.html">XMLSecDocError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
241</div><div id="XMLSecDocError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="XMLSecDocError-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">    <tt class="py-docstring">"""Exception handling for NDG XML Security class."""</tt> </tt>
242</div><a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"> </tt>
243<a name="SignError"></a><div id="SignError-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="SignError-toggle" onclick="return toggle('SignError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.SignError-class.html">SignError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>   </tt>
244</div><a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line">    <tt class="py-docstring">"""Raised from sign method if an error occurs generating the signature"""</tt> </tt>
245</div><a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line">      </tt>
246<a name="VerifyError"></a><div id="VerifyError-def"><a name="L60"></a><tt class="py-lineno"> 60</tt> <a class="py-toggle" href="#" id="VerifyError-toggle" onclick="return toggle('VerifyError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.VerifyError-class.html">VerifyError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
247</div><div id="VerifyError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="VerifyError-expanded"><a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">    <tt class="py-docstring">"""Raised from verify method if an error occurs"""</tt> </tt>
248</div><a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line">    </tt>
249<a name="InvalidSignature"></a><div id="InvalidSignature-def"><a name="L63"></a><tt class="py-lineno"> 63</tt> <a class="py-toggle" href="#" id="InvalidSignature-toggle" onclick="return toggle('InvalidSignature');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.InvalidSignature-class.html">InvalidSignature</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
250</div><div id="InvalidSignature-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidSignature-expanded"><a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line">    <tt class="py-docstring">"""Raised from verify method for an invalid signature"""</tt> </tt>
251</div><a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"> </tt>
252<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"> </tt>
253<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-comment">#_____________________________________________________________________________</tt> </tt>
254<a name="XMLSecDoc"></a><div id="XMLSecDoc-def"><a name="L68"></a><tt class="py-lineno"> 68</tt> <a class="py-toggle" href="#" id="XMLSecDoc-toggle" onclick="return toggle('XMLSecDoc');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html">XMLSecDoc</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
255</div><div id="XMLSecDoc-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="XMLSecDoc-expanded"><a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">    <tt class="py-docstring">"""Implements XML Signature and XML Encryption for a Document.</tt> </tt>
256<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-docstring">    </tt> </tt>
257<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-docstring">    @type __beginCert: string</tt> </tt>
258<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"><tt class="py-docstring">    @param __beginCert: delimiter for beginning of base64 encoded portion of</tt> </tt>
259<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-docstring">    a PEM encoded X.509 certificate</tt> </tt>
260<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring">    @type __endCert: string</tt> </tt>
261<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-docstring">    @cvar: __endCert: equivalent end delimiter</tt> </tt>
262<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-docstring">    </tt> </tt>
263<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt class="py-docstring">    @type __x509CertPat: regular expression pattern object</tt> </tt>
264<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring">    @cvar __x509CertPat: regular expression for extracting the base64 encoded </tt> </tt>
265<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring">    portion of a PEM encoded X.509 certificate"""</tt> </tt>
266<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line">     </tt>
267<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line">    <tt id="link-23" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.__beginCert=ndg.security.common.XMLSec.XMLSecDoc-class.html#__beginCert"><a title="ndg.security.common.XMLSec.XMLSecDoc.__beginCert" class="py-name" href="#" onclick="return doclink('link-23', '__beginCert', 'link-23');">__beginCert</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'-----BEGIN CERTIFICATE-----\n'</tt> </tt>
268<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">    <tt id="link-24" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.__endCert=ndg.security.common.XMLSec.XMLSecDoc-class.html#__endCert"><a title="ndg.security.common.XMLSec.XMLSecDoc.__endCert" class="py-name" href="#" onclick="return doclink('link-24', '__endCert', 'link-24');">__endCert</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'\n-----END CERTIFICATE-----'</tt> </tt>
269<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">    <tt id="link-25" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.__x509CertPat=ndg.security.common.XMLSec.XMLSecDoc-class.html#__x509CertPat"><a title="ndg.security.common.XMLSec.XMLSecDoc.__x509CertPat" class="py-name" href="#" onclick="return doclink('link-25', '__x509CertPat', 'link-25');">__x509CertPat</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt id="link-26" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__beginCert" class="py-name" href="#" onclick="return doclink('link-26', '__beginCert', 'link-23');">__beginCert</a></tt> <tt class="py-op">+</tt> \ </tt>
270<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">                               <tt class="py-string">'?(.*?)\n?-----END CERTIFICATE-----'</tt><tt class="py-op">,</tt> </tt>
271<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">                               <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">S</tt><tt class="py-op">)</tt> </tt>
272<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"> </tt>
273<a name="XMLSecDoc.__init__"></a><div id="XMLSecDoc.__init__-def"><a name="L87"></a><tt class="py-lineno"> 87</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__init__-toggle" onclick="return toggle('XMLSecDoc.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt>
274<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">                 <tt class="py-param">filePath</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
275<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">                 <tt class="py-param">signingKeyFilePath</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
276<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line">                 <tt class="py-param">signingKeyPwd</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
277<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">                 <tt class="py-param">certFilePathList</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
278<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">                 <tt class="py-param">encrCertFilePath</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
279<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">                 <tt class="py-param">encrPriKeyFilePath</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
280</div><div id="XMLSecDoc.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__init__-expanded"><a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"> </tt>
281<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">        <tt class="py-docstring">"""Initialisation -</tt> </tt>
282<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt class="py-docstring">            </tt> </tt>
283<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-docstring">        @param filePath:            file path for document</tt> </tt>
284<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-docstring">        @param signingKeyFilePath:  file path for private key used in </tt> </tt>
285<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"><tt class="py-docstring">        signature</tt> </tt>
286<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-docstring">        @param certFilePathList:    list of certificates used in verification </tt> </tt>
287<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"><tt class="py-docstring">        of a signed document</tt> </tt>
288<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"><tt class="py-docstring">        @param encrCertFilePath:    file path for X.509 cert used to encrypt</tt> </tt>
289<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line"><tt class="py-docstring">        the document - see note for __setCertFilePathList() method</tt> </tt>
290<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"><tt class="py-docstring">        @param encrPriKeyFilePath:  file path for private key used to decrypt</tt> </tt>
291<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"><tt class="py-docstring">        previously encrypted document"""</tt> </tt>
292<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"> </tt>
293<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__filePath</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
294<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__signingKeyFilePath</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
295<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
296<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__encrCertFilePath</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
297<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__encrPriKeyFilePath</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
298<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
299<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"> </tt>
300<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line"> </tt>
301<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-27" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.filePath=ndg.security.common.XMLSec.XMLSecDoc-class.html#filePath,Variable ndg.security.common.openssl.OpenSSLConfig.filePath=ndg.security.common.openssl.OpenSSLConfig-class.html#filePath,Variable ndg.security.common.xmlsec.etree.XMLSecDoc.filePath=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#filePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
302ndg.security.common.openssl.OpenSSLConfig.filePath
303ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-27', 'filePath', 'link-27');">filePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
304<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__setFilePath()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__setFilePath,Method ndg.security.common.openssl.OpenSSLConfig.__setFilePath()=ndg.security.common.openssl.OpenSSLConfig-class.html#__setFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setFilePath
305ndg.security.common.openssl.OpenSSLConfig.__setFilePath" class="py-name" href="#" onclick="return doclink('link-28', '__setFilePath', 'link-28');">__setFilePath</a></tt><tt class="py-op">(</tt><tt id="link-29" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
306ndg.security.common.openssl.OpenSSLConfig.filePath
307ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-29', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">)</tt> </tt>
308<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"> </tt>
309<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">        <tt class="py-comment"># Private key file to be used to sign the document</tt> </tt>
310<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">if</tt> <tt id="link-30" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.signingKeyFilePath=ndg.security.common.XMLSec.XMLSecDoc-class.html#signingKeyFilePath,Variable ndg.security.common.xmlsec.etree.XMLSecDoc.signingKeyFilePath=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#signingKeyFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.signingKeyFilePath
311ndg.security.common.xmlsec.etree.XMLSecDoc.signingKeyFilePath" class="py-name" href="#" onclick="return doclink('link-30', 'signingKeyFilePath', 'link-30');">signingKeyFilePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
312<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__setSigningKeyFilePath()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__setSigningKeyFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setSigningKeyFilePath" class="py-name" href="#" onclick="return doclink('link-31', '__setSigningKeyFilePath', 'link-31');">__setSigningKeyFilePath</a></tt><tt class="py-op">(</tt><tt id="link-32" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.signingKeyFilePath
313ndg.security.common.xmlsec.etree.XMLSecDoc.signingKeyFilePath" class="py-name" href="#" onclick="return doclink('link-32', 'signingKeyFilePath', 'link-30');">signingKeyFilePath</a></tt><tt class="py-op">)</tt> </tt>
314<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"> </tt>
315<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">        <tt class="py-comment"># Password proetcting Private key used to sign the document - password</tt> </tt>
316<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># may be None</tt> </tt>
317<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__setSigningKeyPwd()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__setSigningKeyPwd"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setSigningKeyPwd" class="py-name" href="#" onclick="return doclink('link-33', '__setSigningKeyPwd', 'link-33');">__setSigningKeyPwd</a></tt><tt class="py-op">(</tt><tt id="link-34" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.signingKeyPwd=ndg.security.common.XMLSec.XMLSecDoc-class.html#signingKeyPwd,Variable ndg.security.common.xmlsec.etree.XMLSecDoc.signingKeyPwd=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#signingKeyPwd"><a title="ndg.security.common.XMLSec.XMLSecDoc.signingKeyPwd
318ndg.security.common.xmlsec.etree.XMLSecDoc.signingKeyPwd" class="py-name" href="#" onclick="return doclink('link-34', 'signingKeyPwd', 'link-34');">signingKeyPwd</a></tt><tt class="py-op">)</tt> </tt>
319<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"> </tt>
320<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">        <tt class="py-comment"># Public key file to be used to encrypt document</tt> </tt>
321<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">if</tt> <tt id="link-35" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.encrCertFilePath=ndg.security.common.XMLSec.XMLSecDoc-class.html#encrCertFilePath,Variable ndg.security.common.xmlsec.etree.XMLSecDoc.encrCertFilePath=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#encrCertFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.encrCertFilePath
322ndg.security.common.xmlsec.etree.XMLSecDoc.encrCertFilePath" class="py-name" href="#" onclick="return doclink('link-35', 'encrCertFilePath', 'link-35');">encrCertFilePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
323<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__setEncrCertFilePath()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__setEncrCertFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setEncrCertFilePath" class="py-name" href="#" onclick="return doclink('link-36', '__setEncrCertFilePath', 'link-36');">__setEncrCertFilePath</a></tt><tt class="py-op">(</tt><tt id="link-37" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.encrCertFilePath
324ndg.security.common.xmlsec.etree.XMLSecDoc.encrCertFilePath" class="py-name" href="#" onclick="return doclink('link-37', 'encrCertFilePath', 'link-35');">encrCertFilePath</a></tt><tt class="py-op">)</tt> </tt>
325<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"> </tt>
326<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line">        <tt class="py-comment"># Private key file to be used to decrypt document</tt> </tt>
327<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">if</tt> <tt id="link-38" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.encrPriKeyFilePath=ndg.security.common.XMLSec.XMLSecDoc-class.html#encrPriKeyFilePath,Variable ndg.security.common.xmlsec.etree.XMLSecDoc.encrPriKeyFilePath=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#encrPriKeyFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.encrPriKeyFilePath
328ndg.security.common.xmlsec.etree.XMLSecDoc.encrPriKeyFilePath" class="py-name" href="#" onclick="return doclink('link-38', 'encrPriKeyFilePath', 'link-38');">encrPriKeyFilePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
329<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__setEncrPriKeyFilePath()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__setEncrPriKeyFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setEncrPriKeyFilePath" class="py-name" href="#" onclick="return doclink('link-39', '__setEncrPriKeyFilePath', 'link-39');">__setEncrPriKeyFilePath</a></tt><tt class="py-op">(</tt><tt id="link-40" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.encrPriKeyFilePath
330ndg.security.common.xmlsec.etree.XMLSecDoc.encrPriKeyFilePath" class="py-name" href="#" onclick="return doclink('link-40', 'encrPriKeyFilePath', 'link-38');">encrPriKeyFilePath</a></tt><tt class="py-op">)</tt> </tt>
331<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"> </tt>
332<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">        <tt class="py-comment"># This may be either of:</tt> </tt>
333<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># 1) Certificate file to be used for signing document</tt> </tt>
334<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># 2) list of certificates used to verify a signed document</tt> </tt>
335<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">if</tt> <tt id="link-41" class="py-name" targets="Variable ndg.security.common.XMLSec.XMLSecDoc.certFilePathList=ndg.security.common.XMLSec.XMLSecDoc-class.html#certFilePathList,Variable ndg.security.common.xmlsec.etree.XMLSecDoc.certFilePathList=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#certFilePathList"><a title="ndg.security.common.XMLSec.XMLSecDoc.certFilePathList
336ndg.security.common.xmlsec.etree.XMLSecDoc.certFilePathList" class="py-name" href="#" onclick="return doclink('link-41', 'certFilePathList', 'link-41');">certFilePathList</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
337<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__setCertFilePathList()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__setCertFilePathList"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setCertFilePathList" class="py-name" href="#" onclick="return doclink('link-42', '__setCertFilePathList', 'link-42');">__setCertFilePathList</a></tt><tt class="py-op">(</tt><tt id="link-43" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.certFilePathList
338ndg.security.common.xmlsec.etree.XMLSecDoc.certFilePathList" class="py-name" href="#" onclick="return doclink('link-43', 'certFilePathList', 'link-41');">certFilePathList</a></tt><tt class="py-op">)</tt> </tt>
339</div><a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">         </tt>
340<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">         </tt>
341<a name="XMLSecDoc.__str__"></a><div id="XMLSecDoc.__str__-def"><a name="L141"></a><tt class="py-lineno">141</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__str__-toggle" onclick="return toggle('XMLSecDoc.__str__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
342</div><div id="XMLSecDoc.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__str__-expanded"><a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">        <tt class="py-docstring">"""String representation of doc - only applies if doc had been read</tt> </tt>
343<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"><tt class="py-docstring">        or parsed"""</tt> </tt>
344<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name" targets="Method ndg.security.common.AttCert.AttCert.toString()=ndg.security.common.AttCert.AttCert-class.html#toString,Method ndg.security.common.X509.X509Cert.toString()=ndg.security.common.X509.X509Cert-class.html#toString,Method ndg.security.common.XMLSec.XMLSecDoc.toString()=ndg.security.common.XMLSec.XMLSecDoc-class.html#toString,Method ndg.security.common.xmlsec.etree.XMLSecDoc.toString()=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#toString,Method ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.toString()=ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy-class.html#toString"><a title="ndg.security.common.AttCert.AttCert.toString
345ndg.security.common.X509.X509Cert.toString
346ndg.security.common.XMLSec.XMLSecDoc.toString
347ndg.security.common.xmlsec.etree.XMLSecDoc.toString
348ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.toString" class="py-name" href="#" onclick="return doclink('link-44', 'toString', 'link-44');">toString</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
349</div><a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">         </tt>
350<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"> </tt>
351<a name="XMLSecDoc.__getFilePath"></a><div id="XMLSecDoc.__getFilePath-def"><a name="L147"></a><tt class="py-lineno">147</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__getFilePath-toggle" onclick="return toggle('XMLSecDoc.__getFilePath');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__getFilePath">__getFilePath</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
352</div><div id="XMLSecDoc.__getFilePath-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__getFilePath-expanded"><a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">        <tt class="py-docstring">"""Get file path for file to be signed/encrypted."""</tt> </tt>
353<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__filePath</tt> </tt>
354</div><a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line"> </tt>
355<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line"> </tt>
356<a name="XMLSecDoc.__setFilePath"></a><div id="XMLSecDoc.__setFilePath-def"><a name="L152"></a><tt class="py-lineno">152</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__setFilePath-toggle" onclick="return toggle('XMLSecDoc.__setFilePath');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__setFilePath">__setFilePath</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filePath</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
357</div><div id="XMLSecDoc.__setFilePath-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__setFilePath-expanded"><a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">        <tt class="py-docstring">"""Set file path for file to be signed/verified/encrypted/decrypted</tt> </tt>
358<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
359<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line"><tt class="py-docstring">        @param filePath: file path of XML doc"""</tt> </tt>
360<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line">         </tt>
361<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-45" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
362ndg.security.common.openssl.OpenSSLConfig.filePath
363ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-45', 'filePath', 'link-27');">filePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-46" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
364ndg.security.common.openssl.OpenSSLConfig.filePath
365ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-46', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>             </tt>
366<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-47" class="py-name" targets="Class ndg.security.common.XMLSec.XMLSecDocError=ndg.security.common.XMLSec.XMLSecDocError-class.html,Class ndg.security.common.xmlsec.etree.XMLSecDocError=ndg.security.common.xmlsec.etree.XMLSecDocError-class.html"><a title="ndg.security.common.XMLSec.XMLSecDocError
367ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-47', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Document file path must be a valid string"</tt> </tt>
368<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line">         </tt>
369<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__filePath</tt> <tt class="py-op">=</tt> <tt id="link-48" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
370ndg.security.common.openssl.OpenSSLConfig.filePath
371ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-48', 'filePath', 'link-27');">filePath</a></tt> </tt>
372</div><a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"> </tt>
373<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"> </tt>
374<a name="XMLSecDoc.__delFilePath"></a><div id="XMLSecDoc.__delFilePath-def"><a name="L163"></a><tt class="py-lineno">163</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__delFilePath-toggle" onclick="return toggle('XMLSecDoc.__delFilePath');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__delFilePath">__delFilePath</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
375</div><div id="XMLSecDoc.__delFilePath-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__delFilePath-expanded"><a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">        <tt class="py-docstring">"""Prevent file path being deleted."""</tt> </tt>
376<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">,</tt> <tt class="py-string">"\"filePath\" cannot be deleted"</tt> </tt>
377</div><a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">  </tt>
378<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">   </tt>
379<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">    <tt class="py-comment"># Publish attribute as read/write</tt> </tt>
380<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt id="link-49" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
381ndg.security.common.openssl.OpenSSLConfig.filePath
382ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-49', 'filePath', 'link-27');">filePath</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt class="py-name">fget</tt><tt class="py-op">=</tt><tt id="link-50" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__getFilePath()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__getFilePath,Method ndg.security.common.openssl.OpenSSLConfig.__getFilePath()=ndg.security.common.openssl.OpenSSLConfig-class.html#__getFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.__getFilePath
383ndg.security.common.openssl.OpenSSLConfig.__getFilePath" class="py-name" href="#" onclick="return doclink('link-50', '__getFilePath', 'link-50');">__getFilePath</a></tt><tt class="py-op">,</tt> </tt>
384<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">                        <tt class="py-name">fset</tt><tt class="py-op">=</tt><tt id="link-51" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setFilePath
385ndg.security.common.openssl.OpenSSLConfig.__setFilePath" class="py-name" href="#" onclick="return doclink('link-51', '__setFilePath', 'link-28');">__setFilePath</a></tt><tt class="py-op">,</tt> </tt>
386<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">                        <tt class="py-name">fdel</tt><tt class="py-op">=</tt><tt id="link-52" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__delFilePath()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__delFilePath"><a title="ndg.security.common.XMLSec.XMLSecDoc.__delFilePath" class="py-name" href="#" onclick="return doclink('link-52', '__delFilePath', 'link-52');">__delFilePath</a></tt><tt class="py-op">,</tt> </tt>
387<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line">                        <tt class="py-name">doc</tt><tt class="py-op">=</tt><tt class="py-string">"File Path for XML document to apply security to"</tt><tt class="py-op">)</tt> </tt>
388<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">     </tt>
389<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">     </tt>
390<a name="XMLSecDoc.__getDocNode"></a><div id="XMLSecDoc.__getDocNode-def"><a name="L175"></a><tt class="py-lineno">175</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__getDocNode-toggle" onclick="return toggle('XMLSecDoc.__getDocNode');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__getDocNode">__getDocNode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
391</div><div id="XMLSecDoc.__getDocNode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__getDocNode-expanded"><a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line">        <tt class="py-docstring">"""Get file path for file to be signed/encrypted."""</tt> </tt>
392<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt> </tt>
393</div><a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line"> </tt>
394<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line"> </tt>
395<a name="XMLSecDoc.__delDocNode"></a><div id="XMLSecDoc.__delDocNode-def"><a name="L180"></a><tt class="py-lineno">180</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__delDocNode-toggle" onclick="return toggle('XMLSecDoc.__delDocNode');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__delDocNode">__delDocNode</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
396</div><div id="XMLSecDoc.__delDocNode-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__delDocNode-expanded"><a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">        <tt class="py-docstring">"""Prevent file path being deleted."""</tt> </tt>
397<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">,</tt> <tt class="py-string">"\"docNode\" cannot be deleted"</tt> </tt>
398</div><a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">  </tt>
399<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">   </tt>
400<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">    <tt class="py-comment"># Publish attribute as read/write</tt> </tt>
401<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt id="link-53" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.docNode" class="py-name" href="#" onclick="return doclink('link-53', 'docNode', 'link-7');">docNode</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt class="py-name">fget</tt><tt class="py-op">=</tt><tt id="link-54" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__getDocNode()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__getDocNode"><a title="ndg.security.common.XMLSec.XMLSecDoc.__getDocNode" class="py-name" href="#" onclick="return doclink('link-54', '__getDocNode', 'link-54');">__getDocNode</a></tt><tt class="py-op">,</tt> </tt>
402<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">                       <tt class="py-name">fdel</tt><tt class="py-op">=</tt><tt id="link-55" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.__delDocNode()=ndg.security.common.XMLSec.XMLSecDoc-class.html#__delDocNode"><a title="ndg.security.common.XMLSec.XMLSecDoc.__delDocNode" class="py-name" href="#" onclick="return doclink('link-55', '__delDocNode', 'link-55');">__delDocNode</a></tt><tt class="py-op">,</tt> </tt>
403<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">                       <tt class="py-name">doc</tt><tt class="py-op">=</tt><tt class="py-string">"DOM document node for XML"</tt><tt class="py-op">)</tt> </tt>
404<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line"> </tt>
405<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
406<a name="XMLSecDoc.__setCertFilePathList"></a><div id="XMLSecDoc.__setCertFilePathList-def"><a name="L191"></a><tt class="py-lineno">191</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__setCertFilePathList-toggle" onclick="return toggle('XMLSecDoc.__setCertFilePathList');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__setCertFilePathList">__setCertFilePathList</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filePath</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
407</div><div id="XMLSecDoc.__setCertFilePathList-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__setCertFilePathList-expanded"><a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">        <tt class="py-docstring">"""File path for certificate used to sign document / </tt> </tt>
408<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"><tt class="py-docstring">        list of certificates used to check the signature of a document</tt> </tt>
409<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
410<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line"><tt class="py-docstring">        @param filePath: file path or list of file paths to files used to</tt> </tt>
411<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"><tt class="py-docstring">        verify a signature.  The first element should be the cert </tt> </tt>
412<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line"><tt class="py-docstring">        corresponding to the proviate key used to make the signature.  </tt> </tt>
413<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line"><tt class="py-docstring">        Successive certs in the list correspond to the chain of trust e.g.</tt> </tt>
414<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line"><tt class="py-docstring">        if a proxy cert/private key was used the list would be</tt> </tt>
415<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
416<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line"><tt class="py-docstring">        proxy cert., </tt> </tt>
417<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line"><tt class="py-docstring">        user cert which issued the proxy cert, </tt> </tt>
418<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line"><tt class="py-docstring">        CA cert that issued the user cert</tt> </tt>
419<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
420<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">         </tt>
421<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-56" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
422ndg.security.common.openssl.OpenSSLConfig.filePath
423ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-56', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>         </tt>
424<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-57" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
425ndg.security.common.openssl.OpenSSLConfig.filePath
426ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-57', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">]</tt> </tt>
427<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line"> </tt>
428<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-58" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
429ndg.security.common.openssl.OpenSSLConfig.filePath
430ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-58', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
431<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt> <tt class="py-op">=</tt> <tt id="link-59" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
432ndg.security.common.openssl.OpenSSLConfig.filePath
433ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-59', 'filePath', 'link-27');">filePath</a></tt> </tt>
434<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">                                             </tt>
435<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-60" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
436ndg.security.common.openssl.OpenSSLConfig.filePath
437ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-60', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
438<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-61" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
439ndg.security.common.openssl.OpenSSLConfig.filePath
440ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-61', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">)</tt> </tt>
441<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line"> </tt>
442<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
443<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-62" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
444ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-62', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
445<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">            <tt class="py-string">"Signing Certificate file path must be a valid string or list"</tt> </tt>
446</div><a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">  </tt>
447<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">   </tt>
448<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line">    <tt class="py-comment"># Publish attribute as write only</tt> </tt>
449<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt id="link-63" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.certFilePathList
450ndg.security.common.xmlsec.etree.XMLSecDoc.certFilePathList" class="py-name" href="#" onclick="return doclink('link-63', 'certFilePathList', 'link-41');">certFilePathList</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt class="py-name">fset</tt><tt class="py-op">=</tt><tt id="link-64" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setCertFilePathList" class="py-name" href="#" onclick="return doclink('link-64', '__setCertFilePathList', 'link-42');">__setCertFilePathList</a></tt><tt class="py-op">,</tt> </tt>
451<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line">        <tt class="py-name">doc</tt><tt class="py-op">=</tt><tt class="py-string">"File Path of certificate used to sign document / "</tt> <tt class="py-op">+</tt> \ </tt>
452<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">            <tt class="py-string">"list of certificates used to check the signature of a doc"</tt><tt class="py-op">)</tt> </tt>
453<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"> </tt>
454<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"> </tt>
455<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
456<a name="XMLSecDoc.__setSigningKeyFilePath"></a><div id="XMLSecDoc.__setSigningKeyFilePath-def"><a name="L227"></a><tt class="py-lineno">227</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__setSigningKeyFilePath-toggle" onclick="return toggle('XMLSecDoc.__setSigningKeyFilePath');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__setSigningKeyFilePath">__setSigningKeyFilePath</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filePath</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
457</div><div id="XMLSecDoc.__setSigningKeyFilePath-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__setSigningKeyFilePath-expanded"><a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line">        <tt class="py-docstring">"""Set file path for certificate private key used to sign doc."""</tt> </tt>
458<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line">         </tt>
459<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-65" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
460ndg.security.common.openssl.OpenSSLConfig.filePath
461ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-65', 'filePath', 'link-27');">filePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-66" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
462ndg.security.common.openssl.OpenSSLConfig.filePath
463ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-66', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>             </tt>
464<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-67" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
465ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-67', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
466<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line">                <tt class="py-string">"Certificate key file path must be a valid string"</tt> </tt>
467<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line">         </tt>
468<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__signingKeyFilePath</tt> <tt class="py-op">=</tt> <tt id="link-68" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
469ndg.security.common.openssl.OpenSSLConfig.filePath
470ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-68', 'filePath', 'link-27');">filePath</a></tt> </tt>
471</div><a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"> </tt>
472<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line">    <tt class="py-comment"># Publish attribute as write only</tt> </tt>
473<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt id="link-69" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.signingKeyFilePath
474ndg.security.common.xmlsec.etree.XMLSecDoc.signingKeyFilePath" class="py-name" href="#" onclick="return doclink('link-69', 'signingKeyFilePath', 'link-30');">signingKeyFilePath</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt class="py-name">fset</tt><tt class="py-op">=</tt><tt id="link-70" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setSigningKeyFilePath" class="py-name" href="#" onclick="return doclink('link-70', '__setSigningKeyFilePath', 'link-31');">__setSigningKeyFilePath</a></tt><tt class="py-op">,</tt> </tt>
475<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line">                          <tt class="py-name">doc</tt><tt class="py-op">=</tt><tt class="py-string">"path for private key file used to sign doc"</tt><tt class="py-op">)</tt> </tt>
476<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line"> </tt>
477<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"> </tt>
478<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
479<a name="XMLSecDoc.__setSigningKeyPwd"></a><div id="XMLSecDoc.__setSigningKeyPwd-def"><a name="L242"></a><tt class="py-lineno">242</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__setSigningKeyPwd-toggle" onclick="return toggle('XMLSecDoc.__setSigningKeyPwd');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__setSigningKeyPwd">__setSigningKeyPwd</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">pwd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
480</div><div id="XMLSecDoc.__setSigningKeyPwd-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__setSigningKeyPwd-expanded"><a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line">        <tt class="py-docstring">"""Set password to read private key from file</tt> </tt>
481<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
482<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line"><tt class="py-docstring">        @param pwd: password protecting private key file - set to None if no</tt> </tt>
483<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line"><tt class="py-docstring">        password is set"""</tt> </tt>
484<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">         </tt>
485<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">pwd</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">pwd</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>             </tt>
486<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-71" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
487ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-71', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
488<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">            <tt class="py-string">"Private key password must be set to None or to a valid string"</tt> </tt>
489<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line">         </tt>
490<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__signingKeyPwd</tt> <tt class="py-op">=</tt> <tt class="py-name">pwd</tt> </tt>
491</div><a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line"> </tt>
492<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">    <tt class="py-comment"># Publish attribute as write only</tt> </tt>
493<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt id="link-72" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.signingKeyPwd
494ndg.security.common.xmlsec.etree.XMLSecDoc.signingKeyPwd" class="py-name" href="#" onclick="return doclink('link-72', 'signingKeyPwd', 'link-34');">signingKeyPwd</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt class="py-name">fset</tt><tt class="py-op">=</tt><tt id="link-73" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setSigningKeyPwd" class="py-name" href="#" onclick="return doclink('link-73', '__setSigningKeyPwd', 'link-33');">__setSigningKeyPwd</a></tt><tt class="py-op">,</tt> </tt>
495<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">                <tt class="py-name">doc</tt><tt class="py-op">=</tt><tt class="py-string">"Password protecting private key file used to sign doc"</tt><tt class="py-op">)</tt> </tt>
496<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line"> </tt>
497<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line"> </tt>
498<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line"> </tt>
499<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
500<a name="XMLSecDoc.__setEncrCertFilePath"></a><div id="XMLSecDoc.__setEncrCertFilePath-def"><a name="L261"></a><tt class="py-lineno">261</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__setEncrCertFilePath-toggle" onclick="return toggle('XMLSecDoc.__setEncrCertFilePath');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__setEncrCertFilePath">__setEncrCertFilePath</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filePath</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
501</div><div id="XMLSecDoc.__setEncrCertFilePath-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__setEncrCertFilePath-expanded"><a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">        <tt class="py-docstring">"""Set file path for X.509 certificate file containing public</tt> </tt>
502<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line"><tt class="py-docstring">        key used to decrypt doc.</tt> </tt>
503<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
504<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line"><tt class="py-docstring">        @param filePath: path to X.509 Certificate file"""</tt> </tt>
505<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">         </tt>
506<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-74" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
507ndg.security.common.openssl.OpenSSLConfig.filePath
508ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-74', 'filePath', 'link-27');">filePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-75" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
509ndg.security.common.openssl.OpenSSLConfig.filePath
510ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-75', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>             </tt>
511<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-76" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
512ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-76', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
513<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">                <tt class="py-string">"Certificate key file path must be a valid string"</tt> </tt>
514<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line"> </tt>
515<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__encrCertFilePath</tt> <tt class="py-op">=</tt> <tt id="link-77" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
516ndg.security.common.openssl.OpenSSLConfig.filePath
517ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-77', 'filePath', 'link-27');">filePath</a></tt> </tt>
518</div><a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line"> </tt>
519<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">    <tt class="py-comment"># Publish attribute as write only</tt> </tt>
520<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt id="link-78" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.encrCertFilePath
521ndg.security.common.xmlsec.etree.XMLSecDoc.encrCertFilePath" class="py-name" href="#" onclick="return doclink('link-78', 'encrCertFilePath', 'link-35');">encrCertFilePath</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt class="py-name">fset</tt><tt class="py-op">=</tt><tt id="link-79" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setEncrCertFilePath" class="py-name" href="#" onclick="return doclink('link-79', '__setEncrCertFilePath', 'link-36');">__setEncrCertFilePath</a></tt><tt class="py-op">,</tt> </tt>
522<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line">        <tt class="py-name">doc</tt><tt class="py-op">=</tt><tt class="py-string">"file path for certificate publiv key used to decrypt doc"</tt><tt class="py-op">)</tt> </tt>
523<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line"> </tt>
524<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line"> </tt>
525<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
526<a name="XMLSecDoc.__setEncrPriKeyFilePath"></a><div id="XMLSecDoc.__setEncrPriKeyFilePath-def"><a name="L279"></a><tt class="py-lineno">279</tt> <a class="py-toggle" href="#" id="XMLSecDoc.__setEncrPriKeyFilePath-toggle" onclick="return toggle('XMLSecDoc.__setEncrPriKeyFilePath');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#__setEncrPriKeyFilePath">__setEncrPriKeyFilePath</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filePath</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
527</div><div id="XMLSecDoc.__setEncrPriKeyFilePath-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.__setEncrPriKeyFilePath-expanded"><a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">        <tt class="py-docstring">"""Set file path for private key used to decrypt doc.</tt> </tt>
528<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
529<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line"><tt class="py-docstring">        @param filePath: path to private key file"""</tt> </tt>
530<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">         </tt>
531<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-80" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
532ndg.security.common.openssl.OpenSSLConfig.filePath
533ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-80', 'filePath', 'link-27');">filePath</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-81" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
534ndg.security.common.openssl.OpenSSLConfig.filePath
535ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-81', 'filePath', 'link-27');">filePath</a></tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>             </tt>
536<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-82" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
537ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-82', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
538<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">                <tt class="py-string">"Certificate key file path must be a valid string"</tt> </tt>
539<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line">         </tt>
540<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__encrPriKeyFilePath</tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.filePath
541ndg.security.common.openssl.OpenSSLConfig.filePath
542ndg.security.common.xmlsec.etree.XMLSecDoc.filePath" class="py-name" href="#" onclick="return doclink('link-83', 'filePath', 'link-27');">filePath</a></tt> </tt>
543</div><a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line"> </tt>
544<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">    <tt class="py-comment"># Publish attribute as write only</tt> </tt>
545<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line"><tt class="py-comment"></tt>    <tt id="link-84" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.encrPriKeyFilePath
546ndg.security.common.xmlsec.etree.XMLSecDoc.encrPriKeyFilePath" class="py-name" href="#" onclick="return doclink('link-84', 'encrPriKeyFilePath', 'link-38');">encrPriKeyFilePath</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt class="py-name">fset</tt><tt class="py-op">=</tt><tt id="link-85" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__setEncrPriKeyFilePath" class="py-name" href="#" onclick="return doclink('link-85', '__setEncrPriKeyFilePath', 'link-39');">__setEncrPriKeyFilePath</a></tt><tt class="py-op">,</tt> </tt>
547<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">        <tt class="py-name">doc</tt><tt class="py-op">=</tt><tt class="py-string">"file path for certificate private key used to decrypt doc"</tt><tt class="py-op">)</tt> </tt>
548<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line"> </tt>
549<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line"> </tt>
550<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
551<a name="XMLSecDoc.toString"></a><div id="XMLSecDoc.toString-def"><a name="L296"></a><tt class="py-lineno">296</tt> <a class="py-toggle" href="#" id="XMLSecDoc.toString-toggle" onclick="return toggle('XMLSecDoc.toString');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#toString">toString</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">inclXMLhdr</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
552</div><div id="XMLSecDoc.toString-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.toString-expanded"><a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">        <tt class="py-docstring">"""Return certificate file content as a string</tt> </tt>
553<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
554<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"><tt class="py-docstring">        @param inclXMLhdr: boolean - set to true to include XML header</tt> </tt>
555<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line"><tt class="py-docstring">        @return content of document as a string or None if the document has</tt> </tt>
556<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line"><tt class="py-docstring">        not been parsed."""</tt> </tt>
557<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line"> </tt>
558<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">:</tt> </tt>
559<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
560<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line">         </tt>
561<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">inclXMLhdr</tt><tt class="py-op">:</tt> </tt>
562<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;?xml version="1.0" encoding="utf-8"?&gt;\n'</tt> <tt class="py-op">+</tt> \ </tt>
563<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">                    <tt class="py-name">Canonicalize</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">)</tt> </tt>
564<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
565<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">Canonicalize</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">)</tt> </tt>
566</div><a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line"> </tt>
567<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line"> </tt>
568<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
569<a name="XMLSecDoc.parse"></a><div id="XMLSecDoc.parse-def"><a name="L314"></a><tt class="py-lineno">314</tt> <a class="py-toggle" href="#" id="XMLSecDoc.parse-toggle" onclick="return toggle('XMLSecDoc.parse');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#parse">parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">xmlTxt</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
570</div><div id="XMLSecDoc.parse-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.parse-expanded"><a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line">        <tt class="py-docstring">"""Parse string containing XML into a DOM to allow signature or </tt> </tt>
571<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line"><tt class="py-docstring">        signature validation</tt> </tt>
572<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
573<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line"><tt class="py-docstring">        @param xmlTxt: text to be parsed"""</tt> </tt>
574<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line">         </tt>
575<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt> <tt class="py-op">=</tt> <tt class="py-name">Reader</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Method ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.fromString()=ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy-class.html#fromString"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.fromString" class="py-name" href="#" onclick="return doclink('link-86', 'fromString', 'link-86');">fromString</a></tt><tt class="py-op">(</tt><tt class="py-name">xmlTxt</tt><tt class="py-op">)</tt> </tt>
576</div><a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line"> </tt>
577<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line"> </tt>
578<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
579<a name="XMLSecDoc.read"></a><div id="XMLSecDoc.read-def"><a name="L324"></a><tt class="py-lineno">324</tt> <a class="py-toggle" href="#" id="XMLSecDoc.read-toggle" onclick="return toggle('XMLSecDoc.read');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#read">read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
580</div><div id="XMLSecDoc.read-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.read-expanded"><a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line">        <tt class="py-docstring">"""Read XML into a document to allow signature validation</tt> </tt>
581<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
582<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line"><tt class="py-docstring">        @param stream: read from a file stream object instead of </tt> </tt>
583<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"><tt class="py-docstring">        self.__filePath"""</tt> </tt>
584<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line">         </tt>
585<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">stream</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
586<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line">            <tt class="py-name">stream</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__filePath</tt><tt class="py-op">)</tt> </tt>
587<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line">                 </tt>
588<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt> <tt class="py-op">=</tt> <tt class="py-name">Reader</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">fromStream</tt><tt class="py-op">(</tt><tt class="py-name">stream</tt><tt class="py-op">)</tt> </tt>
589</div><a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"> </tt>
590<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line"> </tt>
591<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
592<a name="XMLSecDoc.write"></a><div id="XMLSecDoc.write-def"><a name="L337"></a><tt class="py-lineno">337</tt> <a class="py-toggle" href="#" id="XMLSecDoc.write-toggle" onclick="return toggle('XMLSecDoc.write');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#write">write</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
593</div><div id="XMLSecDoc.write-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.write-expanded"><a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">        <tt class="py-docstring">"""Write XML document"""</tt> </tt>
594<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line">        <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__filePath</tt><tt class="py-op">,</tt> <tt class="py-string">'w'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name" targets="Method ndg.security.common.XMLSec.XMLSecDoc.write()=ndg.security.common.XMLSec.XMLSecDoc-class.html#write,Method ndg.security.common.xmlsec.etree.XMLSecDoc.write()=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#write"><a title="ndg.security.common.XMLSec.XMLSecDoc.write
595ndg.security.common.xmlsec.etree.XMLSecDoc.write" class="py-name" href="#" onclick="return doclink('link-87', 'write', 'link-87');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="ndg.security.common.AttCert.AttCert.toString
596ndg.security.common.X509.X509Cert.toString
597ndg.security.common.XMLSec.XMLSecDoc.toString
598ndg.security.common.xmlsec.etree.XMLSecDoc.toString
599ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.toString" class="py-name" href="#" onclick="return doclink('link-88', 'toString', 'link-44');">toString</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">linesep</tt><tt class="py-op">)</tt> </tt>
600</div><a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line"> </tt>
601<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line"> </tt>
602<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
603<a name="XMLSecDoc.applyEnvelopedSignature"></a><div id="XMLSecDoc.applyEnvelopedSignature-def"><a name="L343"></a><tt class="py-lineno">343</tt> <a class="py-toggle" href="#" id="XMLSecDoc.applyEnvelopedSignature-toggle" onclick="return toggle('XMLSecDoc.applyEnvelopedSignature');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#applyEnvelopedSignature">applyEnvelopedSignature</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt>
604<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line">                        <tt class="py-param">xmlTxt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
605<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line">                        <tt class="py-param">inclX509Cert</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
606<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line">                        <tt class="py-param">refC14nKw</tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'unsuppressedPrefixes'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt><tt class="py-string">'xmlns'</tt><tt class="py-op">]</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
607<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">                        <tt id="link-89" class="py-name" targets="Variable ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.signedInfoC14nKw=ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler-class.html#signedInfoC14nKw"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.signedInfoC14nKw" class="py-name" href="#" onclick="return doclink('link-89', 'signedInfoC14nKw', 'link-89');">signedInfoC14nKw</a></tt><tt class="py-op">=</tt><tt class="py-op">{</tt><tt class="py-string">'unsuppressedPrefixes'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt><tt class="py-string">'ds'</tt><tt class="py-op">]</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
608</div><div id="XMLSecDoc.applyEnvelopedSignature-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.applyEnvelopedSignature-expanded"><a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line">         </tt>
609<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line">        <tt class="py-docstring">"""Make enveloped signature of XML document</tt> </tt>
610<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
611<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line"><tt class="py-docstring">        @param xmlTxt: string buffer containing xml to be signed. If not </tt> </tt>
612<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"><tt class="py-docstring">        provided, calls XMLSecDoc.createXML().  This is a virtual method so </tt> </tt>
613<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"><tt class="py-docstring">        must be defined in a derived class.</tt> </tt>
614<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"><tt class="py-docstring">                            </tt> </tt>
615<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt class="py-docstring">        @param inclX509Cert: include MIME encoded content of X.509</tt> </tt>
616<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"><tt class="py-docstring">        certificate.  This can be used by the  recipient of the XML in order </tt> </tt>
617<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"><tt class="py-docstring">        to verify the message</tt> </tt>
618<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
619<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"><tt class="py-docstring">        @param refC14nKw: Keywords for canonicalization of the reference</tt> </tt>
620<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line"><tt class="py-docstring">        - for enveloped type signature this is the parent element of the XML </tt> </tt>
621<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line"><tt class="py-docstring">        document.  If the key 'unsuppressedPrefixes' is set to a list of </tt> </tt>
622<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line"><tt class="py-docstring">        element prefix strings, exclusive canonicalization will be applied.  </tt> </tt>
623<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"><tt class="py-docstring">        To use inclusive canonicalization set 'unsuppressedPrefixes' to None</tt> </tt>
624<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line"><tt class="py-docstring">         or set refC14nKw to None.</tt> </tt>
625<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"><tt class="py-docstring">         </tt> </tt>
626<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"><tt class="py-docstring">        @param signedInfoC14nKw: keywords for canonicalization of the </tt> </tt>
627<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line"><tt class="py-docstring">        SignedInfo section of the signature.  See explanation for refC14nKw</tt> </tt>
628<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"><tt class="py-docstring">        keyword for options."""</tt> </tt>
629<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line"> </tt>
630<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">xmlTxt</tt><tt class="py-op">:</tt> </tt>
631<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.SSOClientConfig.parse()=ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.SSOClientConfig-class.html#parse,Method ndg.security.common.AttCert.AttCert.parse()=ndg.security.common.AttCert.AttCert-class.html#parse,Method ndg.security.common.X509.X509Cert.parse()=ndg.security.common.X509.X509Cert-class.html#parse,Method ndg.security.common.XMLSec.XMLSecDoc.parse()=ndg.security.common.XMLSec.XMLSecDoc-class.html#parse,Method ndg.security.common.gatekeeper.SecurityConfig.parse()=ndg.security.common.gatekeeper.SecurityConfig-class.html#parse,Method ndg.security.common.saml.AttributeAssertion.parse()=ndg.security.common.saml.AttributeAssertion-class.html#parse,Method ndg.security.common.sessionCookie.SessionCookie.parse()=ndg.security.common.sessionCookie.SessionCookie-class.html#parse,Method ndg.security.common.wssecurity.WSSecurityConfig.parse()=ndg.security.common.wssecurity.WSSecurityConfig-class.html#parse,Method ndg.security.common.xmlsec.etree.XMLSecDoc.parse()=ndg.security.common.xmlsec.etree.XMLSecDoc-class.html#parse,Method ndg.security.server.sso.sso.config.ssoServiceMiddleware.SSOServiceConfig.parse()=ndg.security.server.sso.sso.config.ssoServiceMiddleware.SSOServiceConfig-class.html#parse,Class Method ndg.security.server.wsgi.soap.SOAPMiddleware.parse()=ndg.security.server.wsgi.soap.SOAPMiddleware-class.html#parse"><a title="ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.SSOClientConfig.parse
632ndg.security.common.AttCert.AttCert.parse
633ndg.security.common.X509.X509Cert.parse
634ndg.security.common.XMLSec.XMLSecDoc.parse
635ndg.security.common.gatekeeper.SecurityConfig.parse
636ndg.security.common.saml.AttributeAssertion.parse
637ndg.security.common.sessionCookie.SessionCookie.parse
638ndg.security.common.wssecurity.WSSecurityConfig.parse
639ndg.security.common.xmlsec.etree.XMLSecDoc.parse
640ndg.security.server.sso.sso.config.ssoServiceMiddleware.SSOServiceConfig.parse
641ndg.security.server.wsgi.soap.SOAPMiddleware.parse" class="py-name" href="#" onclick="return doclink('link-90', 'parse', 'link-90');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">xmlTxt</tt><tt class="py-op">)</tt> </tt>
642<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line"> </tt>
643<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
644<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-91" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
645ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-91', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
646<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">                            <tt class="py-string">"XML to be signed has not been read in or parsed."</tt> </tt>
647<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line"> </tt>
648<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
649<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">            <tt class="py-name">parentNode</tt> <tt class="py-op">=</tt> <tt id="link-92" class="py-name"><a title="ndg.security.common.XMLSec.getParentNode" class="py-name" href="#" onclick="return doclink('link-92', 'getParentNode', 'link-6');">getParentNode</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">)</tt> </tt>
650<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
651<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-93" class="py-name" targets="Class ndg.security.common.XMLSec.SignError=ndg.security.common.XMLSec.SignError-class.html,Class ndg.security.common.xmlsec.etree.SignError=ndg.security.common.xmlsec.etree.SignError-class.html"><a title="ndg.security.common.XMLSec.SignError
652ndg.security.common.xmlsec.etree.SignError" class="py-name" href="#" onclick="return doclink('link-93', 'SignError', 'link-93');">SignError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Locating parent node: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
653<a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line"> </tt>
654<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">        <tt class="py-name">parentNode</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name" targets="Method ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.setAttributeNS()=ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy-class.html#setAttributeNS"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.setAttributeNS" class="py-name" href="#" onclick="return doclink('link-94', 'setAttributeNS', 'link-94');">setAttributeNS</a></tt><tt class="py-op">(</tt><tt class="py-name">XMLNS</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> <tt class="py-string">'xmlns:%s'</tt> <tt class="py-op">%</tt> <tt class="py-string">'ds'</tt><tt class="py-op">,</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">)</tt> </tt>
655<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">        <tt class="py-name">parentNode</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.setAttributeNS" class="py-name" href="#" onclick="return doclink('link-95', 'setAttributeNS', 'link-94');">setAttributeNS</a></tt><tt class="py-op">(</tt><tt class="py-name">XMLNS</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt><tt class="py-string">'xmlns:%s'</tt> <tt class="py-op">%</tt> <tt class="py-string">'ec'</tt><tt class="py-op">,</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt><tt class="py-op">)</tt> </tt>
656<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">         </tt>
657<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">        <tt class="py-comment"># Namespaces for XPath searches</tt> </tt>
658<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">processorNss</tt> <tt class="py-op">=</tt> \ </tt>
659<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">        <tt class="py-op">{</tt> </tt>
660<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">            <tt class="py-string">'ds'</tt><tt class="py-op">:</tt>    <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> </tt>
661<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line">            <tt class="py-string">'ec'</tt><tt class="py-op">:</tt>    <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt> </tt>
662<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
663<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line">        <tt class="py-name">ctx</tt> <tt class="py-op">=</tt> <tt class="py-name">Context</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt> <tt class="py-name">processorNss</tt><tt class="py-op">=</tt><tt class="py-name">processorNss</tt><tt class="py-op">)</tt> </tt>
664<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line">         </tt>
665<a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">        <tt class="py-comment"># 1) Reference Generation</tt> </tt>
666<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line"><tt class="py-comment"></tt>         </tt>
667<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">        <tt class="py-comment"># Canonicalize reference - for enveloped signature this is the parent</tt> </tt>
668<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># element</tt> </tt>
669<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">refC14n</tt> <tt class="py-op">=</tt> <tt class="py-name">Canonicalize</tt><tt class="py-op">(</tt><tt class="py-name">parentNode</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt id="link-96" class="py-name" targets="Variable ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.refC14nKw=ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler-class.html#refC14nKw"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.refC14nKw" class="py-name" href="#" onclick="return doclink('link-96', 'refC14nKw', 'link-96');">refC14nKw</a></tt><tt class="py-op">)</tt> </tt>
670<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line">         </tt>
671<a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line">        <tt class="py-comment"># Calculate digest for reference and base 64 encode</tt> </tt>
672<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment">#</tt> </tt>
673<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># Nb. encodestring adds a trailing newline char</tt> </tt>
674<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">refDigestValue</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">encodestring</tt><tt class="py-op">(</tt><tt class="py-name">sha</tt><tt class="py-op">(</tt><tt class="py-name">refC14n</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
675<a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line"> </tt>
676<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line"> </tt>
677<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line">        <tt class="py-comment"># Add Signature elements</tt> </tt>
678<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signatureNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> </tt>
679<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line">                                                       <tt class="py-string">'ds:Signature'</tt><tt class="py-op">)</tt> </tt>
680<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line">        <tt class="py-name">parentNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">signatureNode</tt><tt class="py-op">)</tt> </tt>
681<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line"> </tt>
682<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line">         </tt>
683<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line">        <tt class="py-comment"># Signature - Signed Info</tt> </tt>
684<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signedInfoNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
685<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">                                                        <tt class="py-string">'ds:SignedInfo'</tt><tt class="py-op">)</tt> </tt>
686<a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line">        <tt class="py-name">signatureNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">signedInfoNode</tt><tt class="py-op">)</tt> </tt>
687<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line">         </tt>
688<a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line">        <tt class="py-comment"># Signed Info - Canonicalization method</tt> </tt>
689<a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">c14nMethodNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> </tt>
690<a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line">                                                <tt class="py-string">'ds:CanonicalizationMethod'</tt><tt class="py-op">)</tt>         </tt>
691<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">        <tt class="py-name">c14nMethodNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'Algorithm'</tt><tt class="py-op">,</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt><tt class="py-op">)</tt> </tt>
692<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line">        <tt class="py-name">signedInfoNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">c14nMethodNode</tt><tt class="py-op">)</tt> </tt>
693<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line"> </tt>
694<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line">        <tt class="py-name">c14nInclNamespacesNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt>\ </tt>
695<a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line">                                                     <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt><tt class="py-op">,</tt> </tt>
696<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line">                                                     <tt class="py-string">'ec:InclusiveNamespaces'</tt><tt class="py-op">)</tt>        </tt>
697<a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line">        <tt class="py-name">c14nInclNamespacesNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'PrefixList'</tt><tt class="py-op">,</tt>  </tt>
698<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line">                        <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-97" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.signedInfoC14nKw" class="py-name" href="#" onclick="return doclink('link-97', 'signedInfoC14nKw', 'link-89');">signedInfoC14nKw</a></tt><tt class="py-op">[</tt><tt class="py-string">'unsuppressedPrefixes'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt>         </tt>
699<a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line">        <tt class="py-name">c14nMethodNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">c14nInclNamespacesNode</tt><tt class="py-op">)</tt> </tt>
700<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line">         </tt>
701<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line">         </tt>
702<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line">        <tt class="py-comment"># Signed Info - Signature method</tt> </tt>
703<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">sigMethodNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> </tt>
704<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line">                                                       <tt class="py-string">'ds:SignatureMethod'</tt><tt class="py-op">)</tt> </tt>
705<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line">        <tt class="py-name">sigMethodNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'Algorithm'</tt><tt class="py-op">,</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">SIG_RSA_SHA1</tt><tt class="py-op">)</tt> </tt>
706<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line">        <tt class="py-name">signedInfoNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">sigMethodNode</tt><tt class="py-op">)</tt> </tt>
707<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line">         </tt>
708<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line">        <tt class="py-comment"># Signature - Signature value</tt> </tt>
709<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signatureValueNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
710<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">                                                        <tt class="py-string">'ds:SignatureValue'</tt><tt class="py-op">)</tt> </tt>
711<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line">        <tt class="py-name">signatureNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">signatureValueNode</tt><tt class="py-op">)</tt> </tt>
712<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line">         </tt>
713<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">         </tt>
714<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line">        <tt class="py-comment"># Key Info</tt> </tt>
715<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">keyInfoNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> <tt class="py-string">'ds:KeyInfo'</tt><tt class="py-op">)</tt> </tt>
716<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line">        <tt class="py-name">signatureNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">keyInfoNode</tt><tt class="py-op">)</tt> </tt>
717<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line"> </tt>
718<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line"> </tt>
719<a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line">        <tt class="py-comment"># Add a new reference element to SignedInfo - URI is set to null</tt> </tt>
720<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># indicating enveloped signature used</tt> </tt>
721<a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">refNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> <tt class="py-string">'ds:Reference'</tt><tt class="py-op">)</tt> </tt>
722<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">        <tt class="py-name">refNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'URI'</tt><tt class="py-op">,</tt> <tt class="py-string">""</tt><tt class="py-op">)</tt> </tt>
723<a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line">        <tt class="py-name">signedInfoNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">refNode</tt><tt class="py-op">)</tt> </tt>
724<a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line">         </tt>
725<a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line">         </tt>
726<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line">        <tt class="py-comment"># Add Transforms </tt> </tt>
727<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">transformsNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
728<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line">                                                        <tt class="py-string">'ds:Transforms'</tt><tt class="py-op">)</tt> </tt>
729<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line">        <tt class="py-name">refNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">transformsNode</tt><tt class="py-op">)</tt> </tt>
730<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line"> </tt>
731<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line">        <tt class="py-comment"># Individual transforms - enveloped digital signature</tt> </tt>
732<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">transformNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
733<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line">                                                       <tt class="py-string">'ds:Transform'</tt><tt class="py-op">)</tt> </tt>
734<a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line">        <tt class="py-name">transformNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'Algorithm'</tt><tt class="py-op">,</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">ENVELOPED</tt><tt class="py-op">)</tt> </tt>
735<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line">        <tt class="py-name">transformsNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">transformNode</tt><tt class="py-op">)</tt> </tt>
736<a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line">         </tt>
737<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line">        <tt class="py-comment"># ... - exclusive canonicalization</tt> </tt>
738<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">transformNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
739<a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line">                                                       <tt class="py-string">'ds:Transform'</tt><tt class="py-op">)</tt> </tt>
740<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line">        <tt class="py-name">transformNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'Algorithm'</tt><tt class="py-op">,</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt><tt class="py-op">)</tt> </tt>
741<a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line">        <tt class="py-name">transformsNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">transformNode</tt><tt class="py-op">)</tt> </tt>
742<a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line">         </tt>
743<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line">        <tt class="py-name">inclNamespacesNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt>\ </tt>
744<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line">                                                   <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt><tt class="py-op">,</tt> </tt>
745<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line">                                                   <tt class="py-string">'ec:InclusiveNamespaces'</tt><tt class="py-op">)</tt> </tt>
746<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line">        <tt class="py-name">inclNamespacesNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'PrefixList'</tt><tt class="py-op">,</tt> </tt>
747<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line">                                <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-98" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.refC14nKw" class="py-name" href="#" onclick="return doclink('link-98', 'refC14nKw', 'link-96');">refC14nKw</a></tt><tt class="py-op">[</tt><tt class="py-string">'unsuppressedPrefixes'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
748<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line">        <tt class="py-name">transformNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">inclNamespacesNode</tt><tt class="py-op">)</tt> </tt>
749<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line">         </tt>
750<a name="L478"></a><tt class="py-lineno">478</tt>  <tt class="py-line">         </tt>
751<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line">        <tt class="py-comment"># Digest Method </tt> </tt>
752<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">digestMethodNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
753<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line">                                                          <tt class="py-string">'ds:DigestMethod'</tt><tt class="py-op">)</tt> </tt>
754<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">        <tt class="py-name">digestMethodNode</tt><tt class="py-op">.</tt><tt class="py-name">setAttribute</tt><tt class="py-op">(</tt><tt class="py-string">'Algorithm'</tt><tt class="py-op">,</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">DIGEST_SHA1</tt><tt class="py-op">)</tt> </tt>
755<a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line">        <tt class="py-name">refNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">digestMethodNode</tt><tt class="py-op">)</tt> </tt>
756<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line">         </tt>
757<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line">        <tt class="py-comment"># Digest Value</tt> </tt>
758<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">digestValueNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
759<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line">                                                         <tt class="py-string">'ds:DigestValue'</tt><tt class="py-op">)</tt> </tt>
760<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line">        <tt class="py-name">refNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">digestValueNode</tt><tt class="py-op">)</tt> </tt>
761<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line">         </tt>
762<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line">        <tt class="py-name">digestValueTxtNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createTextNode</tt><tt class="py-op">(</tt><tt class="py-name">refDigestValue</tt><tt class="py-op">)</tt> </tt>
763<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line">        <tt class="py-name">digestValueNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">digestValueTxtNode</tt><tt class="py-op">)</tt> </tt>
764<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line"> </tt>
765<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line"> </tt>
766<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line">        <tt class="py-comment"># 2) Signature Generation</tt> </tt>
767<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signedInfoC14n</tt> <tt class="py-op">=</tt> <tt class="py-name">Canonicalize</tt><tt class="py-op">(</tt><tt class="py-name">signedInfoNode</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt id="link-99" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.signedInfoC14nKw" class="py-name" href="#" onclick="return doclink('link-99', 'signedInfoC14nKw', 'link-89');">signedInfoC14nKw</a></tt><tt class="py-op">)</tt> </tt>
768<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line"> </tt>
769<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line">        <tt class="py-comment"># Calculate digest of SignedInfo</tt> </tt>
770<a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">calcSignedInfoDigestValue</tt> <tt class="py-op">=</tt> <tt class="py-name">sha</tt><tt class="py-op">(</tt><tt class="py-name">signedInfoC14n</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
771<a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line">         </tt>
772<a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line">        <tt class="py-comment"># Read Private key to sign with    </tt> </tt>
773<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">priKeyFile</tt> <tt class="py-op">=</tt> <tt class="py-name">BIO</tt><tt class="py-op">.</tt><tt class="py-name">File</tt><tt class="py-op">(</tt><tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__signingKeyFilePath</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
774<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line">        <tt class="py-name">priKeyPwdCallback</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-op">*</tt><tt class="py-name">ar</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kw</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__signingKeyPwd</tt> </tt>
775<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line">        <tt class="py-name">priKey</tt> <tt class="py-op">=</tt> <tt class="py-name">RSA</tt><tt class="py-op">.</tt><tt class="py-name">load_key_bio</tt><tt class="py-op">(</tt><tt class="py-name">priKeyFile</tt><tt class="py-op">,</tt> <tt class="py-name">callback</tt><tt class="py-op">=</tt><tt class="py-name">priKeyPwdCallback</tt><tt class="py-op">)</tt> </tt>
776<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line">         </tt>
777<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line">        <tt class="py-comment"># Sign using the private key and base 64 encode the result</tt> </tt>
778<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signatureValue</tt> <tt class="py-op">=</tt> <tt class="py-name">priKey</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name" targets="Method ndg.security.common.wssecurity.dom.SignatureHandler.sign()=ndg.security.common.wssecurity.dom.SignatureHandler-class.html#sign,Method ndg.security.common.wssecurity.etree.SignatureHandler.sign()=ndg.security.common.wssecurity.etree.SignatureHandler-class.html#sign,Method ndg.security.server.ca.SimpleCA.sign()=ndg.security.server.ca.SimpleCA-class.html#sign,Method ndg.security.test.wsSecurity.server.echoServer.EchoService.sign()=ndg.security.test.wsSecurity.server.echoServer.EchoService-class.html#sign"><a title="ndg.security.common.wssecurity.dom.SignatureHandler.sign
779ndg.security.common.wssecurity.etree.SignatureHandler.sign
780ndg.security.server.ca.SimpleCA.sign
781ndg.security.test.wsSecurity.server.echoServer.EchoService.sign" class="py-name" href="#" onclick="return doclink('link-100', 'sign', 'link-100');">sign</a></tt><tt class="py-op">(</tt><tt class="py-name">calcSignedInfoDigestValue</tt><tt class="py-op">)</tt> </tt>
782<a name="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line">        <tt class="py-name">b64EncSignatureValue</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">encodestring</tt><tt class="py-op">(</tt><tt class="py-name">signatureValue</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
783<a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line"> </tt>
784<a name="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line">        <tt class="py-comment"># Add to &lt;ds:SignatureValue&gt;</tt> </tt>
785<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signatureValueTxtNode</tt> <tt class="py-op">=</tt> \ </tt>
786<a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line">                        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createTextNode</tt><tt class="py-op">(</tt><tt class="py-name">b64EncSignatureValue</tt><tt class="py-op">)</tt> </tt>
787<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line">        <tt class="py-name">signatureValueNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">signatureValueTxtNode</tt><tt class="py-op">)</tt> </tt>
788<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">         </tt>
789<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line">         </tt>
790<a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">inclX509Cert</tt><tt class="py-op">:</tt> </tt>
791<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
792<a name="L517"></a><tt class="py-lineno">517</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt id="link-101" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
793ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-101', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
794<a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line">                    <tt class="py-string">"No X.509 Certificate set for inclusion in signature"</tt> </tt>
795<a name="L519"></a><tt class="py-lineno">519</tt>  <tt class="py-line">                     </tt>
796<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line">            <tt class="py-comment"># Add X.509 cert data</tt> </tt>
797<a name="L521"></a><tt class="py-lineno">521</tt>  <tt class="py-line"><tt class="py-comment"></tt>            <tt id="link-102" class="py-name" targets="Variable ndg.security.common.sessionCookie.SessionCookie.x509Cert=ndg.security.common.sessionCookie.SessionCookie-class.html#x509Cert"><a title="ndg.security.common.sessionCookie.SessionCookie.x509Cert" class="py-name" href="#" onclick="return doclink('link-102', 'x509Cert', 'link-102');">x509Cert</a></tt> <tt class="py-op">=</tt> <tt id="link-103" class="py-name"><a title="ZSI.wstools.Namespaces.OASIS.X509TOKEN.X509
798ndg.security.common.X509
799ndg.security.test.X509" class="py-name" href="#" onclick="return doclink('link-103', 'X509', 'link-10');">X509</a></tt><tt class="py-op">.</tt><tt class="py-name">load_cert</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt>             </tt>
800<a name="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line">            <tt class="py-name">x509DataNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
801<a name="L523"></a><tt class="py-lineno">523</tt>  <tt class="py-line">                                                          <tt class="py-string">'ds:X509Data'</tt><tt class="py-op">)</tt> </tt>
802<a name="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">            <tt class="py-name">keyInfoNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">x509DataNode</tt><tt class="py-op">)</tt> </tt>
803<a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line">             </tt>
804<a name="L526"></a><tt class="py-lineno">526</tt>  <tt class="py-line">         </tt>
805<a name="L527"></a><tt class="py-lineno">527</tt>  <tt class="py-line">            <tt class="py-name">x509CertNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createElementNS</tt><tt class="py-op">(</tt><tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt>  </tt>
806<a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line">                                                      <tt class="py-string">'ds:X509Certificate'</tt><tt class="py-op">)</tt> </tt>
807<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line">            <tt class="py-name">x509DataNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">x509CertNode</tt><tt class="py-op">)</tt> </tt>
808<a name="L530"></a><tt class="py-lineno">530</tt>  <tt class="py-line"> </tt>
809<a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line">            <tt class="py-name">x509CertPat</tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt>\ </tt>
810<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line">            <tt class="py-string">'-----BEGIN CERTIFICATE-----\n?(.*?)\n?-----END CERTIFICATE-----'</tt><tt class="py-op">,</tt> </tt>
811<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line">            <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">S</tt><tt class="py-op">)</tt> </tt>
812<a name="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line">            <tt class="py-name">x509CertStr</tt> <tt class="py-op">=</tt> <tt class="py-name">x509CertPat</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt><tt id="link-104" class="py-name"><a title="ndg.security.common.sessionCookie.SessionCookie.x509Cert" class="py-name" href="#" onclick="return doclink('link-104', 'x509Cert', 'link-102');">x509Cert</a></tt><tt class="py-op">.</tt><tt class="py-name">as_pem</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
813<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line">                 </tt>
814<a name="L536"></a><tt class="py-lineno">536</tt>  <tt class="py-line">            <tt class="py-name">x509CertTxtNode</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">.</tt><tt class="py-name">createTextNode</tt><tt class="py-op">(</tt><tt class="py-name">x509CertStr</tt><tt class="py-op">)</tt> </tt>
815<a name="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line">            <tt class="py-name">x509CertNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">x509CertTxtNode</tt><tt class="py-op">)</tt> </tt>
816</div><a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line"> </tt>
817<a name="L539"></a><tt class="py-lineno">539</tt>  <tt class="py-line"> </tt>
818<a name="L540"></a><tt class="py-lineno">540</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
819<a name="XMLSecDoc.verifyEnvelopedSignature"></a><div id="XMLSecDoc.verifyEnvelopedSignature-def"><a name="L541"></a><tt class="py-lineno">541</tt> <a class="py-toggle" href="#" id="XMLSecDoc.verifyEnvelopedSignature-toggle" onclick="return toggle('XMLSecDoc.verifyEnvelopedSignature');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#verifyEnvelopedSignature">verifyEnvelopedSignature</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">xmlTxt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
820</div><div id="XMLSecDoc.verifyEnvelopedSignature-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.verifyEnvelopedSignature-expanded"><a name="L542"></a><tt class="py-lineno">542</tt>  <tt class="py-line">        <tt class="py-docstring">"""Verify enveloped signature of XML document.  Raises </tt> </tt>
821<a name="L543"></a><tt class="py-lineno">543</tt>  <tt class="py-line"><tt class="py-docstring">        InvalidSignature exception if the signature is invalid</tt> </tt>
822<a name="L544"></a><tt class="py-lineno">544</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
823<a name="L545"></a><tt class="py-lineno">545</tt>  <tt class="py-line"><tt class="py-docstring">        @type xmlTxt: string</tt> </tt>
824<a name="L546"></a><tt class="py-lineno">546</tt>  <tt class="py-line"><tt class="py-docstring">        @param xmlTxt: text from the XML file to be checked.  If omitted, the</tt> </tt>
825<a name="L547"></a><tt class="py-lineno">547</tt>  <tt class="py-line"><tt class="py-docstring">        the existing parse document is used instead."""</tt> </tt>
826<a name="L548"></a><tt class="py-lineno">548</tt>  <tt class="py-line">        </tt>
827<a name="L549"></a><tt class="py-lineno">549</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">xmlTxt</tt><tt class="py-op">:</tt> </tt>
828<a name="L550"></a><tt class="py-lineno">550</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware.SSOClientConfig.parse
829ndg.security.common.AttCert.AttCert.parse
830ndg.security.common.X509.X509Cert.parse
831ndg.security.common.XMLSec.XMLSecDoc.parse
832ndg.security.common.gatekeeper.SecurityConfig.parse
833ndg.security.common.saml.AttributeAssertion.parse
834ndg.security.common.sessionCookie.SessionCookie.parse
835ndg.security.common.wssecurity.WSSecurityConfig.parse
836ndg.security.common.xmlsec.etree.XMLSecDoc.parse
837ndg.security.server.sso.sso.config.ssoServiceMiddleware.SSOServiceConfig.parse
838ndg.security.server.wsgi.soap.SOAPMiddleware.parse" class="py-name" href="#" onclick="return doclink('link-105', 'parse', 'link-90');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">xmlTxt</tt><tt class="py-op">)</tt> </tt>
839<a name="L551"></a><tt class="py-lineno">551</tt>  <tt class="py-line">                                 </tt>
840<a name="L552"></a><tt class="py-lineno">552</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
841<a name="L553"></a><tt class="py-lineno">553</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-106" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDocError
842ndg.security.common.xmlsec.etree.XMLSecDocError" class="py-name" href="#" onclick="return doclink('link-106', 'XMLSecDocError', 'link-47');">XMLSecDocError</a></tt><tt class="py-op">,</tt> \ </tt>
843<a name="L554"></a><tt class="py-lineno">554</tt>  <tt class="py-line">                            <tt class="py-string">"verify signature: no document has been parsed"</tt> </tt>
844<a name="L555"></a><tt class="py-lineno">555</tt>  <tt class="py-line"> </tt>
845<a name="L556"></a><tt class="py-lineno">556</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
846<a name="L557"></a><tt class="py-lineno">557</tt>  <tt class="py-line">            <tt class="py-name">parentNode</tt> <tt class="py-op">=</tt> <tt id="link-107" class="py-name"><a title="ndg.security.common.XMLSec.getParentNode" class="py-name" href="#" onclick="return doclink('link-107', 'getParentNode', 'link-6');">getParentNode</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">)</tt> </tt>
847<a name="L558"></a><tt class="py-lineno">558</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
848<a name="L559"></a><tt class="py-lineno">559</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-108" class="py-name" targets="Class ndg.security.common.XMLSec.VerifyError=ndg.security.common.XMLSec.VerifyError-class.html,Class ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError=ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError-class.html,Class ndg.security.common.xmlsec.etree.VerifyError=ndg.security.common.xmlsec.etree.VerifyError-class.html"><a title="ndg.security.common.XMLSec.VerifyError
849ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
850ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-108', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Locating parent node: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
851<a name="L560"></a><tt class="py-lineno">560</tt>  <tt class="py-line">         </tt>
852<a name="L561"></a><tt class="py-lineno">561</tt>  <tt class="py-line">        <tt class="py-name">processorNss</tt> <tt class="py-op">=</tt> \ </tt>
853<a name="L562"></a><tt class="py-lineno">562</tt>  <tt class="py-line">        <tt class="py-op">{</tt> </tt>
854<a name="L563"></a><tt class="py-lineno">563</tt>  <tt class="py-line">            <tt class="py-string">'ds'</tt><tt class="py-op">:</tt>    <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">BASE</tt><tt class="py-op">,</tt> </tt>
855<a name="L564"></a><tt class="py-lineno">564</tt>  <tt class="py-line">            <tt class="py-string">'ec'</tt><tt class="py-op">:</tt>    <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt> </tt>
856<a name="L565"></a><tt class="py-lineno">565</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
857<a name="L566"></a><tt class="py-lineno">566</tt>  <tt class="py-line">        <tt class="py-name">ctx</tt> <tt class="py-op">=</tt> <tt class="py-name">Context</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt> <tt class="py-name">processorNss</tt><tt class="py-op">=</tt><tt class="py-name">processorNss</tt><tt class="py-op">)</tt> </tt>
858<a name="L567"></a><tt class="py-lineno">567</tt>  <tt class="py-line">         </tt>
859<a name="L568"></a><tt class="py-lineno">568</tt>  <tt class="py-line"> </tt>
860<a name="L569"></a><tt class="py-lineno">569</tt>  <tt class="py-line">        <tt class="py-name">signatureNodes</tt> <tt class="py-op">=</tt> <tt class="py-name">xpath</tt><tt class="py-op">.</tt><tt class="py-name">Evaluate</tt><tt class="py-op">(</tt><tt class="py-string">'//ds:Signature'</tt><tt class="py-op">,</tt>  </tt>
861<a name="L570"></a><tt class="py-lineno">570</tt>  <tt class="py-line">                                        <tt class="py-name">contextNode</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt>  </tt>
862<a name="L571"></a><tt class="py-lineno">571</tt>  <tt class="py-line">                                        <tt class="py-name">context</tt><tt class="py-op">=</tt><tt class="py-name">ctx</tt><tt class="py-op">)</tt> </tt>
863<a name="L572"></a><tt class="py-lineno">572</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">signatureNodes</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
864<a name="L573"></a><tt class="py-lineno">573</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-109" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
865ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
866ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-109', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">'Multiple ds:Signature elements found'</tt> </tt>
867<a name="L574"></a><tt class="py-lineno">574</tt>  <tt class="py-line">         </tt>
868<a name="L575"></a><tt class="py-lineno">575</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
869<a name="L576"></a><tt class="py-lineno">576</tt>  <tt class="py-line">            <tt class="py-name">signatureNode</tt> <tt class="py-op">=</tt> <tt class="py-name">signatureNodes</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
870<a name="L577"></a><tt class="py-lineno">577</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
871<a name="L578"></a><tt class="py-lineno">578</tt>  <tt class="py-line">            <tt class="py-comment"># Message wasn't signed</tt> </tt>
872<a name="L579"></a><tt class="py-lineno">579</tt>  <tt class="py-line"><tt class="py-comment"></tt>            <tt class="py-keyword">return</tt> </tt>
873<a name="L580"></a><tt class="py-lineno">580</tt>  <tt class="py-line">         </tt>
874<a name="L581"></a><tt class="py-lineno">581</tt>  <tt class="py-line">        <tt class="py-comment"># Extract all information required from the Signature node first and </tt> </tt>
875<a name="L582"></a><tt class="py-lineno">582</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># then remove it so that the reference digest may be calculated.  This</tt> </tt>
876<a name="L583"></a><tt class="py-lineno">583</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># is necessary as for enveloped signature the digest was calculated </tt> </tt>
877<a name="L584"></a><tt class="py-lineno">584</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># prior to the addition of the Signature node</tt> </tt>
878<a name="L585"></a><tt class="py-lineno">585</tt>  <tt class="py-line"><tt class="py-comment"></tt>         </tt>
879<a name="L586"></a><tt class="py-lineno">586</tt>  <tt class="py-line">        <tt class="py-comment"># Check for canonicalization set via ds:CanonicalizationMethod -</tt> </tt>
880<a name="L587"></a><tt class="py-lineno">587</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># Use this later as a back up in case no Canonicalization was set in </tt> </tt>
881<a name="L588"></a><tt class="py-lineno">588</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># the transforms elements</tt> </tt>
882<a name="L589"></a><tt class="py-lineno">589</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
883<a name="L590"></a><tt class="py-lineno">590</tt>  <tt class="py-line">            <tt class="py-name">c14nMethodNode</tt> <tt class="py-op">=</tt> <tt class="py-name">xpath</tt><tt class="py-op">.</tt><tt class="py-name">Evaluate</tt><tt class="py-op">(</tt><tt class="py-string">'//ds:CanonicalizationMethod'</tt><tt class="py-op">,</tt>  </tt>
884<a name="L591"></a><tt class="py-lineno">591</tt>  <tt class="py-line">                                            <tt class="py-name">contextNode</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt>  </tt>
885<a name="L592"></a><tt class="py-lineno">592</tt>  <tt class="py-line">                                            <tt class="py-name">context</tt><tt class="py-op">=</tt><tt class="py-name">ctx</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
886<a name="L593"></a><tt class="py-lineno">593</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
887<a name="L594"></a><tt class="py-lineno">594</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-110" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
888ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
889ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-110', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"CanonicalizationMethod element not found: "</tt> <tt class="py-op">+</tt>\ </tt>
890<a name="L595"></a><tt class="py-lineno">595</tt>  <tt class="py-line">                                <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
891<a name="L596"></a><tt class="py-lineno">596</tt>  <tt class="py-line">         </tt>
892<a name="L597"></a><tt class="py-lineno">597</tt>  <tt class="py-line">        <tt class="py-name">refNodes</tt> <tt class="py-op">=</tt> <tt class="py-name">xpath</tt><tt class="py-op">.</tt><tt class="py-name">Evaluate</tt><tt class="py-op">(</tt><tt class="py-string">'//ds:Reference'</tt><tt class="py-op">,</tt>  </tt>
893<a name="L598"></a><tt class="py-lineno">598</tt>  <tt class="py-line">                                  <tt class="py-name">contextNode</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt>  </tt>
894<a name="L599"></a><tt class="py-lineno">599</tt>  <tt class="py-line">                                  <tt class="py-name">context</tt><tt class="py-op">=</tt><tt class="py-name">ctx</tt><tt class="py-op">)</tt> </tt>
895<a name="L600"></a><tt class="py-lineno">600</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">refNodes</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
896<a name="L601"></a><tt class="py-lineno">601</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-111" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
897ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
898ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-111', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> \ </tt>
899<a name="L602"></a><tt class="py-lineno">602</tt>  <tt class="py-line">                    <tt class="py-string">"Expecting one reference element for enveloped signature"</tt> </tt>
900<a name="L603"></a><tt class="py-lineno">603</tt>  <tt class="py-line">         </tt>
901<a name="L604"></a><tt class="py-lineno">604</tt>  <tt class="py-line">        <tt class="py-name">refNode</tt> <tt class="py-op">=</tt> <tt class="py-name">refNodes</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
902<a name="L605"></a><tt class="py-lineno">605</tt>  <tt class="py-line">         </tt>
903<a name="L606"></a><tt class="py-lineno">606</tt>  <tt class="py-line">        <tt class="py-comment"># Check for reference URI set</tt> </tt>
904<a name="L607"></a><tt class="py-lineno">607</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">refURIattrNode</tt> <tt class="py-op">=</tt> <tt class="py-name">refNode</tt><tt class="py-op">.</tt><tt class="py-name">getAttributeNode</tt><tt class="py-op">(</tt><tt class="py-string">'URI'</tt><tt class="py-op">)</tt> </tt>
905<a name="L608"></a><tt class="py-lineno">608</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">refURIattrNode</tt> <tt class="py-keyword">and</tt> <tt class="py-name">refURIattrNode</tt><tt class="py-op">.</tt><tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
906<a name="L609"></a><tt class="py-lineno">609</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-112" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
907ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
908ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-112', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Reference URI value is expected to be "</tt> <tt class="py-op">+</tt> \ </tt>
909<a name="L610"></a><tt class="py-lineno">610</tt>  <tt class="py-line">                               <tt class="py-string">"null for enveloped type signature"</tt> </tt>
910<a name="L611"></a><tt class="py-lineno">611</tt>  <tt class="py-line">         </tt>
911<a name="L612"></a><tt class="py-lineno">612</tt>  <tt class="py-line">         </tt>
912<a name="L613"></a><tt class="py-lineno">613</tt>  <tt class="py-line">        <tt class="py-comment"># Get transforms that were applied</tt> </tt>
913<a name="L614"></a><tt class="py-lineno">614</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
914<a name="L615"></a><tt class="py-lineno">615</tt>  <tt class="py-line">            <tt class="py-name">tfmsNode</tt> <tt class="py-op">=</tt> <tt id="link-113" class="py-name" targets="Function ndg.security.common.XMLSec.getElements()=ndg.security.common.XMLSec-module.html#getElements,Function ndg.security.common.wssecurity.dom.getElements()=ndg.security.common.wssecurity.dom-module.html#getElements"><a title="ndg.security.common.XMLSec.getElements
915ndg.security.common.wssecurity.dom.getElements" class="py-name" href="#" onclick="return doclink('link-113', 'getElements', 'link-113');">getElements</a></tt><tt class="py-op">(</tt><tt class="py-name">refNode</tt><tt class="py-op">,</tt> <tt class="py-string">"Transforms"</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
916<a name="L616"></a><tt class="py-lineno">616</tt>  <tt class="py-line">            <tt class="py-name">tfmNodes</tt> <tt class="py-op">=</tt> <tt id="link-114" class="py-name"><a title="ndg.security.common.XMLSec.getElements
917ndg.security.common.wssecurity.dom.getElements" class="py-name" href="#" onclick="return doclink('link-114', 'getElements', 'link-113');">getElements</a></tt><tt class="py-op">(</tt><tt class="py-name">tfmsNode</tt><tt class="py-op">,</tt> <tt class="py-string">"Transform"</tt><tt class="py-op">)</tt> </tt>
918<a name="L617"></a><tt class="py-lineno">617</tt>  <tt class="py-line"> </tt>
919<a name="L618"></a><tt class="py-lineno">618</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
920<a name="L619"></a><tt class="py-lineno">619</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-115" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
921ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
922ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-115', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt><tt class="py-string">'failed to get transform algorithm: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
923<a name="L620"></a><tt class="py-lineno">620</tt>  <tt class="py-line">             </tt>
924<a name="L621"></a><tt class="py-lineno">621</tt>  <tt class="py-line">             </tt>
925<a name="L622"></a><tt class="py-lineno">622</tt>  <tt class="py-line">        <tt class="py-comment"># Check for enveloped style signature and also check for list of </tt> </tt>
926<a name="L623"></a><tt class="py-lineno">623</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># namespaces to be excluded if Exclusive canonicalization method was</tt> </tt>
927<a name="L624"></a><tt class="py-lineno">624</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># specified</tt> </tt>
928<a name="L625"></a><tt class="py-lineno">625</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt id="link-116" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.refC14nKw" class="py-name" href="#" onclick="return doclink('link-116', 'refC14nKw', 'link-96');">refC14nKw</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
929<a name="L626"></a><tt class="py-lineno">626</tt>  <tt class="py-line">        <tt class="py-name">envelopedAlgorithmSet</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
930<a name="L627"></a><tt class="py-lineno">627</tt>  <tt class="py-line">         </tt>
931<a name="L628"></a><tt class="py-lineno">628</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
932<a name="L629"></a><tt class="py-lineno">629</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">tfmNode</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tfmNodes</tt><tt class="py-op">:</tt> </tt>
933<a name="L630"></a><tt class="py-lineno">630</tt>  <tt class="py-line">                <tt class="py-name">refAlgorithm</tt> <tt class="py-op">=</tt> <tt class="py-name">tfmNode</tt><tt class="py-op">.</tt><tt class="py-name">getAttributeNode</tt><tt class="py-op">(</tt><tt class="py-string">'Algorithm'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">value</tt> </tt>
934<a name="L631"></a><tt class="py-lineno">631</tt>  <tt class="py-line">                 </tt>
935<a name="L632"></a><tt class="py-lineno">632</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">refAlgorithm</tt> <tt class="py-op">==</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt><tt class="py-op">:</tt> </tt>
936<a name="L633"></a><tt class="py-lineno">633</tt>  <tt class="py-line">                        <tt class="py-name">inclusiveNSnode</tt> <tt class="py-op">=</tt> <tt id="link-117" class="py-name"><a title="ndg.security.common.XMLSec.getElements
937ndg.security.common.wssecurity.dom.getElements" class="py-name" href="#" onclick="return doclink('link-117', 'getElements', 'link-113');">getElements</a></tt><tt class="py-op">(</tt><tt class="py-name">tfmNode</tt><tt class="py-op">,</tt>  </tt>
938<a name="L634"></a><tt class="py-lineno">634</tt>  <tt class="py-line">                                                  <tt class="py-string">"InclusiveNamespaces"</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
939<a name="L635"></a><tt class="py-lineno">635</tt>  <tt class="py-line">                         </tt>
940<a name="L636"></a><tt class="py-lineno">636</tt>  <tt class="py-line">                        <tt class="py-name">pfxListAttNode</tt> <tt class="py-op">=</tt> <tt class="py-name">inclusiveNSnode</tt><tt class="py-op">.</tt><tt class="py-name">getAttributeNode</tt><tt class="py-op">(</tt>\ </tt>
941<a name="L637"></a><tt class="py-lineno">637</tt>  <tt class="py-line">                                                               <tt class="py-string">'PrefixList'</tt><tt class="py-op">)</tt> </tt>
942<a name="L638"></a><tt class="py-lineno">638</tt>  <tt class="py-line">                        <tt id="link-118" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.refC14nKw" class="py-name" href="#" onclick="return doclink('link-118', 'refC14nKw', 'link-96');">refC14nKw</a></tt><tt class="py-op">[</tt><tt class="py-string">'unsuppressedPrefixes'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> \ </tt>
943<a name="L639"></a><tt class="py-lineno">639</tt>  <tt class="py-line">                                                <tt class="py-name">pfxListAttNode</tt><tt class="py-op">.</tt><tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
944<a name="L640"></a><tt class="py-lineno">640</tt>  <tt class="py-line">                        <tt class="py-keyword">break</tt> </tt>
945<a name="L641"></a><tt class="py-lineno">641</tt>  <tt class="py-line">                <tt class="py-keyword">elif</tt> <tt class="py-name">refAlgorithm</tt> <tt class="py-op">==</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">ENVELOPED</tt><tt class="py-op">:</tt> </tt>
946<a name="L642"></a><tt class="py-lineno">642</tt>  <tt class="py-line">                    <tt class="py-name">envelopedAlgorithmSet</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
947<a name="L643"></a><tt class="py-lineno">643</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
948<a name="L644"></a><tt class="py-lineno">644</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-119" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
949ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
950ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-119', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">'Failed to parse tranform node: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
951<a name="L645"></a><tt class="py-lineno">645</tt>  <tt class="py-line">        </tt>
952<a name="L646"></a><tt class="py-lineno">646</tt>  <tt class="py-line">         </tt>
953<a name="L647"></a><tt class="py-lineno">647</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">envelopedAlgorithmSet</tt><tt class="py-op">:</tt> </tt>
954<a name="L648"></a><tt class="py-lineno">648</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-120" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
955ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
956ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-120', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> \ </tt>
957<a name="L649"></a><tt class="py-lineno">649</tt>  <tt class="py-line">            <tt class="py-string">"Expecting enveloped type signature to be specified in transform"</tt> </tt>
958<a name="L650"></a><tt class="py-lineno">650</tt>  <tt class="py-line">         </tt>
959<a name="L651"></a><tt class="py-lineno">651</tt>  <tt class="py-line">         </tt>
960<a name="L652"></a><tt class="py-lineno">652</tt>  <tt class="py-line">        <tt class="py-comment"># Extract the digest value for the reference </tt> </tt>
961<a name="L653"></a><tt class="py-lineno">653</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">try</tt><tt class="py-op">:</tt>            </tt>
962<a name="L654"></a><tt class="py-lineno">654</tt>  <tt class="py-line">            <tt class="py-name">refDigestNode</tt> <tt class="py-op">=</tt> <tt id="link-121" class="py-name"><a title="ndg.security.common.XMLSec.getElements
963ndg.security.common.wssecurity.dom.getElements" class="py-name" href="#" onclick="return doclink('link-121', 'getElements', 'link-113');">getElements</a></tt><tt class="py-op">(</tt><tt class="py-name">refNode</tt><tt class="py-op">,</tt> <tt class="py-string">"DigestValue"</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
964<a name="L655"></a><tt class="py-lineno">655</tt>  <tt class="py-line">            <tt class="py-name">refDigestValue</tt><tt class="py-op">=</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">refDigestNode</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.childNodes" class="py-name" href="#" onclick="return doclink('link-122', 'childNodes', 'link-9');">childNodes</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name" targets="Variable ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.nodeValue=ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy-class.html#nodeValue"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.nodeValue" class="py-name" href="#" onclick="return doclink('link-123', 'nodeValue', 'link-123');">nodeValue</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
965<a name="L656"></a><tt class="py-lineno">656</tt>  <tt class="py-line">             </tt>
966<a name="L657"></a><tt class="py-lineno">657</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
967<a name="L658"></a><tt class="py-lineno">658</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-124" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
968ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
969ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-124', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Error reading reference digest value"</tt> </tt>
970<a name="L659"></a><tt class="py-lineno">659</tt>  <tt class="py-line">         </tt>
971<a name="L660"></a><tt class="py-lineno">660</tt>  <tt class="py-line"> </tt>
972<a name="L661"></a><tt class="py-lineno">661</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
973<a name="L662"></a><tt class="py-lineno">662</tt>  <tt class="py-line">            <tt class="py-name">signedInfoNode</tt> <tt class="py-op">=</tt> <tt class="py-name">xpath</tt><tt class="py-op">.</tt><tt class="py-name">Evaluate</tt><tt class="py-op">(</tt><tt class="py-string">'//ds:SignedInfo'</tt><tt class="py-op">,</tt> </tt>
974<a name="L663"></a><tt class="py-lineno">663</tt>  <tt class="py-line">                                            <tt class="py-name">contextNode</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt>  </tt>
975<a name="L664"></a><tt class="py-lineno">664</tt>  <tt class="py-line">                                            <tt class="py-name">context</tt><tt class="py-op">=</tt><tt class="py-name">ctx</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
976<a name="L665"></a><tt class="py-lineno">665</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
977<a name="L666"></a><tt class="py-lineno">666</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-125" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
978ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
979ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-125', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Error reading SignedInfo element: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
980<a name="L667"></a><tt class="py-lineno">667</tt>  <tt class="py-line"> </tt>
981<a name="L668"></a><tt class="py-lineno">668</tt>  <tt class="py-line"> </tt>
982<a name="L669"></a><tt class="py-lineno">669</tt>  <tt class="py-line">        <tt class="py-comment"># Get algorithm used for canonicalization of the SignedInfo </tt> </tt>
983<a name="L670"></a><tt class="py-lineno">670</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># element.  Nb. This is NOT necessarily the same as that used to</tt> </tt>
984<a name="L671"></a><tt class="py-lineno">671</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># canonicalize the reference elements checked above!</tt> </tt>
985<a name="L672"></a><tt class="py-lineno">672</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
986<a name="L673"></a><tt class="py-lineno">673</tt>  <tt class="py-line">            <tt class="py-name">signedInfoC14nAlg</tt> <tt class="py-op">=</tt> <tt class="py-name">c14nMethodNode</tt><tt class="py-op">.</tt><tt class="py-name">getAttributeNode</tt><tt class="py-op">(</tt>\ </tt>
987<a name="L674"></a><tt class="py-lineno">674</tt>  <tt class="py-line">                                                            <tt class="py-string">"Algorithm"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">value</tt> </tt>
988<a name="L675"></a><tt class="py-lineno">675</tt>  <tt class="py-line">            <tt id="link-126" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.signedInfoC14nKw" class="py-name" href="#" onclick="return doclink('link-126', 'signedInfoC14nKw', 'link-89');">signedInfoC14nKw</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
989<a name="L676"></a><tt class="py-lineno">676</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">signedInfoC14nAlg</tt> <tt class="py-op">==</tt> <tt class="py-name">DSIG</tt><tt class="py-op">.</tt><tt class="py-name">C14N_EXCL</tt><tt class="py-op">:</tt> </tt>
990<a name="L677"></a><tt class="py-lineno">677</tt>  <tt class="py-line">                <tt class="py-name">inclusiveNS</tt> <tt class="py-op">=</tt> <tt id="link-127" class="py-name"><a title="ndg.security.common.XMLSec.getElements
991ndg.security.common.wssecurity.dom.getElements" class="py-name" href="#" onclick="return doclink('link-127', 'getElements', 'link-113');">getElements</a></tt><tt class="py-op">(</tt><tt class="py-name">c14nMethodNode</tt><tt class="py-op">,</tt> </tt>
992<a name="L678"></a><tt class="py-lineno">678</tt>  <tt class="py-line">                                          <tt class="py-string">"InclusiveNamespaces"</tt><tt class="py-op">)</tt> </tt>
993<a name="L679"></a><tt class="py-lineno">679</tt>  <tt class="py-line">                 </tt>
994<a name="L680"></a><tt class="py-lineno">680</tt>  <tt class="py-line">                <tt class="py-name">pfxListAttNode</tt> <tt class="py-op">=</tt> <tt class="py-name">inclusiveNS</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">getAttributeNode</tt><tt class="py-op">(</tt><tt class="py-string">'PrefixList'</tt><tt class="py-op">)</tt> </tt>
995<a name="L681"></a><tt class="py-lineno">681</tt>  <tt class="py-line">                <tt id="link-128" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.signedInfoC14nKw" class="py-name" href="#" onclick="return doclink('link-128', 'signedInfoC14nKw', 'link-89');">signedInfoC14nKw</a></tt><tt class="py-op">[</tt><tt class="py-string">'unsuppressedPrefixes'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> \ </tt>
996<a name="L682"></a><tt class="py-lineno">682</tt>  <tt class="py-line">                                                <tt class="py-name">pfxListAttNode</tt><tt class="py-op">.</tt><tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
997<a name="L683"></a><tt class="py-lineno">683</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
998<a name="L684"></a><tt class="py-lineno">684</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-129" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
999ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
1000ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-129', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">'failed to handle exclusive '</tt> <tt class="py-op">+</tt> \ </tt>
1001<a name="L685"></a><tt class="py-lineno">685</tt>  <tt class="py-line">                                <tt class="py-string">'canonicalisation for SignedInfo: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
1002<a name="L686"></a><tt class="py-lineno">686</tt>  <tt class="py-line">         </tt>
1003<a name="L687"></a><tt class="py-lineno">687</tt>  <tt class="py-line">        <tt class="py-comment"># Get the signature value in order to check against the digest just</tt> </tt>
1004<a name="L688"></a><tt class="py-lineno">688</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># calculated</tt> </tt>
1005<a name="L689"></a><tt class="py-lineno">689</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1006<a name="L690"></a><tt class="py-lineno">690</tt>  <tt class="py-line">            <tt class="py-name">signatureValueNode</tt> <tt class="py-op">=</tt> <tt class="py-name">xpath</tt><tt class="py-op">.</tt><tt class="py-name">Evaluate</tt><tt class="py-op">(</tt><tt class="py-string">'//ds:SignatureValue'</tt><tt class="py-op">,</tt> </tt>
1007<a name="L691"></a><tt class="py-lineno">691</tt>  <tt class="py-line">                                                <tt class="py-name">contextNode</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt>  </tt>
1008<a name="L692"></a><tt class="py-lineno">692</tt>  <tt class="py-line">                                                <tt class="py-name">context</tt><tt class="py-op">=</tt><tt class="py-name">ctx</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt>     </tt>
1009<a name="L693"></a><tt class="py-lineno">693</tt>  <tt class="py-line">            <tt class="py-comment"># Remove base 64 encoding</tt> </tt>
1010<a name="L694"></a><tt class="py-lineno">694</tt>  <tt class="py-line"><tt class="py-comment"></tt>            <tt class="py-name">b64EncSignatureValue</tt> <tt class="py-op">=</tt> \ </tt>
1011<a name="L695"></a><tt class="py-lineno">695</tt>  <tt class="py-line">                    <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">signatureValueNode</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.childNodes" class="py-name" href="#" onclick="return doclink('link-130', 'childNodes', 'link-9');">childNodes</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.nodeValue" class="py-name" href="#" onclick="return doclink('link-131', 'nodeValue', 'link-123');">nodeValue</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1012<a name="L696"></a><tt class="py-lineno">696</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
1013<a name="L697"></a><tt class="py-lineno">697</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-132" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
1014ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
1015ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-132', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Error reading signatureValue: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
1016<a name="L698"></a><tt class="py-lineno">698</tt>  <tt class="py-line">                     </tt>
1017<a name="L699"></a><tt class="py-lineno">699</tt>  <tt class="py-line">        <tt class="py-name">signatureValue</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">decodestring</tt><tt class="py-op">(</tt><tt class="py-name">b64EncSignatureValue</tt><tt class="py-op">)</tt> </tt>
1018<a name="L700"></a><tt class="py-lineno">700</tt>  <tt class="py-line"> </tt>
1019<a name="L701"></a><tt class="py-lineno">701</tt>  <tt class="py-line">        <tt class="py-comment"># Canonicalize the SignedInfo node and take digest</tt> </tt>
1020<a name="L702"></a><tt class="py-lineno">702</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signedInfoC14n</tt> <tt class="py-op">=</tt> <tt class="py-name">Canonicalize</tt><tt class="py-op">(</tt><tt class="py-name">signedInfoNode</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt id="link-133" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.signedInfoC14nKw" class="py-name" href="#" onclick="return doclink('link-133', 'signedInfoC14nKw', 'link-89');">signedInfoC14nKw</a></tt><tt class="py-op">)</tt>         </tt>
1021<a name="L703"></a><tt class="py-lineno">703</tt>  <tt class="py-line">        <tt class="py-name">calcSignedInfoDigestValue</tt> <tt class="py-op">=</tt> <tt class="py-name">sha</tt><tt class="py-op">(</tt><tt class="py-name">signedInfoC14n</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1022<a name="L704"></a><tt class="py-lineno">704</tt>  <tt class="py-line"> </tt>
1023<a name="L705"></a><tt class="py-lineno">705</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1024<a name="L706"></a><tt class="py-lineno">706</tt>  <tt class="py-line">            <tt class="py-comment"># Try extracting X.509 Cert from ds:X509Certificate node in </tt> </tt>
1025<a name="L707"></a><tt class="py-lineno">707</tt>  <tt class="py-line"><tt class="py-comment"></tt>            <tt class="py-comment"># KeyInfo</tt> </tt>
1026<a name="L708"></a><tt class="py-lineno">708</tt>  <tt class="py-line"><tt class="py-comment"></tt>            <tt class="py-name">x509CertNode</tt> <tt class="py-op">=</tt> <tt class="py-name">xpath</tt><tt class="py-op">.</tt><tt class="py-name">Evaluate</tt><tt class="py-op">(</tt><tt class="py-string">'//ds:X509Certificate'</tt><tt class="py-op">,</tt> </tt>
1027<a name="L709"></a><tt class="py-lineno">709</tt>  <tt class="py-line">                                          <tt class="py-name">contextNode</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__docNode</tt><tt class="py-op">,</tt> </tt>
1028<a name="L710"></a><tt class="py-lineno">710</tt>  <tt class="py-line">                                          <tt class="py-name">context</tt><tt class="py-op">=</tt><tt class="py-name">ctx</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
1029<a name="L711"></a><tt class="py-lineno">711</tt>  <tt class="py-line">            <tt class="py-name">b64EncX509Cert</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__beginCert" class="py-name" href="#" onclick="return doclink('link-134', '__beginCert', 'link-23');">__beginCert</a></tt> <tt class="py-op">+</tt> \ </tt>
1030<a name="L712"></a><tt class="py-lineno">712</tt>  <tt class="py-line">                         <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">x509CertNode</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="ndg.security.common.zsi_utils.elementtreeproxy.ElementTreeProxy.childNodes" class="py-name" href="#" onclick="return doclink('link-135', 'childNodes', 'link-9');">childNodes</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">_get_nodeValue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> \ </tt>
1031<a name="L713"></a><tt class="py-lineno">713</tt>  <tt class="py-line">                         <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="ndg.security.common.XMLSec.XMLSecDoc.__endCert" class="py-name" href="#" onclick="return doclink('link-136', '__endCert', 'link-24');">__endCert</a></tt> </tt>
1032<a name="L714"></a><tt class="py-lineno">714</tt>  <tt class="py-line"> </tt>
1033<a name="L715"></a><tt class="py-lineno">715</tt>  <tt class="py-line">            <tt id="link-137" class="py-name"><a title="ndg.security.common.sessionCookie.SessionCookie.x509Cert" class="py-name" href="#" onclick="return doclink('link-137', 'x509Cert', 'link-102');">x509Cert</a></tt> <tt class="py-op">=</tt> <tt id="link-138" class="py-name"><a title="ZSI.wstools.Namespaces.OASIS.X509TOKEN.X509
1034ndg.security.common.X509
1035ndg.security.test.X509" class="py-name" href="#" onclick="return doclink('link-138', 'X509', 'link-10');">X509</a></tt><tt class="py-op">.</tt><tt class="py-name">load_cert_string</tt><tt class="py-op">(</tt><tt class="py-name">b64EncX509Cert</tt><tt class="py-op">)</tt> </tt>
1036<a name="L716"></a><tt class="py-lineno">716</tt>  <tt class="py-line">             </tt>
1037<a name="L717"></a><tt class="py-lineno">717</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
1038<a name="L718"></a><tt class="py-lineno">718</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-139" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
1039ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
1040ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-139', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> \ </tt>
1041<a name="L719"></a><tt class="py-lineno">719</tt>  <tt class="py-line">                <tt class="py-string">'Unable to read certificate from "ds:X509Certificate" element'</tt> </tt>
1042<a name="L720"></a><tt class="py-lineno">720</tt>  <tt class="py-line"> </tt>
1043<a name="L721"></a><tt class="py-lineno">721</tt>  <tt class="py-line"> </tt>
1044<a name="L722"></a><tt class="py-lineno">722</tt>  <tt class="py-line">        <tt class="py-comment"># Temporarily remove the Signature node in order to correctly</tt> </tt>
1045<a name="L723"></a><tt class="py-lineno">723</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># canonicalize the reference</tt> </tt>
1046<a name="L724"></a><tt class="py-lineno">724</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">signatureNode</tt> <tt class="py-op">=</tt> <tt class="py-name">parentNode</tt><tt class="py-op">.</tt><tt class="py-name">removeChild</tt><tt class="py-op">(</tt><tt class="py-name">signatureNode</tt><tt class="py-op">)</tt> </tt>
1047<a name="L725"></a><tt class="py-lineno">725</tt>  <tt class="py-line">         </tt>
1048<a name="L726"></a><tt class="py-lineno">726</tt>  <tt class="py-line">         </tt>
1049<a name="L727"></a><tt class="py-lineno">727</tt>  <tt class="py-line">        <tt class="py-comment"># Two stage process: reference validation followed by signature </tt> </tt>
1050<a name="L728"></a><tt class="py-lineno">728</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># validation </tt> </tt>
1051<a name="L729"></a><tt class="py-lineno">729</tt>  <tt class="py-line"><tt class="py-comment"></tt>         </tt>
1052<a name="L730"></a><tt class="py-lineno">730</tt>  <tt class="py-line">        <tt class="py-comment"># 1) Reference Validation</tt> </tt>
1053<a name="L731"></a><tt class="py-lineno">731</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment">#</tt> </tt>
1054<a name="L732"></a><tt class="py-lineno">732</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># With the Signature node now removed, the parent node can now be</tt> </tt>
1055<a name="L733"></a><tt class="py-lineno">733</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># canonicalized and the digest calculated</tt> </tt>
1056<a name="L734"></a><tt class="py-lineno">734</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">refC14n</tt> <tt class="py-op">=</tt> <tt class="py-name">Canonicalize</tt><tt class="py-op">(</tt><tt class="py-name">parentNode</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt id="link-140" class="py-name"><a title="ndg.security.common.wssecurity.BaseSignatureHandler.BaseSignatureHandler.refC14nKw" class="py-name" href="#" onclick="return doclink('link-140', 'refC14nKw', 'link-96');">refC14nKw</a></tt><tt class="py-op">)</tt> </tt>
1057<a name="L735"></a><tt class="py-lineno">735</tt>  <tt class="py-line">        <tt class="py-name">calcDigestValue</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">encodestring</tt><tt class="py-op">(</tt><tt class="py-name">sha</tt><tt class="py-op">(</tt><tt class="py-name">refC14n</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">digest</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1058<a name="L736"></a><tt class="py-lineno">736</tt>  <tt class="py-line">         </tt>
1059<a name="L737"></a><tt class="py-lineno">737</tt>  <tt class="py-line">        <tt class="py-comment"># Restore signature node</tt> </tt>
1060<a name="L738"></a><tt class="py-lineno">738</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">parentNode</tt><tt class="py-op">.</tt><tt class="py-name">appendChild</tt><tt class="py-op">(</tt><tt class="py-name">signatureNode</tt><tt class="py-op">)</tt> </tt>
1061<a name="L739"></a><tt class="py-lineno">739</tt>  <tt class="py-line">         </tt>
1062<a name="L740"></a><tt class="py-lineno">740</tt>  <tt class="py-line">         </tt>
1063<a name="L741"></a><tt class="py-lineno">741</tt>  <tt class="py-line">        <tt class="py-comment"># Reference validates if the newly calculated digest value and the </tt> </tt>
1064<a name="L742"></a><tt class="py-lineno">742</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># digest value extracted from the Reference section of the SignedInfo </tt> </tt>
1065<a name="L743"></a><tt class="py-lineno">743</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># are the same</tt> </tt>
1066<a name="L744"></a><tt class="py-lineno">744</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">if</tt> <tt class="py-name">calcDigestValue</tt> <tt class="py-op">!=</tt> <tt class="py-name">refDigestValue</tt><tt class="py-op">:</tt> </tt>
1067<a name="L745"></a><tt class="py-lineno">745</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-141" class="py-name" targets="Class ndg.security.common.XMLSec.InvalidSignature=ndg.security.common.XMLSec.InvalidSignature-class.html,Class ndg.security.common.wssecurity.BaseSignatureHandler.InvalidSignature=ndg.security.common.wssecurity.BaseSignatureHandler.InvalidSignature-class.html,Class ndg.security.common.xmlsec.etree.InvalidSignature=ndg.security.common.xmlsec.etree.InvalidSignature-class.html"><a title="ndg.security.common.XMLSec.InvalidSignature
1068ndg.security.common.wssecurity.BaseSignatureHandler.InvalidSignature
1069ndg.security.common.xmlsec.etree.InvalidSignature" class="py-name" href="#" onclick="return doclink('link-141', 'InvalidSignature', 'link-141');">InvalidSignature</a></tt><tt class="py-op">,</tt> \ </tt>
1070<a name="L746"></a><tt class="py-lineno">746</tt>  <tt class="py-line">                            <tt class="py-string">'Digest Values do not match for reference data'</tt> </tt>
1071<a name="L747"></a><tt class="py-lineno">747</tt>  <tt class="py-line"> </tt>
1072<a name="L748"></a><tt class="py-lineno">748</tt>  <tt class="py-line"> </tt>
1073<a name="L749"></a><tt class="py-lineno">749</tt>  <tt class="py-line">        <tt class="py-comment"># 2) Signature Validation</tt> </tt>
1074<a name="L750"></a><tt class="py-lineno">750</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment">#        </tt> </tt>
1075<a name="L751"></a><tt class="py-lineno">751</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># Extract RSA public key from the cert</tt> </tt>
1076<a name="L752"></a><tt class="py-lineno">752</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-name">rsaPubKey</tt> <tt class="py-op">=</tt> <tt id="link-142" class="py-name"><a title="ndg.security.common.sessionCookie.SessionCookie.x509Cert" class="py-name" href="#" onclick="return doclink('link-142', 'x509Cert', 'link-102');">x509Cert</a></tt><tt class="py-op">.</tt><tt class="py-name">get_pubkey</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">get_rsa</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1077<a name="L753"></a><tt class="py-lineno">753</tt>  <tt class="py-line"> </tt>
1078<a name="L754"></a><tt class="py-lineno">754</tt>  <tt class="py-line"> </tt>
1079<a name="L755"></a><tt class="py-lineno">755</tt>  <tt class="py-line">        <tt class="py-comment"># Compare digest value of the SignedInfo element calculated earlier </tt> </tt>
1080<a name="L756"></a><tt class="py-lineno">756</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-comment"># against the signatureValue read from the SignedInfo</tt> </tt>
1081<a name="L757"></a><tt class="py-lineno">757</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
1082<a name="L758"></a><tt class="py-lineno">758</tt>  <tt class="py-line">            <tt id="link-143" class="py-name" targets="Method ndg.security.common.X509.X509Cert.verify()=ndg.security.common.X509.X509Cert-class.html#verify,Method ndg.security.common.wssecurity.dom.SignatureHandler.verify()=ndg.security.common.wssecurity.dom.SignatureHandler-class.html#verify,Method ndg.security.common.wssecurity.etree.SignatureHandler.verify()=ndg.security.common.wssecurity.etree.SignatureHandler-class.html#verify,Method ndg.security.test.wsSecurity.server.echoServer.EchoService.verify()=ndg.security.test.wsSecurity.server.echoServer.EchoService-class.html#verify"><a title="ndg.security.common.X509.X509Cert.verify
1083ndg.security.common.wssecurity.dom.SignatureHandler.verify
1084ndg.security.common.wssecurity.etree.SignatureHandler.verify
1085ndg.security.test.wsSecurity.server.echoServer.EchoService.verify" class="py-name" href="#" onclick="return doclink('link-143', 'verify', 'link-143');">verify</a></tt> <tt class="py-op">=</tt> <tt class="py-name">rsaPubKey</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="ndg.security.common.X509.X509Cert.verify
1086ndg.security.common.wssecurity.dom.SignatureHandler.verify
1087ndg.security.common.wssecurity.etree.SignatureHandler.verify
1088ndg.security.test.wsSecurity.server.echoServer.EchoService.verify" class="py-name" href="#" onclick="return doclink('link-144', 'verify', 'link-143');">verify</a></tt><tt class="py-op">(</tt><tt class="py-name">calcSignedInfoDigestValue</tt><tt class="py-op">,</tt>  </tt>
1089<a name="L759"></a><tt class="py-lineno">759</tt>  <tt class="py-line">                                      <tt class="py-name">signatureValue</tt><tt class="py-op">)</tt> </tt>
1090<a name="L760"></a><tt class="py-lineno">760</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">RSA</tt><tt class="py-op">.</tt><tt class="py-name">RSAError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
1091<a name="L761"></a><tt class="py-lineno">761</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-145" class="py-name"><a title="ndg.security.common.XMLSec.VerifyError
1092ndg.security.common.wssecurity.BaseSignatureHandler.VerifyError
1093ndg.security.common.xmlsec.etree.VerifyError" class="py-name" href="#" onclick="return doclink('link-145', 'VerifyError', 'link-108');">VerifyError</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Error in Signature: "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt> </tt>
1094<a name="L762"></a><tt class="py-lineno">762</tt>  <tt class="py-line">         </tt>
1095<a name="L763"></a><tt class="py-lineno">763</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-146" class="py-name"><a title="ndg.security.common.X509.X509Cert.verify
1096ndg.security.common.wssecurity.dom.SignatureHandler.verify
1097ndg.security.common.wssecurity.etree.SignatureHandler.verify
1098ndg.security.test.wsSecurity.server.echoServer.EchoService.verify" class="py-name" href="#" onclick="return doclink('link-146', 'verify', 'link-143');">verify</a></tt><tt class="py-op">:</tt> </tt>
1099<a name="L764"></a><tt class="py-lineno">764</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt id="link-147" class="py-name"><a title="ndg.security.common.XMLSec.InvalidSignature
1100ndg.security.common.wssecurity.BaseSignatureHandler.InvalidSignature
1101ndg.security.common.xmlsec.etree.InvalidSignature" class="py-name" href="#" onclick="return doclink('link-147', 'InvalidSignature', 'link-141');">InvalidSignature</a></tt><tt class="py-op">,</tt> <tt class="py-string">"Invalid signature"</tt> </tt>
1102<a name="L765"></a><tt class="py-lineno">765</tt>  <tt class="py-line">         </tt>
1103<a name="L766"></a><tt class="py-lineno">766</tt>  <tt class="py-line">        <tt class="py-comment"># Verify chain of trust if list cert list is present</tt> </tt>
1104<a name="L767"></a><tt class="py-lineno">767</tt>  <tt class="py-line"><tt class="py-comment"></tt>        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt><tt class="py-op">:</tt> </tt>
1105<a name="L768"></a><tt class="py-lineno">768</tt>  <tt class="py-line">            <tt class="py-comment"># Make a stack object for CA certs </tt> </tt>
1106<a name="L769"></a><tt class="py-lineno">769</tt>  <tt class="py-line"><tt class="py-comment"></tt>            <tt class="py-name">caX509Stack</tt> <tt class="py-op">=</tt> <tt id="link-148" class="py-name"><a title="ndg.security.common.X509.X509Stack" class="py-name" href="#" onclick="return doclink('link-148', 'X509Stack', 'link-16');">X509Stack</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1107<a name="L770"></a><tt class="py-lineno">770</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">cert</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__certFilePathList</tt><tt class="py-op">:</tt> </tt>
1108<a name="L771"></a><tt class="py-lineno">771</tt>  <tt class="py-line">                <tt class="py-name">caX509Stack</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name" targets="Method ndg.security.common.X509.X509Stack.push()=ndg.security.common.X509.X509Stack-class.html#push"><a title="ndg.security.common.X509.X509Stack.push" class="py-name" href="#" onclick="return doclink('link-149', 'push', 'link-149');">push</a></tt><tt class="py-op">(</tt><tt id="link-150" class="py-name"><a title="ndg.security.common.X509.X509CertRead" class="py-name" href="#" onclick="return doclink('link-150', 'X509CertRead', 'link-15');">X509CertRead</a></tt><tt class="py-op">(</tt><tt class="py-name">cert</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
1109<a name="L772"></a><tt class="py-lineno">772</tt>  <tt class="py-line">              </tt>
1110<a name="L773"></a><tt class="py-lineno">773</tt>  <tt class="py-line">            <tt class="py-comment"># Make a stack object for certs to be verified   </tt> </tt>
1111<a name="L774"></a><tt class="py-lineno">774</tt>  <tt class="py-line"><tt class="py-comment"></tt>            <tt class="py-name">x509Stack</tt> <tt class="py-op">=</tt> <tt id="link-151" class="py-name"><a title="ndg.security.common.X509.X509Stack" class="py-name" href="#" onclick="return doclink('link-151', 'X509Stack', 'link-16');">X509Stack</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
1112<a name="L775"></a><tt class="py-lineno">775</tt>  <tt class="py-line">            <tt class="py-name">x509Stack</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="ndg.security.common.X509.X509Stack.push" class="py-name" href="#" onclick="return doclink('link-152', 'push', 'link-149');">push</a></tt><tt class="py-op">(</tt><tt id="link-153" class="py-name"><a title="ndg.security.common.sessionCookie.SessionCookie.x509Cert" class="py-name" href="#" onclick="return doclink('link-153', 'x509Cert', 'link-102');">x509Cert</a></tt><tt class="py-op">)</tt> </tt>
1113<a name="L776"></a><tt class="py-lineno">776</tt>  <tt class="py-line">            <tt class="py-name">x509Stack</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name" targets="Method ndg.security.common.X509.X509Stack.verifyCertChain()=ndg.security.common.X509.X509Stack-class.html#verifyCertChain"><a title="ndg.security.common.X509.X509Stack.verifyCertChain" class="py-name" href="#" onclick="return doclink('link-154', 'verifyCertChain', 'link-154');">verifyCertChain</a></tt><tt class="py-op">(</tt><tt class="py-name">caX509Stack</tt><tt class="py-op">=</tt><tt class="py-name">caX509Stack</tt><tt class="py-op">)</tt> </tt>
1114</div><a name="L777"></a><tt class="py-lineno">777</tt>  <tt class="py-line"> </tt>
1115<a name="L778"></a><tt class="py-lineno">778</tt>  <tt class="py-line"> </tt>
1116<a name="L779"></a><tt class="py-lineno">779</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
1117<a name="XMLSecDoc.encrypt"></a><div id="XMLSecDoc.encrypt-def"><a name="L780"></a><tt class="py-lineno">780</tt> <a class="py-toggle" href="#" id="XMLSecDoc.encrypt-toggle" onclick="return toggle('XMLSecDoc.encrypt');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#encrypt">encrypt</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt>
1118<a name="L781"></a><tt class="py-lineno">781</tt>  <tt class="py-line">                <tt class="py-param">xmlTxt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt>  </tt>
1119<a name="L782"></a><tt class="py-lineno">782</tt>  <tt class="py-line">                <tt class="py-param">filePath</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt>  </tt>
1120<a name="L783"></a><tt class="py-lineno">783</tt>  <tt class="py-line">                <tt class="py-param">inclX509SubjName</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
1121<a name="L784"></a><tt class="py-lineno">784</tt>  <tt class="py-line">                <tt class="py-param">inclX509IssSerial</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1122</div><div id="XMLSecDoc.encrypt-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.encrypt-expanded"><a name="L785"></a><tt class="py-lineno">785</tt>  <tt class="py-line">        <tt class="py-docstring">"""Encrypt a document using recipient's public key</tt> </tt>
1123<a name="L786"></a><tt class="py-lineno">786</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1124<a name="L787"></a><tt class="py-lineno">787</tt>  <tt class="py-line"><tt class="py-docstring">        Encrypts xml file using a dynamically created template, a session </tt> </tt>
1125<a name="L788"></a><tt class="py-lineno">788</tt>  <tt class="py-line"><tt class="py-docstring">        triple DES key and an RSA key from keys manager.</tt> </tt>
1126<a name="L789"></a><tt class="py-lineno">789</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
1127<a name="L790"></a><tt class="py-lineno">790</tt>  <tt class="py-line"><tt class="py-docstring">        @param xmlTxt: string buffer containing the text from the XML file to </tt> </tt>
1128<a name="L791"></a><tt class="py-lineno">791</tt>  <tt class="py-line"><tt class="py-docstring">        be encrypted.  If omitted, the filePath argument is used instead.</tt> </tt>
1129<a name="L792"></a><tt class="py-lineno">792</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1130<a name="L793"></a><tt class="py-lineno">793</tt>  <tt class="py-line"><tt class="py-docstring">        @param filePath: file path to XML file to be encrypted.  This</tt> </tt>
1131<a name="L794"></a><tt class="py-lineno">794</tt>  <tt class="py-line"><tt class="py-docstring">        argument is used if no xmlTxt was provided.  If filePath itself is </tt> </tt>
1132<a name="L795"></a><tt class="py-lineno">795</tt>  <tt class="py-line"><tt class="py-docstring">        omitted the file set by self.__filePath is read instead.</tt> </tt>
1133<a name="L796"></a><tt class="py-lineno">796</tt>  <tt class="py-line"><tt class="py-docstring">                                </tt> </tt>
1134<a name="L797"></a><tt class="py-lineno">797</tt>  <tt class="py-line"><tt class="py-docstring">        @param inclX509SubjName: include subject name of signing X.509 </tt> </tt>
1135<a name="L798"></a><tt class="py-lineno">798</tt>  <tt class="py-line"><tt class="py-docstring">        certificate.</tt> </tt>
1136<a name="L799"></a><tt class="py-lineno">799</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
1137<a name="L800"></a><tt class="py-lineno">800</tt>  <tt class="py-line"><tt class="py-docstring">        @param inclX509IssSerial: include issuer name and serial number in</tt> </tt>
1138<a name="L801"></a><tt class="py-lineno">801</tt>  <tt class="py-line"><tt class="py-docstring">        signature"""</tt> </tt>
1139<a name="L802"></a><tt class="py-lineno">802</tt>  <tt class="py-line">         </tt>
1140<a name="L803"></a><tt class="py-lineno">803</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">,</tt> \ </tt>
1141<a name="L804"></a><tt class="py-lineno">804</tt>  <tt class="py-line">                        <tt class="py-string">"Encryption algorithm not implemented in this version"</tt> </tt>
1142</div><a name="L805"></a><tt class="py-lineno">805</tt>  <tt class="py-line">  </tt>
1143<a name="L806"></a><tt class="py-lineno">806</tt>  <tt class="py-line">  </tt>
1144<a name="L807"></a><tt class="py-lineno">807</tt>  <tt class="py-line">    <tt class="py-comment">#_________________________________________________________________________</tt> </tt>
1145<a name="XMLSecDoc.decrypt"></a><div id="XMLSecDoc.decrypt-def"><a name="L808"></a><tt class="py-lineno">808</tt> <a class="py-toggle" href="#" id="XMLSecDoc.decrypt-toggle" onclick="return toggle('XMLSecDoc.decrypt');">-</a><tt class="py-line"><tt class="py-comment"></tt>    <tt class="py-keyword">def</tt> <a class="py-def-name" href="ndg.security.common.XMLSec.XMLSecDoc-class.html#decrypt">decrypt</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt>  </tt>
1146<a name="L809"></a><tt class="py-lineno">809</tt>  <tt class="py-line">                <tt class="py-param">xmlTxt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt>  </tt>
1147<a name="L810"></a><tt class="py-lineno">810</tt>  <tt class="py-line">                <tt class="py-param">filePath</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
1148</div><div id="XMLSecDoc.decrypt-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="XMLSecDoc.decrypt-expanded"><a name="L811"></a><tt class="py-lineno">811</tt>  <tt class="py-line">        <tt class="py-docstring">"""Decrypt a document using a private key of public/private key pair</tt> </tt>
1149<a name="L812"></a><tt class="py-lineno">812</tt>  <tt class="py-line"><tt class="py-docstring">        </tt> </tt>
1150<a name="L813"></a><tt class="py-lineno">813</tt>  <tt class="py-line"><tt class="py-docstring">        @param xmlTxt: string buffer containing the text from the XML file to</tt> </tt>
1151<a name="L814"></a><tt class="py-lineno">814</tt>  <tt class="py-line"><tt class="py-docstring">         be decrypted.  If omitted, the filePath argument is used instead.</tt> </tt>
1152<a name="L815"></a><tt class="py-lineno">815</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
1153<a name="L816"></a><tt class="py-lineno">816</tt>  <tt class="py-line"><tt class="py-docstring">        @param filePath: file path to XML file to be decrypted.  This</tt> </tt>
1154<a name="L817"></a><tt class="py-lineno">817</tt>  <tt class="py-line"><tt class="py-docstring">        argument is used if no xmlTxt was provided.  If filePath itself is </tt> </tt>
1155<a name="L818"></a><tt class="py-lineno">818</tt>  <tt class="py-line"><tt class="py-docstring">        omitted the file set by self.__filePath is read instead."""</tt> </tt>
1156<a name="L819"></a><tt class="py-lineno">819</tt>  <tt class="py-line">         </tt>
1157<a name="L820"></a><tt class="py-lineno">820</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">,</tt> \ </tt>
1158<a name="L821"></a><tt class="py-lineno">821</tt>  <tt class="py-line">                        <tt class="py-string">"Encryption algorithm not implemented in this version"</tt> </tt>
1159</div></div><a name="L822"></a><tt class="py-lineno">822</tt>  <tt class="py-line"> </tt><script type="text/javascript">
1160<!--
1161expandto(location.href);
1162// -->
1163</script>
1164</pre>
1165<br />
1166<!-- ==================== NAVIGATION BAR ==================== -->
1167<table class="navbar" border="0" width="100%" cellpadding="0"
1168       bgcolor="#a0c0ff" cellspacing="0">
1169  <tr valign="middle">
1170  <!-- Home link -->
1171      <th>&nbsp;&nbsp;&nbsp;<a
1172        href="ndg-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
1173
1174  <!-- Tree link -->
1175      <th>&nbsp;&nbsp;&nbsp;<a
1176        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
1177
1178  <!-- Index link -->
1179      <th>&nbsp;&nbsp;&nbsp;<a
1180        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
1181
1182  <!-- Help link -->
1183      <th>&nbsp;&nbsp;&nbsp;<a
1184        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
1185
1186  <!-- Project homepage -->
1187      <th class="navbar" align="right" width="100%">
1188        <table border="0" cellpadding="0" cellspacing="0">
1189          <tr><th class="navbar" align="center"
1190            >NDG Security</th>
1191          </tr></table></th>
1192  </tr>
1193</table>
1194<table border="0" cellpadding="0" cellspacing="0" width="100%%">
1195  <tr>
1196    <td align="left" class="footer">
1197    <a href="epydoc-log.html">Generated by Epydoc
1198    3.0.1 on Thu Sep  4 09:37:58 2008</a>
1199    </td>
1200    <td align="right" class="footer">
1201      <a target="mainFrame" href="http://epydoc.sourceforge.net"
1202        >http://epydoc.sourceforge.net</a>
1203    </td>
1204  </tr>
1205</table>
1206
1207<script type="text/javascript">
1208  <!--
1209  // Private objects are initially displayed (because if
1210  // javascript is turned off then we want them to be
1211  // visible); but by default, we want to hide them.  So hide
1212  // them unless we have a cookie that says to show them.
1213  checkCookie();
1214  // -->
1215</script>
1216</body>
1217</html>
Note: See TracBrowser for help on using the repository browser.