215 lines
5.9 KiB
C
215 lines
5.9 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998-99 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
licekpak.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Fred Chong (FredCh) 7/1/1998
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _LICE_KEYPACK_H_
|
||
|
#define _LICE_KEYPACK_H_
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <wincrypt.h>
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// keypack description
|
||
|
//
|
||
|
|
||
|
typedef struct _KeyPack_Description
|
||
|
{
|
||
|
LCID Locale; // Locale ID
|
||
|
|
||
|
DWORD cbProductName; // product name
|
||
|
|
||
|
PBYTE pbProductName; // product name
|
||
|
|
||
|
DWORD cbDescription; // Number of bytes in the description string
|
||
|
|
||
|
PBYTE pDescription; // Pointer to the description string
|
||
|
|
||
|
} KeyPack_Description, * PKeyPack_Description;
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// License keypack content
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//
|
||
|
// License keypack version
|
||
|
//
|
||
|
|
||
|
#define LICENSE_KEYPACK_VERSION_1_0 0x00010000
|
||
|
|
||
|
//
|
||
|
// License keypack type
|
||
|
//
|
||
|
|
||
|
#define LICENSE_KEYPACK_TYPE_SELECT 0x00000001
|
||
|
#define LICENSE_KEYPACK_TYPE_MOLP 0x00000002
|
||
|
#define LICENSE_KEYPACK_TYPE_RETAIL 0x00000003
|
||
|
|
||
|
//
|
||
|
// License keypack distribution channel identifiers
|
||
|
//
|
||
|
|
||
|
#define LICENSE_DISTRIBUTION_CHANNEL_OEM 0x00000001
|
||
|
#define LICENSE_DISTRIBUTION_CHANNEL_RETAIL 0x00000002
|
||
|
|
||
|
//
|
||
|
// License Keypack encryption information.
|
||
|
//
|
||
|
|
||
|
#define LICENSE_KEYPACK_ENCRYPT_CRYPTO 0x00000000
|
||
|
#define LICENSE_KEYPACK_ENCRYPT_ALWAYSCRYPTO 0x00000001
|
||
|
#define LICENSE_KEYPACK_ENCRYPT_ALWAYSFRENCH 0x00000002
|
||
|
#define LICENSE_KEYPACK_ENCRYPT_NONE 0x00000003
|
||
|
#define LICENSE_KEYPACK_ENCRYPT_PRIVATE 0x00000004
|
||
|
|
||
|
#define LICENSE_KEYPACK_ENCRYPT_MIN LICENSE_KEYPACK_ENCRYPT_CRYPTO
|
||
|
#define LICENSE_KEYPACK_ENCRYPT_MAX LICENSE_KEYPACK_ENCRYPT_PRIVATE
|
||
|
|
||
|
typedef struct __LicensePackEncodeParm {
|
||
|
DWORD dwEncodeType;
|
||
|
HCRYPTPROV hCryptProv;
|
||
|
|
||
|
PBYTE pbEncryptParm; // depends on dwEncodeType
|
||
|
DWORD cbEncryptParm;
|
||
|
} LicensePackEncodeParm, *PLicensePackEncodeParm;
|
||
|
|
||
|
typedef struct __LicensePackDecodeParm {
|
||
|
HCRYPTPROV hCryptProv;
|
||
|
|
||
|
//
|
||
|
// Private binaries to generate encryption key to decrypt
|
||
|
// license key pack blob.
|
||
|
|
||
|
//
|
||
|
// Private binaries to generate encryption key, this field is
|
||
|
// ignore if key pack blob is encrypted using certificates.
|
||
|
//
|
||
|
PBYTE pbDecryptParm;
|
||
|
DWORD cbDecryptParm;
|
||
|
|
||
|
//
|
||
|
// Certificate to generate encryption key, these fields are
|
||
|
// require even data is encryped using private binaries.
|
||
|
//
|
||
|
DWORD cbClearingHouseCert;
|
||
|
PBYTE pbClearingHouseCert;
|
||
|
|
||
|
DWORD cbRootCertificate;
|
||
|
PBYTE pbRootCertificate;
|
||
|
|
||
|
} LicensePackDecodeParm, *PLicensePackDecodeParm;
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// Content of license keypack
|
||
|
//
|
||
|
|
||
|
typedef struct _License_KeyPack_
|
||
|
{
|
||
|
DWORD dwVersion; // version of this structure
|
||
|
|
||
|
DWORD dwKeypackType; // Select, MOLP, Retail
|
||
|
|
||
|
DWORD dwDistChannel; // Distribution channel: OEM/Retail
|
||
|
|
||
|
GUID KeypackSerialNum; // CH assigned serial number for this key pack
|
||
|
|
||
|
FILETIME IssueDate; // Keypack issue date
|
||
|
|
||
|
FILETIME ActiveDate; // License active date
|
||
|
|
||
|
FILETIME ExpireDate; // License expiration date
|
||
|
|
||
|
DWORD dwBeginSerialNum; // beginning serial number for the licenses in the keypack
|
||
|
|
||
|
DWORD dwQuantity; // Number of licenses in the key pack
|
||
|
|
||
|
DWORD cbProductId; // product ID
|
||
|
|
||
|
PBYTE pbProductId; // product ID
|
||
|
|
||
|
DWORD dwProductVersion; // product version
|
||
|
|
||
|
DWORD dwPlatformId; // platform ID: Windows, Mac, UNIX etc...
|
||
|
|
||
|
DWORD dwLicenseType; // new, upgrade, competitive upgrade etc...
|
||
|
|
||
|
DWORD dwDescriptionCount; // The number of human language descriptions
|
||
|
|
||
|
PKeyPack_Description pDescription; // pointer to an array of keypack description
|
||
|
|
||
|
DWORD cbManufacturer; // The number of bytes in the manufacturer string
|
||
|
|
||
|
PBYTE pbManufacturer; // The manufacturer string
|
||
|
|
||
|
DWORD cbManufacturerData; // The number of bytes in the manufacturer-specific data
|
||
|
|
||
|
PBYTE pbManufacturerData; // Points to the manufacturer specific data
|
||
|
|
||
|
} License_KeyPack, * PLicense_KeyPack;
|
||
|
|
||
|
|
||
|
#define LICENSEPACKENCODE_VERSION LICENSE_KEYPACK_VERSION_1_0
|
||
|
#define LICENSEPACKENCODE_CURRENTVERSION LICENSEPACKENCODE_VERSION
|
||
|
#define LICENSEPACKENCODE_SIGNATURE 0xF0F0F0F0
|
||
|
|
||
|
typedef struct __EncodedLicenseKeyPack {
|
||
|
DWORD dwSignature; // old encoding puts size of encryption key.
|
||
|
DWORD dwStructVersion;
|
||
|
DWORD dwEncodeType;
|
||
|
DWORD cbData;
|
||
|
BYTE pbData[1];
|
||
|
} EncodedLicenseKeyPack, *PEncodedLicenseKeyPack;
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Exported functions
|
||
|
//
|
||
|
|
||
|
DWORD WINAPI
|
||
|
DecodeLicenseKeyPack(
|
||
|
PLicense_KeyPack pLicenseKeyPack,
|
||
|
HCRYPTPROV hCryptProv,
|
||
|
DWORD cbClearingHouseCert,
|
||
|
PBYTE pbClearingHouseCert,
|
||
|
DWORD cbRootCertificate,
|
||
|
PBYTE pbRootCertificate,
|
||
|
DWORD cbKeyPackBlob,
|
||
|
PBYTE pbKeyPackBlob );
|
||
|
|
||
|
|
||
|
DWORD WINAPI
|
||
|
DecodeLicenseKeyPackEx(
|
||
|
OUT PLicense_KeyPack pLicenseKeyPack,
|
||
|
IN PLicensePackDecodeParm pDecodeParm,
|
||
|
IN DWORD cbKeyPackBlob,
|
||
|
IN PBYTE pbKeyPackBlob
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|