<?xml version="1.0" encoding="UTF-8"?>
<!-- Schema für die zentrale Konfigurationsdatei von MOA SP/SS. 
     Gültig für die Versionen 1.0, 1.1 und 1.2.
     (c) Stabsstelle IKT-Strategie des Bundes im Bundeskanzleramt, österreich -->
<xs:schema targetNamespace="http://reference.e-government.gv.at/namespace/moaconfig/20021122#" xmlns:config="http://reference.e-government.gv.at/namespace/moaconfig/20021122#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
	<xs:element name="MOAConfiguration">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="CanonicalizationAlgorithm" minOccurs="0">
					<xs:complexType>
						<xs:attribute name="name" type="xs:anyURI" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="DigestMethodAlgorithm" minOccurs="0">
					<xs:complexType>
						<xs:attribute name="name" type="xs:anyURI" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="SignatureAlgorithm" minOccurs="0">
					<xs:complexType>
						<xs:attribute name="name" type="xs:anyURI" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="GenericConfiguration" minOccurs="0" maxOccurs="unbounded">
					<xs:complexType>
						<xs:attribute name="name" type="xs:string" use="required"/>
						<xs:attribute name="value" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="HardwareCryptoModule" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>dient zum Konfigurieren von HW Crypto-Module via PKCS#11 (s. iaik.server.modules.crypto.HarwwareCryptoModuleConfiguration)</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="name" type="xs:string" use="required"/>
						<xs:attribute name="slotID" type="xs:string" use="optional"/>
						<xs:attribute name="userPIN" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="HardwareKeyModule" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>dient zum Konfigurieren von HW Key-Module via PKCS#11 (s. iaik.server. modules.crypto.HardwareKeyModuleConfiguration</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="id" type="xs:token" use="required"/>
						<xs:attribute name="name" type="xs:string" use="required"/>
						<xs:attribute name="slotID" type="xs:string" use="optional"/>
						<xs:attribute name="userPIN" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="SoftwareKeyModule" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>dient zum Konfigurieren von SW Key-Module via PKCS#12 Dateien (s. iaik. server.modules.crypto.SoftwareKeyModuleConfiguration</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="id" type="xs:token" use="required"/>
						<xs:attribute name="filename" type="xs:string" use="required"/>
						<xs:attribute name="password" type="xs:string" use="optional"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="KeyGroup" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>definiert eine Gruppe von Keys</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence maxOccurs="unbounded">
							<xs:element name="Key">
								<xs:annotation>
									<xs:documentation>Ein Schlüssel wird bezeichnet durch ein Tripel bestehend aus der ID des KeyModules (siehe z.B. SoftwareKeyModule/@id), sowie Issuer und Seriennummer des zum Schlüssel gehörigen Zertifikats</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element name="KeyModuleID" type="xs:token"/>
										<xs:element name="KeyCertIssuerSerial" type="dsig:X509IssuerSerialType"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="id" type="xs:token" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="KeyGroupMapping" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>ordnet oben definierte KeyGroups Online-Applikationen zu, die diese KeyGroups verwenden dürfen</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="X509IssuerSerial" type="dsig:X509IssuerSerialType" minOccurs="0">
								<xs:annotation>
									<xs:documentation>wenn das Element nicht auftritt, dann können die zugeordneten KeyGroups von allen Online-Applikationen verwendet werden</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="KeyGroup" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="id" type="xs:token" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="ChainingModes" minOccurs="0">
					<xs:annotation>
						<xs:documentation>spezifiziert den Algorithmus ("pkix" oder "chaining") für die Zertifikatspfadvalidierung</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence minOccurs="0" maxOccurs="unbounded">
							<xs:element name="TrustAnchor">
								<xs:annotation>
									<xs:documentation>ein vom SystemDefaultMode abweichender ChiningMode kann für jeden TrustAnchor gesetzt werden</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:complexContent>
										<xs:extension base="dsig:X509IssuerSerialType">
											<xs:attribute name="mode" type="config:ChainingModeType" use="required"/>
										</xs:extension>
									</xs:complexContent>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="systemDefaultMode" type="config:ChainingModeType" use="optional" default="pkix"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="CRLArchive" minOccurs="0">
					<xs:annotation>
						<xs:documentation>spezifiziert die Dauer, die Revozierungsinformation archiviert werden muss in Tagen</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="duration" type="xs:nonNegativeInteger" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="CRLDistributionPoint" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>spezifiziert  CRL Distribution Points</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="CAIssuerDN" type="xs:string">
								<xs:annotation>
									<xs:documentation>spezifiziert die CA, für die der u.a. DP verwendet werden soll</xs:documentation>
								</xs:annotation>
							</xs:element>
							<xs:element name="DistributionPoint" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>das Attribut reasonCodes enthält eine Liste von möglichen reasonCodes lt. RFC 3280: unspecified, keyCompromise, cACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, removeFromCRL, privilegeWithdrawn, aACompromise
</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:attribute name="reasonCodes" type="xs:NMTOKENS" use="optional"/>
									<xs:attribute name="uri" type="xs:anyURI" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="CreateTransformsInfoProfile" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>ordnet eine Datei, die ein CreateTransformsInfoProfile-Element enthält, einer id zu</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="id" type="xs:token" use="required"/>
						<xs:attribute name="filename" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="CreateSignatureEnvironmentProfile" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>ordnet eine Datei, die ein CreateSignatureEnvironmentProfile-Element enthält, einer id zu</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="id" type="xs:token" use="required"/>
						<xs:attribute name="filename" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="VerifyTransformsInfoProfile" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>ordnet eine Datei, die ein VerifyTransformsInfoProfile-Element enthält, einer id zu</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="id" type="xs:token" use="required"/>
						<xs:attribute name="filename" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="SupplementProfile" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>ordnet eine Datei, die ein SupplementProfile-Element enthält, einer id zu</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="id" type="xs:token" use="required"/>
						<xs:attribute name="filename" type="xs:string" use="required"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="TrustProfile" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>ordnet ein Verzeichnis, das vertrauenswürdige Zertifikate enthält einer id zu</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="id" type="xs:token" use="required"/>
						<xs:attribute name="uri" type="xs:anyURI" use="required"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:simpleType name="ChainingModeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="chaining"/>
			<xs:enumeration value="pkix"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>