1139 lines
36 KiB
C
1139 lines
36 KiB
C
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// 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 CURRENT_TERMINAL_SERVER_VERSION MICROSOFT_WINDOWS_TERMINAL_SERVER_5_1
|
||
|
|
||
|
|
||
|
#define TERMSRV_OS_INDEX_WINNT_5_0 0x00000000
|
||
|
#define TERMSRV_OS_INDEX_WINNT_5_1 0x00000001
|
||
|
#define TERMSRV_OS_INDEX_WINNT_POST_5_1 0x00000002
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// 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 ALL_KNOWN_SUPPORT_FLAGS (SUPPORT_PER_SEAT_REISSUANCE|SUPPORT_PER_SEAT_POST_LOGON|SUPPORT_CONCURRENT|SUPPORT_WHISTLER_CAL)
|
||
|
|
||
|
// Mark Flags: bits marking the license
|
||
|
|
||
|
#define MARK_FLAG_USER_AUTHENTICATED 0x1
|
||
|
|
||
|
|
||
|
#endif //_LICENSE_H_
|
||
|
|