You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.5 KiB
145 lines
4.5 KiB
//-----------------------------------------------------------------------------
|
|
//
|
|
// File: license.h
|
|
//
|
|
// Microsoft Digital Rights Management
|
|
// Copyright (C) Microsoft Corporation, 1998 - 1999, All Rights Reserved
|
|
//
|
|
// Description:
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef __LICENSE_H__
|
|
#define __LICENSE_H__
|
|
|
|
#include "widestr.h" // XPLAT
|
|
|
|
#include "pkcrypto.h"
|
|
|
|
|
|
#define VERSION_LEN 4
|
|
#define DATE_LEN 4
|
|
#define SER_NUM_LEN 4
|
|
#define ISSUER_LEN 4
|
|
#define SUBJ_LEN 4
|
|
#define INT_LEN 4
|
|
#define EXPORTKEYLEN 7
|
|
|
|
// Constant indicating the number of times SHA has to be used to get the hash of key.
|
|
// This hash is used to check whether the key is good or bad.
|
|
// CHECKSUM_LENGTH indicates the number of bytes in final hash value to use as CHECKSUM.
|
|
#define SHA_ITERATIONS 5
|
|
#define CHECKSUM_LENGTH 7
|
|
|
|
#define APPSEC_LEN 4
|
|
|
|
#define KIDLEN 25
|
|
|
|
#define VERSION_LEN 4
|
|
#define DATE_LEN 4
|
|
#define RIGHTS_LEN 4
|
|
#define APPSEC_LEN 4
|
|
#define INT_LEN 4
|
|
|
|
|
|
// Version Format: a.b.c.d
|
|
// a = not used.
|
|
// b = major version
|
|
// c = minor version
|
|
// d = revision version
|
|
#define DRM_VERSION_STRING WIDESTR( "2.0.0.0" )
|
|
const BYTE DRM_VERSION[VERSION_LEN] = {2, 0, 0, 0}; // DRM Version. Keep this in sync with DRM_VERSION_STRING above.
|
|
|
|
const BYTE PK_VER[VERSION_LEN] = {2, 0, 0, 0}; // Indicates the version of the pubkey to be used for verification of PK CERT.
|
|
const BYTE KEYFILE_VER[VERSION_LEN] = {2, 0, 0, 0}; // Version of the key file.
|
|
|
|
#define LICREQUEST_VER_STRING WIDESTR( "2.0.0.0" )
|
|
const BYTE LICREQUEST_VER[VERSION_LEN] = {2, 0, 0, 0};
|
|
|
|
const BYTE CERT_VER[VERSION_LEN] = {0, 1, 0, 0}; // Indicates the public root key needed to verify the license server certificates.
|
|
|
|
#define LICENSE_VER_STRING WIDESTR( "2.0.0.0" )
|
|
const BYTE LICENSE_VER[VERSION_LEN] = {2, 0, 0, 0}; // Indicates the license version delivered.
|
|
|
|
const BYTE CLIENT_ID_VER[VERSION_LEN] = {2, 0, 0, 0}; // The version for client id.
|
|
|
|
#define CONTENT_VERSION_STRING WIDESTR( "2.0.0.0" )
|
|
const BYTE CONTENT_VERSION[VERSION_LEN] = {2, 0, 0, 0}; // Content Version. Keep this in sync with CONTENT_VERSION_STRING above.
|
|
|
|
#define PM_LICENSE_VER_STRING WIDESTR( "0.1.0.0" )
|
|
const BYTE PM_LICENSE_VER[VERSION_LEN] = {0, 1, 0, 0}; // Indicates the license version delivered to PMs
|
|
|
|
// For blackbox version, we have the following convention.
|
|
// a.b.c.d. a.b => release number. c => reserved. d => category.
|
|
#define WIN32_INDIVBOX_CATEGORY 1
|
|
|
|
const BYTE APPCERT_VER[VERSION_LEN] = {0, 1, 0, 0};
|
|
const BYTE APPCERT_PK_VER[VERSION_LEN] = {0, 1, 0, 0};
|
|
#define SDK_CERTS_COUNT 4
|
|
const BYTE APPCERT_SUBJECT_SDKSTUBS[SDK_CERTS_COUNT][SUBJ_LEN] = {{0, 0, 0, 200}, {0, 0, 0, 204}, {0, 0, 0, 208}, {0, 0, 0, 212}};
|
|
|
|
typedef struct {
|
|
PUBKEY pk;
|
|
BYTE version[VERSION_LEN];
|
|
} PK;
|
|
|
|
typedef struct {
|
|
PK pk; // pk.version indicates the pubkey needed to verify.
|
|
BYTE sign[PK_ENC_SIGNATURE_LEN];
|
|
} PKCERT;
|
|
|
|
typedef struct {
|
|
BYTE version[VERSION_LEN];
|
|
BYTE randNum[PK_ENC_CIPHERTEXT_LEN];
|
|
PKCERT pk;
|
|
} CLIENTID;
|
|
|
|
//----------------cert section -----------------------
|
|
|
|
typedef struct CERTDATAtag{
|
|
PUBKEY pk;
|
|
BYTE expiryDate[DATE_LEN];
|
|
BYTE serialNumber[SER_NUM_LEN];
|
|
BYTE issuer[ISSUER_LEN];
|
|
BYTE subject[SUBJ_LEN];
|
|
} CERTDATA, *PCERTDATA;
|
|
|
|
|
|
typedef struct CERTtag{
|
|
BYTE certVersion[VERSION_LEN];
|
|
BYTE datalen[INT_LEN];
|
|
BYTE sign[PK_ENC_SIGNATURE_LEN];
|
|
CERTDATA cd;
|
|
} CERT, *PCERT;
|
|
|
|
|
|
typedef struct {
|
|
PK pk;
|
|
BYTE appSec[APPSEC_LEN];
|
|
BYTE subject[SUBJ_LEN];
|
|
} APPCERTDATA;
|
|
|
|
typedef struct {
|
|
BYTE appcertVersion[VERSION_LEN];
|
|
BYTE datalen[INT_LEN];
|
|
BYTE sign[PK_ENC_SIGNATURE_LEN];
|
|
APPCERTDATA appcd;
|
|
} APPCERT;
|
|
|
|
typedef struct {
|
|
char KID[KIDLEN];
|
|
BYTE key[PK_ENC_CIPHERTEXT_LEN]; // encrypted with DRM PK
|
|
BYTE rights[RIGHTS_LEN];
|
|
BYTE appSec[APPSEC_LEN];
|
|
BYTE expiryDate[DATE_LEN];
|
|
} LICENSEDATA;
|
|
|
|
typedef struct {
|
|
BYTE licVersion[VERSION_LEN];
|
|
BYTE datalen[INT_LEN];
|
|
BYTE sign[PK_ENC_SIGNATURE_LEN]; // signature over licensedata
|
|
LICENSEDATA ld;
|
|
} LICENSE;
|
|
|
|
|
|
#endif
|