WMRMLicGen.UplinkKey
The UplinkKey property specifies and retrieves the key of the root element in a license chain.
Syntax
WMRMLicGen.UplinkKey = String
String = WMRMLicGen.UplinkKey
Parameters
This property takes no parameters.
Return Values
If the property succeeds, it returns a String containing the key of the root element in a license chain. If it fails, it returns a number in the error object.
Remarks
If this license is a leaf element of a license chain, use this method to specify the key of the root license.
Example Code
The following example is based on the sample page Simple.asp, except this sample can issue a simple or a chained license depending on the license request.
<%@ LANGUAGE="VBScript"%>
<html>
<%
Response.Buffer = True
Response.Expires = 0
Do
On Error Resume Next
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Declare variables.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Dim ChallengeObj ' WMRMChallenge object
Dim ChainCollObj ' WMRMUplinkCollection object
Dim ChainObj ' WMRMUplink object
Dim LeafLicenseStateObj ' WMRMLicenseStateData object
Dim RootLicenseStateObj ' WMRMLicenseStateData object
Dim HeaderObj ' WMRMHeader object
Dim KeyObj ' WMRMKeys object
Dim RightsObj ' WMRMRights object
Dim LicenseObj ' WMRMLicGen object
Dim ResponseObj ' WMRMResponse object
Dim RestrictObj ' WMRMRestrictions object
Dim ContentServerPubKey ' Public key of the content server
Dim Seed ' License key seed
Dim Delivery ' Delivery flag
Dim LicChain ' License chain flag
Dim Silent ' Silent delivery flag
Dim strLicenseRequested ' License request string
Dim varClientInfo ' Client information
Dim varHeader ' Content header
Dim blnResult ' Signature verification
Dim SimpleLeafKID ' Key ID of a simple license or leaf license
Dim IndiVersion ' Security version of the DRM component
Dim RootKID ' Key ID of the root license
Dim RootCat ' License state data for root licenses
Dim RCountArray ' Count array
Dim RDateArray ' Date array
Dim RStreamID ' Stream ID
Dim RVague ' Vagueness
Dim IssueRoot ' Root license flag
Dim Rcounts ' Remaining counts
Dim RstartDate ' Start date
Dim RExpDate ' Expiration date
Dim LeafCat ' License state data for leaf licenses
Dim LCountArray ' Count array
Dim LDateArray ' Date array
Dim LStreamID ' Stream ID
Dim LVague ' Vagueness
Dim IssueLeaf ' Leaf license flag
Dim Lcounts ' Remaining counts
Dim LstartDate ' Start date
Dim LExpDate ' Expiration date
Dim SimpleLeafKey ' Key for the simple license or leaf license
Dim SimpleLeafRights ' Rights string for the simple license or leaf license
Dim SimpleLeafLicense ' License for the simple license or leaf license
Dim RootKey ' Key for the root license
Dim RootRights ' Rights string for the root license
Dim RootLicense ' Root license
Dim LicResponse ' License response
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Set variables.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
ContentServerPubKey = Application("contentserverpubkey")
Seed = Application("seed")
Delivery = ""
LicChain = ""
Silent = True
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Check the request for silent or non-silent delivery.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
If (Request.Form("nonsilent") <> "") Then Silent = False
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Retrieve the license request. Get the client information and content header.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set ChallengeObj = Server.CreateObject("WMRMObjs.WMRMchallenge")
strLicenseRequested = Request.Form("challenge")
ChallengeObj.Challenge = strLicenseRequested
varClientInfo = ChallengeObj.ClientInfo
varHeader = ChallengeObj.Header
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Put the content header into the header object. Retrieve
' the KID and required individualization version.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set HeaderObj = Server.CreateObject("WMRMObjs.WMRMheader")
HeaderObj.Header = varHeader
blnResult = HeaderObj.Verify(ContentServerPubKey)
SimpleLeafKID = HeaderObj.KeyID
IndiVersion = HeaderObj.IndividualizedVersion
' If IndividualizedVersion is not specified, an error
' might be set.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' If this is a chained license, retrieve the root license KID.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set ChainCollObj = ChallengeObj.Uplinks
If (Err.Number = 0) Then ' Request for a license chain.
LicChain = "chain"
' Get license state data and key ID for the root license.
Set ChainObj = ChainCollObj.item(1)
RootKID = ChainObj.KID
' Get license state data to determine whether to issue
' a root license.
Set RootLicenseStateObj = ChainObj.LicenseState
RootCat = cstr(RootLicenseStateObj.Category)
Select Case RootCat
case 0 ' The root license has no rights.
IssueRoot = True
case 1 ' The root license has unlimited play counts.
IssueRoot = False
case 2 ' The root license has remaining play counts.
RCountArray = RootLicenseStateObj.Counts
RCounts = cstr(RCountArray(0))
IssueRoot = False
case 3 ' The root license has a start date.
RDateArray = RootLicenseStateObj.Dates
RStartDate = cstr(RDateArray(0))
IssueRoot = False
case 4 ' The root license has an expiration date.
RDateArray = RootLicenseStateObj.Dates
RExpDate = cstr(RDateArray(0))
IssueRoot = False
case 5 ' The root license has start and expiration dates.
RDateArray = RootLicenseStateObj.Dates
RStartDate = cstr(RDateArray(0))
RExpDate = cstr(RDateArray(1))
IssueRoot = False
case 6 ' The root license has a start date and
' remaining play counts.
RDateArray = RootLicenseStateObj.Dates
RStartDate = cstr(RDateArray(0))
RCountArray = RootLicenseStateObj.Counts
RCounts = cstr(RCountArray(0))
IssueRoot = False
case 7 ' The root license has an expiration date and
' remaining play counts.
RDateArray = RootLicenseStateObj.Dates
RExpDate = cstr(RDateArray(0))
RCountArray = RootLicenseStateObj.Counts
RCounts = cstr(RCountArray(0))
IssueRoot = False
case 8 ' The root license has start and expiration
' dates, and remaining play counts.
RDateArray = RootLicenseStateObj.Dates
RStartDate = cstr(RDateArray(0))
RExpDate = cstr(RDateArray(1))
RCountArray = RootLicenseStateObj.Counts
RCounts = cstr(RCountArray(0))
IssueRoot = False
case 9 ' The root license expires after first use.
IssueRoot = False
End Select
RStreamID = RootLicenseStateObj.StreamID ' This value is always 0.
RVague = RootLicenseStateObj.Vagueness
' Get license state data to determine whether to issue
' a leaf license.
Set ChainObj = ChainCollObj.item(0)
Set LeafLicenseStateObj = ChainObj.LicenseState
LeafCat = cstr(LeafLicenseStateObj.Category)
Select Case LeafCat
case 0 ' The leaf license has no rights.
IssueLeaf = True
case 1 ' The leaf license has unlimited play counts.
IssueLeaf = False
case 2 ' The leaf license has remaining play counts.
LCountArray = LeafLicenseStateObj.Counts
LCounts = cstr(LCountArray(0))
IssueLeaf = False
case 3 ' The leaf license has a start date.
LDateArray = LeafLicenseStateObj.Dates
LStartDate = cstr(LDateArray(0))
IssueLeaf = False
case 4 ' The leaf license has an expiration date.
LDateArray = LeafLicenseStateObj.Dates
LExpDate = cstr(LDateArray(0))
IssueLeaf = False
case 5 ' The leaf license has start and expiration dates.
LDateArray = LeafLicenseStateObj.Dates
LStartDate = cstr(LDateArray(0))
LExpDate = cstr(LDateArray(1))
IssueLeaf = False
case 6 ' The leaf license has a start date and
' remaining play counts.
LDateArray = LeafLicenseStateObj.Dates
LStartDate = cstr(LDateArray(0))
LCountArray = LeafLicenseStateObj.Counts
LCounts = cstr(LCountArray(0))
IssueLeaf = False
case 7 ' The leaf license has an expiration date and
' remaining play counts.
LDateArray = LeafLicenseStateObj.Dates
LExpDate = cstr(LDateArray(0))
LCountArray = LeafLicenseStateObj.Counts
LCounts = cstr(LCountArray(0))
IssueLeaf = False
case 8 ' The leaf license has start and expiration
' dates, and remaining play counts.
LDateArray = LeafLicenseStateObj.Dates
LStartDate = cstr(LDateArray(0))
LExpDate = cstr(LDateArray(1))
LCountArray = LeafLicenseStateObj.Counts
LCounts = cstr(LCountArray(0))
IssueLeaf = False
case 9 ' The root license expires after first use.
IssueLeaf = False
End Select
LStreamID = LeafLicenseStateObj.StreamID ' This value is always 0.
LVague = LeafLicenseStateObj.Vagueness
Else ' An error indicates a request for a simple license.
err.clear
LicChain = "simple"
End If
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Generate the keys.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set KeyObj = Server.CreateObject("WMRMObjs.WMRMkeys")
KeyObj.KeyID = SimpleLeafKID
KeyObj.Seed = Seed
SimpleLeafKey = KeyObj.GenerateKey()
If (LicChain = "chain") Then ' Generate the 8-byte key for the root license.
KeyObj.KeyID = RootKID
RootKey = KeyObj.GenerateKeyEx(8)
End If
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Set the rights.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set RightsObj = Server.CreateObject("WMRMObjs.WMRMRights")
If (LicChain = "simple") Then ' Generate rights for a simple license.
RightsObj.AllowPlay = True
RightsObj.Playcount = 2
RightsObj.AllowCopy = True
RightsObj.CopyCount = 5
RightsObj.AllowCollaborativePlay = False
RightsObj.AllowBackupRestore = False
RightsObj.AllowPlaylistBurn = True
RightsObj.MaxPlaylistBurnCount = 5
RightsObj.PlaylistBurnTrackCount = 15
RightsObj.MinimumClientSDKSecurity = 3000
RightsObj.MinimumSecurityLevel = 1000
RightsObj.GracePeriod = 24
RightsObj.ExpirationDate = "#20051231Z#"
RightsObj.DeleteOnClockRollback = False
RightsObj.DisableOnClockRollback = True
' Set copy restrictions.
Set RestrictObj = Server.CreateObject("WMRMObjs.WMRMRestrictions")
Call RestrictObj.AddRestriction(6, 400)
RightsObj.CopyRestrictions = RestrictObj.GetRestrictions
If Err.Number = 0 Then
SimpleLeafRights = RightsObj.GetAllRights
End If
Else
' Generate rights for a leaf license.
RightsObj.AllowPlay = True
RightsObj.AllowCopy = True
RightsObj.CopyCount = 5
RightsObj.AllowCollaborativePlay = False
RightsObj.AllowBackupRestore = False
RightsObj.AllowPlaylistBurn = True
RightsObj.MaxPlaylistBurnCount = 5
RightsObj.PlaylistBurnTrackCount = 15
RightsObj.GracePeriod = 24
RightsObj.MinimumClientSDKSecurity = 3000
RightsObj.MinimumSecurityLevel = 1000
' Set copy restrictions.
Set RestrictObj = Server.CreateObject("WMRMObjs.WMRMRestrictions")
Call RestrictObj.AddRestriction(6, 400)
RightsObj.CopyRestrictions = RestrictObj.GetRestrictions
' Get the rights string.
If Err.Number = 0 Then
SimpleLeafRights = RightsObj.GetAllRights
End If
' Generate rights for a root license.
RightsObj.Reset
RightsObj.AllowPlay = True
RightsObj.Playcount = 1
RightsObj.AllowCopy = True
RightsObj.AllowPlaylistBurn = True
RightsObj.AllowCollaborativePlay = False
RightsObj.AllowBackupRestore = False
RightsObj.ExpirationDate = "#20051231Z#"
RightsObj.DeleteOnClockRollback = False
RightsObj.DisableOnClockRollback = True
' Set copy restrictions.
RightsObj.CopyRestrictions = RestrictObj.GetRestrictions
' Get the rights string.
If Err.Number = 0 Then
RootRights = RightsObj.GetAllRights
End If
End If
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Generate a simple license or leaf license.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set LicenseObj = Server.CreateObject("WMRMObjs.WMRMlicgen")
LicenseObj.KeyID = SimpleLeafKID
LicenseObj.SetKey "", SimpleLeafKey
LicenseObj.Priority = 10
LicenseObj.Rights = SimpleLeafRights
LicenseObj.ClientInfo = varClientInfo
LicenseObj.BindToPubKey = ContentServerPubKey
LicenseObj.Attribute("ContentDistributor") = "Distributor Name"
LicenseObj.IndividualizedVersion = IndiVersion
If (LicChain = "chain") Then ' Link to the root license.
LicenseObj.UplinkKid = RootKID
LicenseObj.UplinkKey = RootKey
End If
SimpleLeafLicense = LicenseObj.GetLicenseToDeliver()
Delivery = "deliver"
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
'Generate a root license.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
If (LicChain = "chain") Then
Set LicenseObj = Nothing
Set LicenseObj = Server.CreateObject("WMRMObjs.WMRMlicgen")
LicenseObj.KeyID = RootKID
LicenseObj.SetKey "", RootKey
LicenseObj.Priority = 10
LicenseObj.Rights = RootRights
LicenseObj.ClientInfo = varClientInfo
LicenseObj.BindToPubKey = ContentServerPubKey
LicenseObj.Attribute("ContentDistributor") = "Distributor Name"
LicenseObj.IndividualizedVersion = IndiVersion
RootLicense = LicenseObj.GetLicenseToDeliver()
End If
Loop While False
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' Send an error message or deliver the license.
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
If (Delivery = "" and Err.Number <> 0) Then
Response.Write "0x" + cstr(hex(err.number)) + " :" & Err.Description
ElseIf (Delivery = "deliver") Then
Set ResponseObj = Server.CreateObject("WMRMObjs.WMRMresponse")
If (LicChain = "simple") or (IssueLeaf = True) Then
' Include a simple license or leaf license in the license response.
Call ResponseObj.AddLicense("2.0.0.0", SimpleLeafLicense)
End If
If (IssueRoot = True) Then
' Include the root license in the license response.
Call ResponseObj.AddLicense("2.0.0.0", RootLicense)
End If
If (Silent = True) Then
LicResponse = ResponseObj.GetLicenseResponse()
Response.Write LicResponse
ElseIf (Silent = False) Then
' This replaces quotes to pass a value.
' ResponseObj.ReplaceQuotesWith = """""" ' For VBScript.
ResponseObj.ReplaceQuotesWith = "\""" ' For JScript.
LicResponse = ResponseObj.GetLicenseResponse()
%>
<!-- #include file="simple_ns.asp" -->
<%
End If
End If
' Clear objects.
Set ChallengeObj = Nothing
Set ChainCollObj = Nothing
Set ChainObj = Nothing
Set LicenseStateObj = Nothing
Set HeaderObj = Nothing
Set KeyObj = Nothing
Set RightsObj = Nothing
Set LicenseObj = Nothing
Set ResponseObj = Nothing
%>
<body>
</body>
</html>
Requirements
Version: Windows Media Rights Manager 10 SDK
Reference: wmrmobjs 1.0 Type Library
Library: wmrmobjs.dll
Platform: Windows Server 2003
See Also