📄 wmdrmnet.h
字号:
/**@@@+++@@@@********************************************************************** Microsoft Windows Media** Copyright (C) Microsoft Corporation. All rights reserved.*****@@@---@@@@*******************************************************************//* * WmdrmNet.h * * Header file for routines in WmdrmNet.c */#ifndef _WMDRMNET_H_#define _WMDRMNET_H_#include "rsa.h"#include "DrmAes.h"#ifdef __cplusplusextern "C"{#endif/* * Version of the WMDRMNET protocol */#define WMDRMNET_VERSION_2 2/* * Message Types of the WMDRMNET protocol *//* Registration Message */#define WMDRMNET_REGISTRATION_MESSAGE_TYPE 1#define WMDRMNET_REGISTRATION_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_ID) + /* Serial Number */ \ sizeof(DRM_DWORD) ) /* Certificate Length */ \/* Registration Response Message */#define WMDRMNET_REGISTRATION_RESPONSE_MESSAGE_TYPE 2#define WMDRMNET_REGISTRATION_RESPONSE_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_WORD) + /* Signature Offset */ \ sizeof(DRM_ID) + /* Serial Number */ \ sizeof(DRM_ID) + /* Session ID */ \ sizeof(DRM_WORD) + /* Address Length */ \ sizeof(DRM_BYTE) + /* Seed Encryption Type */ \ sizeof(DRM_WORD) + /* Seed Length */ \ sizeof(DRM_BYTE) + /* Signature Type */ \ sizeof(DRM_WORD) ) /* Signature Length */ \/* Proximity Start Message */#define WMDRMNET_PROXIMITY_START_MESSAGE_TYPE 3#define WMDRMNET_PROXIMITY_START_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_ID) ) /* Session ID */ \/* Proximity Challenge Message */#define WMDRMNET_PROXIMITY_CHALLENGE_MESSAGE_TYPE 4#define WMDRMNET_PROXIMITY_CHALLENGE_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_BYTE) + /* Sequence Number */ \ sizeof(DRM_ID) + /* Session ID */ \ sizeof(DRM_ID) ) /* Challenge */ \/* Proximity Response Message */#define WMDRMNET_PROXIMITY_RESPONSE_MESSAGE_TYPE 5#define WMDRMNET_PROXIMITY_RESPONSE_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_BYTE) + /* Sequence Number */ \ sizeof(DRM_ID) ) /* Session ID */ \/* Proximity Result Message */#define WMDRMNET_PROXIMITY_RESULT_MESSAGE_TYPE 6#define WMDRMNET_PROXIMITY_RESULT_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_ID) + /* Session ID */ \ sizeof(DRM_WORD) ) /* Result *//* License Request Message */#define WMDRMNET_LICENSE_REQUEST_MESSAGE_TYPE 7#define WMDRMNET_LICENSE_REQUEST_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_ID) + /* Rights ID */ \ sizeof(DRM_DWORD) + /* Reserved */ \ sizeof(DRM_ID) + /* Serial Number */ \ sizeof(DRM_DWORD) + /* Certificate Length */ \ sizeof(DRM_WORD) ) /* Action Length *//* License Response Message */#define WMDRMNET_LICENSE_RESPONSE_MESSAGE_TYPE 8#define WMDRMNET_LICENSE_RESPONSE_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_DWORD) ) /* Length of Reserved field */#define WMDRMNET_REVOCATION_LIST_REQUEST_MESSAGE_TYPE 10#define WMDRMNET_REVOCATION_LIST_REQUEST_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) + /* Message Type */ \ sizeof(DRM_BYTE) ) /* Number of entries */ \#define WMDRMNET_REVOCATION_LIST_RESPONSE_MESSAGE_TYPE 11#define WMDRMNET_REVOCATION_LIST_RESPONSE_MESSAGE_SIZE ( \ sizeof(DRM_BYTE) + /* Protocol Vesion */ \ sizeof(DRM_BYTE) ) /* Message Type *//* Define signature types */#define WMDRMNET_SIGNATURE_AES_OMAC_TYPE 1 /* AES OMAC1 */#define WMDRMNET_SIGNATURE_SHA_RSAPSS_TYPE 2 /* SHA1 signed by the 1024-bit RSA private key *//* Define encryption types */#define WMDRMNET_ENCRYPT_RSA_OAEP 1 /* 1024-bit RSA OAEP *//* Wait time between proximity detection attempts */#define WMDRMNET_PROXIMITY_DETECTION_INTERVAL 30 /* milliseconds *//* Actions */#define WMDRMNET_PLAY_ACTION "PLAY"#define WMDRMNET_PLAY_ACTION_SIZE (sizeof(WMDRMNET_PLAY_ACTION)-1)/* * * Define a structure for packing and unpacking WmdrmNet messages */typedef struct { /* Allocated Buffer */ DRM_BYTE *Buffer; DRM_DWORD BufferSize; /* Current Offset into the buffer */ DRM_DWORD Offset;} WMDRMNET_MESSAGE_DESCRIPTOR;/* * Low level procedures for packing and unpacking messages */DRM_RESULTWmdrmNetAllocateMessageDescriptor( IN DRM_BYTE *Message, IN DRM_DWORD MessageSize, OUT WMDRMNET_MESSAGE_DESCRIPTOR **MessageDescriptor );WMDRMNET_MESSAGE_DESCRIPTOR *WmdrmNetAllocateMessage( IN DRM_BYTE MessageType, IN DRM_DWORD VariableSize );DRM_RESULTWmdrmNetValidateMessage( IN DRM_BYTE *Message, IN DRM_DWORD MessageSize, IN DRM_BYTE ExpectedMessageType, OUT WMDRMNET_MESSAGE_DESCRIPTOR **MessageDescriptor );DRM_VOIDWmdrmNetPackOctet( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, IN DRM_BYTE Octet );DRM_VOIDWmdrmNetPackOctets( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, IN DRM_BYTE *Value, IN DRM_DWORD ValueSize );DRM_BOOLWmdrmNetUnpackOctet( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, OUT DRM_BYTE *Octet );DRM_BOOLWmdrmNetUnpackOctets( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, OUT DRM_BYTE **Value, IN DRM_DWORD ValueSize );DRM_VOIDWmdrmNetPackWord( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, IN DRM_WORD Value );DRM_BOOLWmdrmNetUnpackWord( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, OUT DRM_WORD *Value );DRM_VOIDWmdrmNetPackDword( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, IN DRM_DWORD Value );DRM_BOOLWmdrmNetUnpackDword( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, OUT DRM_DWORD *Value );DRM_BOOLWmdrmNetUnpackUI64( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, OUT DRM_UINT64 *Value );DRM_VOIDWmdrmNetPackVal128( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, IN DRM_ID *Value );DRM_BOOLWmdrmNetUnpackVal128( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, OUT DRM_ID *Value );DRM_VOIDWmdrmNetFreeMessageDescriptor( IN WMDRMNET_MESSAGE_DESCRIPTOR *MessageDescriptor, IN DRM_BOOL Done );/* * Procedures for packing and unpacking messages */DRM_BYTEWmdrmNetGetMessageType( IN DRM_BYTE *Message, IN DRM_DWORD MessageSize );DRM_DWORDWmdrmNetFixedMessageSize( IN DRM_BYTE MessageType );DRM_AES_KEY *WmdrmNetGetRegistrationKey( IN DRM_ID *pSeed, IN DRM_BOOL bComputeContentIntegrityKey );DRM_RESULTWmdrmNetPackRegistrationMessage( IN DRM_ID *SerialNumber, IN DRM_BYTE *DeviceCertificate, IN DRM_DWORD DeviceCertificateSize, OUT DRM_BYTE **Message, OUT DRM_DWORD *MessageSize );DRM_RESULTWmdrmNetUnpackRegistrationResponseMessage( IN crl_rsa_private_key *pPrivateKey, IN DRM_BYTE *Message, IN DRM_DWORD MessageSize, OUT DRM_ID *Seed, OUT DRM_ID *SerialNumber, OUT DRM_ID *SessionId, OUT DRM_BYTE **Address, OUT DRM_WORD *AddressSize );DRM_RESULTWmdrmNetPackLicenseRequestMessage( IN DRM_ID *RightsId, IN DRM_ID *SerialNumber, IN DRM_BYTE *DeviceCertificate, IN DRM_DWORD DeviceCertificateSize, IN DRM_BYTE *Action, IN DRM_WORD ActionSize, OUT DRM_BYTE **Message, OUT DRM_DWORD *MessageSize );DRM_RESULTWmdrmNetUnpackLicenseResponseMessage( IN DRM_BYTE *Message, IN DRM_DWORD MessageSize, OUT DRM_BYTE **ppbLicense, OUT DRM_DWORD *cbLicense );/* * These status codes should be moved to drmresults.h *//** MessageId: DRM_E_INVALID_MESSAGE* Message Meaning:* A received message is garbled* Hex Value: 0x8004c801*/#define DRM_E_INVALID_MESSAGE MAKE_DRM_RESULT(DRM_SEVERITY_ERROR, DRM_FACILITY_ITF, DRM_E_BASECODE+0x801)/** MessageId: DRM_E_INVALID_MESSAGE_TYPE* Message Meaning:* A received message contains an invalid message type* Hex Value: 0x8004c802*/#define DRM_E_INVALID_MESSAGE_TYPE MAKE_DRM_RESULT(DRM_SEVERITY_ERROR, DRM_FACILITY_ITF, DRM_E_BASECODE+0x802)/** MessageId: DRM_E_INVALID_MESSAGE_TYPE* Message Meaning:* A received message contains an invalid message version* Hex Value: 0x8004c803*/#define DRM_E_INVALID_MESSAGE_VERSION MAKE_DRM_RESULT(DRM_SEVERITY_ERROR, DRM_FACILITY_ITF, DRM_E_BASECODE+0x803)#ifdef __cplusplus}#endif#endif /* _WMDRMNET_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -