From patchwork Tue May 11 12:42:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 27719 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp3943793iof; Tue, 11 May 2021 05:42:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwCw0jC3j3VJ7cwqtPD7mzjdMZDonGL9v3+LKTA8xIFWPGrm7lgHBdvUc87kMh2nzJRxYzy X-Received: by 2002:a05:6402:34c7:: with SMTP id w7mr36562377edc.42.1620736963957; Tue, 11 May 2021 05:42:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620736963; cv=none; d=google.com; s=arc-20160816; b=MDfO35rqR7mcqrjD+fsPgW5bNN3QRec4pQ2UWNHeXcmuGTCOk6cIoCmiQQU4RcvRs5 BKka72T68HkScjpvN1sF72zd7IUrvHqzmroBAzf3SJw/RYPBCl6wEYj0z97XPYVhQ7u8 FyK8TLGhswyUO5+PrMHYS9ceyEl6tUXX0HGS0UrIdqg5UzY2CRExoBQKnzWK6dPPDLLU Yti2FZlKGJdzeJY289/Ir+XNhgpyb0d9Hb2ZN5rOHa0aHANCVVU9kEUVVSfZioH+P5kz 8TbW00mZck0mZZEgLsw5fbppPN/jNN/KCK+C+v0upcd1O92wq/+SXgUVOLpDdQHtrNOY 9UPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to; bh=SrQ7CDdzi4HOLH9ZLrFnFN/SuFx7KEQ2pNSBwALGlYY=; b=Bt9ZXuOfDyj4VGy92Ea8st10sFov2sWMUwK1EdvUU/VYdfWaPNsSzjtQ6nlb/M0DSg WacJBU2Brh+AYsKVHTFHs7tU8DUEo5fIuRE9QviuPlw6Jsxl1NlTEE3kGXkswQf3pDee INSVqexga2FcvqdscRZkSZtfJCUOyR4mEnavtBNkMGi8oOj1RpujkyLHoTCRpT8tMdy+ EqFRHLcfSJB1LLqLQ6fRQnxLm/gITqiPOK97iI36zlf/gPtLQIGovpbqJo3an1Nyaf9B 6wT3CIr5UdReo4CyYILDk+w2XmlcZLdXPvN7v42qUUWib2qsApqKwjVjloUrNv/EuWjP qcNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Bppc13Wh; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w9si11590917edc.236.2021.05.11.05.42.43; Tue, 11 May 2021 05:42:43 -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=@gmail.com header.s=20161025 header.b=Bppc13Wh; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5588968026B; Tue, 11 May 2021 15:42:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3653F68026B for ; Tue, 11 May 2021 15:42:34 +0300 (EEST) Received: by mail-pj1-f46.google.com with SMTP id l10-20020a17090a850ab0290155b06f6267so151366pjn.5 for ; Tue, 11 May 2021 05:42:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=R+hZ40TNFXGJXxyIdOK/49X7AX14Df4sZ5iTaG7GVak=; b=Bppc13WhDoMxljwy8do1GbTWEIFjZbq/d/j8mZti0+nFHE4msbB9Dw8PjbQQt5bMj3 qbJ6ky+Wah7xsF9qkYfbsbjOW8qoORtbMLwxi9s3hqbo98LzPxwXAiM+uQDe3KsQoqv5 UcQWJKVIEtBknKpUkxdQtj8jl7FaDR5Z3Fu7D7KW/PhhIl+RL3/iMPUDgeslm+PGTfi5 VjE69cnhYXq40DpACi7rLLZe9+RQUtn/xVX2mbcfpKWdgWP6e+qb8UdFrZXIV2AbeFHU KuY81J0gonryqSFMQBZ5XydJkwl1X9DO4zSlbHHu4uREb3JRASNyEbRiIaFepxaAMWAh BCxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=R+hZ40TNFXGJXxyIdOK/49X7AX14Df4sZ5iTaG7GVak=; b=gPQvWRIbJHuslE49hyQSncZNNf5HMEMGXwhIaF/yatuRi8Ris4nnvsRGp5d7pjEQrd bjYHnVMvmgvppbxp1FnrMZsNSewwBlWMhcFrcDYlb1WUTaGYJ651TtRtCv/La0onsEo2 Zt37xFbNmqVVC67Lekj7o55oA5L/gTSU6ECuvB81uRdTgNnJ3BGLdZuYHOkY5FGfs29b Mkd37TCxh4Hzfom67qp4h4HOHKNNhC54FBEbf6ZZuqGFxrerNH6H+19lSNMJZwMdr85x dGXKJkGdEPgGrfK7IsKoGQdNVPO2a8KTu5q5NHuYfJPE6YFLlKQOVsebpZ4+83awAlnK c6Sw== X-Gm-Message-State: AOAM532gSPHomw9w4ZpmhQhqe2cWfpNMsGCn0ZSvxgajU3nYeN/1dhkn tkhQsFL+GUqj//cjN4UYc5evDTR8Sj0= X-Received: by 2002:a17:902:d48a:b029:ee:dc91:862 with SMTP id c10-20020a170902d48ab02900eedc910862mr30068454plg.60.1620736952001; Tue, 11 May 2021 05:42:32 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id 14sm13608597pfj.29.2021.05.11.05.42.31 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 May 2021 05:42:31 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 11 May 2021 20:42:27 +0800 Message-Id: <1620736947-4319-1-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 Subject: [FFmpeg-devel] [PATCH] avformat/hls: add macros for iv and key size X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: D9UPLDaYRd5Q From: Limin Wang Signed-off-by: Limin Wang --- libavformat/hls.c | 12 ++++++------ libavformat/hlsenc.c | 19 +++++++++---------- libavformat/internal.h | 2 ++ 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/libavformat/hls.c b/libavformat/hls.c index 8fc6924..a215c6a 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -72,7 +72,7 @@ struct segment { char *url; char *key; enum KeyType key_type; - uint8_t iv[16]; + uint8_t iv[KEYSIZE]; /* associated Media Initialization Section, treated as a segment */ struct segment *init_section; }; @@ -131,7 +131,7 @@ struct playlist { unsigned int init_sec_buf_read_offset; char key_url[MAX_URL_SIZE]; - uint8_t key[16]; + uint8_t key[KEYSIZE]; /* ID3 timestamp handling (elementary audio streams have ID3 timestamps * (and possibly other ID3 tags) in the beginning of each segment) */ @@ -374,7 +374,7 @@ static void handle_variant_args(struct variant_info *info, const char *key, struct key_info { char uri[MAX_URL_SIZE]; char method[11]; - char iv[35]; + char iv[KEY_STRING_SIZE + 2]; /* 2 -> 0x */ }; static void handle_key_args(struct key_info *info, const char *key, @@ -714,7 +714,7 @@ static int parse_playlist(HLSContext *c, const char *url, int ret = 0, is_segment = 0, is_variant = 0; int64_t duration = 0; enum KeyType key_type = KEY_NONE; - uint8_t iv[16] = ""; + uint8_t iv[KEYSIZE] = ""; int has_iv = 0; char key[MAX_URL_SIZE] = ""; char line[MAX_URL_SIZE]; @@ -1252,7 +1252,7 @@ static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg, if (seg->key_type == KEY_NONE) { ret = open_url(pls->parent, in, seg->url, &c->avio_opts, opts, &is_http); } else if (seg->key_type == KEY_AES_128) { - char iv[33], key[33], url[MAX_URL_SIZE]; + char iv[KEY_STRING_SIZE], key[KEY_STRING_SIZE], url[MAX_URL_SIZE]; if (strcmp(seg->key, pls->key_url)) { AVIOContext *pb = NULL; if (open_url(pls->parent, &pb, seg->key, &c->avio_opts, opts, NULL) == 0) { @@ -1270,7 +1270,7 @@ static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg, } ff_data_to_hex(iv, seg->iv, sizeof(seg->iv), 0); ff_data_to_hex(key, pls->key, sizeof(pls->key), 0); - iv[32] = key[32] = '\0'; + iv[KEY_STRING_SIZE - 1] = key[KEY_STRING_SIZE - 1] = '\0'; if (strstr(seg->url, "://")) snprintf(url, sizeof(url), "crypto+%s", seg->url); else diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index c43d02c..d72edcf 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -67,7 +67,6 @@ typedef enum { CODEC_ATTRIBUTE_WILL_NOT_BE_WRITTEN, } CodecAttributeStatus; -#define KEYSIZE 16 #define LINE_BUFFER_SIZE MAX_URL_SIZE #define HLS_MICROSECOND_UNIT 1000000 #define BUFSIZE (16 * 1024) @@ -85,7 +84,7 @@ typedef struct HLSSegment { unsigned var_stream_idx; char key_uri[LINE_BUFFER_SIZE + 1]; - char iv_string[KEYSIZE*2 + 1]; + char iv_string[KEY_STRING_SIZE]; struct HLSSegment *next; double discont_program_date_time; @@ -169,8 +168,8 @@ typedef struct VariantStream { char key_file[LINE_BUFFER_SIZE + 1]; char key_uri[LINE_BUFFER_SIZE + 1]; - char key_string[KEYSIZE*2 + 1]; - char iv_string[KEYSIZE*2 + 1]; + char key_string[KEY_STRING_SIZE]; + char iv_string[KEY_STRING_SIZE]; AVStream **streams; char codec_attr[128]; @@ -228,8 +227,8 @@ typedef struct HLSContext { char *key_info_file; char key_file[LINE_BUFFER_SIZE + 1]; char key_uri[LINE_BUFFER_SIZE + 1]; - char key_string[KEYSIZE*2 + 1]; - char iv_string[KEYSIZE*2 + 1]; + char key_string[KEY_STRING_SIZE]; + char iv_string[KEY_STRING_SIZE]; AVDictionary *vtt_format_options; char *method; @@ -734,8 +733,8 @@ static int do_encrypt(AVFormatContext *s, VariantStream *vs) } if (!*hls->iv_string) { - uint8_t iv[16] = { 0 }; - char buf[33]; + uint8_t iv[KEYSIZE] = { 0 }; + char buf[KEY_STRING_SIZE]; if (!hls->iv) { AV_WB64(iv + 8, vs->sequence); @@ -743,7 +742,7 @@ static int do_encrypt(AVFormatContext *s, VariantStream *vs) memcpy(iv, hls->iv, sizeof(iv)); } ff_data_to_hex(buf, iv, sizeof(iv), 0); - buf[32] = '\0'; + buf[KEY_STRING_SIZE - 1] = '\0'; memcpy(hls->iv_string, buf, sizeof(hls->iv_string)); } @@ -1674,7 +1673,7 @@ static int hls_start(AVFormatContext *s, VariantStream *vs) AVDictionary *options = NULL; const char *proto = NULL; int use_temp_file = 0; - char iv_string[KEYSIZE*2 + 1]; + char iv_string[KEY_STRING_SIZE]; int err = 0; if (c->flags & HLS_SINGLE_FILE) { diff --git a/libavformat/internal.h b/libavformat/internal.h index d57e63c..2aefac0 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -28,6 +28,8 @@ #include "os_support.h" #define MAX_URL_SIZE 4096 +#define KEYSIZE 16 +#define KEY_STRING_SIZE (KEYSIZE * 2 + 1) /** size of probe buffer, for guessing file type from file contents */ #define PROBE_BUF_MIN 2048