From patchwork Tue Jul 4 20:41:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42435 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1e:b0:12b:9ae3:586d with SMTP id c30csp5337863pzh; Tue, 4 Jul 2023 13:41:52 -0700 (PDT) X-Google-Smtp-Source: APBJJlE1KUXpuHkm0EoekZYSpFI1rpQy3AOsd6fC06FD/WcT8QP9nsO+BbFmJixin6Py/wevQvtO X-Received: by 2002:aa7:cb95:0:b0:51e:1bf3:f4ac with SMTP id r21-20020aa7cb95000000b0051e1bf3f4acmr2240981edt.27.1688503312716; Tue, 04 Jul 2023 13:41:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688503312; cv=none; d=google.com; s=arc-20160816; b=wbh5/tZ7I2TNo2QWHdKnVudNoejLLWgtk9XfyDPrscWKscbJneRNUxfG9k46yjBwyn WjFFlSDW68MXt+X6Xqo4lbygQNsUht7Ilgu76l49sJfQBASYFNxt3R+BOFPIUHQzxS1j HLWigyDT5MVaO4x1Ha5G+EDXtdgzb3vOeX+ezwe8D+uJV6McYkqFdJZ6Y5x71tfaGDuX ZbAyuX0GcSLfjE1CGre9Z/VgiTyMWf6jq7xXh6Xajxs4IeJa0Ra2BA7AY5qtlipeWiU+ 5c0qtl113hqBF9L47OpVHdNkSmtDsvFaYv7IOgm+UYueIhjR7eLWghhFabSpDQ44hIcG TlCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=ELddZChI38i3099qZDu9TXVXE9NIpp4XfxDhj1xHw/I=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=tSV43nz01GezvVPnn2BMgTOLmRA+K5iEKl+qdvtKRcnosvqRG5LNPqaf8oiuZbBqlZ 0NFuKUdVvqdjJjqyZaoDHPU4rfTvQSP+Fdxr8SZezQRalXoW9INb6lRRGhputDuUqZP7 QVh4wMQhsUTkX89vmnZ7Gtt3bnz0x+7GLlRJHAm4PZ2VGCtv7wSAWfT95N4YvpbuEVlR V9LrQeL1mDH4JOYNQiT2wV+kOl5DhjaoZwiD6+FXce9NEvCNmS+hUwPwD20kKm0FNBTO jRwkreVzKgmtpyRRgD2sqkjbzXOpCp7EpChF7cnZNG9II8D1PMkqOPTO4Gm1LXRGz5TB /MKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=b+lCZYDc; 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 n3-20020aa7c783000000b0051e1a9b7defsi1729449eds.77.2023.07.04.13.41.52; Tue, 04 Jul 2023 13:41:52 -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=20221208 header.b=b+lCZYDc; 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 B973568C63A; Tue, 4 Jul 2023 23:41:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f49.google.com (mail-oa1-f49.google.com [209.85.160.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7186F68C52E for ; Tue, 4 Jul 2023 23:41:42 +0300 (EEST) Received: by mail-oa1-f49.google.com with SMTP id 586e51a60fabf-19674cab442so5285350fac.3 for ; Tue, 04 Jul 2023 13:41:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688503300; x=1691095300; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=0w58eIFbTXHLvPpOFxSqsoaxrUZZ6g9+uoNqSMHUjHc=; b=b+lCZYDcA3jjZcb975FYC03vLUdZiCfMzWW3FrF1QRnOEGJ1VfMZRYdFgG0dqdzAPW miSSkeoFJo/9h/Z3WTlBer2NKkGp74F7FFEFPDUpRMDDVkePCnmYd6BsJxKWc29Feygt 36d0ooISGBZ7qgdWnXODjRoL744+kM8sMsCNlfBIaCVp7ovakycAMGZ7x68tivaROfqU 9EvNM/Gcx9Nz73bWycCiRLdvmS3MzYcYAFmMhJbEEVfdygmBS5e73hSeiC3lfitc3BEp u2KrHQPS8wnkRGY7IcNUyTcPzoSOd+Al9Bwr90GhK+A475I08m3D+qVp3/O4YevnhcYO VLWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688503300; x=1691095300; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0w58eIFbTXHLvPpOFxSqsoaxrUZZ6g9+uoNqSMHUjHc=; b=f0bUNJEOZtoFL+Rn6oSWzcX0mByXraU7hB4MX14WaZtq6OE9/8MJb6MGP5t1FqqKIG Cx0rnOjrnYJNWYiYWmBQXqThOHVj/x9I/9sWXgg5+tTzU8cCeH3Rq/Z4MVrtS6oX8la+ hzG0CMzA9xrXaNon28ZHtTRcxcBUc37tALNM/XdeS4qt6+PKkttfR5Z2rbkCLlrQfuIF mcJ/hZwzJkG9dvBxk0JvgYeovLkWguknms5fFCXisOl8XC4BO529OSHPK7aD2cKnbo/9 gWdJ6UIkjOls0YT1jz2JD3bmZY4aCjaFXhB0vQAzeOVOGr0Sr80SzVgZjFENE89mq8pv nxdw== X-Gm-Message-State: ABy/qLauYSSlKhPUzEToVQ5aejCXrjJggf/V/Go5mPg7awmSqoe5bwxr jKQLoUFqhDYVG/+HpVaYhptBnXVHKOc= X-Received: by 2002:a05:6870:ab0c:b0:1b3:d51a:4404 with SMTP id gu12-20020a056870ab0c00b001b3d51a4404mr2263393oab.56.1688503299817; Tue, 04 Jul 2023 13:41:39 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id m16-20020a056870a41000b001a68feb9440sm14369827oal.9.2023.07.04.13.41.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 13:41:39 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Jul 2023 17:41:27 -0300 Message-ID: <20230704204128.2510-1-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/2] avutil/random_seed: add av_random() 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: KLwznwncT6FN Uses the existing code for av_get_random_seed() to return a buffer with cryptographically secure random data, or an error if none could be generated. Signed-off-by: James Almer --- libavutil/random_seed.c | 54 ++++++++++++++++++++++++++++------------- libavutil/random_seed.h | 12 +++++++++ 2 files changed, 49 insertions(+), 17 deletions(-) diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c index 66dd504ef0..0ed8f89cc6 100644 --- a/libavutil/random_seed.c +++ b/libavutil/random_seed.c @@ -46,20 +46,22 @@ #define TEST 0 #endif -static int read_random(uint32_t *dst, const char *file) -{ #if HAVE_UNISTD_H +static int read_random(uint8_t *dst, size_t len, const char *file) +{ int fd = avpriv_open(file, O_RDONLY); - int err = -1; + ssize_t err = -1; + if (len > SSIZE_MAX) + return -1; if (fd == -1) return -1; - err = read(fd, dst, sizeof(*dst)); + err = read(fd, dst, len); close(fd); + if (err == -1) + return AVERROR(errno); - return err; -#else - return -1; + return err == len; #endif } @@ -118,29 +120,47 @@ static uint32_t get_generic_seed(void) return AV_RB32(digest) + AV_RB32(digest + 16); } -uint32_t av_get_random_seed(void) +int av_random(uint8_t* buf, size_t len) { - uint32_t seed; + int err = AVERROR_UNKNOWN; #if HAVE_BCRYPT BCRYPT_ALG_HANDLE algo_handle; NTSTATUS ret = BCryptOpenAlgorithmProvider(&algo_handle, BCRYPT_RNG_ALGORITHM, MS_PRIMITIVE_PROVIDER, 0); if (BCRYPT_SUCCESS(ret)) { - NTSTATUS ret = BCryptGenRandom(algo_handle, (UCHAR*)&seed, sizeof(seed), 0); + NTSTATUS ret = BCryptGenRandom(algo_handle, (PUCHAR)buf, len, 0); BCryptCloseAlgorithmProvider(algo_handle, 0); if (BCRYPT_SUCCESS(ret)) - return seed; + return 0; } #endif #if HAVE_ARC4RANDOM - return arc4random(); + arc4random_buf(buf, len); + return 0; +#endif + +#if HAVE_UNISTD_H + err = read_random(buf, len, "/dev/urandom"); + if (err == 1) + return 0; + err = read_random(buf, len, "/dev/random"); + if (err == 1) + return 0; + if (err == 0) + err = AVERROR_UNKNOWN; #endif - if (read_random(&seed, "/dev/urandom") == sizeof(seed)) - return seed; - if (read_random(&seed, "/dev/random") == sizeof(seed)) - return seed; - return get_generic_seed(); + return err; +} + +uint32_t av_get_random_seed(void) +{ + uint32_t seed; + + if (av_random((uint8_t *)&seed, sizeof(seed)) < 0) + return get_generic_seed(); + + return seed; } diff --git a/libavutil/random_seed.h b/libavutil/random_seed.h index 0462a048e0..ce982bb82f 100644 --- a/libavutil/random_seed.h +++ b/libavutil/random_seed.h @@ -36,6 +36,18 @@ */ uint32_t av_get_random_seed(void); +/** + * Generate cryptographically secure random data, i.e. suitable for use as + * encryption keys and similar. + * + * @param buf buffer into which the random data will be written + * @param len size of buf in bytes + * + * @retval 0 success, and len bytes of random data was written into buf, or + * a negative AVERROR code if random data could not be generated. + */ +int av_random(uint8_t* buf, size_t len); + /** * @} */ From patchwork Tue Jul 4 20:41:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42436 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1e:b0:12b:9ae3:586d with SMTP id c30csp5337920pzh; Tue, 4 Jul 2023 13:42:01 -0700 (PDT) X-Google-Smtp-Source: APBJJlHrXkyAn0p0M3C3/z5oU3LuCsFY+rda5nWDor41rSZQd38W4J27XY6oa9vuJ7BHWgf9/AII X-Received: by 2002:a05:6512:33c9:b0:4fb:5dd5:715c with SMTP id d9-20020a05651233c900b004fb5dd5715cmr12939150lfg.4.1688503321615; Tue, 04 Jul 2023 13:42:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688503321; cv=none; d=google.com; s=arc-20160816; b=a+YHFtYZy0PoNS3jScnene8Gk8z3+Q5RQcH4fcQfCUWlMqpFsF6mp47Ts6tQsOZumP RbqI8VWfoPSJsrbq++vxDuzbw/ANMYBCDOrNO2rnVoMFGHgoslJ/VF+3kriTWggt0lGw 2yrHSsUxJ8nrsL0HxnnPi2HtPFM1hpy9UNge+r2tHHcG3JJtuwxvfeFiVJi3Xln2uYCc DsDR31/bDDP0xPwkXi/Vfk5z95Z8F68wQOzzIfYgdQbWAJnoNUaKPG+35v4PoqpcI+8G FO8Wj7SfTOxdcp3EpoFyI1V9vWBHqFGNMC4miZdHQhURlYmpjebeYspP/9zL/qr1Wd8Y Vk3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=copiBG+pw6rBaDA/KNGrZt97lXrQaoaWwiRk073ClO8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=PmjxCfKQw6n5b+KX42OnadzZ0FC2y3q8HESKLr4EtRYoqd791aHunpVWo9/fdpazUy jMyEfxnvXHQNyoMlah5ZKmjfiJvpapRXFfa4LuBKjimavFxrtCHdR0p8Jn1JZpPQoviG b2gwfkJKFwoDNKEMpuHavw6+ShdeGaGohsggNg6tQ2xRCYlOCmAVAukBwEGteQpzcK3q XzCDTpDYeyh63wjPTVlamiCcY9qMheNR+DjttR1ZKTp5ETLI4xT1qsOVavMjgEUK8FuB x6S73cU+2igEKHY3Lb+YGagjqScVByOJb4bjuW9oIkURMPZEyGgKN/kl3xV3RRMNKwsv n0TQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=P29bUI+P; 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 b2-20020aa7dc02000000b0051a595dc64bsi12457826edu.105.2023.07.04.13.42.01; Tue, 04 Jul 2023 13:42:01 -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=20221208 header.b=P29bUI+P; 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 CD45768C60F; Tue, 4 Jul 2023 23:41:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f50.google.com (mail-oa1-f50.google.com [209.85.160.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A9A6668C52E for ; Tue, 4 Jul 2023 23:41:42 +0300 (EEST) Received: by mail-oa1-f50.google.com with SMTP id 586e51a60fabf-1b060bce5b0so5599225fac.3 for ; Tue, 04 Jul 2023 13:41:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688503301; x=1691095301; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=VcqXb1UuSYCkDbLDRivMpe7OJTdy32xrCbn7r5XubR0=; b=P29bUI+P5H3zm3vsexGCabdb8sT4S5FhFJ9FGPbQzOwsnCllTikH8jhLSi9Yajflhl Mdp203mgAhbHKFzfS8MXZHrbbKXpshtoIUx1bbtBjL/1XmW/h1NFgndlJW5pMQpe7HbO rn2TUwDY+dP5JRXSMn4U/o+CHzaShaa0pbCxNL9JgboZmGjw+x4u2Ozle6C6E0dSTsR4 m36a41c2RVzpSXfwDzcTwvZTWOguFtB7RiZBNn4nWYYVl6CKASwzl6Pg8ijpMZ/jvI9M WAD7Af2EeT6GLwdYkctU7zPbsjrlcE7IZepCQlAraH42zZcwV1/V9wF4xlzGWweHk1BQ A4yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688503301; x=1691095301; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VcqXb1UuSYCkDbLDRivMpe7OJTdy32xrCbn7r5XubR0=; b=Ep7I0OsJnR+es4UU5m9SaUi0awB2s31dNkP/NBCV2SHG87IiQ/SeHG5F8Epv4JR6Zs wC/uUm8XjHAqDk9MxeYlInLwmPVyeTMqTZGhHnal/0kUBu31+BoKfi+TcA7BKef3bjXp 1tUi9B8/vbzhfxROa2V8rQLhAWh2v/UAYHdV8L5kmfZb5hKQjep7/VcFovq3JJ6OpR/q 17YRNOJjsLYp7FIwl5OjbTisfoQ8CUbNoWqYbdBARvxO1bwDq6ogRPeerR09h7lrJCAF F+P/Kh5OlfmYsBfrDXCrrNNfj2O4B31IgFlJnoeftQMupxmhd6ZsmrTInwDzoGpg6SYh 7bWA== X-Gm-Message-State: ABy/qLbdsB/TYvzIQsggAeP6ros0TYHbfUvzMKLD//mCVPfqKOudJOcj m4vYMmZ99U/mHK50KgaCV3GMcrfndT0= X-Received: by 2002:a05:6871:67cb:b0:1b3:9e41:de07 with SMTP id yb11-20020a05687167cb00b001b39e41de07mr5881877oab.36.1688503301005; Tue, 04 Jul 2023 13:41:41 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id m16-20020a056870a41000b001a68feb9440sm14369827oal.9.2023.07.04.13.41.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 13:41:40 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Jul 2023 17:41:28 -0300 Message-ID: <20230704204128.2510-2-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230704204128.2510-1-jamrial@gmail.com> References: <20230704204128.2510-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/2] avutil/random_seed: add support for gcrypt and OpenSSL as source of randomness 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: b1gKX2PT4LKc Signed-off-by: James Almer --- configure | 2 +- libavutil/random_seed.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 107d533b3e..d6e78297fe 100755 --- a/configure +++ b/configure @@ -3892,7 +3892,7 @@ avfilter_deps="avutil" avfilter_suggest="libm stdatomic" avformat_deps="avcodec avutil" avformat_suggest="libm network zlib stdatomic" -avutil_suggest="clock_gettime ffnvcodec libm libdrm libmfx opencl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic" +avutil_suggest="clock_gettime ffnvcodec gcrypt libm libdrm libmfx opencl openssl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic" postproc_deps="avutil gpl" postproc_suggest="libm stdatomic" swresample_deps="avutil" diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c index 0ed8f89cc6..363297bae8 100644 --- a/libavutil/random_seed.c +++ b/libavutil/random_seed.c @@ -30,6 +30,11 @@ #include #include #endif +#if CONFIG_GCRYPT +#include +#elif CONFIG_OPENSSL +#include +#endif #include #include #include @@ -152,6 +157,15 @@ int av_random(uint8_t* buf, size_t len) err = AVERROR_UNKNOWN; #endif +#if CONFIG_GCRYPT + gcry_randomize(buf, len, GCRY_VERY_STRONG_RANDOM); + return 0; +#elif CONFIG_OPENSSL + if (RAND_bytes(buf, len) == 1) + return 0; + err = AVERROR_EXTERNAL; +#endif + return err; }