<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "XMLSchema.dtd" [
   <!ATTLIST schema
     xmlns:xenc CDATA #FIXED 'http://www.w3.org/2001/04/xmlenc#'
     xmlns:ds CDATA #FIXED 'http://www.w3.org/2000/09/xmldsig#'>
   <!ENTITY xenc 'http://www.w3.org/2001/04/xmlenc#'>
   <!ENTITY % p ''>
   <!ENTITY % s ''>
  ]>
<schema xmlns="http://www.w3.org/2001/XMLSchema" version="1.0" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2001/04/xmlenc#" elementFormDefault="qualified">

  <import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>

  <complexType name="EncryptedType" abstract="true">
    <sequence>
      <element name="EncryptionMethod" type="xenc:EncryptionMethodType" minOccurs="0"/>
      <element ref="ds:KeyInfo" minOccurs="0"/>
      <element ref="xenc:CipherData"/>
      <element ref="xenc:EncryptionProperties" minOccurs="0"/>
    </sequence>
    <attribute name="Id" type="ID" use="optional"/>
    <attribute name="Type" type="anyURI" use="optional"/>
    <attribute name="MimeType" type="string" use="optional"/>
    <attribute name="Encoding" type="anyURI" use="optional"/>
  </complexType>

  <complexType name="EncryptionMethodType" mixed="true">
    <sequence>
      <element name="KeySize" minOccurs="0" type="xenc:KeySizeType"/>
      <element name="OAEPparams" minOccurs="0" type="base64Binary"/>
      <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="Algorithm" type="anyURI" use="required"/>
  </complexType>

    <simpleType name="KeySizeType">
      <restriction base="integer"/>
    </simpleType>

  <element name="CipherData" type="xenc:CipherDataType"/>
  <complexType name="CipherDataType">
     <choice>
       <element name="CipherValue" type="base64Binary"/>
       <element ref="xenc:CipherReference"/>
     </choice>
    </complexType>

   <element name="CipherReference" type="xenc:CipherReferenceType"/>
   <complexType name="CipherReferenceType">
       <choice>
         <element name="Transforms" type="xenc:TransformsType" minOccurs="0"/>
       </choice>
       <attribute name="URI" type="anyURI" use="required"/>
   </complexType>

     <complexType name="TransformsType">
       <sequence>
         <element ref="ds:Transform" maxOccurs="unbounded"/>
       </sequence>
     </complexType>


  <element name="EncryptedData" type="xenc:EncryptedDataType"/>
  <complexType name="EncryptedDataType">
    <complexContent>
      <extension base="xenc:EncryptedType">
       </extension>
    </complexContent>
  </complexType>

  <!-- Children of ds:KeyInfo -->

  <element name="EncryptedKey" type="xenc:EncryptedKeyType"/>
  <complexType name="EncryptedKeyType">
    <complexContent>
      <extension base="xenc:EncryptedType">
        <sequence>
          <element ref="xenc:ReferenceList" minOccurs="0"/>
          <element name="CarriedKeyName" type="string" minOccurs="0"/>
        </sequence>
        <attribute name="Recipient" type="string" use="optional"/>
      </extension>
    </complexContent>
  </complexType>

    <element name="AgreementMethod" type="xenc:AgreementMethodType"/>
    <complexType name="AgreementMethodType" mixed="true">
      <sequence>
        <element name="KA-Nonce" minOccurs="0" type="base64Binary"/>
        <!-- <element ref="ds:DigestMethod" minOccurs="0"/> -->
        <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
        <element name="OriginatorKeyInfo" minOccurs="0" type="ds:KeyInfoType"/>
        <element name="RecipientKeyInfo" minOccurs="0" type="ds:KeyInfoType"/>
      </sequence>
      <attribute name="Algorithm" type="anyURI" use="required"/>
    </complexType>

  <!-- End Children of ds:KeyInfo -->

  <element name="ReferenceList">
    <complexType>
      <choice minOccurs="1" maxOccurs="unbounded">
        <element name="DataReference" type="xenc:ReferenceType"/>
        <element name="KeyReference" type="xenc:ReferenceType"/>
      </choice>
    </complexType>
  </element>

  <complexType name="ReferenceType">
    <sequence>
      <any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="URI" type="anyURI" use="required"/>
  </complexType>


  <element name="EncryptionProperties" type="xenc:EncryptionPropertiesType"/>
  <complexType name="EncryptionPropertiesType">
    <sequence>
      <element ref="xenc:EncryptionProperty" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="Id" type="ID" use="optional"/>
  </complexType>

    <element name="EncryptionProperty" type="xenc:EncryptionPropertyType"/>
    <complexType name="EncryptionPropertyType" mixed="true">
      <choice maxOccurs="unbounded">
        <any namespace="##other" processContents="lax"/>
      </choice>
      <attribute name="Target" type="anyURI" use="optional"/>
      <attribute name="Id" type="ID" use="optional"/>
      <anyAttribute namespace="http://www.w3.org/XML/1998/namespace"/>
    </complexType>

</schema>
