<!-- DTD for XML Signatures
     http://www.w3.org/2000/02/xmldsig# -->


<!-- These entity declarations permit the flexible parts of Signature
     content model to be easily expanded -->

<!ENTITY % Object.ANY '(#PCDATA|SignatureProperties|Manifest)*'>
<!ENTITY % Method.ANY '(#PCDATA|HMACOutputLength)*'>
<!ENTITY % Transform.ANY '(#PCDATA|XPath|XSLT)*'>
<!ENTITY % Key.ANY '(#PCDATA|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/02/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
	MimeType     CDATA    #IMPLIED 
	Charset      CDATA    #IMPLIED >

<!ELEMENT XPath (#PCDATA) >
<!ELEMENT XSLT (#PCDATA) >

<!ELEMENT DigestMethod %Method.ANY; >
<!ATTLIST DigestMethod  
	Algorithm		CDATA	#REQUIRED >

<!ELEMENT DigestValue  (#PCDATA)  >

<!ELEMENT KeyInfo ((KeyName | KeyValue | RetrievalMethod | 
	X509Data | PGPData  | MgmtData)+)  >
<!ATTLIST KeyInfo  
	Id	ID	 #IMPLIED >

<!-- Key Information -->

<!ELEMENT KeyName	%Key.ANY; >
<!ELEMENT KeyValue	%Key.ANY; >
<!ELEMENT RetrievalMethod	%Key.ANY; >
<!ELEMENT MgmtData	%Key.ANY; >

<!-- 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 %Object.ANY; >
<!ATTLIST SignatureProperty  
	Target 	CDATA	 #REQUIRED  >

<!-- 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) >
