From patchwork Fri Jul 13 00:05:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacob Trimble X-Patchwork-Id: 9707 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:104:0:0:0:0:0 with SMTP id c4-v6csp170060jad; Thu, 12 Jul 2018 17:05:54 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeyTYaFCyUJkTsQBFNLs+BBOQSBscZeVoWu6Kj+7Ef9YsA4NJK2S5WfZnbMKE1LmyhOiWet X-Received: by 2002:adf:b60a:: with SMTP id f10-v6mr3000137wre.54.1531440354244; Thu, 12 Jul 2018 17:05:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531440354; cv=none; d=google.com; s=arc-20160816; b=HJYKRsTr9MGqvERe1VP2mDNT2dId5+JwTt2quN8jpzxgtgpimVeVPTlJ8fWGhjYqcY 2EmN1iy7R5TUiWw8kPtAhLLS1iZnE81xxRelbJV/n1R44M7wCFm7Tb/FF9JrUSu9ujK8 olD5LRKRUNM9wIRAJBXEtKBSMcoLF2RRA6KaKYzq0CAZTw9ANQD70g8nd6kqxjDIMdMP TwoahOJNadC3ENI4Jm+jDtVE2NCU2134SksVedEUSaCVjotrOImzmscXJeBdE6YH/63t HE7uSOUcw0gowRWIfcZtnWQp86seZJgAOP+2KCvSEPUPQyP3yikyN5P2dAD0FNSJJjnH YFtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:to:from:message-id:date:mime-version :dkim-signature:delivered-to:arc-authentication-results; bh=M61rhlSUk1DQziCyhxoo34c0FPv6cItzpRFdJ//8lyQ=; b=gxPHYqSSqj6cArXzrr8rt3vPBvJdqpp+VsbEnBChnmdl7hNCPpe+stOYyWcDNWUezi TC5gcaVsD0PO2TxqQlbETiCyI1AWfeToDbQEww+9ZM4UioDqYikktc6/gnB3ztFHApNB zElH7RgzE1RiAFEH5Z2iNKab36MftTUMfFdSMmJYQLOxOL3GpJXqxIUfAhEXrWYn1D/+ WXKtAv8GwhdIeFaSBU5xVrr8doVoIUwav7tOJOZldksf/6mFFDaRNmfVHpZsXVkj+5wP TOxupIB28NDwUl3jQCoiAzp0243eSbyXoaVJ01l9If27QJf9iW7VO49NFw/BBKWkkFTu WEOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.s=20161025 header.b=AOBHRkhO; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k203-v6si4063305wmd.165.2018.07.12.17.05.53; Thu, 12 Jul 2018 17:05:54 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.s=20161025 header.b=AOBHRkhO; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9A4B068A6BB; Fri, 13 Jul 2018 03:05:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io0-f202.google.com (mail-io0-f202.google.com [209.85.223.202]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9E31868A5A3 for ; Fri, 13 Jul 2018 03:05:36 +0300 (EEST) Received: by mail-io0-f202.google.com with SMTP id w23-v6so16967075iob.18 for ; Thu, 12 Jul 2018 17:05:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:date:message-id:subject:from:to:cc; bh=SBwC8TW2fmYCzxVoydFULKMl/6Dg/Yr5FYMyMX9q2zc=; b=AOBHRkhOUNDskj5nTgclyzhznRGrDgZv0CvqUIIigh1HeF5D26K6kzQRN7rqWgDAFJ eyo49ZpoOQxOb7kNKGFALIB1SIgB16GZMpSrAV85l2+E5/yEFG4GMqyK4gn++w7XZzoJ pRIXkyiGksXsLm2wLGlz0SQi75h3/uxEf9nbPHpYY7yJ6N8vA7zSkqLpGJ8cNGxgBcfp P5E81+lwLeb93i0ii+D0JxPZQeoHtp9WPHWKvhEKAhR4J+upugYRq6RSoR5XKvpQdKC4 9TpUBRof9RkHCc+RCfaPWGMa2Y/NsEy11Q+5c67tVO4Dp/oMVamEZDZSSrAE6RC/L8zB 5ETw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:date:message-id:subject:from:to:cc; bh=SBwC8TW2fmYCzxVoydFULKMl/6Dg/Yr5FYMyMX9q2zc=; b=Akt/px/F44CAuBZxOIsfxfL+pAijWnQNLtMJ/c0ZFpnOLM1LuVtBlN30u/Do3GSbft pOQHraTwzQWtNBea0XWLdu716VmkRmJoWnwRWEB+zh2ZfMjIbPRWR3cwRTn56+uajkJf 2ygjHCtrgAzCZleTosLP3z+ftsT6jOtyCFUaB9bT9v1qs8qv54BG3MQLTC0EdbNYTD+/ t/n2wZhccJMMQwhhxsur+agclmS9RBXCO979WEkb+FXQGyyTVy0P8FsdBrnGk9SmD+pQ GF/KEywmj2dEzgVPjzKpd4W8c1ZmBQx+kh8y7fQ4jgYGD7AXkdT1KrI1HbUuYQRhB27R 74wg== X-Gm-Message-State: AOUpUlHpbw0ZXihhu/EqvSH9RQQR/vlFGws8x0d+Od5UlXK4bMvFXToD WXIgVQvfPtHEH507NJJh/2RQLqKeUBlD7GCEgnAR2515QnBrv1aRnj1nF5iJwWZCyi0ICt+zjfJ gOTSiuJWRdwAZ5AB3J84j9fr2IwTEeFIQsoU5fPjh3mvSdOA9j9hv5RP8jZFb+oXFxJ2d MIME-Version: 1.0 X-Received: by 2002:a24:ed87:: with SMTP id r129-v6mr1699469ith.32.1531440343336; Thu, 12 Jul 2018 17:05:43 -0700 (PDT) Date: Thu, 12 Jul 2018 17:05:03 -0700 Message-Id: <20180713000503.210700-1-modmaker@google.com> X-Mailer: git-send-email 2.18.0.203.gfac676dfb9-goog From: Jacob Trimble To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH] avformat/matroskadec: Parse encryption init info from streams. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Jacob Trimble Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Jacob Trimble --- libavformat/matroskadec.c | 43 +++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 1ded431b80..bfef329e59 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2080,7 +2080,8 @@ static int matroska_parse_tracks(AVFormatContext *s) int extradata_offset = 0; uint32_t fourcc = 0; AVIOContext b; - char* key_id_base64 = NULL; + char* key_id = NULL; + int key_id_size = 0; int bit_depth = -1; /* Apply some sanity checks. */ @@ -2133,14 +2134,8 @@ static int matroska_parse_tracks(AVFormatContext *s) if (encodings[0].encryption.key_id.size > 0) { /* Save the encryption key id to be stored later as a metadata tag. */ - const int b64_size = AV_BASE64_SIZE(encodings[0].encryption.key_id.size); - key_id_base64 = av_malloc(b64_size); - if (key_id_base64 == NULL) - return AVERROR(ENOMEM); - - av_base64_encode(key_id_base64, b64_size, - encodings[0].encryption.key_id.data, - encodings[0].encryption.key_id.size); + key_id = encodings[0].encryption.key_id.data; + key_id_size = encodings[0].encryption.key_id.size; } else { encodings[0].scope = 0; av_log(matroska->ctx, AV_LOG_ERROR, @@ -2198,14 +2193,40 @@ static int matroska_parse_tracks(AVFormatContext *s) st = track->stream = avformat_new_stream(s, NULL); if (!st) { - av_free(key_id_base64); return AVERROR(ENOMEM); } - if (key_id_base64) { + if (key_id) { + AVEncryptionInitInfo *init_info; + uint8_t *side_data; + size_t side_data_size; + const int b64_size = AV_BASE64_SIZE(key_id_size); + char *key_id_base64 = av_malloc(b64_size); + if (!key_id_base64) + return AVERROR(ENOMEM); + av_base64_encode(key_id_base64, b64_size, key_id, key_id_size); + /* export encryption key id as base64 metadata tag */ av_dict_set(&st->metadata, "enc_key_id", key_id_base64, 0); av_freep(&key_id_base64); + + + /* Convert the key ID to a generic encryption init info */ + init_info = av_encryption_init_info_alloc(/* system_id_size */ 0, /* num_key_ids */ 1, + /* key_id_size */ key_id_size, /* data_size */ 0); + if (!init_info) + return AVERROR(ENOMEM); + memcpy(init_info->key_ids[0], key_id, key_id_size); + side_data = av_encryption_init_info_add_side_data(init_info, &side_data_size); + av_encryption_init_info_free(init_info); + if (!side_data) + return AVERROR(ENOMEM); + ret = av_stream_add_side_data(st, AV_PKT_DATA_ENCRYPTION_INIT_INFO, + side_data, side_data_size); + if (ret < 0) { + av_free(side_data); + return ret; + } } if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC") &&