3.2.5.2 DRM Version 7 Server Message Processing Events and Sequencing Rules
The Digital Rights Management (DRM) version 7 License Response packet is used by the license server to send a license for protected media content to a client.
Figure 6: DRM client/server response sequence
If the client request was silent, the response is returned directly to the client. If the request was nonsilent, the response is returned to the client embedded within an HTML page. The HTML page is formatted as follows. The text enclosed in braces ("{{" and "}}") can be replaced as appropriate.
-
<HTML><HEAD><TITLE>{{optional page title}}</TITLE> <Script Language="JavaScript">function StoreV2License(hr) { netobj.StoreLicense("{{license response}}"); } </Script></HEAD> <BODY onLoad="StoreV2License()">{{optional descriptive text}} <OBJECT classid=clsid:A9FC132B-096D-460B-B7D5-1DB0FAE0C062 height=0 id=netobj width=0 VIEWASTEXT> <EMBED MAYSCRIPT TYPE="application/x-drm-v2" HIDDEN="true"></OBJECT> {{optional descriptive text}} </BODY></HTML>
The format of the response, which is in extensible markup language (XML), can include any number and combination of DRM version 1 and version 7 licenses, encoded with the base64 encoding algorithm.
Request Validation
Unless otherwise noted, most fields in the request are not strictly validated, because they are intended to be used within the implementer's business logic for license issuance. However, the server expects that the license request conforms to the schema.
c:/LICENSEREQUEST/V1CHALLENGE is validated according to the rules for validating a version 1 license request.
If c:/LICENSEREQUEST/CLIENTINFO/CLIENTID does not base64-decode to a 168-byte CLIENTID structure, the server MUST return DRM_E_LIC_CLIENDID_DECODING_FAILURE (0x8004800FL) to the client.
The server MUST validate CA against a white list of nonrevoked client certificates as described in Client Certificate White List (section 3.2.3.1.1). If the CA is not found within the white list or if signature validation of the client-signed data fails, the license server MUST return DRM_E_LIC_UNAUTHORIZED_DRM_CLIENT (0x8004800EL) to the client.
The server SHOULD map the following XML elements to associated state variables so that they are exposed to the higher layer for use:
c:/LICENSEREQUEST/CLIENTINFO/WRMHEADER -> WRMHeader
c:/LICENSEREQUEST/CLIENTINFO/SUBJECTID1 -> SubjectId1
c:/LICENSEREQUEST/CLIENTINFO/SUBJECTID2 -> SubjectId2
c:/LICENSEREQUEST/CLIENTINFO/DRMKVERSION -> DrmKVersion
c:/LICENSEREQUEST/CLIENTINFO/REVOCATIONINFO -> RevocationInfo
c:/LICENSEREQUEST/CLIENTINFO/SECURITYVERSION -> SecurityVersion
c:/LICENSEREQUEST/CLIENTINFO/CLIENTVERSION -> ClientVersion
c:/LICENSEREQUEST/CLIENTINFO/APPSEC -> ClientAppSec
After c:/LICENSEREQUEST/CLIENTINFO/CLIENTID is decoded, the result is mapped into a CLIENTID structure. CLIENTID.EncRandNum MUST be decrypted with KS and stored as internal state SessionKey. SessionKey is used to initialize an RC4 cipher, which is in turn used to decrypt CLIENTID.pk and is stored and made available to the higher layer as ClientCertificate.
Response Generation
The XML response is generated according to the schema described in XML Schema for Version 7 License Response (section 2.2.3.2.4).
The server's determination of how many licenses are generated and the format of each license generated is third-party server implementation-specific, although all state in the Abstract Data Model is provided to the higher layer if it makes a determination to use values to make deterministic decisions on the data used to populate licenses for the response.
After the higher layer has created all necessary licenses, it must call the TransmitLicensesToClient abstract interface (section 3.2.1.1) with a properly populated array of LicenseToSend structures (section 2.2.1.7). Each element in the array is assigned the correct value according to license version (either 1 or 7) as well as the correct license size and license buffer.
The higher layer provides a variable number of already-generated licenses in either version 1 or version 7 as well as indicating which version of license they are.
For each version 1 license, the server includes the license in the response as described in DRM Version 1 License Format Within a Version 7 License Response (section 2.2.3.2.4.1).
For each version 7 license, the server includes the license in the response as described in DRM Version 7 License Format (section 2.2.3.2.4.2).
If, within the license request, the client sends a CRL version or REV_INFO version lower than that known to the server, then the server MUST send the latest known REV_INFO and CRL data to the client within the license response. The REV_INFO.WMDRMRLVIHEAD.dwRIV field contains the version of the REV_INFO data.