Modified WAYF site configuration so that xml schema
authorwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 25 Jun 2002 03:16:53 +0000 (03:16 +0000)
committerwassa <wassa@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 25 Jun 2002 03:16:53 +0000 (03:16 +0000)
locations can be overriden based in a Properties file.

git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/trunk@185 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

src/edu/internet2/middleware/shibboleth/common/ServletDigester.java
src/schemas/xml.xsd [new file with mode: 0755]
src/schemas/xmldsig-core-schema.xsd [new file with mode: 0755]
webApplication/WEB-INF/conf/schemas.properties [new file with mode: 0755]
webApplication/WEB-INF/conf/sites.xml

index 25a9690..cd42593 100755 (executable)
@@ -1,6 +1,8 @@
 package edu.internet2.middleware.shibboleth.common;
 
 import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.Properties;
 import java.util.StringTokenizer;
 
 import javax.servlet.ServletContext;
@@ -8,6 +10,7 @@ import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
 import org.apache.commons.digester.Digester;
+import org.apache.log4j.Logger;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -23,8 +26,9 @@ import org.xml.sax.XMLReader;
 
 public class ServletDigester extends Digester {
 
+       private static Logger log =
+               Logger.getLogger(ServletDigester.class.getName());
        private ServletContext context;
-
        public ServletDigester() {
                super();
                configure();
@@ -52,8 +56,9 @@ public class ServletDigester extends Digester {
        /**
         * @see org.xml.sax.EntityResolver#resolveEntity(String, String)
         */
-       public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
-
+       public InputSource resolveEntity(String publicId, String systemId)
+               throws SAXException {
+               log.debug("Resolving entity for System ID: " + systemId);
                if (context != null && systemId != null) {
                        StringTokenizer tokenString = new StringTokenizer(systemId, "/");
                        String xsdFile = "";
@@ -61,7 +66,9 @@ public class ServletDigester extends Digester {
                                xsdFile = tokenString.nextToken();
                        }
                        if (xsdFile.endsWith(".xsd")) {
-                               InputStream stream = context.getResourceAsStream("/WEB-INF/classes/schemas/" + xsdFile);
+                               InputStream stream =
+                                       context.getResourceAsStream(
+                                               "/WEB-INF/classes/schemas/" + xsdFile);
                                if (stream != null) {
                                        return new InputSource(stream);
                                }
@@ -91,16 +98,45 @@ public class ServletDigester extends Digester {
                                factory.setNamespaceAware(namespaceAware);
                                factory.setValidating(validating);
                                if (validating) {
-                                       factory.setFeature("http://xml.org/sax/features/namespaces", true);
-                                       factory.setFeature("http://xml.org/sax/features/validation", true);
-                                       factory.setFeature("http://apache.org/xml/features/validation/schema", true);
+                                       factory.setFeature(
+                                               "http://xml.org/sax/features/namespaces",
+                                               true);
+                                       factory.setFeature(
+                                               "http://xml.org/sax/features/validation",
+                                               true);
+                                       factory.setFeature(
+                                               "http://apache.org/xml/features/validation/schema",
+                                               true);
                                        factory.setFeature(
                                                "http://apache.org/xml/features/validation/schema-full-checking",
                                                true);
                                }
                                parser = factory.newSAXParser();
+                               if (validating) {
+
+                                       Properties schemaProps = new Properties();
+                                       schemaProps.load(
+                                               context.getResourceAsStream(
+                                                       "/WEB-INF/conf/schemas.properties"));
+                                       String schemaLocations = "";
+                                       Enumeration schemas = schemaProps.propertyNames();
+                                       while (schemas.hasMoreElements()) {
+                                               String ns = (String) schemas.nextElement();
+                                               schemaLocations += ns
+                                                       + " "
+                                                       + schemaProps.getProperty(ns)
+                                                       + " ";
+                                       }
+                                       log.debug(
+                                               "Overriding schema locations for the following namespace: "
+                                                       + schemaLocations);
+                                       parser.setProperty(
+                                               "http://apache.org/xml/properties/schema/external-schemaLocation",
+                                               schemaLocations);
+                               }
                                return (parser);
                        } catch (Exception e) {
+                               log.error("Error during Digester initialization", e);
                                return (null);
                        }
                }
diff --git a/src/schemas/xml.xsd b/src/schemas/xml.xsd
new file mode 100755 (executable)
index 0000000..38bba34
--- /dev/null
@@ -0,0 +1,80 @@
+<?xml version='1.0'?>
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en">
+
+ <xs:annotation>
+  <xs:documentation>
+   See http://www.w3.org/XML/1998/namespace.html and
+   http://www.w3.org/TR/REC-xml for information about this namespace.
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>This schema defines attributes and an attribute group
+        suitable for use by
+        schemas wishing to allow xml:base, xml:lang or xml:space attributes
+        on elements they define.
+
+        To enable this, such a schema must import this schema
+        for the XML namespace, e.g. as follows:
+        &lt;schema . . .>
+         . . .
+         &lt;import namespace="http://www.w3.org/XML/1998/namespace"
+                    schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
+
+        Subsequently, qualified reference to any of the attributes
+        or the group defined below will have the desired effect, e.g.
+
+        &lt;type . . .>
+         . . .
+         &lt;attributeGroup ref="xml:specialAttrs"/>
+         will define a type which will schema-validate an instance
+         element with any of those attributes</xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>In keeping with the XML Schema WG's standard versioning
+   policy, this schema document will persist at
+   http://www.w3.org/2001/03/xml.xsd.
+   At the date of issue it can also be found at
+   http://www.w3.org/2001/xml.xsd.
+   The schema document at that URI may however change in the future,
+   in order to remain compatible with the latest version of XML Schema
+   itself.  In other words, if the XML Schema namespace changes, the version
+   of this document at
+   http://www.w3.org/2001/xml.xsd will change
+   accordingly; the version at
+   http://www.w3.org/2001/03/xml.xsd will not change.
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:attribute name="lang" type="xs:language">
+  <xs:annotation>
+   <xs:documentation>In due course, we should install the relevant ISO 2- and 3-letter
+         codes as the enumerated possible values . . .</xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="space" default="preserve">
+  <xs:simpleType>
+   <xs:restriction base="xs:NCName">
+    <xs:enumeration value="default"/>
+    <xs:enumeration value="preserve"/>
+   </xs:restriction>
+  </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="base" type="xs:anyURI">
+  <xs:annotation>
+   <xs:documentation>See http://www.w3.org/TR/xmlbase/ for
+                     information about this attribute.</xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+
+ <xs:attributeGroup name="specialAttrs">
+  <xs:attribute ref="xml:base"/>
+  <xs:attribute ref="xml:lang"/>
+  <xs:attribute ref="xml:space"/>
+ </xs:attributeGroup>
+
+</xs:schema>
diff --git a/src/schemas/xmldsig-core-schema.xsd b/src/schemas/xmldsig-core-schema.xsd
new file mode 100755 (executable)
index 0000000..9474ce0
--- /dev/null
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE schema
+ [
+   <!ATTLIST schema 
+     xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#">
+   <!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
+   <!ENTITY % p ''>
+   <!ENTITY % s ''>
+  ]>
+
+<!-- Schema for XML Signatures
+    http://www.w3.org/2000/09/xmldsig#
+    $Revision$ on $Date$ by $Author$
+
+    Copyright 2001 The Internet Society and W3C (Massachusetts Institute
+    of Technology, Institut National de Recherche en Informatique et en
+    Automatique, Keio University). All Rights Reserved.
+    http://www.w3.org/Consortium/Legal/
+
+    This document is governed by the W3C Software License [1] as described
+    in the FAQ [2].
+
+    [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
+    [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
+-->
+
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
+        targetNamespace="http://www.w3.org/2000/09/xmldsig#"
+        version="0.1" elementFormDefault="qualified"> 
+
+<!-- Basic Types Defined for Signatures -->
+
+<simpleType name="CryptoBinary">
+  <restriction base="base64Binary">
+  </restriction>
+</simpleType>
+
+<!-- Start Signature -->
+
+<element name="Signature" type="ds:SignatureType"/>
+<complexType name="SignatureType">
+  <sequence> 
+    <element ref="ds:SignedInfo"/> 
+    <element ref="ds:SignatureValue"/> 
+    <element ref="ds:KeyInfo" minOccurs="0"/> 
+    <element ref="ds:Object" minOccurs="0" maxOccurs="unbounded"/> 
+  </sequence>  
+  <attribute name="Id" type="ID" use="optional"/>
+</complexType>
+
+  <element name="SignatureValue" type="ds:SignatureValueType"/> 
+  <complexType name="SignatureValueType">
+    <simpleContent>
+      <extension base="base64Binary">
+        <attribute name="Id" type="ID" use="optional"/>
+      </extension>
+    </simpleContent>
+  </complexType>
+
+<!-- Start SignedInfo -->
+
+<element name="SignedInfo" type="ds:SignedInfoType"/>
+<complexType name="SignedInfoType">
+  <sequence> 
+    <element ref="ds:CanonicalizationMethod"/> 
+    <element ref="ds:SignatureMethod"/> 
+    <element ref="ds:Reference" maxOccurs="unbounded"/> 
+  </sequence>  
+  <attribute name="Id" type="ID" use="optional"/> 
+</complexType>
+
+  <element name="CanonicalizationMethod" type="ds:CanonicalizationMethodType"/> 
+  <complexType name="CanonicalizationMethodType" mixed="true">
+    <sequence>
+      <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
+      <!-- (0,unbounded) elements from (1,1) namespace -->
+    </sequence>
+    <attribute name="Algorithm" type="anyURI" use="required"/> 
+  </complexType>
+
+  <element name="SignatureMethod" type="ds:SignatureMethodType"/>
+  <complexType name="SignatureMethodType" mixed="true">
+    <sequence>
+      <element name="HMACOutputLength" minOccurs="0" type="ds:HMACOutputLengthType"/>
+      <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+      <!-- (0,unbounded) elements from (1,1) external namespace -->
+    </sequence>
+    <attribute name="Algorithm" type="anyURI" use="required"/> 
+  </complexType>
+
+<!-- Start Reference -->
+
+<element name="Reference" type="ds:ReferenceType"/>
+<complexType name="ReferenceType">
+  <sequence> 
+    <element ref="ds:Transforms" minOccurs="0"/> 
+    <element ref="ds:DigestMethod"/> 
+    <element ref="ds:DigestValue"/> 
+  </sequence>
+  <attribute name="Id" type="ID" use="optional"/> 
+  <attribute name="URI" type="anyURI" use="optional"/> 
+  <attribute name="Type" type="anyURI" use="optional"/> 
+</complexType>
+
+  <element name="Transforms" type="ds:TransformsType"/>
+  <complexType name="TransformsType">
+    <sequence>
+      <element ref="ds:Transform" maxOccurs="unbounded"/>  
+    </sequence>
+  </complexType>
+
+  <element name="Transform" type="ds:TransformType"/>
+  <complexType name="TransformType" mixed="true">
+    <choice minOccurs="0" maxOccurs="unbounded"> 
+      <any namespace="##other" processContents="lax"/>
+      <!-- (1,1) elements from (0,unbounded) namespaces -->
+      <element name="XPath" type="string"/> 
+    </choice>
+    <attribute name="Algorithm" type="anyURI" use="required"/> 
+  </complexType>
+
+<!-- End Reference -->
+
+<element name="DigestMethod" type="ds:DigestMethodType"/>
+<complexType name="DigestMethodType" mixed="true"> 
+  <sequence>
+    <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+  </sequence>    
+  <attribute name="Algorithm" type="anyURI" use="required"/> 
+</complexType>
+
+<element name="DigestValue" type="ds:DigestValueType"/>
+<simpleType name="DigestValueType">
+  <restriction base="base64Binary"/>
+</simpleType>
+
+<!-- End SignedInfo -->
+
+<!-- Start KeyInfo -->
+
+<element name="KeyInfo" type="ds:KeyInfoType"/> 
+<complexType name="KeyInfoType" mixed="true">
+  <choice maxOccurs="unbounded">     
+    <element ref="ds:KeyName"/> 
+    <element ref="ds:KeyValue"/> 
+    <element ref="ds:RetrievalMethod"/> 
+    <element ref="ds:X509Data"/> 
+    <element ref="ds:PGPData"/> 
+    <element ref="ds:SPKIData"/>
+    <element ref="ds:MgmtData"/>
+    <any processContents="lax" namespace="##other"/>
+    <!-- (1,1) elements from (0,unbounded) namespaces -->
+  </choice>
+  <attribute name="Id" type="ID" use="optional"/> 
+</complexType>
+
+  <element name="KeyName" type="string"/>
+  <element name="MgmtData" type="string"/>
+
+  <element name="KeyValue" type="ds:KeyValueType"/> 
+  <complexType name="KeyValueType" mixed="true">
+   <choice>
+     <element ref="ds:DSAKeyValue"/>
+     <element ref="ds:RSAKeyValue"/>
+     <any namespace="##other" processContents="lax"/>
+   </choice>
+  </complexType>
+
+  <element name="RetrievalMethod" type="ds:RetrievalMethodType"/> 
+  <complexType name="RetrievalMethodType">
+    <sequence>
+      <element ref="ds:Transforms" minOccurs="0"/> 
+    </sequence>  
+    <attribute name="URI" type="anyURI"/>
+    <attribute name="Type" type="anyURI" use="optional"/>
+  </complexType>
+
+<!-- Start X509Data -->
+
+<element name="X509Data" type="ds:X509DataType"/> 
+<complexType name="X509DataType">
+  <sequence maxOccurs="unbounded">
+    <choice>
+      <element name="X509IssuerSerial" type="ds:X509IssuerSerialType"/>
+      <element name="X509SKI" type="base64Binary"/>
+      <element name="X509SubjectName" type="string"/>
+      <element name="X509Certificate" type="base64Binary"/>
+      <element name="X509CRL" type="base64Binary"/>
+      <any namespace="##other" processContents="lax"/>
+    </choice>
+  </sequence>
+</complexType>
+
+<complexType name="X509IssuerSerialType"> 
+  <sequence> 
+    <element name="X509IssuerName" type="string"/> 
+    <element name="X509SerialNumber" type="integer"/> 
+  </sequence>
+</complexType>
+
+<!-- End X509Data -->
+
+<!-- Begin PGPData -->
+
+<element name="PGPData" type="ds:PGPDataType"/> 
+<complexType name="PGPDataType"> 
+  <choice>
+    <sequence>
+      <element name="PGPKeyID" type="base64Binary"/> 
+      <element name="PGPKeyPacket" type="base64Binary" minOccurs="0"/> 
+      <any namespace="##other" processContents="lax" minOccurs="0"
+       maxOccurs="unbounded"/>
+    </sequence>
+    <sequence>
+      <element name="PGPKeyPacket" type="base64Binary"/> 
+      <any namespace="##other" processContents="lax" minOccurs="0"
+       maxOccurs="unbounded"/>
+    </sequence>
+  </choice>
+</complexType>
+
+<!-- End PGPData -->
+
+<!-- Begin SPKIData -->
+
+<element name="SPKIData" type="ds:SPKIDataType"/> 
+<complexType name="SPKIDataType">
+  <sequence maxOccurs="unbounded">
+    <element name="SPKISexp" type="base64Binary"/>
+    <any namespace="##other" processContents="lax" minOccurs="0"/>
+  </sequence>
+</complexType> 
+
+<!-- End SPKIData -->
+
+<!-- End KeyInfo -->
+
+<!-- Start Object (Manifest, SignatureProperty) -->
+
+<element name="Object" type="ds:ObjectType"/> 
+<complexType name="ObjectType" mixed="true">
+  <sequence minOccurs="0" maxOccurs="unbounded">
+    <any namespace="##any" processContents="lax"/>
+  </sequence>
+  <attribute name="Id" type="ID" use="optional"/> 
+  <attribute name="MimeType" type="string" use="optional"/> <!-- add a grep facet -->
+  <attribute name="Encoding" type="anyURI" use="optional"/> 
+</complexType>
+
+<element name="Manifest" type="ds:ManifestType"/> 
+<complexType name="ManifestType">
+  <sequence>
+    <element ref="ds:Reference" maxOccurs="unbounded"/> 
+  </sequence>
+  <attribute name="Id" type="ID" use="optional"/> 
+</complexType>
+
+<element name="SignatureProperties" type="ds:SignaturePropertiesType"/> 
+<complexType name="SignaturePropertiesType">
+  <sequence>
+    <element ref="ds:SignatureProperty" maxOccurs="unbounded"/> 
+  </sequence>
+  <attribute name="Id" type="ID" use="optional"/> 
+</complexType>
+
+   <element name="SignatureProperty" type="ds:SignaturePropertyType"/> 
+   <complexType name="SignaturePropertyType" mixed="true">
+     <choice maxOccurs="unbounded">
+       <any namespace="##other" processContents="lax"/>
+       <!-- (1,1) elements from (1,unbounded) namespaces -->
+     </choice>
+     <attribute name="Target" type="anyURI" use="required"/> 
+     <attribute name="Id" type="ID" use="optional"/> 
+   </complexType>
+
+<!-- End Object (Manifest, SignatureProperty) -->
+
+<!-- Start Algorithm Parameters -->
+
+<simpleType name="HMACOutputLengthType">
+  <restriction base="integer"/>
+</simpleType>
+
+<!-- Start KeyValue Element-types -->
+
+<element name="DSAKeyValue" type="ds:DSAKeyValueType"/>
+<complexType name="DSAKeyValueType">
+  <sequence>
+    <sequence minOccurs="0">
+      <element name="P" type="ds:CryptoBinary"/>
+      <element name="Q" type="ds:CryptoBinary"/>
+    </sequence>
+    <element name="G" type="ds:CryptoBinary" minOccurs="0"/>
+    <element name="Y" type="ds:CryptoBinary"/>
+    <element name="J" type="ds:CryptoBinary" minOccurs="0"/>
+    <sequence minOccurs="0">
+      <element name="Seed" type="ds:CryptoBinary"/>
+      <element name="PgenCounter" type="ds:CryptoBinary"/>
+    </sequence>
+  </sequence>
+</complexType>
+
+<element name="RSAKeyValue" type="ds:RSAKeyValueType"/>
+<complexType name="RSAKeyValueType">
+  <sequence>
+    <element name="Modulus" type="ds:CryptoBinary"/> 
+    <element name="Exponent" type="ds:CryptoBinary"/> 
+  </sequence>
+</complexType> 
+
+<!-- End KeyValue Element-types -->
+
+<!-- End Signature -->
+
+</schema>
diff --git a/webApplication/WEB-INF/conf/schemas.properties b/webApplication/WEB-INF/conf/schemas.properties
new file mode 100755 (executable)
index 0000000..d7a48e4
--- /dev/null
@@ -0,0 +1,3 @@
+urn\:mace\:shibboleth\:1\.0=shibboleth.xsd
+http\://www.w3.org/XML/1998/namespace=xml.xsd
+http\://www.w3.org/2000/09/xmldsig#=xmldsig-core-schema.xsd
\ No newline at end of file
index 0cb7677..d69e444 100755 (executable)
@@ -1,28 +1,45 @@
-<Sites xmlns="urn:mace:shibboleth:1.0" 
-       xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
-       xsi:schemaLocation="urn:mace:shibboleth:1.0 http://shibboleth.internet2.edu/wayf/alpha-2/shibboleth.xsd">
-<SiteGroup Name="Test">
-       <OriginSite Name="demo.edu">
-               <Alias>Demo State University</Alias>
-               <HandleService Name="shib2.internet2.edu" Location="https://shib2.internet2.edu/shibboleth-origin/servlet/HS"/>
-       </OriginSite>
-</SiteGroup>
-       <OriginSite Name="cmu.edu">
-               <Alias>Carnegie Mellon University</Alias>
-               <Alias>cmu</Alias>
-               <Alias>Tartans</Alias>
-               <HandleService Name="nada.andrew.cmu.edu" Location="https://nada.andrew.cmu.edu/shibb/servlet/HandleServlet"/>
-       </OriginSite>
-       <OriginSite Name="osu.edu">
-               <Alias>Ohio State University</Alias>
-               <Alias>osu</Alias>
-               <Alias>Buckeyes</Alias>
-               <HandleService Name="usfs2.us.ohio-state.edu" Location="https://usfs2.us.ohio-state.edu/webdev/Shibboleth/secure/servlet/HandleServlet"/>
-       </OriginSite>
-       <OriginSite Name="brown.edu">
-               <Alias>Brown University</Alias>
-               <Alias>Bears</Alias>
-               <HandleService Name="dilbert2.cis.brown.edu" Location="http://dilbert2.cis.brown.edu:1080/shibb/servlet/HandleServlet"/>
-       </OriginSite>
-</Sites>
+<Sites xmlns="urn:mace:shibboleth:1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+    <OriginSite Name="demo.edu">
+        <Alias>Demo State University</Alias>
+        <HandleService Location="https://shib2.internet2.edu/shibboleth-origin/servlet/HS" Name="shib2.internet2.edu"></HandleService>
+    </OriginSite>
+<ds:Signature>
+<ds:SignedInfo>
+<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></ds:CanonicalizationMethod>
+<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></ds:SignatureMethod>
+<ds:Reference URI="">
+<ds:Transforms>
+<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></ds:Transform>
+</ds:Transforms>
+<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
+<ds:DigestValue>FlTtww9Zm1RZVJ8XhMi+8EMGU98=</ds:DigestValue>
+</ds:Reference>
+</ds:SignedInfo>
+<ds:SignatureValue>cJY60WaFZ9HGeoyFsb7DRazHa9b5oPTQ0jfHe17Dq9KKZV2M+hLacefT8fGpmUM+PB9FvFqswY+c
+YgWNwONYJWSWxje/9OtywphvZ280JJPF88glrWiOT4tWqODDec+LcIiZx+rWqOjqUdLgYhbiEOsy
+SeLo+jKbY3z4UQ54QC04Y1Mx2vosuo1eizCYkmKwfdUoiG3PbF2bG62lFv7KJgSYPEUqb2kN4KYV
+n+2LMYRfXnIpHGbIo5Y2y479ASNIJZCqDUU3jqQzSEBEa5MzmjVSQvtrh93VNNzFlMQeMLFWsNcf
+GX+oi6z1ZLvMhBzXLlI/ZmowY+uWYYQ4hrg+LA==</ds:SignatureValue>
+<ds:KeyInfo>
+<ds:X509Data>
+<ds:X509Certificate>
+MIIDWzCCAkMCBD0GtNgwDQYJKoZIhvcNAQEEBQAwcjELMAkGA1UEBhMCVVMxDTALBgNVBAgTBE9o
+aW8xETAPBgNVBAcTCENvbHVtYnVzMRIwEAYDVQQKEwlJbnRlcm5ldDIxDTALBgNVBAsTBE1BQ0Ux
+HjAcBgNVBAMTFUludGVybmV0MiBTaXRlIFNpZ25lcjAeFw0wMjA2MTIwMjQxMjhaFw0wMzA2MTIw
+MjQxMjhaMHIxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRPaGlvMREwDwYDVQQHEwhDb2x1bWJ1czES
+MBAGA1UEChMJSW50ZXJuZXQyMQ0wCwYDVQQLEwRNQUNFMR4wHAYDVQQDExVJbnRlcm5ldDIgU2l0
+ZSBTaWduZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWEJOtB/Pvy3R4dLDgQaJj
+r2Aque3IPmH82SIpANBtzkpvshPIyB7cJo+e1DuAoR5/HgRHUamM8IYbWD4Pg4BpUl64FqvB4xzp
+OrsMkEecewGIAXu9WzFjLmmJ3J9V+TC764+gvK26d1kaE/F2AjHTPlXFNvPXIWfVFwWyQlrMNvkt
+AwxoCvyzAAzhtVN1up/UX8y+kw2r1mxvWl6MY6OGveb3MEhnJ/SijG8K263HzEwH0jKQfXcFes2B
+N6CWjzwUc6RdemwoRQGIu7Xo58WCtu3b6jgxutbep3Xqc3INpRGNtlfbQv+9+F03645k2lIqlt2e
+J4jYOzU5f0dM2eiZAgMBAAEwDQYJKoZIhvcNAQEEBQADggEBACDvM9aMDTSreXMflg1GvJTtV6f1
+Uu2utEPVcJH0T2/AtUvXwmKgt9xnEQNpjkBfPfYauOFeR3Z3zAWSW17W6sI4I8mN+JDArCd08vWQ
+RHE+OxrhNn590u+eCzd5Gu1Gyg2N5bZNAG2VRnuaXOiX+rHjPMOdkbMGteGaHZC/hlac04z1BHmx
+QqpA526mSXUPC+BSLCAJno57csm1a+Of3xtfTo1y3p0UgQ+d1FfxiBTzIgPyb5LKW9CwC4OjqwgH
+jNj4VCaskafexO4MkduIcFTMb+0SxuCmixl+P96jehEINYNOg6BRtCzJvMEPZJkBOL9rkE1Pdc7t
+3Oljukm2cxw=
+</ds:X509Certificate>
+</ds:X509Data>
+</ds:KeyInfo>
+</ds:Signature></Sites>
\ No newline at end of file