23 #define FF_ENCRYPTION_INFO_EXTRA 24
93 uint64_t key_id_size, iv_size, subsample_count, i;
98 key_id_size =
AV_RB32(buffer + 12);
100 subsample_count =
AV_RB32(buffer + 20);
112 memcpy(info->
key_id, buffer + 24, key_id_size);
113 memcpy(info->
iv, buffer + key_id_size + 24, iv_size);
115 buffer += key_id_size + iv_size + 24;
116 for (i = 0; i < subsample_count; i++) {
130 if (UINT32_MAX - FF_ENCRYPTION_INFO_EXTRA < info->key_id_size ||
151 memcpy(cur_buffer, info->
iv, info->
iv_size);
174 #define FF_ENCRYPTION_INIT_INFO_EXTRA 16
177 uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size)
195 if ((!info->
system_id && system_id_size) || (!info->
data && data_size) ||
196 (!info->
key_ids && num_key_ids && key_id_size)) {
202 for (i = 0; i < num_key_ids; i++) {
230 const uint8_t *side_data,
size_t side_data_size)
234 uint64_t system_id_size, num_key_ids, key_id_size, data_size, i, j;
235 uint64_t init_info_count;
237 if (!side_data || side_data_size < 4)
240 init_info_count =
AV_RB32(side_data);
243 for (i = 0; i < init_info_count; i++) {
249 system_id_size =
AV_RB32(side_data);
250 num_key_ids =
AV_RB32(side_data + 4);
251 key_id_size =
AV_RB32(side_data + 8);
252 data_size =
AV_RB32(side_data + 12);
268 info = ret = temp_info;
270 info->
next = temp_info;
274 memcpy(info->system_id, side_data, system_id_size);
275 side_data += system_id_size;
276 side_data_size -= system_id_size;
277 for (j = 0; j < num_key_ids; j++) {
278 memcpy(info->key_ids[j], side_data, key_id_size);
279 side_data += key_id_size;
280 side_data_size -= key_id_size;
282 memcpy(info->data, side_data, data_size);
283 side_data += data_size;
284 side_data_size -= data_size;
294 uint32_t i, init_info_count;
295 uint64_t temp_side_data_size;
297 temp_side_data_size = 4;
299 for (cur_info = info; cur_info; cur_info = cur_info->
next) {
301 if (init_info_count == UINT32_MAX || temp_side_data_size > UINT32_MAX) {
308 if (temp_side_data_size > UINT32_MAX) {
313 *side_data_size = temp_side_data_size;
315 cur_buffer = buffer =
av_malloc(*side_data_size);
319 AV_WB32(cur_buffer, init_info_count);
321 for (cur_info = info; cur_info; cur_info = cur_info->
next) {
void av_encryption_info_free(AVEncryptionInfo *info)
Frees the given encryption info object.
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.
Memory handling functions.
void av_encryption_init_info_free(AVEncryptionInitInfo *info)
Frees the given encryption init info object.
uint32_t crypt_byte_block
Only used for pattern encryption.
This describes encryption info for a packet.
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...
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
uint32_t skip_byte_block
Only used for pattern encryption.
uint8_t ** key_ids
An array of key IDs this initialization data is for.
AVEncryptionInfo * av_encryption_info_clone(const AVEncryptionInfo *info)
Allocates an AVEncryptionInfo structure with a copy of the given data.
unsigned int bytes_of_clear_data
The number of bytes that are clear.
uint32_t scheme
The fourcc encryption scheme, in big-endian byte order.
This describes info used to initialize an encryption key system.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
uint8_t * iv
The initialization vector.
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.
AVSubsampleEncryptionInfo * subsamples
An array of subsample encryption info specifying how parts of the sample are encrypted.
uint32_t num_key_ids
The number of key IDs.
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.
struct AVEncryptionInitInfo * next
An optional pointer to the next initialization info in the list.
unsigned int bytes_of_protected_data
The number of bytes that are protected.
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.
uint32_t key_id_size
The number of bytes in each key ID.
uint8_t * key_id
The ID of the key used to encrypt the packet.
uint8_t * data
Key-system specific initialization data.
#define FF_ENCRYPTION_INFO_EXTRA
This file is part of FFmpeg.
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...
#define FF_ENCRYPTION_INIT_INFO_EXTRA
uint8_t * system_id
A unique identifier for the key system this is for, can be NULL if it is not known.
void * av_mallocz_array(size_t nmemb, size_t size)