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.
318 lines
10 KiB
318 lines
10 KiB
//-----------------------------------------------------------------------------
|
|
//
|
|
// File: drm.h
|
|
//
|
|
// Microsoft Digital Rights Management
|
|
// Copyright (C) Microsoft Corporation, 1998 - 1999, All Rights Reserved
|
|
//
|
|
// Description:
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef __DRM_H__
|
|
#define __DRM_H__
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#ifdef DRMLITE_EXPORTS
|
|
#define DRMLITE_API __declspec(dllexport)
|
|
#else
|
|
#define DRMLITE_API __declspec(dllimport)
|
|
#endif
|
|
|
|
#include <wtypes.h>
|
|
|
|
#include "license.h"
|
|
#include "pmlic.h"
|
|
#include "objbase.h"
|
|
|
|
#define DRMCLIENT_VER 0x00010004
|
|
|
|
#define DRM_FATAL_ERROR(hr) (HRESULT_CODE(hr) > 0x1000)
|
|
|
|
// non-fatal error
|
|
#define E_DRM_LICENSE_NOTEXIST (MAKE_HRESULT(1,FACILITY_ITF,0x0FFD))
|
|
#define E_DRM_LICENSE_INCORRECT_APPSEC (MAKE_HRESULT(1,FACILITY_ITF,0x0FFE))
|
|
#define E_DRM_LICENSE_INCORRECT_RIGHTS (MAKE_HRESULT(1,FACILITY_ITF,0x0FFF))
|
|
#define E_DRM_LICENSE_EXPIRED (MAKE_HRESULT(1,FACILITY_ITF,0x1000))
|
|
|
|
// fatal error
|
|
#define E_DRM_LICENSE_INCONSISTENT (MAKE_HRESULT(1,FACILITY_ITF,0x1001))
|
|
#define E_DRM_HARDWARE_INCONSISTENT (MAKE_HRESULT(1,FACILITY_ITF,0x1002))
|
|
#define E_DRM_INCORRECT_VERSION (MAKE_HRESULT(1,FACILITY_ITF,0x1003))
|
|
#define E_DRM_ALPHA_NOT_SUPPORTED (MAKE_HRESULT(1,FACILITY_ITF,0x1004))
|
|
// This happens when the client does not have the secret alg id requested
|
|
#define E_DRM_NEED_UPGRADE (MAKE_HRESULT(1,FACILITY_ITF,0x1005))
|
|
// Only used in the PD code
|
|
//#define E_DRM_MORE_DATA (MAKE_HRESULT(1,FACILITY_ITF,0x1006))
|
|
|
|
#define E_DRM_SDMI_TRIGGER (MAKE_HRESULT(1,FACILITY_ITF,0x1007))
|
|
#define E_DRM_SDMI_NOMORECOPIES (MAKE_HRESULT(1,FACILITY_ITF,0x1008))
|
|
|
|
|
|
#define DRM_LICSRC_INETSERVER 1
|
|
#define DRM_LICSRC_SDKDLL 2
|
|
|
|
// For GetLicenses API
|
|
#define DRM_FL_SEARCH_PC 0x00000001
|
|
#define DRM_FL_SEARCH_PM 0x00000002
|
|
|
|
// For QueryXferToPM API
|
|
#define DRM_XFER_FL_HAS_SERIALID 0x00000001
|
|
#define DRM_XFER_IGNORE_XCODE 0x00000002
|
|
#define DRM_XFER_IGNORE_SDMI 0x00000004
|
|
#define DRM_XFER_IGNORE_NONSDMI 0x00000008
|
|
|
|
#define DRM_XFER_SDMI 0x00000001
|
|
#define DRM_XFER_NONSDMI 0x00000002
|
|
#define DRM_XFER_DECRYPTED 0x00000003
|
|
#define DRM_XFER_SDMI_XCODED 0x00000004
|
|
#define DRM_XFER_NONSDMI_XCODED 0x00000005
|
|
|
|
// For GenerateNewLicenseEx API
|
|
#define GNL_EX_MODE_PDRM 0x00000001 // Use PDRM method to form KID/Key
|
|
#define GNL_EX_MODE_RANDOM 0x00000002 // generate random KID/Key
|
|
#define GNL_EX_MODE_SPECIFIC 0x00000004 // generate license for specific KID/Key
|
|
|
|
|
|
class CDRMLiteCrypto
|
|
{
|
|
private:
|
|
void *m_var;
|
|
|
|
HRESULT Init( );
|
|
HRESULT GetSongKey(LPCSTR pszContentID, BYTE *pbAppSec,
|
|
BYTE *pbRights, BOOL *pfCanDecrypt, DWORD dwFlags);
|
|
HRESULT GetSongKeyEx(LPCSTR pszContentID, BYTE *pbAppSec,
|
|
BYTE *pbRights, BOOL *pfCanDecrypt, BOOL fUsePMLic);
|
|
HRESULT ContentKeyToPMContentKey(
|
|
BYTE *pbPMKey,
|
|
DWORD dwPMKeyLen,
|
|
LICENSE *pLic,
|
|
BYTE *pbPMContentKey);
|
|
HRESULT i_SetLicenseStore(
|
|
BYTE *pbLicenseStore,
|
|
DWORD dwLicenseStoreLen,
|
|
BYTE *pbPMID,
|
|
DWORD dwPMIDLen,
|
|
LPCSTR pszPath);
|
|
HRESULT i_SetPMID(BYTE *pbPMID, DWORD dwPMIDLen);
|
|
HRESULT i_GetLicenses(
|
|
LPCSTR pszContentID,
|
|
PMLICENSE *pPMLic,
|
|
LPDWORD lpdwCount,
|
|
DWORD dwFlags,
|
|
LPVOID lpReserved,
|
|
LPDWORD lpdwReservedLen);
|
|
HRESULT i_QueryXferToPM(
|
|
LPCSTR pszContentID,
|
|
DWORD dwFlags,
|
|
LPDWORD lpdwXferMode );
|
|
HRESULT i_CreatePMLicense(
|
|
LPCSTR pszContentID,
|
|
LPCSTR pszContentID2,
|
|
BOOL fIsSDMI,
|
|
BYTE *pbPMID,
|
|
DWORD dwPMIDLen,
|
|
BYTE *pbPMLicenseStoreBuf,
|
|
DWORD dwPMLicenseStoreBufLen,
|
|
LPDWORD pdwPMLicenseStoreLen,
|
|
BYTE *pbAsfLicenseStoreBuf,
|
|
DWORD dwAsfLicenseStoreBufLen,
|
|
LPDWORD pdwAsfLicenseStoreLen,
|
|
PMLICENSE *pPMLic,
|
|
BOOL bPMLicStore );
|
|
HRESULT GenerateAndStoreLicense(
|
|
BYTE *pbAppSec,
|
|
BYTE *pbRights,
|
|
BYTE *pbExpiryDate,
|
|
LPCSTR pszKID,
|
|
const BYTE *pbKey );
|
|
|
|
HRESULT GetMachineRandomKIDData( CHAR* pszRandomData, DWORD cbSize );
|
|
|
|
public:
|
|
DRMLITE_API HRESULT KeyExchange( APPCERT *pAppcert, BYTE *pbRandNum );
|
|
|
|
DRMLITE_API HRESULT InitAppCerts( APPCERT *pAppcert, APPCERT *pAppCert2 );
|
|
|
|
DRMLITE_API HRESULT Bind(
|
|
LPCSTR pszContentID,
|
|
APPCERT *pAppCert,
|
|
APPCERT *pAppCert2,
|
|
BYTE *pbRights );
|
|
|
|
DRMLITE_API HRESULT BindEx(
|
|
LPCSTR pszContentID,
|
|
APPCERT *pAppCert,
|
|
APPCERT *pAppCert2,
|
|
BYTE *pbRights,
|
|
LICENSEDATA *pLicData,
|
|
LPVOID lpReserved,
|
|
LPDWORD lpdwReservedLen,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT CanDecrypt(
|
|
LPCSTR pszContentID,
|
|
APPCERT *pAppCert,
|
|
APPCERT *pAppCert2,
|
|
BYTE *pbRights,
|
|
BOOL *pfCanDecrypt );
|
|
|
|
DRMLITE_API HRESULT CanDecryptEx(
|
|
LPCSTR pszContentID,
|
|
APPCERT *pAppCert,
|
|
APPCERT *pAppCert2,
|
|
BYTE *pbRights,
|
|
BOOL *pfCanDecrypt );
|
|
|
|
DRMLITE_API HRESULT Decrypt(
|
|
LPCSTR pszContentID,
|
|
DWORD dwLen,
|
|
BYTE *pData );
|
|
|
|
DRMLITE_API HRESULT Encrypt(
|
|
LPCSTR pszKey,
|
|
DWORD dwLen,
|
|
BYTE *pData,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT EncryptIndirectFast(
|
|
LPCSTR pszKID,
|
|
DWORD dwLen,
|
|
BYTE *pData,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT GetPublicKey(
|
|
PKCERT *pPubKey );
|
|
|
|
DRMLITE_API HRESULT RequestLicense(
|
|
LPCSTR pszContentID,
|
|
APPCERT *pAppCert,
|
|
APPCERT *pAppCert2,
|
|
BYTE *pbRights,
|
|
LPSTR *ppszChallenge );
|
|
|
|
DRMLITE_API HRESULT ProcessResponse(
|
|
LPCSTR pszResponse,
|
|
APPCERT *pAppCert );
|
|
|
|
DRMLITE_API HRESULT GenerateNewLicense(
|
|
BYTE *pbAppSec,
|
|
BYTE *pbRights,
|
|
BYTE *pbExpiryDate,
|
|
LPSTR *ppszKID,
|
|
LPSTR *ppszEncryptKey,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT GetVersion( LPDWORD lpdwVersion );
|
|
|
|
DRMLITE_API HRESULT SetAppSec(
|
|
BYTE *pbAppSec,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT SetLicenseStore(
|
|
BYTE *pbLicenseStore,
|
|
DWORD dwLicenseStoreLen,
|
|
BYTE *pbPMID,
|
|
DWORD dwPMIDLen,
|
|
LPCSTR pszPath,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT GetPMLicenseFileName(
|
|
LPSTR pszName,
|
|
LPDWORD pdwLen );
|
|
|
|
DRMLITE_API HRESULT GetPMLicenseSize( LPDWORD pdwLen );
|
|
|
|
DRMLITE_API HRESULT QueryXferToPM(
|
|
LPCSTR pszContentID,
|
|
DWORD dwFlags,
|
|
LPDWORD lpdwXferMode,
|
|
LPVOID lpReserved,
|
|
LPDWORD lpdwReservedLen,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT QueryXferToPMEx(
|
|
LPCSTR pszContentID,
|
|
DWORD dwFlags,
|
|
LPDWORD lpdwXferMode,
|
|
BYTE *pbPMID,
|
|
DWORD dwPMIDLen,
|
|
BYTE *pbLicenseStoreBuf,
|
|
DWORD dwLicenseStoreBufLen,
|
|
LPDWORD pdwLicenseStoreLen,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT CreatePMLicense(
|
|
LPCSTR pszContentID,
|
|
LPCSTR pszContentID2,
|
|
BOOL fIsSDMI,
|
|
BYTE *pbPMID,
|
|
DWORD dwPMIDLen,
|
|
BYTE *pbLicenseStoreBuf,
|
|
DWORD dwLicenseStoreBufLen,
|
|
LPDWORD pdwLicenseStoreLen,
|
|
PMLICENSE *pPMLic,
|
|
LPVOID lpReserved,
|
|
LPDWORD lpdwReservedLen,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT GetLicenses(
|
|
LPCSTR pszContentID,
|
|
PMLICENSE *pPMLic,
|
|
LPDWORD lpdwCount,
|
|
DWORD dwFlags,
|
|
LPVOID lpReserved,
|
|
LPDWORD lpdwReservedLen,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API CDRMLiteCrypto();
|
|
DRMLITE_API ~CDRMLiteCrypto();
|
|
DRMLITE_API HRESULT BackupLicenses(DWORD dwFlags,
|
|
LPWSTR pwszBackupPath,
|
|
IUnknown *pStatusCallback,
|
|
BOOL *pfCancel,
|
|
LPVOID pLock);
|
|
|
|
DRMLITE_API HRESULT RestoreLicenses(DWORD dwFlags,
|
|
BYTE *pbBindData,
|
|
LPWSTR pwszRestorePath,
|
|
IUnknown *pStatusCallback,
|
|
BOOL *pfCancel,
|
|
LPVOID pLock);
|
|
|
|
DRMLITE_API HRESULT EncryptFast(
|
|
LPCSTR pszKey,
|
|
DWORD dwLen,
|
|
BYTE *pData,
|
|
BYTE *pbHash );
|
|
|
|
DRMLITE_API HRESULT GenerateNewLicenseEx(
|
|
DWORD dwFlags,
|
|
BYTE *pbAppSec,
|
|
BYTE *pbRights,
|
|
BYTE *pbExpiryDate,
|
|
LPSTR *ppszKID,
|
|
LPSTR *ppszEncryptKey,
|
|
BYTE *pbHash );
|
|
|
|
private:
|
|
|
|
HRESULT i_GenerateNewLicense(
|
|
BYTE *pbAppSec,
|
|
BYTE *pbRights,
|
|
BYTE *pbExpiryDate,
|
|
LPSTR *ppszKID,
|
|
LPSTR *ppszEncryptKey);
|
|
|
|
HRESULT i_Encrypt(
|
|
LPCSTR pszKey,
|
|
DWORD dwLen,
|
|
BYTE *pData );
|
|
|
|
};
|
|
|
|
#endif // __DRM_H__
|