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.

318 lines
10 KiB

  1. //-----------------------------------------------------------------------------
  2. //
  3. // File: drm.h
  4. //
  5. // Microsoft Digital Rights Management
  6. // Copyright (C) Microsoft Corporation, 1998 - 1999, All Rights Reserved
  7. //
  8. // Description:
  9. //
  10. //-----------------------------------------------------------------------------
  11. #ifndef __DRM_H__
  12. #define __DRM_H__
  13. #if _MSC_VER > 1000
  14. #pragma once
  15. #endif // _MSC_VER > 1000
  16. #ifdef DRMLITE_EXPORTS
  17. #define DRMLITE_API __declspec(dllexport)
  18. #else
  19. #define DRMLITE_API __declspec(dllimport)
  20. #endif
  21. #include <wtypes.h>
  22. #include "license.h"
  23. #include "pmlic.h"
  24. #include "objbase.h"
  25. #define DRMCLIENT_VER 0x00010004
  26. #define DRM_FATAL_ERROR(hr) (HRESULT_CODE(hr) > 0x1000)
  27. // non-fatal error
  28. #define E_DRM_LICENSE_NOTEXIST (MAKE_HRESULT(1,FACILITY_ITF,0x0FFD))
  29. #define E_DRM_LICENSE_INCORRECT_APPSEC (MAKE_HRESULT(1,FACILITY_ITF,0x0FFE))
  30. #define E_DRM_LICENSE_INCORRECT_RIGHTS (MAKE_HRESULT(1,FACILITY_ITF,0x0FFF))
  31. #define E_DRM_LICENSE_EXPIRED (MAKE_HRESULT(1,FACILITY_ITF,0x1000))
  32. // fatal error
  33. #define E_DRM_LICENSE_INCONSISTENT (MAKE_HRESULT(1,FACILITY_ITF,0x1001))
  34. #define E_DRM_HARDWARE_INCONSISTENT (MAKE_HRESULT(1,FACILITY_ITF,0x1002))
  35. #define E_DRM_INCORRECT_VERSION (MAKE_HRESULT(1,FACILITY_ITF,0x1003))
  36. #define E_DRM_ALPHA_NOT_SUPPORTED (MAKE_HRESULT(1,FACILITY_ITF,0x1004))
  37. // This happens when the client does not have the secret alg id requested
  38. #define E_DRM_NEED_UPGRADE (MAKE_HRESULT(1,FACILITY_ITF,0x1005))
  39. // Only used in the PD code
  40. //#define E_DRM_MORE_DATA (MAKE_HRESULT(1,FACILITY_ITF,0x1006))
  41. #define E_DRM_SDMI_TRIGGER (MAKE_HRESULT(1,FACILITY_ITF,0x1007))
  42. #define E_DRM_SDMI_NOMORECOPIES (MAKE_HRESULT(1,FACILITY_ITF,0x1008))
  43. #define DRM_LICSRC_INETSERVER 1
  44. #define DRM_LICSRC_SDKDLL 2
  45. // For GetLicenses API
  46. #define DRM_FL_SEARCH_PC 0x00000001
  47. #define DRM_FL_SEARCH_PM 0x00000002
  48. // For QueryXferToPM API
  49. #define DRM_XFER_FL_HAS_SERIALID 0x00000001
  50. #define DRM_XFER_IGNORE_XCODE 0x00000002
  51. #define DRM_XFER_IGNORE_SDMI 0x00000004
  52. #define DRM_XFER_IGNORE_NONSDMI 0x00000008
  53. #define DRM_XFER_SDMI 0x00000001
  54. #define DRM_XFER_NONSDMI 0x00000002
  55. #define DRM_XFER_DECRYPTED 0x00000003
  56. #define DRM_XFER_SDMI_XCODED 0x00000004
  57. #define DRM_XFER_NONSDMI_XCODED 0x00000005
  58. // For GenerateNewLicenseEx API
  59. #define GNL_EX_MODE_PDRM 0x00000001 // Use PDRM method to form KID/Key
  60. #define GNL_EX_MODE_RANDOM 0x00000002 // generate random KID/Key
  61. #define GNL_EX_MODE_SPECIFIC 0x00000004 // generate license for specific KID/Key
  62. class CDRMLiteCrypto
  63. {
  64. private:
  65. void *m_var;
  66. HRESULT Init( );
  67. HRESULT GetSongKey(LPCSTR pszContentID, BYTE *pbAppSec,
  68. BYTE *pbRights, BOOL *pfCanDecrypt, DWORD dwFlags);
  69. HRESULT GetSongKeyEx(LPCSTR pszContentID, BYTE *pbAppSec,
  70. BYTE *pbRights, BOOL *pfCanDecrypt, BOOL fUsePMLic);
  71. HRESULT ContentKeyToPMContentKey(
  72. BYTE *pbPMKey,
  73. DWORD dwPMKeyLen,
  74. LICENSE *pLic,
  75. BYTE *pbPMContentKey);
  76. HRESULT i_SetLicenseStore(
  77. BYTE *pbLicenseStore,
  78. DWORD dwLicenseStoreLen,
  79. BYTE *pbPMID,
  80. DWORD dwPMIDLen,
  81. LPCSTR pszPath);
  82. HRESULT i_SetPMID(BYTE *pbPMID, DWORD dwPMIDLen);
  83. HRESULT i_GetLicenses(
  84. LPCSTR pszContentID,
  85. PMLICENSE *pPMLic,
  86. LPDWORD lpdwCount,
  87. DWORD dwFlags,
  88. LPVOID lpReserved,
  89. LPDWORD lpdwReservedLen);
  90. HRESULT i_QueryXferToPM(
  91. LPCSTR pszContentID,
  92. DWORD dwFlags,
  93. LPDWORD lpdwXferMode );
  94. HRESULT i_CreatePMLicense(
  95. LPCSTR pszContentID,
  96. LPCSTR pszContentID2,
  97. BOOL fIsSDMI,
  98. BYTE *pbPMID,
  99. DWORD dwPMIDLen,
  100. BYTE *pbPMLicenseStoreBuf,
  101. DWORD dwPMLicenseStoreBufLen,
  102. LPDWORD pdwPMLicenseStoreLen,
  103. BYTE *pbAsfLicenseStoreBuf,
  104. DWORD dwAsfLicenseStoreBufLen,
  105. LPDWORD pdwAsfLicenseStoreLen,
  106. PMLICENSE *pPMLic,
  107. BOOL bPMLicStore );
  108. HRESULT GenerateAndStoreLicense(
  109. BYTE *pbAppSec,
  110. BYTE *pbRights,
  111. BYTE *pbExpiryDate,
  112. LPCSTR pszKID,
  113. const BYTE *pbKey );
  114. HRESULT GetMachineRandomKIDData( CHAR* pszRandomData, DWORD cbSize );
  115. public:
  116. DRMLITE_API HRESULT KeyExchange( APPCERT *pAppcert, BYTE *pbRandNum );
  117. DRMLITE_API HRESULT InitAppCerts( APPCERT *pAppcert, APPCERT *pAppCert2 );
  118. DRMLITE_API HRESULT Bind(
  119. LPCSTR pszContentID,
  120. APPCERT *pAppCert,
  121. APPCERT *pAppCert2,
  122. BYTE *pbRights );
  123. DRMLITE_API HRESULT BindEx(
  124. LPCSTR pszContentID,
  125. APPCERT *pAppCert,
  126. APPCERT *pAppCert2,
  127. BYTE *pbRights,
  128. LICENSEDATA *pLicData,
  129. LPVOID lpReserved,
  130. LPDWORD lpdwReservedLen,
  131. BYTE *pbHash );
  132. DRMLITE_API HRESULT CanDecrypt(
  133. LPCSTR pszContentID,
  134. APPCERT *pAppCert,
  135. APPCERT *pAppCert2,
  136. BYTE *pbRights,
  137. BOOL *pfCanDecrypt );
  138. DRMLITE_API HRESULT CanDecryptEx(
  139. LPCSTR pszContentID,
  140. APPCERT *pAppCert,
  141. APPCERT *pAppCert2,
  142. BYTE *pbRights,
  143. BOOL *pfCanDecrypt );
  144. DRMLITE_API HRESULT Decrypt(
  145. LPCSTR pszContentID,
  146. DWORD dwLen,
  147. BYTE *pData );
  148. DRMLITE_API HRESULT Encrypt(
  149. LPCSTR pszKey,
  150. DWORD dwLen,
  151. BYTE *pData,
  152. BYTE *pbHash );
  153. DRMLITE_API HRESULT EncryptIndirectFast(
  154. LPCSTR pszKID,
  155. DWORD dwLen,
  156. BYTE *pData,
  157. BYTE *pbHash );
  158. DRMLITE_API HRESULT GetPublicKey(
  159. PKCERT *pPubKey );
  160. DRMLITE_API HRESULT RequestLicense(
  161. LPCSTR pszContentID,
  162. APPCERT *pAppCert,
  163. APPCERT *pAppCert2,
  164. BYTE *pbRights,
  165. LPSTR *ppszChallenge );
  166. DRMLITE_API HRESULT ProcessResponse(
  167. LPCSTR pszResponse,
  168. APPCERT *pAppCert );
  169. DRMLITE_API HRESULT GenerateNewLicense(
  170. BYTE *pbAppSec,
  171. BYTE *pbRights,
  172. BYTE *pbExpiryDate,
  173. LPSTR *ppszKID,
  174. LPSTR *ppszEncryptKey,
  175. BYTE *pbHash );
  176. DRMLITE_API HRESULT GetVersion( LPDWORD lpdwVersion );
  177. DRMLITE_API HRESULT SetAppSec(
  178. BYTE *pbAppSec,
  179. BYTE *pbHash );
  180. DRMLITE_API HRESULT SetLicenseStore(
  181. BYTE *pbLicenseStore,
  182. DWORD dwLicenseStoreLen,
  183. BYTE *pbPMID,
  184. DWORD dwPMIDLen,
  185. LPCSTR pszPath,
  186. BYTE *pbHash );
  187. DRMLITE_API HRESULT GetPMLicenseFileName(
  188. LPSTR pszName,
  189. LPDWORD pdwLen );
  190. DRMLITE_API HRESULT GetPMLicenseSize( LPDWORD pdwLen );
  191. DRMLITE_API HRESULT QueryXferToPM(
  192. LPCSTR pszContentID,
  193. DWORD dwFlags,
  194. LPDWORD lpdwXferMode,
  195. LPVOID lpReserved,
  196. LPDWORD lpdwReservedLen,
  197. BYTE *pbHash );
  198. DRMLITE_API HRESULT QueryXferToPMEx(
  199. LPCSTR pszContentID,
  200. DWORD dwFlags,
  201. LPDWORD lpdwXferMode,
  202. BYTE *pbPMID,
  203. DWORD dwPMIDLen,
  204. BYTE *pbLicenseStoreBuf,
  205. DWORD dwLicenseStoreBufLen,
  206. LPDWORD pdwLicenseStoreLen,
  207. BYTE *pbHash );
  208. DRMLITE_API HRESULT CreatePMLicense(
  209. LPCSTR pszContentID,
  210. LPCSTR pszContentID2,
  211. BOOL fIsSDMI,
  212. BYTE *pbPMID,
  213. DWORD dwPMIDLen,
  214. BYTE *pbLicenseStoreBuf,
  215. DWORD dwLicenseStoreBufLen,
  216. LPDWORD pdwLicenseStoreLen,
  217. PMLICENSE *pPMLic,
  218. LPVOID lpReserved,
  219. LPDWORD lpdwReservedLen,
  220. BYTE *pbHash );
  221. DRMLITE_API HRESULT GetLicenses(
  222. LPCSTR pszContentID,
  223. PMLICENSE *pPMLic,
  224. LPDWORD lpdwCount,
  225. DWORD dwFlags,
  226. LPVOID lpReserved,
  227. LPDWORD lpdwReservedLen,
  228. BYTE *pbHash );
  229. DRMLITE_API CDRMLiteCrypto();
  230. DRMLITE_API ~CDRMLiteCrypto();
  231. DRMLITE_API HRESULT BackupLicenses(DWORD dwFlags,
  232. LPWSTR pwszBackupPath,
  233. IUnknown *pStatusCallback,
  234. BOOL *pfCancel,
  235. LPVOID pLock);
  236. DRMLITE_API HRESULT RestoreLicenses(DWORD dwFlags,
  237. BYTE *pbBindData,
  238. LPWSTR pwszRestorePath,
  239. IUnknown *pStatusCallback,
  240. BOOL *pfCancel,
  241. LPVOID pLock);
  242. DRMLITE_API HRESULT EncryptFast(
  243. LPCSTR pszKey,
  244. DWORD dwLen,
  245. BYTE *pData,
  246. BYTE *pbHash );
  247. DRMLITE_API HRESULT GenerateNewLicenseEx(
  248. DWORD dwFlags,
  249. BYTE *pbAppSec,
  250. BYTE *pbRights,
  251. BYTE *pbExpiryDate,
  252. LPSTR *ppszKID,
  253. LPSTR *ppszEncryptKey,
  254. BYTE *pbHash );
  255. private:
  256. HRESULT i_GenerateNewLicense(
  257. BYTE *pbAppSec,
  258. BYTE *pbRights,
  259. BYTE *pbExpiryDate,
  260. LPSTR *ppszKID,
  261. LPSTR *ppszEncryptKey);
  262. HRESULT i_Encrypt(
  263. LPCSTR pszKey,
  264. DWORD dwLen,
  265. BYTE *pData );
  266. };
  267. #endif // __DRM_H__