<schema xmlns='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='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>