2.2.3.2.4 XML Schema for Version 7 License Response

The following is an XML schema for the version 7 license response packet per [XML], [XMLSCHEMA1/2], and [XMLSCHEMA2/2]. Where required, elements, attributes, and values are described in greater detail after the schema. This is not a strictly correct XML schema because the LICENSE element can be either a version 1 license or a version 7 license. The version attribute of the LICENSE element differentiates the two. The license server MAY mark nodes with either license version, or a combination of versions in different nodes. This allows the server to return licenses usable to multiple WMDRM protocol implementations simultaneously. This decision is entirely server-dependent on factors unrelated to the protocol.

If the version attribute indicates a version 7 license, then the first 80 bytes (called EncRandNum) of the base64-decoded version 7 license are used to decrypt the remainder of the base64-decoded bytes in the following manner.

Before encryption, EncRandNum contains the following byte values:

  • byte 0: MUST be the value 0x07.

  • byte 1: MUST be the value 0x01.

  • bytes 2 – 8: Used as the initialization vector (IV) to create an RC4 key (KR).

  • bytes 9 – 19: Not used.

Cryptographic sequence:

  1. {EncRandNum}KM

  2. KR {version 7 license}

The encrypted EncRandNum and version 7 license are concatenated and then base64-encoded.

 <?xml version="1.0" encoding="utf-8"?>
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="LICENSERESPONSE">
     <xs:complexType>
       <xs:sequence>
         <xs:element name="REVOCATION" minOccurs="0" 
              maxOccurs="unbounded">
           <xs:complexType>
             <xs:simpleContent>
               <xs:extension base="xs:string">
                 <!-- base64-encoded -->
                 <xs:attribute name="type" use="required" 
                      type="RevocationType" />
               </xs:extension>
             </xs:simpleContent>
           </xs:complexType>
         </xs:element>
         <xs:element name="LICENSE" minOccurs="1" 
              maxOccurs="unbounded">
           <xs:complexType>
             <xs:simpleContent>
               <xs:extension base="xs:string">
                 <!-- base64-encoded -->
                 <xs:attribute name="version" use="required" 
                      type="LicenseVersion" />
               </xs:extension>
             </xs:simpleContent>
           </xs:complexType>
         </xs:element>
       </xs:sequence>
     </xs:complexType>
   </xs:element>
   <xs:simpleType name="RevocationType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="WMDRMNET" />
       <xs:enumeration value="DeviceRevocationList" />
       <xs:enumeration value="RevocationList" />
       <xs:enumeration 
            value="{66DD5134-4E34-40ae-9D5D-13A112B7591F}" />
     </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="LicenseVersion">
     <xs:restriction base="xs:string">
       <xs:enumeration value="0.1.0.0" />
       <xs:enumeration value="2.0.0.0" />
     </xs:restriction>
   </xs:simpleType>
 </xs:schema>