<?xml version="1.0" encoding="UTF-8"?>

<!-- Securitylayer, Schnittstellenspezifikation -->

<!-- XML-Schema fuer Schnittstellenspezifikation Version 1.2.2 -->

<!-- 01. 03. 2005, Bundeskanzleramt, Stabsstelle IKT-Strategie, Technik und Standards -->

<xsd:schema targetNamespace="http://www.buergerkarte.at/namespaces/securitylayer/1.2#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.2.1" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.buergerkarte.at/namespaces/securitylayer/1.2#">
  <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
  <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
  <!--###################################################################### -->
  <!--# Create CMS Signature                                               # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Create CMS Signature Request                                       = -->
  <!--====================================================================== -->
  <xsd:element name="CreateCMSSignatureRequest" type="CreateCMSSignatureRequestType"/>
  <xsd:complexType name="CreateCMSSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
      <xsd:element name="DataObject" type="CMSDataObjectRequiredMetaType"/>
    </xsd:sequence>
    <xsd:attribute name="Structure" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="detached"/>
          <xsd:enumeration value="enveloping"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:complexType>
  <xsd:complexType name="CMSDataObjectRequiredMetaType">
    <xsd:complexContent>
      <xsd:restriction base="CMSDataObjectOptionalMetaType">
        <xsd:sequence>
          <xsd:element name="MetaInfo" type="MetaInfoType"/>
          <xsd:element name="Content" type="Base64OptRefContentType"/>
        </xsd:sequence>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="CMSDataObjectOptionalMetaType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
      <xsd:element name="Content" type="Base64OptRefContentType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Create CMS Siganture Response                                      = -->
  <!--====================================================================== -->
  <xsd:element name="CreateCMSSignatureResponse" type="CreateCMSSignatureResponseType"/>
  <xsd:complexType name="CreateCMSSignatureResponseType">
    <xsd:sequence>
      <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Create XML Signature                                               # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Create XML Signature Request                                       = -->
  <!--====================================================================== -->
  <xsd:element name="CreateXMLSignatureRequest" type="CreateXMLSignatureRequestType"/>
  <xsd:complexType name="CreateXMLSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
      <xsd:element name="DataObjectInfo" type="DataObjectInfoType" maxOccurs="unbounded"/>
      <xsd:element name="SignatureInfo" type="SignatureInfoCreationType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="SignatureInfoCreationType">
    <xsd:sequence>
      <xsd:element name="SignatureEnvironment" type="Base64XMLOptRefContentType"/>
      <xsd:element name="SignatureLocation">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:token">
              <xsd:attribute name="Index" type="xsd:nonNegativeInteger" use="required"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Supplement" type="DataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="MetaInfoType">
    <xsd:sequence>
      <xsd:element name="MimeType" type="MimeTypeType"/>
      <xsd:element name="Description" type="xsd:string" minOccurs="0"/>
      <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="DataObjectInfoType">
    <xsd:sequence>
      <xsd:element name="DataObject" type="Base64XMLLocRefOptRefContentType"/>
      <xsd:element name="TransformsInfo" type="TransformsInfoType" maxOccurs="unbounded"/>
      <xsd:element name="Supplement" type="DataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="Structure" use="required">
      <xsd:simpleType>
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="detached"/>
          <xsd:enumeration value="enveloping"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:complexType>
  <xsd:complexType name="TransformsInfoType">
    <xsd:sequence>
      <xsd:element ref="dsig:Transforms" minOccurs="0"/>
      <xsd:element name="FinalDataMetaInfo" type="MetaInfoType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Create XML Signature Response                                      = -->
  <!--====================================================================== -->
  <xsd:element name="CreateXMLSignatureResponse" type="CreateXMLSignatureResponseType"/>
  <xsd:complexType name="CreateXMLSignatureResponseType">
    <xsd:sequence>
      <xsd:any namespace="##any" processContents="lax"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Verify CMS Signature                                               # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Verify CMS Signature Request                                       = -->
  <!--====================================================================== -->
  <xsd:element name="VerifyCMSSignatureRequest" type="VerifyCMSSignatureRequestType"/>
  <xsd:complexType name="VerifyCMSSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
      <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
      <xsd:element name="DataObject" type="CMSDataObjectOptionalMetaType" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="Signatories" type="SignatoriesType" use="optional" default="1"/>
  </xsd:complexType>
  <xsd:simpleType name="SignatoriesType">
    <xsd:union memberTypes="AllSignatoriesType">
      <xsd:simpleType>
        <xsd:list itemType="xsd:positiveInteger"/>
      </xsd:simpleType>
    </xsd:union>
  </xsd:simpleType>
  <xsd:simpleType name="AllSignatoriesType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="all"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!--====================================================================== -->
  <!--= Verify CMS Signature Response                                      = -->
  <!--====================================================================== -->
  <xsd:element name="VerifyCMSSignatureResponse" type="VerifyCMSSignatureResponseType"/>
  <xsd:complexType name="VerifyCMSSignatureResponseType">
    <xsd:sequence maxOccurs="unbounded">
      <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
      <xsd:element name="SignatureCheck" type="CheckResultType"/>
      <xsd:element name="CertificateCheck" type="CheckResultType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="QualifiedCertificate"/>
  <!--###################################################################### -->
  <!--# Verify XML Signature                                               # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Verify XML Signature Request                                       = -->
  <!--====================================================================== -->
  <xsd:element name="VerifyXMLSignatureRequest" type="VerifyXMLSignatureRequestType"/>
  <xsd:complexType name="VerifyXMLSignatureRequestType">
    <xsd:sequence>
      <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
      <xsd:element name="SignatureInfo" type="SignatureInfoVerificationType"/>
      <xsd:element name="Supplement" type="DataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="SignatureInfoVerificationType">
    <xsd:sequence>
      <xsd:element name="SignatureEnvironment" type="Base64XMLOptRefContentType"/>
      <xsd:element name="SignatureLocation" type="xsd:token"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Verify XML Signature Response                                      = -->
  <!--====================================================================== -->
  <xsd:element name="VerifyXMLSignatureResponse" type="VerifyXMLSignatureResponseType"/>
  <xsd:complexType name="VerifyXMLSignatureResponseType">
    <xsd:sequence>
      <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
      <xsd:element name="SignatureCheck" type="ReferencesCheckResultType"/>
      <xsd:element name="SignatureManifestCheck" type="ReferencesCheckResultType"/>
      <xsd:element name="XMLDSIGManifestCheck" type="ManifestRefsCheckResultType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="CertificateCheck" type="CheckResultType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ReferencesCheckResultType">
    <xsd:sequence>
      <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
      <xsd:element name="Info" type="ReferencesCheckResultInfoType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ReferencesCheckResultInfoType" mixed="true">
    <xsd:sequence>
      <xsd:element name="FailedReference" type="xsd:positiveInteger" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ManifestRefsCheckResultType">
    <xsd:sequence>
      <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
      <xsd:element name="Info" type="ManifestRefsCheckResultInfoType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ManifestRefsCheckResultInfoType" mixed="true">
    <xsd:sequence>
      <xsd:element name="ReferringSigReference" type="xsd:positiveInteger"/>
      <xsd:element name="FailedReference" type="xsd:positiveInteger" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="CheckResultType">
    <xsd:sequence>
      <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
      <xsd:element name="Info" type="AnyMixedChildrenType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Encrypt a CMS message                                              # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Encrypt a CMS message: Request                                     = -->
  <!--====================================================================== -->
  <xsd:element name="EncryptCMSRequest" type="EncryptCMSRequestType"/>
  <xsd:complexType name="EncryptCMSRequestType">
    <xsd:sequence>
      <xsd:element name="RecipientPublicKey" type="CMSRecipientPublicKeyType" maxOccurs="unbounded"/>
      <xsd:element name="ToBeEncrypted" type="CMSToBeEncryptedType"/>
    </xsd:sequence>
    <xsd:attribute name="ReturnBinaryResult" type="xsd:boolean" use="optional" default="false"/>
  </xsd:complexType>
  <xsd:complexType name="CMSToBeEncryptedType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType"/>
      <xsd:element name="Content" type="Base64OptRefContentType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="CMSRecipientPublicKeyType">
    <xsd:choice>
      <xsd:element name="X509Certificate" type="xsd:base64Binary"/>
    </xsd:choice>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Encrypt a CMS message: Response                                    = -->
  <!--====================================================================== -->
  <xsd:element name="EncryptCMSResponse" type="EncryptCMSResponseType"/>
  <xsd:complexType name="EncryptCMSResponseType">
    <xsd:sequence>
      <xsd:element name="CMSMessage" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Decrypt a CMS message                                              # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Decrypt a CMS message: Request                                     = -->
  <!--====================================================================== -->
  <xsd:element name="DecryptCMSRequest" type="DecryptCMSRequestType"/>
  <xsd:complexType name="DecryptCMSRequestType">
    <xsd:sequence>
      <xsd:element name="CMSMessage" type="xsd:base64Binary"/>
      <xsd:element name="EncryptedContent" type="CMSEncryptedContentType" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="ReturnResult" type="ReturnResultType" use="optional" default="xml"/>
  </xsd:complexType>
  <xsd:complexType name="CMSEncryptedContentType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
      <xsd:element name="Content" type="Base64OptRefContentType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="ReturnResultType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="binary"/>
      <xsd:enumeration value="xml"/>
      <xsd:enumeration value="none"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!--====================================================================== -->
  <!--= Decrypt a CMS message: Response                                    = -->
  <!--====================================================================== -->
  <xsd:element name="DecryptCMSResponse" type="DecryptCMSResponseType"/>
  <xsd:complexType name="DecryptCMSResponseType">
    <xsd:sequence>
      <xsd:element name="DecryptedData" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Encrypt an XML document                                            # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Encrypt an XML document: Request                                   = -->
  <!--====================================================================== -->
  <xsd:element name="EncryptXMLRequest">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="EncryptXMLRequestType"/>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="EncryptXMLRequestType">
    <xsd:sequence>
      <xsd:element name="RecipientPublicKey" type="XMLRecipientPublicKeyType" maxOccurs="unbounded"/>
      <xsd:element name="ToBeEncrypted" type="ToBeEncryptedType" maxOccurs="unbounded"/>
      <xsd:element name="EncryptionInfo" type="EncryptionInfoType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="ToBeEncryptedType">
    <xsd:choice>
      <xsd:element name="Element">
        <xsd:complexType>
          <xsd:attribute name="Selector" type="xsd:token" use="required"/>
          <xsd:attribute name="EncDataReference" type="xsd:anyURI" use="optional"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ElementContent">
        <xsd:complexType>
          <xsd:attribute name="Selector" type="xsd:token" use="required"/>
          <xsd:attribute name="EncDataReference" type="xsd:anyURI" use="optional"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="New" type="XMLToBeEncryptedNewType"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="XMLToBeEncryptedNewType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType"/>
      <xsd:element name="Content" type="XMLToBeEncryptedNewContentType"/>
    </xsd:sequence>
    <xsd:attribute name="ParentSelector" type="xsd:token" use="required"/>
    <xsd:attribute name="NodeCount" type="xsd:nonNegativeInteger" use="required"/>
  </xsd:complexType>
  <xsd:complexType name="XMLToBeEncryptedNewContentType">
    <xsd:complexContent>
      <xsd:extension base="Base64XMLLocRefContentType">
        <xsd:attribute name="EncDataReference" type="xsd:anyURI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="XMLRecipientPublicKeyType">
    <xsd:choice>
      <xsd:element ref="dsig:KeyValue"/>
      <xsd:element name="X509Certificate" type="xsd:base64Binary"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="EncryptionInfoType">
    <xsd:sequence>
      <xsd:element name="EncryptionEnvironment" type="Base64XMLOptRefContentType"/>
      <xsd:element name="EncryptedKeyLocation" minOccurs="0">
        <xsd:complexType>
          <xsd:attribute name="ParentSelector" type="xsd:token" use="required"/>
          <xsd:attribute name="NodeCount" type="xsd:nonNegativeInteger" use="required"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Supplement" type="DataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Encrypt an XML document: Response                                  = -->
  <!--====================================================================== -->
  <xsd:element name="EncryptXMLResponse" type="EncryptXMLResponseType"/>
  <xsd:complexType name="EncryptXMLResponseType">
    <xsd:sequence>
      <xsd:element name="EncryptionEnvironment">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:any namespace="##any" processContents="lax"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="EncryptedData" type="EncryptedDataType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="EncryptedDataType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:base64Binary">
        <xsd:attribute name="EncDataReference" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Decrypt an XML document                                            # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Decrypt an XML document: Request                                   = -->
  <!--====================================================================== -->
  <xsd:element name="DecryptXMLRequest" type="DecryptXMLRequestType"/>
  <xsd:complexType name="DecryptXMLRequestType">
    <xsd:sequence>
      <xsd:element name="EncryptedContent" type="Base64XMLOptRefContentType"/>
      <xsd:element name="EncrElemsSelector" type="xsd:string"/>
      <xsd:element name="Supplement" type="DataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="ReturnResult" type="ReturnResultType" use="optional" default="xml"/>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Decrypt an XML document: Response                                  = -->
  <!--====================================================================== -->
  <xsd:element name="DecryptXMLResponse" type="DecryptXMLResponseType"/>
  <xsd:complexType name="DecryptXMLResponseType">
    <xsd:sequence minOccurs="0">
      <xsd:element name="CandidateDocument" type="XMLContentType"/>
      <xsd:element name="DecryptedBinaryData" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:base64Binary">
              <xsd:attribute name="EncrElemSelector" type="xsd:string" use="required"/>
              <xsd:attribute name="MimeType" type="xsd:string" use="optional"/>
              <xsd:attribute name="Encoding" type="xsd:anyURI" use="optional"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Hashing                                                            # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Hash Computation Request                                           = -->
  <!--====================================================================== -->
  <xsd:element name="CreateHashRequest" type="CreateHashRequestType"/>
  <xsd:complexType name="CreateHashRequestType">
    <xsd:sequence>
      <xsd:element name="HashInfo" type="CreateHashInfoRequestType" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="CreateHashInfoRequestType">
    <xsd:sequence>
      <xsd:element name="HashData" type="HashDataType"/>
      <xsd:element name="HashAlgorithm" type="xsd:anyURI"/>
      <xsd:element name="FriendlyName" type="xsd:string" minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="RespondHashData" type="xsd:boolean" use="required"/>
  </xsd:complexType>
  <xsd:complexType name="HashDataType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType"/>
      <xsd:element name="Content" type="Base64XMLOptRefContentType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Hash Computation Response                                          = -->
  <!--====================================================================== -->
  <xsd:element name="CreateHashResponse" type="CreateHashResponseType"/>
  <xsd:complexType name="CreateHashResponseType">
    <xsd:sequence>
      <xsd:element name="HashInfo" type="CreateHashInfoResponseType" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="CreateHashInfoResponseType">
    <xsd:sequence>
      <xsd:element name="HashData" type="HashDataType" minOccurs="0"/>
      <xsd:element name="HashAlgorithm" type="xsd:anyURI"/>
      <xsd:element name="FriendlyName" type="xsd:string" minOccurs="0"/>
      <xsd:element name="HashValue" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Hash Verification Request                                          = -->
  <!--====================================================================== -->
  <xsd:element name="VerifyHashRequest" type="VerifyHashRequestType"/>
  <xsd:complexType name="VerifyHashRequestType">
    <xsd:sequence>
      <xsd:element name="HashInfo" type="VerifyHashInfoRequestType" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="VerifyHashInfoRequestType">
    <xsd:sequence>
      <xsd:element name="HashData" type="HashDataType"/>
      <xsd:element name="HashAlgorithm" type="xsd:anyURI"/>
      <xsd:element name="FriendlyName" type="xsd:string" minOccurs="0"/>
      <xsd:element name="HashValue" type="xsd:base64Binary"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Hash Verification Response                                         = -->
  <!--====================================================================== -->
  <xsd:element name="VerifyHashResponse" type="VerifyHashResponseType"/>
  <xsd:complexType name="VerifyHashResponseType">
    <xsd:sequence>
      <xsd:element name="VerificationResult" type="VerificationResultType" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="VerificationResultType">
    <xsd:sequence>
      <xsd:element name="FriendlyName" type="xsd:string" minOccurs="0"/>
      <xsd:element name="Result" type="xsd:boolean"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Infobox Commands                                                   # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Check Available Infoboxes Request                                  = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxAvailableRequest" type="InfoboxAvailableRequestType"/>
  <xsd:complexType name="InfoboxAvailableRequestType"/>
  <!--====================================================================== -->
  <!--= Check Available Infoboxes Response                                 = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxAvailableResponse" type="InfoboxAvailableResponseType"/>
  <xsd:complexType name="InfoboxAvailableResponseType">
    <xsd:sequence minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Create Infobox Request                                             = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxCreateRequest" type="InfoboxCreateRequestType"/>
  <xsd:complexType name="InfoboxCreateRequestType">
    <xsd:sequence>
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
      <xsd:element name="InfoboxType" type="InfoboxTypeType"/>
      <xsd:element name="Creator" type="xsd:string"/>
      <xsd:element name="Purpose" type="xsd:string"/>
      <xsd:element name="ReadAccessAuthorization" type="AccessAuthorizationType" minOccurs="0"/>
      <xsd:element name="UpdateAccessAuthorization" type="AccessAuthorizationType" minOccurs="0"/>
      <xsd:element name="ReadUserConfirmation" type="UserConfirmationType" minOccurs="0"/>
      <xsd:element name="UpdateUserConfirmation" type="UserConfirmationType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="InfoboxTypeType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="BinaryFile"/>
      <xsd:enumeration value="AssocArray"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:complexType name="AccessAuthorizationType">
    <xsd:sequence>
      <xsd:element name="RequesterID" type="RequesterIDType" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="UserMayChange" type="xsd:boolean" use="required"/>
  </xsd:complexType>
  <xsd:simpleType name="RequesterIDSimpleType">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <xsd:complexType name="RequesterIDType">
    <xsd:simpleContent>
      <xsd:extension base="RequesterIDSimpleType">
        <xsd:attribute name="AuthenticationClass" type="AuthenticationClassType" use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:complexType name="UserConfirmationType">
    <xsd:simpleContent>
      <xsd:extension base="UserConfirmationSimpleType">
        <xsd:attribute name="UserMayChange" type="xsd:boolean" use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <xsd:simpleType name="UserConfirmationSimpleType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="none"/>
      <xsd:enumeration value="info"/>
      <xsd:enumeration value="confirm"/>
      <xsd:enumeration value="confirmWithSecret"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="AuthenticationClassType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="anonym"/>
      <xsd:enumeration value="pseudoanonym"/>
      <xsd:enumeration value="certified"/>
      <xsd:enumeration value="certifiedGovAgency"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!--====================================================================== -->
  <!--= Create Infobox Response                                            = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxCreateResponse" type="InfoboxCreateResponseType"/>
  <xsd:complexType name="InfoboxCreateResponseType"/>
  <!--====================================================================== -->
  <!--= Delete Infobox Request                                             = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxDeleteRequest" type="InfoboxDeleteRequestType"/>
  <xsd:complexType name="InfoboxDeleteRequestType">
    <xsd:sequence>
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Delete Infobox Response                                            = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxDeleteResponse" type="InfoboxDeleteResponseType"/>
  <xsd:complexType name="InfoboxDeleteResponseType"/>
  <!--====================================================================== -->
  <!--= Read Infobox Request                                               = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxReadRequest" type="InfoboxReadRequestType"/>
  <xsd:complexType name="InfoboxReadRequestType">
    <xsd:sequence>
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
      <xsd:choice>
        <xsd:element name="BinaryFileParameters" type="InfoboxReadParamsBinaryFileType"/>
        <xsd:element name="AssocArrayParameters" type="InfoboxReadParamsAssocArrayType"/>
      </xsd:choice>
      <xsd:element name="BoxSpecificParameters" type="AnyChildrenType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="InfoboxReadParamsBinaryFileType">
    <xsd:attribute name="ContentIsXMLEntity" type="xsd:boolean" use="optional" default="false"/>
  </xsd:complexType>
  <xsd:complexType name="InfoboxReadParamsAssocArrayType">
    <xsd:choice>
      <xsd:element name="ReadKeys">
        <xsd:complexType>
          <xsd:attribute name="SearchString" type="WildCardSearchStringType" use="required"/>
          <xsd:attribute name="UserMakesUnique" type="xsd:boolean" use="optional" default="false"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ReadPairs">
        <xsd:complexType>
          <xsd:attribute name="SearchString" type="WildCardSearchStringType" use="required"/>
          <xsd:attribute name="UserMakesUnique" type="xsd:boolean" use="optional" default="false"/>
          <xsd:attribute name="ValuesAreXMLEntities" type="xsd:boolean" use="optional" default="false"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ReadValue">
        <xsd:complexType>
          <xsd:attribute name="Key" type="BoxIdentifierType" use="required"/>
          <xsd:attribute name="ValueIsXMLEntity" type="xsd:boolean" use="optional" default="false"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:choice>
  </xsd:complexType>
  <xsd:element name="IdentityLinkDomainIdentifier" type="xsd:anyURI"/>
  <!--====================================================================== -->
  <!--= Read Infobox Response                                              = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxReadResponse" type="InfoboxReadResponseType"/>
  <xsd:complexType name="InfoboxReadResponseType">
    <xsd:choice>
      <xsd:element name="BinaryFileData" type="Base64XMLContentType"/>
      <xsd:element name="AssocArrayData" type="InfoboxReadDataAssocArrayType"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="InfoboxReadDataAssocArrayType">
    <xsd:choice>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="Key" type="BoxIdentifierType"/>
      </xsd:sequence>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="Pair" type="InfoboxAssocArrayPairType"/>
      </xsd:sequence>
    </xsd:choice>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Update Infobox Request                                             = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxUpdateRequest" type="InfoboxUpdateRequestType"/>
  <xsd:complexType name="InfoboxUpdateRequestType">
    <xsd:sequence>
      <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
      <xsd:choice>
        <xsd:element name="BinaryFileParameters" type="Base64XMLContentType"/>
        <xsd:element name="AssocArrayParameters" type="InfoboxUpdateParamsAssocArrayType"/>
      </xsd:choice>
      <xsd:element name="BoxSpecificParameters" type="AnyChildrenType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="InfoboxUpdateParamsAssocArrayType">
    <xsd:choice>
      <xsd:element name="UpdateKey">
        <xsd:complexType>
          <xsd:attribute name="Key" type="xsd:token" use="required"/>
          <xsd:attribute name="NewKey" type="xsd:token" use="required"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="UpdateValue" type="InfoboxAssocArrayPairType"/>
      <xsd:element name="DeletePair">
        <xsd:complexType>
          <xsd:attribute name="Key" type="xsd:token" use="required"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:choice>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Update Infobox Response                                            = -->
  <!--====================================================================== -->
  <xsd:element name="InfoboxUpdateResponse" type="InfoboxUpdateResponseType"/>
  <xsd:complexType name="InfoboxUpdateResponseType"/>
  <!--###################################################################### -->
  <!--# Null-Operation                                                     # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Null-Operation ReQuest                                             = -->
  <!--====================================================================== -->
  <xsd:element name="NullOperationRequest" type="NullOperationRequestType"/>
  <xsd:complexType name="NullOperationRequestType"/>
  <!--====================================================================== -->
  <!--= Null-Operation Response                                            = -->
  <!--====================================================================== -->
  <xsd:element name="NullOperationResponse" type="NullOperationResponseType"/>
  <xsd:complexType name="NullOperationResponseType"/>
  <!--###################################################################### -->
  <!--# Get Properties                                                     # -->
  <!--###################################################################### -->
  <xsd:element name="GetPropertiesRequest">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="GetPropertiesRequestType"/>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="GetPropertiesRequestType"/>
  <!--====================================================================== -->
  <!--= Get Properties Response                                            = -->
  <!--====================================================================== -->
  <xsd:element name="GetPropertiesResponse" type="GetPropertiesResponseType"/>
  <xsd:complexType name="GetPropertiesResponseType">
    <xsd:sequence>
      <xsd:element name="ViewerMediaType" type="MimeTypeType" maxOccurs="unbounded"/>
      <xsd:element name="XMLSignatureTransform" type="xsd:anyURI" maxOccurs="unbounded"/>
      <xsd:element name="KeyboxIdentifier" type="QualifiedBoxIdentifierType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="Binding" type="BindingType" maxOccurs="unbounded"/>
      <xsd:element name="ProtocolVersion" type="xsd:token" maxOccurs="unbounded"/>
      <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="BindingType">
    <xsd:complexContent>
      <xsd:extension base="AnyChildrenType">
        <xsd:attribute name="Identifier" type="xsd:token" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="QualifiedBoxIdentifierType">
    <xsd:simpleContent>
      <xsd:extension base="BoxIdentifierType">
        <xsd:attribute name="Signature" type="xsd:boolean" use="required"/>
        <xsd:attribute name="Encryption" type="xsd:boolean" use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
  <!--###################################################################### -->
  <!--# Get Token Status                                                   # -->
  <!--###################################################################### -->
  <!--====================================================================== -->
  <!--= Get Token Status Request                                           = -->
  <!--====================================================================== -->
  <xsd:element name="GetStatusRequest" type="GetStatusRequestType"/>
  <xsd:complexType name="GetStatusRequestType">
    <xsd:sequence minOccurs="0">
      <xsd:element name="TokenStatus" type="TokenStatusType"/>
      <xsd:element name="MaxDelay" type="xsd:nonNegativeInteger"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--====================================================================== -->
  <!--= Get Token Status Response                                          = -->
  <!--====================================================================== -->
  <xsd:element name="GetStatusResponse" type="GetStatusResponseType"/>
  <xsd:complexType name="GetStatusResponseType">
    <xsd:sequence>
      <xsd:element name="TokenStatus" type="TokenStatusType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="TokenStatusType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="ready"/>
      <xsd:enumeration value="removed"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!--###################################################################### -->
  <!--# Error Response                                                     # -->
  <!--###################################################################### -->
  <xsd:element name="ErrorResponse" type="ErrorResponseType"/>
  <xsd:complexType name="ErrorResponseType">
    <xsd:sequence>
      <xsd:element name="ErrorCode" type="ErrorCodeType"/>
      <xsd:element name="Info" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="ErrorCodeType">
    <xsd:restriction base="xsd:integer">
      <xsd:minInclusive value="1000"/>
      <xsd:maxInclusive value="99999"/>
    </xsd:restriction>
  </xsd:simpleType>
  <!--###################################################################### -->
  <!--# Auxiliary Types                                                    # -->
  <!--###################################################################### -->
  <xsd:simpleType name="BoxIdentifierType">
    <xsd:restriction base="xsd:token"/>
  </xsd:simpleType>
  <xsd:simpleType name="MimeTypeType">
    <xsd:restriction base="xsd:token"/>
  </xsd:simpleType>
  <xsd:simpleType name="WildCardSearchStringType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[^\*/]*(\*[^\*/]*)?(/[^\*/]*(\*[^\*/]*)?)*"/>
      <xsd:pattern value="\*\*"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:complexType name="InfoboxAssocArrayPairType">
    <xsd:complexContent>
      <xsd:extension base="Base64XMLContentType">
        <xsd:attribute name="Key" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="AnyChildrenType" mixed="false">
    <xsd:sequence minOccurs="0" maxOccurs="unbounded">
      <xsd:any namespace="##any" processContents="lax"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="AnyMixedChildrenType" mixed="true">
    <xsd:sequence minOccurs="0" maxOccurs="unbounded">
      <xsd:any namespace="##any" processContents="skip"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="XMLContentType" mixed="true">
    <xsd:complexContent mixed="true">
      <xsd:extension base="AnyMixedChildrenType">
        <xsd:attribute ref="xml:space" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Base64XMLLocRefOptRefContentType">
    <xsd:complexContent>
      <xsd:extension base="Base64XMLLocRefContentType">
        <xsd:attribute name="Reference" type="xsd:anyURI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Base64XMLLocRefReqRefContentType">
    <xsd:complexContent>
      <xsd:extension base="Base64XMLLocRefContentType">
        <xsd:attribute name="Reference" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Base64XMLOptRefContentType">
    <xsd:complexContent>
      <xsd:extension base="Base64XMLContentType">
        <xsd:attribute name="Reference" type="xsd:anyURI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Base64OptRefContentType">
    <xsd:complexContent>
      <xsd:extension base="Base64ContentType">
        <xsd:attribute name="Reference" type="xsd:anyURI" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Base64ContentType">
    <xsd:choice minOccurs="0">
      <xsd:element name="Base64Content" type="xsd:base64Binary"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="Base64XMLContentType">
    <xsd:choice minOccurs="0">
      <xsd:element name="Base64Content" type="xsd:base64Binary"/>
      <xsd:element name="XMLContent" type="XMLContentType"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="Base64XMLLocRefContentType">
    <xsd:choice minOccurs="0">
      <xsd:element name="Base64Content" type="xsd:base64Binary"/>
      <xsd:element name="XMLContent" type="XMLContentType"/>
      <xsd:element name="LocRefContent" type="xsd:anyURI"/>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="DataObjectAssociationType">
    <xsd:sequence>
      <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
      <xsd:element name="Content" type="Base64XMLLocRefReqRefContentType"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>