Leaked source code of windows server 2003
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

//-----------------------------------------------------------------------------
//
// 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