<!-- DTD for XML Signatures
     http://www.w3.org/2000/09/xmldsig# -->


<!-- These entity declarations permit the flexible parts of Signature
     content model to be easily expanded and changed -->

<!ENTITY % Object.ANY '(#PCDATA|Signature|SignatureProperties|Manifest)*'>
<!ENTITY % Method.ANY '(#PCDATA|HMACOutputLength)*'>
<!ENTITY % Transform.ANY '(#PCDATA|XPath|XSLT)*'>
<!ENTITY % SignatureProperty.ANY '(#PCDATA)*'>
<!ENTITY % Key.ANY '(#PCDATA|KeyName|KeyValue|RetrievalMethod| 
           X509Data|PGPData|MgmtData|DSAKeyValue|RSAKeyValue)*'>

<!-- Start Core Signature declarations, these should NOT be altered -->

<!ELEMENT Signature (SignedInfo, SignatureValue, KeyInfo?, Object*)  >
<!ATTLIST Signature  
	xmlns	CDATA	#FIXED 'http://www.w3.org/2000/09/xmldsig#'
	Id  	ID	#IMPLIED >

<!ELEMENT SignatureValue (#PCDATA)  >

<!ELEMENT SignedInfo (CanonicalizationMethod, 
	SignatureMethod,  Reference+)  >
<!ATTLIST SignedInfo  
	Id	 ID 	 #IMPLIED 
 >

<!ELEMENT CanonicalizationMethod %Method.ANY; > 
<!ATTLIST CanonicalizationMethod 
	Algorithm CDATA #REQUIRED > 

<!ELEMENT SignatureMethod %Method.ANY; >
<!ATTLIST SignatureMethod 
	Algorithm CDATA #REQUIRED > 

<!ELEMENT Reference (Transforms?, DigestMethod, DigestValue)  >
<!ATTLIST Reference  
	Id	ID	#IMPLIED
	URI	CDATA	#IMPLIED
	Type	CDATA	#IMPLIED>


<!ELEMENT Transforms (Transform+)>

<!ELEMENT Transform %Transform.ANY; >
<!ATTLIST Transform 
	Algorithm    CDATA    #REQUIRED >

<!ELEMENT XPath (#PCDATA) >
<!ELEMENT XSLT (#PCDATA) >

<!ELEMENT DigestMethod %Method.ANY; >
<!ATTLIST DigestMethod  
	Algorithm		CDATA	#REQUIRED >

<!ELEMENT DigestValue  (#PCDATA)  >

<!ELEMENT KeyInfo	%Key.ANY; >
<!ATTLIST KeyInfo  
	Id	ID	 #IMPLIED >

<!-- Key Information -->

<!ELEMENT KeyName	%Key.ANY; >
<!ELEMENT KeyValue	%Key.ANY; >
<!ELEMENT MgmtData	%Key.ANY; >

<!ELEMENT RetrievalMethod (Transforms?) >
<!ATTLIST RetrievalMethod
   URI	CDATA #REQUIRED 
   Type	CDATA #IMPLIED > 

<!-- X.509 Data -->

<!ELEMENT X509Data ((X509IssuerSerial | X509SKI | X509SubjectName |
                     X509Certificate)+ | X509CRL)>
<!ELEMENT X509IssuerSerial (X509IssuerName, X509SerialNumber) >
<!ELEMENT X509IssuerName (#PCDATA) >
<!ELEMENT X509SubjectName (#PCDATA) >
<!ELEMENT X509SerialNumber (#PCDATA) >
<!ELEMENT X509SKI (#PCDATA) >
<!ELEMENT X509Certificate (#PCDATA) >
<!ELEMENT X509CRL (#PCDATA) >

<!-- X.509 Data -->

<!ELEMENT PGPData (PGPKeyID, PGPKeyPacket)  >
<!ELEMENT PGPKeyPacket  (#PCDATA)  >
<!ELEMENT PGPKeyID  (#PCDATA)  >

<!-- Extensible Content -->

<!ELEMENT Object %Object.ANY; >
<!ATTLIST Object  
	Id	ID	#IMPLIED 
	MimeType	CDATA	#IMPLIED 
	Encoding	CDATA	#IMPLIED >

<!ELEMENT Manifest (Reference+)  >
<!ATTLIST Manifest  
	Id	ID	#IMPLIED >

<!ELEMENT SignatureProperties (SignatureProperty+)  >
<!ATTLIST SignatureProperties  
	Id	ID	 #IMPLIED  >

<!ELEMENT SignatureProperty %SignatureProperty.ANY >
<!ATTLIST SignatureProperty  
	Target 	CDATA	 #REQUIRED
	Id	ID	 #IMPLIED  >

<!-- Algorithm Parameters -->

<!ELEMENT HMACOutputLength (#PCDATA) >

<!ELEMENT DSAKeyValue (P, Q, G, Y, J?, (Seed, PgenCounter)?) > 
<!ELEMENT P (#PCDATA) >
<!ELEMENT Q (#PCDATA) >
<!ELEMENT G (#PCDATA) >
<!ELEMENT Y (#PCDATA) >
<!ELEMENT J (#PCDATA) >
<!ELEMENT Seed (#PCDATA) >
<!ELEMENT PgenCounter (#PCDATA) >

<!ELEMENT RSAKeyValue (Modulus, Exponent) > 
<!ELEMENT Modulus (#PCDATA) >
<!ELEMENT Exponent (#PCDATA) >
