25#define FF_ENCRYPTION_INFO_EXTRA 24
95 uint64_t key_id_size, iv_size, subsample_count,
i;
115 memcpy(info->
iv,
buffer + key_id_size + 24, iv_size);
117 buffer += key_id_size + iv_size + 24;
118 for (
i = 0;
i < subsample_count;
i++) {
129 uint8_t *
buffer, *cur_buffer;
153 memcpy(cur_buffer, info->
iv, info->
iv_size);
176#define FF_ENCRYPTION_INIT_INFO_EXTRA 16
179 uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size)
197 if ((!info->
system_id && system_id_size) || (!info->
data && data_size) ||
198 (!info->
key_ids && num_key_ids && key_id_size)) {
204 for (
i = 0;
i < num_key_ids;
i++) {
232 const uint8_t *side_data,
size_t side_data_size)
236 uint64_t system_id_size, num_key_ids, key_id_size, data_size,
i, j;
237 uint64_t init_info_count;
239 if (!side_data || side_data_size < 4)
242 init_info_count =
AV_RB32(side_data);
245 for (
i = 0;
i < init_info_count;
i++) {
251 system_id_size =
AV_RB32(side_data);
252 num_key_ids =
AV_RB32(side_data + 4);
253 key_id_size =
AV_RB32(side_data + 8);
254 data_size =
AV_RB32(side_data + 12);
270 info = ret = temp_info;
272 info->next = temp_info;
276 memcpy(info->system_id, side_data, system_id_size);
277 side_data += system_id_size;
278 side_data_size -= system_id_size;
279 for (j = 0; j < num_key_ids; j++) {
280 memcpy(info->key_ids[j], side_data, key_id_size);
281 side_data += key_id_size;
282 side_data_size -= key_id_size;
284 memcpy(info->data, side_data, data_size);
285 side_data += data_size;
286 side_data_size -= data_size;
295 uint8_t *
buffer, *cur_buffer;
296 uint32_t
i, init_info_count;
297 uint64_t temp_side_data_size;
299 temp_side_data_size = 4;
301 for (cur_info = info; cur_info; cur_info = cur_info->
next) {
303 if (init_info_count == UINT32_MAX || temp_side_data_size > UINT32_MAX) {
310 if (temp_side_data_size > UINT32_MAX) {
315 *side_data_size = temp_side_data_size;
321 AV_WB32(cur_buffer, init_info_count);
323 for (cur_info = info; cur_info; cur_info = cur_info->
next) {
#define i(width, name, range_min, range_max)
#define FF_ENCRYPTION_INIT_INFO_EXTRA
AVEncryptionInfo * av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size)
Allocates an AVEncryptionInfo structure and sub-pointers to hold the given number of subsamples.
AVEncryptionInfo * av_encryption_info_get_side_data(const uint8_t *buffer, size_t size)
Creates a copy of the AVEncryptionInfo that is contained in the given side data.
#define FF_ENCRYPTION_INFO_EXTRA
This file is part of FFmpeg.
AVEncryptionInfo * av_encryption_info_clone(const AVEncryptionInfo *info)
Allocates an AVEncryptionInfo structure with a copy of the given data.
AVEncryptionInitInfo * av_encryption_init_info_get_side_data(const uint8_t *side_data, size_t side_data_size)
Creates a copy of the AVEncryptionInitInfo that is contained in the given side data.
uint8_t * av_encryption_init_info_add_side_data(const AVEncryptionInitInfo *info, size_t *side_data_size)
Allocates and initializes side data that holds a copy of the given encryption init info.
uint8_t * av_encryption_info_add_side_data(const AVEncryptionInfo *info, size_t *size)
Allocates and initializes side data that holds a copy of the given encryption info.
AVEncryptionInitInfo * av_encryption_init_info_alloc(uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size)
Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the given sizes.
void av_encryption_init_info_free(AVEncryptionInitInfo *info)
Frees the given encryption init info object.
void av_encryption_info_free(AVEncryptionInfo *info)
Frees the given encryption info object.
void * av_calloc(size_t nmemb, size_t size)
Memory handling functions.
This describes encryption info for a packet.
uint32_t skip_byte_block
Only used for pattern encryption.
uint8_t * iv
The initialization vector.
uint32_t crypt_byte_block
Only used for pattern encryption.
uint8_t * key_id
The ID of the key used to encrypt the packet.
AVSubsampleEncryptionInfo * subsamples
An array of subsample encryption info specifying how parts of the sample are encrypted.
uint32_t scheme
The fourcc encryption scheme, in big-endian byte order.
This describes info used to initialize an encryption key system.
uint8_t * data
Key-system specific initialization data.
struct AVEncryptionInitInfo * next
An optional pointer to the next initialization info in the list.
uint8_t ** key_ids
An array of key IDs this initialization data is for.
uint8_t * system_id
A unique identifier for the key system this is for, can be NULL if it is not known.
uint32_t key_id_size
The number of bytes in each key ID.
uint32_t num_key_ids
The number of key IDs.
unsigned int bytes_of_clear_data
The number of bytes that are clear.
unsigned int bytes_of_protected_data
The number of bytes that are protected.