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.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1997.
//
// File: license.h
//
// Contents:
//
// Classes:
//
// Functions:
//
// History: 12-03-97 FredCh Created
// 12-16-97 v-sbhatt Modified
// 12-22-97 HueiWang Add Extension OID
// 12-23-97 HueiWang Use structure instead of multiple OID
//
//----------------------------------------------------------------------------
#ifndef _LICENSE_H_
#define _LICENSE_H_
#include "platform.h"
#if defined(_WIN64)
#define UNALIGNED __unaligned
#define UNALIGNED64 __unaligned
#elif !defined (OS_WINCE)
#define UNALIGNED
#define UNALIGNED64
#endif
///////////////////////////////////////////////////////////////////////////////
//
// Random number length
//
#define LICENSE_RANDOM 32
#define LICENSE_PRE_MASTER_SECRET 48
#define LICENSE_MAC_WRITE_KEY 16
#define LICENSE_SESSION_KEY 16
#define LICENSE_MAC_DATA 16
#define LICENSE_HWID_LENGTH 20
//////////////////////////////////////////////////////////////////////////////
// Licensing protocol versions
//
#ifndef OS_WIN16
#ifndef OS_WINCE
#define CALL_TYPE _stdcall
#else
#define CALL_TYPE
#endif
#else
#define CALL_TYPE
#endif //CALL_TYPE
//-----------------------------------------------------------------------------
//
// Licensing protocol version
//
// The lowest byte of the version DWORD will be the preamble version.
//
//-----------------------------------------------------------------------------
#define LICENSE_PROTOCOL_VERSION_1_0 0x00010000
#define LICENSE_PROTOCOL_VERSION_2_0 0x00020000
//
// INT CompareTLSVersions(VERSION a, VERSION b);
//
#define CompareTLSVersions(a, b) \
(HIWORD(a) == HIWORD(b) ? LOWORD(a) - LOWORD(b) : \ HIWORD(a) - HIWORD(b))
#define PREAMBLE_VERSION_1_0 0x01
#define PREAMBLE_VERSION_2_0 0x02
#define PREAMBLE_VERSION_3_0 0x03
#define LICENSE_CURRENT_PREAMBLE_VERSION PREAMBLE_VERSION_3_0
#define LICENSE_TS_40_PROTOCOL_VERSION LICENSE_PROTOCOL_VERSION_1_0 | PREAMBLE_VERSION_2_0
#define LICENSE_TS_50_PROTOCOL_VERSION LICENSE_PROTOCOL_VERSION_1_0 | PREAMBLE_VERSION_3_0
#define LICENSE_TS_51_PROTOCOL_VERSION LICENSE_PROTOCOL_VERSION_2_0 | PREAMBLE_VERSION_3_0
#define LICENSE_HYDRA_40_PROTOCOL_VERSION LICENSE_TS_40_PROTOCOL_VERSION
#if 1
#define LICENSE_HIGHEST_PROTOCOL_VERSION LICENSE_PROTOCOL_VERSION_1_0 | LICENSE_CURRENT_PREAMBLE_VERSION
#else
#define LICENSE_HIGHEST_PROTOCOL_VERSION LICENSE_PROTOCOL_VERSION_2_0 | LICENSE_CURRENT_PREAMBLE_VERSION
#endif
#define GET_PREAMBLE_VERSION( _Version ) ( BYTE )( _Version & 0x000000FF )
//-----------------------------------------------------------------------------
//
// Context flags used by the client and server licensing protocol APIs:
//
// LICENSE_CONTEXT_NO_SERVER_AUTHENTICATION
//
// Do not authenticate the server. Server authentication is done through
// validating the server's certificate.
//
// LICENSE_CONTEXT_USE_PROPRIETORY_CERT
//
// Use in conjunction with the LICENSE_CONTEXT_NO_SERVER_AUTHENTICATION
// flag to let that server know that a proprietory certificate has
// been transmitted to the client.
//
// LICENSE_CONTEXT_USE_X509_CERT
//
// Use in conjunction with the LICENSE_CONTEXT_NO_SERVER_AUTHENTICATION
// flag to let that server know that an X509 certificate has
// been transmitted to the client.
//
//-----------------------------------------------------------------------------
#define LICENSE_CONTEXT_NO_SERVER_AUTHENTICATION 0x00000001
#define LICENSE_CONTEXT_USE_PROPRIETORY_CERT 0x00000002
#define LICENSE_CONTEXT_USE_X509_CERT 0x00000004
//////////////////////////////////////////////////////////////////////////////
//
// Hydra subtree Specific OID
//
#define szOID_PKIX_HYDRA_CERT_ROOT "1.3.6.1.4.1.311.18"
/////////////////////////////////////////////////////////////////////////////
//
// License Info root at 1.3.6.1.4.1.311.18.1
//
// Reserved
//
#define szOID_PKIX_LICENSE_INFO "1.3.6.1.4.1.311.18.1"
//
// structure for License Info
//
typedef struct __LicenseInfo {
DWORD dwVersion; DWORD dwQuantity; WORD wSerialNumberOffset; WORD wSerialNumberSize; WORD wScopeOffset; WORD wScopeSize; WORD wIssuerOffset; WORD wIssuerSize; BYTE bVariableDataStart[1];
} CERT_LICENSE_INFO;
#ifdef OS_WIN16
typedef CERT_LICENSE_INFO FAR * LPCERT_LICENSE_INFO; #else
typedef CERT_LICENSE_INFO *LPCERT_LICENSE_INFO; #endif //OS_WIN16
/////////////////////////////////////////////////////////////////////////////
// Manufacturer value 1.3.6.1.4.1.311.18.2
// DWORD for manufacturer data
//
#define szOID_PKIX_MANUFACTURER "1.3.6.1.4.1.311.18.2"
/////////////////////////////////////////////////////////////////////////////
//
// Manufacturer Specfic Data
//
// Reserved
//
#define szOID_PKIX_MANUFACTURER_MS_SPECIFIC "1.3.6.1.4.1.311.18.3"
// structure for MS manufacturer specific data
typedef struct __MSManufacturerData { DWORD dwVersion; // bit 31 - 1 Temp. License.
DWORD dwPlatformID; DWORD dwLanguageID; WORD dwMajorVersion; WORD dwMinorVersion; WORD wProductIDOffset; WORD wProductIDSize; BYTE bVariableDataStart[1]; } MSMANUFACTURER_DATA;
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//
// OID for Certificate Version Stamp
//
// Reserved.
//
#define szOID_PKIX_HYDRA_CERT_VERSION szOID_PKIX_HYDRA_CERT_ROOT ".4"
#define TERMSERV_CERT_VERSION_UNKNOWN 0xFFFFFFFF
#define TERMSERV_CERT_VERSION_BETA 0x00000000 // Beta2 license
#define TERMSERV_CERT_VERSION_NO_CERT 0x00010000 // New License without
// license server's
// certificate
#define TERMSERV_CERT_VERSION_RC1 0x00010001 // New license with
// license server's
// certificate
//
// We don't support this certificate format.
//
//#define HYDRA_CERT_VERSION_CURRENT 0x00020001 // License issued by
// // enforce version of
// // license server
#define TERMSERV_CERT_VERSION_MAJOR(x) HIWORD(x)
#define TERMSERV_CERT_VERSION_MINOR(x) LOWORD(x)
#define TERMSERV_CERT_VERSION_CURRENT 0x00050001
//-------------------------------------------------------------------------
//
// OID for License Server to identify licensed product.
//
#define szOID_PKIX_LICENSED_PRODUCT_INFO szOID_PKIX_HYDRA_CERT_ROOT ".5"
//
// dwFlags in LICENSED_VERSION_INFO
//
// Bit 31 - 1 if temporary license, 0 if perm. license
// Bit 24 to 30 - Any flag specific to temporary license, currently, there is none.
// Bit 23 - 1 if RTM License, 0 if beta license.
// Bit 16 to 22 - License server version.
// Bit 20 to 22 - Major version.
// Bit 16 to 19 - Minor version.
// Bit 15 - Enforce license server.
// Bit 0 to 3 is reserved by license server for internal use.
// Other bits are not use.
//
#define LICENSED_VERSION_TEMPORARY 0x80000000
#define LICENSED_VERSION_RTM 0x00800000
#define LICENSE_ISSUER_ENFORCE_TYPE 0x00008000
#define GET_LICENSE_ISSUER_VERSION(dwVersion) \
(((dwVersion) & 0x007F0000) >> 16)
#define GET_LICENSE_ISSUER_MAJORVERSION(dwVersion) \
(((dwVersion) & 0x00700000) >> 20)
#define GET_LICENSE_ISSUER_MINORVERSION(dwVersion) \
(((dwVersion) & 0x000F0000) >> 16)
#define IS_LICENSE_ISSUER_ENFORCE(dwVersion) \
(((dwVersion) & LICENSE_ISSUER_ENFORCE_TYPE) > 0)
#define IS_LICENSE_ISSUER_RTM(dwVersion) \
(((dwVersion) & LICENSED_VERSION_RTM) > 0)
typedef struct _LicensedVersionInfo { WORD wMajorVersion; // Product Major Version
WORD wMinorVersion; // Product Minor Version
DWORD dwFlags; // Product version specific flags
} LICENSED_VERSION_INFO;
#define LICENSED_PRODUCT_INFO_VERSION 0x0003000
typedef struct _LicensedProductInfo { DWORD dwVersion; // structure version identifier
DWORD dwQuantity; // number of licenses
DWORD dwPlatformID; // Client platform ID
DWORD dwLanguageID; // Licensed Language ID
WORD wOrgProductIDOffset; // Offset to original licensed Product ID
WORD wOrgProductIDSize; // Size of original licensed product ID
WORD wAdjustedProductIdOffset; // Policy modified licensed product Id
WORD wAdjustedProductIdSize; // size of Policy modified licensed Id.
WORD wVersionInfoOffset; // Offset to array of LicensedVersionInfo
WORD wNumberOfVersionInfo; // Number of VersionInfo entries
BYTE bVariableDataStart[1]; // Variable data start.
} LICENSED_PRODUCT_INFO;
//
// OID for License Server specific info.
//
#define szOID_PKIX_MS_LICENSE_SERVER_INFO szOID_PKIX_HYDRA_CERT_ROOT ".6"
#define MS_LICENSE_SERVER_INFO_VERSION1 0x0001000
#define MS_LICENSE_SERVER_INFO_VERSION2 0x0003000
//
// Version 1 structure
//
typedef struct _MsLicenseServerInfo10 { DWORD dwVersion; WORD wIssuerOffset; // Offset to issuer
WORD wScopeOffset; // Offset to scope
BYTE bVariableDataStart[1]; } MS_LICENSE_SERVER_INFO10;
typedef struct _MsLicenseServerInfo { DWORD dwVersion; WORD wIssuerOffset; // Offset to issuer
WORD wIssuerIdOffset; // offset to issuer's setup ID
WORD wScopeOffset; // Offset to scope
BYTE bVariableDataStart[1]; } MS_LICENSE_SERVER_INFO;
//---------------------------------------------------------------------------
//
// Extension OID reserved for product policy module - only one is allowed.
//
#define szOID_PKIS_PRODUCT_SPECIFIC_OID szOID_PKIX_HYDRA_CERT_ROOT ".7"
//
//
//
#define szOID_PKIS_TLSERVER_SPK_OID szOID_PKIX_HYDRA_CERT_ROOT ".8"
//
// Save certificate chain into memory
// This flag is passed into CertSaveStore() dwSaveAs parameter
// Open should use same to open the store.
#define szLICENSE_BLOB_SAVEAS_TYPE sz_CERT_STORE_PROV_PKCS7
#define LICENSE_BLOB_SAVEAS_TYPE CERT_STORE_SAVE_AS_PKCS7
#define OID_ISSUER_LICENSE_SERVER_NAME szOID_COMMON_NAME
#define OID_ISSUER_LICENSE_SERVER_SCOPE szOID_LOCALITY_NAME
#define OID_SUBJECT_CLIENT_COMPUTERNAME szOID_COMMON_NAME
#define OID_SUBJECT_CLIENT_USERNAME szOID_LOCALITY_NAME
#define OID_SUBJECT_CLIENT_HWID szOID_DEVICE_SERIAL_NUMBER
#ifdef OS_WIN16
typedef MSMANUFACTURER_DATA FAR *LPMSMANUFACTURER_DATA; #else
typedef MSMANUFACTURER_DATA *LPMSMANUFACTURER_DATA; #endif //OS_WIN16
///////////////////////////////////////////////////////////////////////////////
//
#define LICENSE_GRACE_PERIOD 60
///////////////////////////////////////////////////////////////////////////////
// Product Info for Hydra
//
#define PRODUCT_INFO_COMPANY_NAME L"Microsoft Corporation"
///////////////////////////////////////////////////////////////////////////////
// The Product SKU is made up of the following fields:
// x-y-z where x is the product identifer, y is the version
// and z and the type.
//
#define PRODUCT_INFO_SKU_PRODUCT_ID L"A02"
#define PRODUCT_INFO_INTERNET_SKU_PRODUCT_ID L"B96"
#define PRODUCT_INFO_CONCURRENT_SKU_PRODUCT_ID L"C50" // not the same as what marketing uses, but that's okay
///////////////////////////////////////////////////////////////////////////////
//
// Microsoft Windows Terminal Server version definition.
//
#define MICROSOFT_WINDOWS_TERMINAL_SERVER_4_0 0x00040000
#define MICROSOFT_WINDOWS_TERMINAL_SERVER_5_0 0x00050000
#define MICROSOFT_WINDOWS_TERMINAL_SERVER_5_1 0x00050001
#define MICROSOFT_WINDOWS_TERMINAL_SERVER_5_2 0x00050002
#define CURRENT_TERMINAL_SERVER_VERSION MICROSOFT_WINDOWS_TERMINAL_SERVER_5_0
#define TERMSRV_OS_INDEX_WINNT_5_0 0x00000000
#define TERMSRV_OS_INDEX_WINNT_5_1 0x00000001
#define TERMSRV_OS_INDEX_WINNT_5_2 0x00000002
#define TERMSRV_OS_INDEX_WINNT_POST_5_2 0x00000003
///////////////////////////////////////////////////////////////////////////////
//
// Scope name
//
#ifndef OS_WINCE //SCOPE_NAME is being defined by iprtrmib.h which is included by iphlpapi.h
#define SCOPE_NAME "microsoft.com"
#endif
///////////////////////////////////////////////////////////////////////////////
//
// Maximum product info string length in bytes
//
#define MAX_PRODUCT_INFO_STRING_LENGTH 255
///////////////////////////////////////////////////////////////////////////////
// Different crypt algid definitions
// We are keeping an option open to generatize it in future
//
///////////////////////////////////////////////////////////////////////////////
//
// Key exchange algorithms
//
#define KEY_EXCHANGE_ALG_RSA 1
#define KEY_EXCHANGE_ALG_DH 2
///////////////////////////////////////////////////////////////////////////////
//
// Certificate Signature Algorithms
//
#define SIGNATURE_ALG_RSA 1
#define SIGNATURE_ALG_DSS 2
///////////////////////////////////////////////////////////////////////////////
//
// Symmetric cryptographic algorithms
//
#define BASIC_RC4_128 1
///////////////////////////////////////////////////////////////////////////////
//
// MAC generation algorithms
//
#define MAC_MD5_SHA 1
///////////////////////////////////////////////////////////////////////////////
//
// hydra client to hydra server message types
//
#define HC_LICENSE_INFO 0x12
#define HC_NEW_LICENSE_REQUEST 0x13
#define HC_PLATFORM_INFO 0x14
#define HC_PLATFORM_CHALENGE_RESPONSE 0x15
///////////////////////////////////////////////////////////////////////////////
//
// hydra server to hydra client message types
//
#define HS_LICENSE_REQUEST 0x01
#define HS_PLATFORM_CHALLENGE 0x02
#define HS_NEW_LICENSE 0x03
#define HS_UPGRADE_LICENSE 0x04
#define LICENSE_VERSION_1 0x01
#define GM_ERROR_ALERT 0xFF
///////////////////////////////////////////////////////////////////////////////
//
// Error and alert codes
//
#define GM_HC_ERR_INVALID_SERVER_CERTIFICATE 0x00000001
#define GM_HC_ERR_NO_LICENSE 0x00000002
#define GM_HC_ERR_INVALID_MAC 0x00000003
#define GM_HS_ERR_INVALID_SCOPE 0x00000004
#define GM_HS_ERR_INVALID_MAC 0x00000005
#define GM_HS_ERR_NO_LICENSE_SERVER 0x00000006
#define GM_HS_ERR_VALID_CLIENT 0x00000007
#define GM_HS_ERR_INVALID_CLIENT 0x00000008
#define GM_HS_ERR_LICENSE_UPGRADE 0x00000009
#define GM_HS_ERR_EXPIRED_LICENSE 0x0000000A
#define GM_HS_ERR_INVALID_PRODUCTID 0x0000000B
#define GM_HS_ERR_INVALID_MESSAGE_LEN 0x0000000C
///////////////////////////////////////////////////////////////////////////////
//
// License status and status codes
//
typedef DWORD LICENSE_STATUS;
#define LICENSE_STATUS_OK 0x00000000
#define LICENSE_STATUS_OUT_OF_MEMORY 0x00000001
#define LICENSE_STATUS_INSUFFICIENT_BUFFER 0x00000002
#define LICENSE_STATUS_INVALID_INPUT 0x00000003
#define LICENSE_STATUS_INVALID_CLIENT_CONTEXT 0x00000004
#define LICENSE_STATUS_INITIALIZATION_FAILED 0x00000005
#define LICENSE_STATUS_INVALID_SIGNATURE 0x00000006
#define LICENSE_STATUS_INVALID_CRYPT_STATE 0x00000007
#define LICENSE_STATUS_CONTINUE 0x00000008
#define LICENSE_STATUS_ISSUED_LICENSE 0x00000009
#define LICENSE_STATUS_CLIENT_ABORT 0x0000000A
#define LICENSE_STATUS_SERVER_ABORT 0x0000000B
#define LICENSE_STATUS_NO_CERTIFICATE 0x0000000C
#define LICENSE_STATUS_NO_PRIVATE_KEY 0x0000000D
#define LICENSE_STATUS_SEND_ERROR 0x0000000E
#define LICENSE_STATUS_INVALID_RESPONSE 0x0000000F
#define LICENSE_STATUS_CONTEXT_INITIALIZATION_ERROR 0x00000010
#define LICENSE_STATUS_NO_MESSAGE 0x00000011
#define LICENSE_STATUS_INVALID_CLIENT_STATE 0x00000012
#define LICENSE_STATUS_OPEN_STORE_ERROR 0x00000013
#define LICENSE_STATUS_CLOSE_STORE_ERROR 0x00000014
#define LICENSE_STATUS_WRITE_STORE_ERROR 0x00000015
#define LICENSE_STATUS_INVALID_STORE_HANDLE 0x00000016
#define LICENSE_STATUS_DUPLICATE_LICENSE_ERROR 0x00000017
#define LICENSE_STATUS_INVALID_MAC_DATA 0x00000018
#define LICENSE_STATUS_INCOMPLETE_MESSAGE 0x00000019
#define LICENSE_STATUS_RESTART_NEGOTIATION 0x0000001A
#define LICENSE_STATUS_NO_LICENSE_SERVER 0x0000001B
#define LICENSE_STATUS_NO_PLATFORM_CHALLENGE 0x0000001C
#define LICENSE_STATUS_NO_LICENSE_SERVER_SECRET_KEY 0x0000001D
#define LICENSE_STATUS_INVALID_SERVER_CONTEXT 0x0000001E
#define LICENSE_STATUS_CANNOT_DECODE_LICENSE 0x0000001F
#define LICENSE_STATUS_INVALID_LICENSE 0x00000020
#define LICENSE_STATUS_CANNOT_VERIFY_HWID 0x00000021
#define LICENSE_STATUS_NO_LICENSE_ERROR 0x00000022
#define LICENSE_STATUS_EXPIRED_LICENSE 0x00000023
#define LICENSE_STATUS_MUST_UPGRADE_LICENSE 0x00000024
#define LICENSE_STATUS_UNSPECIFIED_ERROR 0x00000025
#define LICENSE_STATUS_INVALID_PLATFORM_CHALLENGE_RESPONSE 0x00000026
#define LICENSE_STATUS_SHOULD_UPGRADE_LICENSE 0x00000027
#define LICENSE_STATUS_CANNOT_UPGRADE_LICENSE 0x00000028
#define LICENSE_STATUS_CANNOT_FIND_CLIENT_IMAGE 0x00000029
#define LICENSE_STATUS_CANNOT_READ_CLIENT_IMAGE 0x0000002A
#define LICENSE_STATUS_CANNOT_WRITE_CLIENT_IMAGE 0x0000002B
#define LICENSE_STATUS_CANNOT_FIND_ISSUER_CERT 0x0000002C
#define LICENSE_STATUS_NOT_HYDRA 0x0000002D
#define LICENSE_STATUS_INVALID_X509_NAME 0x0000002E
#define LICENSE_STATUS_NOT_SUPPORTED 0x0000002F
#define LICENSE_STATUS_INVALID_CERTIFICATE 0x00000030
#define LICENSE_STATUS_NO_ATTRIBUTES 0x00000031
#define LICENSE_STATUS_NO_EXTENSION 0x00000032
#define LICENSE_STATUS_ASN_ERROR 0x00000033
#define LICENSE_STATUS_INVALID_HANDLE 0x00000034
#define LICENSE_STATUS_CANNOT_MAKE_KEY_PAIR 0x00000035
#define LICENSE_STATUS_AUTHENTICATION_ERROR 0x00000036
#define LICENSE_STATUS_CERTIFICATE_REQUEST_ERROR 0x00000037
#define LICENSE_STATUS_CANNOT_OPEN_SECRET_STORE 0x00000038
#define LICENSE_STATUS_CANNOT_STORE_SECRET 0x00000039
#define LICENSE_STATUS_CANNOT_RETRIEVE_SECRET 0x0000003A
#define LICENSE_STATUS_UNSUPPORTED_VERSION 0x0000003B
#define LICENSE_STATUS_NO_INTERNET_LICENSE_INSTALLED 0x0000003C
///////////////////////////////////////////////////////////////////////////////
// State transitions
//
#define ST_TOTAL_ABORT 0x00000001
#define ST_NO_TRANSITION 0x00000002
#define ST_RESET_PHASE_TO_START 0x00000003
#define ST_RESEND_LAST_MESSAGE 0x00000004
#define PLATFORM_WINNT_40 0x00040000
#define PLATFORM_WINCE_20 0x00020001
///////////////////////////////////////////////////////////////////////////////
// message exchange supporting structures
//
typedef struct _Product_Info { DWORD dwVersion; DWORD cbCompanyName; PBYTE pbCompanyName; DWORD cbProductID; PBYTE pbProductID; } Product_Info;
#ifdef OS_WIN16
typedef Product_Info FAR *PProduct_Info; #else
typedef Product_Info *PProduct_Info; #endif //OS_WIN16
typedef struct _Duration { FILETIME NotBefore; FILETIME NotAfter;
} Duration;
#ifdef OS_WIN16
typedef Duration FAR * PDuration; #else
typedef Duration *PDuration; #endif //OS_WIN16
typedef struct _New_License_Info { DWORD dwVersion; //Added -Shubho
DWORD cbScope; PBYTE pbScope; DWORD cbCompanyName; PBYTE pbCompanyName; DWORD cbProductID; PBYTE pbProductID; DWORD cbLicenseInfo; PBYTE pbLicenseInfo;
}New_License_Info;
#ifdef OS_WIN16
typedef New_License_Info FAR * PNew_License_Info; #else
typedef New_License_Info *PNew_License_Info; #endif //OS_WIN16
///////////////////////////////////////////////////////////////////////////////
// binary blob format to support expanded message format
//
typedef struct _Binary_Blob { WORD wBlobType; WORD wBlobLen; PBYTE pBlob;
} Binary_Blob;
#ifdef OS_WIN16
typedef Binary_Blob FAR * PBinary_Blob; #else
typedef Binary_Blob UNALIGNED* PBinary_Blob; #endif //OS_WIN16
///////////////////////////////////////////////////////////////////////////////
// Binary Blob Data Types
//
#define BB_DATA_BLOB 0x0001
#define BB_RANDOM_BLOB 0x0002
#define BB_CERTIFICATE_BLOB 0x0003
#define BB_ERROR_BLOB 0x0004
#define BB_DH_KEY_BLOB 0x0005
#define BB_RSA_KEY_BLOB 0x0006
#define BB_DSS_SIGNATURE_BLOB 0x0007
#define BB_RSA_SIGNATURE_BLOB 0x0008
#define BB_ENCRYPTED_DATA_BLOB 0x0009
#define BB_MAC_DATA_BLOB 0x000A
#define BB_INTEGER_BLOB 0x000B
#define BB_NAME_BLOB 0x000C
#define BB_KEY_EXCHG_ALG_BLOB 0x000D
#define BB_SCOPE_BLOB 0x000E
#define BB_CLIENT_USER_NAME_BLOB 0x000F
#define BB_CLIENT_MACHINE_NAME_BLOB 0x0010
///////////////////////////////////////////////////////////////////////////////
// Binary Blob Data Version Numbers
//
#define BB_ERROR_BLOB_VERSION 0x0001
///////////////////////////////////////////////////////////////////////////////
// message exchange structures for licensing protocol
//
typedef struct _Preamble { BYTE bMsgType; // Contains the type of message
BYTE bVersion; // Contains the version no. info.
WORD wMsgSize; // Length of the whole message including PREAMBLE
} Preamble;
#ifdef OS_WIN16
typedef Preamble FAR * PPreamble; #else
typedef Preamble * PPreamble; #endif //OS_WIN16
typedef struct _Scope_List { DWORD dwScopeCount; PBinary_Blob Scopes;
} Scope_List;
#ifdef OS_WIN16
typedef Scope_List FAR * PScope_List; #else
typedef Scope_List * PScope_List; #endif //OS_WIN16
typedef struct _License_Error_Message { DWORD dwErrorCode; DWORD dwStateTransition; Binary_Blob bbErrorInfo;
} License_Error_Message;
#ifdef OS_WIN16
typedef License_Error_Message FAR * PLicense_Error_Message; #else
typedef License_Error_Message * PLicense_Error_Message; #endif //OS_WIN16
typedef struct _Hydra_Client_License_Info { DWORD dwPrefKeyExchangeAlg; DWORD dwPlatformID; BYTE ClientRandom[LICENSE_RANDOM]; Binary_Blob EncryptedPreMasterSecret; Binary_Blob LicenseInfo; Binary_Blob EncryptedHWID; BYTE MACData[LICENSE_MAC_DATA];
} Hydra_Client_License_Info;
#ifdef OS_WIN16
typedef Hydra_Client_License_Info FAR * PHydra_Client_License_Info; #else
typedef Hydra_Client_License_Info * PHydra_Client_License_Info; #endif //OS_WIN16
typedef struct _Hydra_Client_New_License_Request { DWORD dwPrefKeyExchangeAlg; DWORD dwPlatformID; BYTE ClientRandom[LICENSE_RANDOM]; Binary_Blob EncryptedPreMasterSecret; Binary_Blob ClientUserName; Binary_Blob ClientMachineName;
} Hydra_Client_New_License_Request;
#ifdef OS_WIN16
typedef Hydra_Client_New_License_Request FAR * PHydra_Client_New_License_Request; #else
typedef Hydra_Client_New_License_Request * PHydra_Client_New_License_Request; #endif //OS_WIN16
//
// High Byte - Major version, Low Byte - Minor version
//
#define PLATFORMCHALLENGE_VERSION 0x0100
#define CURRENT_PLATFORMCHALLENGE_VERSION PLATFORMCHALLENGE_VERSION
//
// Client Platform Challenge Type
//
#define WIN32_PLATFORMCHALLENGE_TYPE 0x0100
#define WIN16_PLATFORMCHALLENGE_TYPE 0x0200
#define WINCE_PLATFORMCHALLENGE_TYPE 0x0300
#define OTHER_PLATFORMCHALLENGE_TYPE 0xFF00
//
// Client License Detail level -
//
// This should be in LicenseRequest but
// 1) Require changes to RPC interface.
// 2) Nothing in structure for us to identify version.
// 3) Current licensing protocol, no way to tell actual client type
//
//
// client license + license server's self signed
//
#define LICENSE_DETAIL_SIMPLE 0x0001
//
// license chain up to issuer of license server's certificate
//
#define LICENSE_DETAIL_MODERATE 0x0002
//
// Detail client license chain up to root.
//
#define LICENSE_DETAIL_DETAIL 0x0003
typedef struct __PlatformChallengeResponseData { WORD wVersion; // structure version
WORD wClientType; // client type
WORD wLicenseDetailLevel; // license detail, TS will re-modify this value
WORD cbChallenge; // size of client challenge response data
BYTE pbChallenge[1]; // start of variable length data
} PlatformChallengeResponseData;
#ifdef OS_WIN16
typedef PlatformChallengeResponseData FAR * PPlatformChallengeResponseData; #else
typedef PlatformChallengeResponseData * PPlatformChallengeResponseData; #endif //OS_WIN16
#define PLATFORM_CHALLENGE_LENGTH 64
typedef struct _Hydra_Client_Platform_Challenge_Response { Binary_Blob EncryptedChallengeResponse; Binary_Blob EncryptedHWID; BYTE MACData[LICENSE_MAC_DATA];
} Hydra_Client_Platform_Challenge_Response;
#ifdef OS_WIN16
typedef Hydra_Client_Platform_Challenge_Response FAR * PHydra_Client_Platform_Challenge_Response; #else
typedef Hydra_Client_Platform_Challenge_Response * PHydra_Client_Platform_Challenge_Response; #endif //OS_WIN16
typedef struct _Hydra_Server_License_Request { BYTE ServerRandom[LICENSE_RANDOM]; Product_Info ProductInfo; Binary_Blob KeyExchngList; Binary_Blob ServerCert; Scope_List ScopeList;
} Hydra_Server_License_Request;
#ifdef OS_WIN16
typedef Hydra_Server_License_Request FAR * PHydra_Server_License_Request; #else
typedef Hydra_Server_License_Request * PHydra_Server_License_Request; #endif //OS_WIN16
typedef struct _Hydra_Server_Platform_Challenge { DWORD dwConnectFlags; Binary_Blob EncryptedPlatformChallenge; BYTE MACData[LICENSE_MAC_DATA];
} Hydra_Server_Platform_Challenge;
#ifdef OS_WIN16
typedef Hydra_Server_Platform_Challenge FAR * PHydra_Server_Platform_Challenge; #else
typedef Hydra_Server_Platform_Challenge * PHydra_Server_Platform_Challenge; #endif //OS_WIN16
typedef struct _Hydra_Server_New_License { Binary_Blob EncryptedNewLicenseInfo; BYTE MACData[LICENSE_MAC_DATA];
} Hydra_Server_New_License;
#ifdef OS_WIN16
typedef Hydra_Server_New_License FAR * PHydra_Server_New_License; #else
typedef Hydra_Server_New_License * PHydra_Server_New_License; #endif //OS_WIN16
typedef Hydra_Server_New_License Hydra_Server_Upgrade_License; typedef PHydra_Server_New_License PHydra_Server_Upgrade_License;
///////////////////////////////////////////////////////////////////////////////
// Hydra Server Authentication Certificate structures;
// Here we assume that before Licensing module comes into play
// the client will somehow notify the Server about the supported
// Provider and the Hydra Server will accordingly provide
// appropriate certificate
//
typedef struct _Hydra_Server_Cert { DWORD dwVersion; DWORD dwSigAlgID; DWORD dwKeyAlgID; Binary_Blob PublicKeyData; Binary_Blob SignatureBlob;
} Hydra_Server_Cert;
#ifdef OS_WIN16
typedef Hydra_Server_Cert FAR * PHydra_Server_Cert; #else
typedef Hydra_Server_Cert * PHydra_Server_Cert; #endif //OS_WIN16
///////////////////////////////////////////////////////////////////////////////
// Hydra Client HWID structure
// Note : We have to finalize on this structure and generation algorithm.
// Currently we have hardcoded these values in Cryptkey.c. - Shubho
typedef struct _HWID { DWORD dwPlatformID; DWORD Data1; DWORD Data2; DWORD Data3; DWORD Data4;
} HWID;
#ifdef OS_WIN16
typedef HWID FAR * PHWID; #else
typedef HWID * PHWID; #endif //OS_WIN16
typedef struct _LicenseRequest { PBYTE pbEncryptedHwid; DWORD cbEncryptedHwid; DWORD dwLanguageID; DWORD dwPlatformID; PProduct_Info pProductInfo;
} LICENSEREQUEST;
#ifdef OS_WIN16
typedef LICENSEREQUEST FAR * PLICENSEREQUEST; #else
typedef LICENSEREQUEST * PLICENSEREQUEST; #endif //OS_WIN16
//
// dwLicenseVersion Value
//
// HYDRA_CERT_VERSION_BETA Beta2 client license
// HYDRA_CERT_VERSION_NO_CERT Post Beta2 license without certificate chain
// HYDRA_CERT_VERSION_CURRENT Post Beta2 license with certificate chain
//
typedef struct _LicensedProduct { DWORD dwLicenseVersion; DWORD dwQuantity;
PBYTE pbOrgProductID; // original license request product Id
DWORD cbOrgProductID; // size of original license request product Id
LICENSEREQUEST LicensedProduct; // licensed product
LICENSED_VERSION_INFO* pLicensedVersion; // licensed product version
DWORD dwNumLicensedVersion; // number of licensed product version
LPTSTR szIssuer; LPTSTR szIssuerId; // license server setup ID
LPTSTR szIssuerScope; LPTSTR szLicensedClient; LPTSTR szLicensedUser; LPTSTR szIssuerDnsName;
HWID Hwid;
FILETIME NotBefore; // license's validity
FILETIME NotAfter;
PBYTE pbPolicyData; // Policy specfic extension
DWORD cbPolicyData; // size of policy specific extension
ULARGE_INTEGER ulSerialNumber; // Client license's serial number
} LICENSEDPRODUCT;
#ifdef OS_WIN16
typedef LICENSEDPRODUCT FAR * PLICENSEDPRODUCT; #else
typedef LICENSEDPRODUCT *PLICENSEDPRODUCT; #endif //OS_WIN16
//-----------------------------------------------------------------------------
//
// Types of certificate used by the server to authenticate itself to the clients
//
// CERT_TYPE_PROPRIETORY
// Proprietory format certificate
//
// CERT_TYPE_X509
// X509 format certificate
//
//-----------------------------------------------------------------------------
typedef enum { CERT_TYPE_INVALID = 0, CERT_TYPE_PROPRIETORY = 1, CERT_TYPE_X509 = 2
} CERT_TYPE;
//+----------------------------------------------------------------------------
//
// Ceritificate Blob. Each blob contains an X509 certificate
//
//+----------------------------------------------------------------------------
typedef struct _Cert_Blob { DWORD cbCert; // size of this certificate blob
BYTE abCert[1]; // beginning byte of this certificate
} Cert_Blob;
#ifdef OS_WIN16
typedef Cert_Blob FAR * PCert_Blob; #else
typedef Cert_Blob * PCert_Blob; #endif //OS_WIN16
//+----------------------------------------------------------------------------
//
// Certificate chain with a number of certificate blobs
//
// The most significant bit denotes whether the certificate that has been
// issued is temporary. The license server will issue a temporary certificate
// if it has not yet obtained a certificate from the clearing house.
//
// We also assume that the chain is in the order such that each subsequent
// certificate belongs to the issuer of the previous certificate.
//
//+----------------------------------------------------------------------------
typedef struct _Cert_Chain { DWORD dwVersion; // version of this structure
DWORD dwNumCertBlobs; // Number of certificate blobs
Cert_Blob CertBlob[1]; // First certificate blob
} Cert_Chain;
#ifdef OS_WIN16
typedef Cert_Chain FAR * PCert_Chain; #else
typedef Cert_Chain * PCert_Chain; #endif //OS_WIN16
#define CERT_CHAIN_VERSION_1 0x00000001
#define CERT_CHAIN_VERSION_2 0x00000002
#define MAX_CERT_CHAIN_VERSION CERT_CHAIN_VERSION_2
#define GET_CERTIFICATE_VERSION( x ) ( 0x0FFFFFFF & x )
#define IS_TEMP_CERTIFICATE( x ) ( 0xF0000000 & x )
//-----------------------------------------------------------------------------
//
// LICENSE_CAPABILITIES
//
// Data structure used to initialize a licensing context.
//
// KeyExchangeAlg - The key exchange algorithm: RSA or Diffie Helman
// ProtocolVer - The supported licensing protocol
// fAuthenticateServer - Whether the client is going to authenticate the server
// CertType - Indicate the type of certificate that has already been transmitted
// to the client.
//
//-----------------------------------------------------------------------------
typedef struct _LICENSE_CAPABILITIES { DWORD KeyExchangeAlg; DWORD ProtocolVer; BOOL fAuthenticateServer; CERT_TYPE CertType; DWORD cbClientName; PBYTE pbClientName;
} LICENSE_CAPABILITIES;
#ifdef OS_WIN16
typedef LICENSE_CAPABILITIES FAR * PLICENSE_CAPABILITIES; #else
typedef LICENSE_CAPABILITIES * PLICENSE_CAPABILITIES; #endif //OS_WIN16
typedef PLICENSE_CAPABILITIES LPLICENSE_CAPABILITIES;
//-----------------------------------------------------------------------------
//
// Client licensing info retrievable by terminal server
//
//-----------------------------------------------------------------------------
typedef struct _TS_LICENSE_INFO { ULARGE_INTEGER ulSerialNumber; // Client license's serial number
DWORD dwProductVersion; PBYTE pbOrgProductID; // original license request product Id
DWORD cbOrgProductID; // size of original license request product Id
BOOL fTempLicense; LPTSTR szIssuer; LPTSTR szIssuerId; // license server setup ID
FILETIME NotBefore; // license's validity
FILETIME NotAfter;
LPTSTR szLicensedClient; // client's machine name
LPTSTR szLicensedUser; // client's user name
PBYTE pbRawLicense; // storage for marking it later
DWORD cbRawLicense;
DWORD dwSupportFlags; } TS_LICENSE_INFO;
#ifdef OS_WIN16
typedef TS_LICENSE_INFO FAR * PTS_LICENSE_INFO; #else
typedef TS_LICENSE_INFO * PTS_LICENSE_INFO; #endif //OS_WIN16
typedef PTS_LICENSE_INFO LPTS_LICENSE_INFO;
// Support Flags: which DCRs are supported
#define SUPPORT_PER_SEAT_REISSUANCE 0x1
#define SUPPORT_PER_SEAT_POST_LOGON 0x2
#define SUPPORT_CONCURRENT 0x4
#define SUPPORT_WHISTLER_CAL 0x8
#define SUPPORT_WHISTLER_52_CAL 0x16
#define ALL_KNOWN_SUPPORT_FLAGS (SUPPORT_PER_SEAT_REISSUANCE|SUPPORT_PER_SEAT_POST_LOGON|SUPPORT_CONCURRENT|SUPPORT_WHISTLER_CAL| SUPPORT_WHISTLER_52_CAL)
// Mark Flags: bits marking the license
#define MARK_FLAG_USER_AUTHENTICATED 0x1
#endif //_LICENSE_H_
|