<?xml version='1.0'?>
<!-- Copyright 2004 The Apache Software Foundation

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License. -->
<!DOCTYPE Signature SYSTEM "xmldsig-core-schema.dtd" [
<!ENTITY dsig "http://www.w3.org/2000/09/xmldsig#">
   <!ENTITY % SignatureProperty.ANY '| ts:timestamp'>
   <!ELEMENT ts:timestamp (#PCDATA)>
   <!ATTLIST ts:timestamp
             xmlns:ts	CDATA	#FIXED   'http://www.example.org/rfc/rfcxxxx.txt'>
   <!ATTLIST Signature
             xmlns:xsi  CDATA #FIXED   'http://www.w3.org/2001/XMLSchema-instance'
             xsi:schemaLocation	CDATA	#REQUIRED>
]>
<Signature Id="MyFirstSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.w3.org/2000/09/xmldsig#
   xmldsig-core-schema.xsd">
  <SignedInfo>
	 <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2000/WD-xml-c14n-20000710">
	 </CanonicalizationMethod>
	 <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa">
	 </SignatureMethod>
	 <Reference URI="http://www.w3.org/TR/xml-stylesheet/">
		<Transforms>
		  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#base64"/>
		  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#null"/>
		</Transforms>
		<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1">
		</DigestMethod>
		<DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue>
	 </Reference>
	 <Reference URI="http://www.w3.org/TR/REC-xml-names/">
		<Transforms>
		  <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#base64"/>
		</Transforms>
		<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1">
		</DigestMethod>
		<DigestValue>UrXLDLBIta6skoV5/A8Q38GEw44=</DigestValue>
	 </Reference>
  </SignedInfo>
  <SignatureValue>MC0CFFrVLtRlkMc3Daon4BqqnkhCOlEaAhUAk8pH1iRNK+q1I+sisDTz2TFEALE=</SignatureValue>
  <KeyInfo>
    <KeyValue>
      <DSAKeyValue>
        <P>...</P><Q>...</Q><G>...</G><Y>...</Y>
      </DSAKeyValue>
    </KeyValue>
  </KeyInfo>
  <Object>
     <SignatureProperties>
        <SignatureProperty Target="#MyFirstSignature">
          <ts:timestamp xmlns:ts="http://www.example.org/rfc/rfcxxxx.txt">
           this is a test of the mixed content model</ts:timestamp>
        </SignatureProperty>
      </SignatureProperties>
  </Object>
</Signature>
