Minimal implementation of Widevine MediaCAS ECMG.
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=226515998
This commit is contained in:
203
example/test_ecmg_messages.h
Normal file
203
example/test_ecmg_messages.h
Normal file
@@ -0,0 +1,203 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright 2018 Google LLC.
|
||||
//
|
||||
// This software is licensed under the terms defined in the Widevine Master
|
||||
// License Agreement. For a copy of this agreement, please contact
|
||||
// widevine-licensing@google.com.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Example ECMG messages used in unit tests and example client.
|
||||
|
||||
#ifndef MEDIA_CAS_PACKAGER_SDK_EXAMPLE_TEST_ECMG_MESSAGES_H_
|
||||
#define MEDIA_CAS_PACKAGER_SDK_EXAMPLE_TEST_ECMG_MESSAGES_H_
|
||||
|
||||
namespace widevine {
|
||||
namespace cas {
|
||||
|
||||
const char kTestChannelSetup[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x00', '\x01', // message_type - Channel_setup
|
||||
'\x00', '\x0e', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x01', // parameter_type- SUPER_CAS_ID
|
||||
'\x00', '\x04', // parameter_length
|
||||
'\x4a', '\xd4', '\x00', '\x00' // parameter_value
|
||||
};
|
||||
|
||||
const char kTestChannelStatus[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x00', '\x03', // message_type - Channel_status
|
||||
'\x00', '\x39', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x02', // parameter_type - setion_TSpkt_flag
|
||||
'\x00', '\x01', // parameter_length
|
||||
'\x01', // parameter_value
|
||||
'\x00', '\x03', // parameter_type - delay_start
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\xc8', // parameter_value
|
||||
'\x00', '\x04', // parameter_type - delay_stop
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\xc8', // parameter_value
|
||||
'\x00', '\x07', // parameter_type - ECM_rep_period
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x64', // parameter_value
|
||||
'\x00', '\x08', // parameter_type - max_streams
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x00', // parameter_value
|
||||
'\x00', '\x09', // parameter_type - min_CP_duration
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x64', // parameter_value
|
||||
'\x00', '\x0a', // parameter_type - lead_CW
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x01', // parameter_value
|
||||
'\x00', '\x0b', // parameter_type - CW_per_msg
|
||||
'\x00', '\x01', // parameter_length
|
||||
'\x02', // parameter_value
|
||||
'\x00', '\x0c', // parameter_type - max_comp_time
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x64' // parameter_value
|
||||
};
|
||||
|
||||
const char kTestStreamSetup[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x01', '\x01', // message_type - Stream_setup
|
||||
'\x00', '\x18', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x0f', // parameter_type - ECM_stream_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x19', // parameter_type - ECM_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x02', // parameter_value
|
||||
'\x00', '\x10', // parameter_type - nominal_CP_duration
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x64' // parameter_value
|
||||
};
|
||||
|
||||
const char kTestStreamStatus[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x01', '\x03', // message_type - Stream_status
|
||||
'\x00', '\x17', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x0f', // parameter_type - ECM_stream_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x19', // parameter_type - ECM_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x02', // parameter_value
|
||||
'\x00', '\x11', // parameter_type - access_criteria_transfer_mode
|
||||
'\x00', '\x01', // parameter_length
|
||||
'\x01' // parameter_value
|
||||
};
|
||||
|
||||
const char kTestCwProvision[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x02', '\x01', // message_type - CW_provision
|
||||
'\x00', '\x44', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x0f', // parameter_type - ECM_stream_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x12', // parameter_type - CP_number
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x00', // parameter_value
|
||||
'\x00', '\x13', // parameter_type - CP_duration
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x64', // parameter_value
|
||||
'\x00', '\x14', // parameter_type - CP_CW_Combination
|
||||
'\x00', '\x12', // parameter_length
|
||||
'\x00', '\x00', // parameter_value - CP (2 bytes) then CW next (16 bytes)
|
||||
'\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07',
|
||||
'\x08', '\x09', '\x0a', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f',
|
||||
'\x00', '\x14', // parameter_type - CP_CW_Combination
|
||||
'\x00', '\x12', // parameter_length
|
||||
'\x00', '\x01', // parameter_value - CP (2 bytes) then CW next (16 bytes)
|
||||
'\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17',
|
||||
'\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f'};
|
||||
|
||||
// CW is encrypted using hardcoded fixed entitlement key.
|
||||
const char kTestEcmResponse[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x02', '\x02', // message_type - ECM_response
|
||||
'\x00', '\xd2', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x0f', // parameter_type - ECM_stream_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x12', // parameter_type - CP_number
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x00', // parameter_value
|
||||
'\x00', '\x15', // parameter_type - ECM_datagram
|
||||
'\x00', '\xbc', // parameter_length
|
||||
// parameter_value - ECM_datagram
|
||||
'\x47', '\x40', '\x02', '\x10', '\x00', '\x80', '\x70', '\x95', '\x4a',
|
||||
'\xd4', '\x01', '\x05', '\x80', '\x66', '\x61', '\x6b', '\x65', '\x5f',
|
||||
'\x6b', '\x65', '\x79', '\x5f', '\x69', '\x64', '\x31', '\x2e', '\x2e',
|
||||
'\x2e', '\x2e', '\xef', '\x40', '\x57', '\x48', '\xa7', '\xad', '\xdd',
|
||||
'\x34', '\x73', '\xfe', '\x5d', '\x1c', '\x65', '\xa0', '\xbf', '\x93',
|
||||
'\xfe', '\x01', '\x4b', '\x1d', '\xcd', '\x9e', '\x1d', '\x3a', '\x36',
|
||||
'\x99', '\x8f', '\x47', '\xa1', '\x3b', '\x46', '\xf1', '\xde', '\x9e',
|
||||
'\xc2', '\x88', '\xf8', '\x27', '\x2f', '\xea', '\xa1', '\x63', '\x9b',
|
||||
'\x1b', '\x6a', '\x56', '\x2d', '\x26', '\x31', '\x32', '\x33', '\x34',
|
||||
'\x35', '\x36', '\x37', '\x38', '\x66', '\x61', '\x6b', '\x65', '\x5f',
|
||||
'\x6b', '\x65', '\x79', '\x5f', '\x69', '\x64', '\x32', '\x2e', '\x2e',
|
||||
'\x2e', '\x2e', '\xf4', '\x71', '\x2a', '\x4b', '\x6d', '\x6d', '\x14',
|
||||
'\x4d', '\x2e', '\x53', '\xe7', '\x4b', '\x9f', '\x4b', '\x0a', '\x34',
|
||||
'\xb4', '\xfd', '\xbe', '\x86', '\x21', '\x35', '\x1e', '\xda', '\x81',
|
||||
'\x89', '\x6f', '\x70', '\xd3', '\xd2', '\xb2', '\x79', '\xf2', '\xcd',
|
||||
'\xeb', '\xc5', '\xaf', '\x89', '\xab', '\xeb', '\xf0', '\x1b', '\xd0',
|
||||
'\xd3', '\xe9', '\x7d', '\x81', '\x8a', '\x31', '\x32', '\x33', '\x34',
|
||||
'\x35', '\x36', '\x37', '\x38', '\xff', '\xff', '\xff', '\xff', '\xff',
|
||||
'\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff',
|
||||
'\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff',
|
||||
'\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff'};
|
||||
|
||||
const char kTestStreamCloseRequest[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x01', '\x04', // message_type - Stream_close_request
|
||||
'\x00', '\x0c', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x0f', // parameter_type - ECM_stream_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01' // parameter_value
|
||||
};
|
||||
|
||||
const char kTestStreamCloseResponse[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x01', '\x05', // message_type - Stream_close_response
|
||||
'\x00', '\x0c', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01', // parameter_value
|
||||
'\x00', '\x0f', // parameter_type - ECM_stream_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01' // parameter_value
|
||||
};
|
||||
|
||||
const char kTestChannelClose[] = {
|
||||
'\x03', // protocol_version
|
||||
'\x00', '\x04', // message_type - Channel_close
|
||||
'\x00', '\x06', // message_length
|
||||
'\x00', '\x0e', // parameter_type - ECM_channel_id
|
||||
'\x00', '\x02', // parameter_length
|
||||
'\x00', '\x01' // parameter_value
|
||||
};
|
||||
|
||||
} // namespace cas
|
||||
} // namespace widevine
|
||||
|
||||
#endif // MEDIA_CAS_PACKAGER_SDK_EXAMPLE_TEST_ECMG_MESSAGES_H_
|
||||
Reference in New Issue
Block a user