From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8091F46BD2 for ; Tue, 4 Jul 2023 23:26:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9CFA868C64F; Wed, 5 Jul 2023 02:26:35 +0300 (EEST) Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 039DB68C18D for ; Wed, 5 Jul 2023 02:26:29 +0300 (EEST) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-1b055511b85so5318559fac.2 for ; Tue, 04 Jul 2023 16:26:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688513187; x=1691105187; 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=GAFsK3nX/0J6E2X9HLMb+RWA+lZIIPKz0rbljCphs+Q=; b=f2uiMaNtcQqzWFhT7ikh7VQURvKzpfhL47jbtNTJbrqWPLFjn0cxYoWINxO4rjivkS OKzCb7fmXYHT9SUUh0p379ovj5jiRrxaQnOUH2cPAHsAS6tiQAwUjlDEjLLvZfACidhA 4lau9eS2Ca9NHDBARWRO/YprjvX2tnQgIXb5Is8I49W9GegpKwURsToHsqkIpfZ8UeHb KBFFfeuAbVM8lzO4Y+pfcofxlOyC6hpsgO2CCkyh7qaBZM+P+HDD8CwarcaJbgj31T2X LZ97X7ll2BNHf4lxkL3ovZGOReb9aMe3dE2VvARyLM8/jZTk7tHkrYfR1XLiH6scQ+Jb ZoPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688513187; x=1691105187; 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=GAFsK3nX/0J6E2X9HLMb+RWA+lZIIPKz0rbljCphs+Q=; b=e7GTnvGKrZGGCLO1ZYRpESgPlanSnOPb3HKbvSJGWKWM1xOUl1NKo+Tl22myMocI30 obrKRmTh01P6BblBe6itZYGhDiI1IWaojyaBmTyESEQFfnd91WDnt0AdZ92ySm6TF0L3 w1TlxTu/+V3glIM8cwhXH5LqIXoRM//jD3V12+Uj44KQPXG9DPR87iZygolwJAxiI+C9 yChKCcW1zXvg32NnuFCkBB3EV8wQ4ERf1TUrjZva48NL4mnC+GgLA9jbdXE1fzYvV4Dk kzaF4GUCXLLrbmG54EJHTvbgWUHqQMytne+VN2cVA8/R82XwliK+pzozC8vTpJoxYfzS EUig== X-Gm-Message-State: AC+VfDztmHLCqzjAqkA/ShtkPsQ0rcCqzSgcvkkzIpf2Hg/xUe1n3Ind 9NweZOvlr0SkYFZl4usLmfP474pQ6so= X-Google-Smtp-Source: APBJJlHkHy1atna1Dr5byqBP0XcYnnYIUSACoDtGYZl0X7GIz+Q+kYI9BGF+eYOYzaFMpI+ENotXOw== X-Received: by 2002:a05:6870:7f85:b0:1b0:3075:2f9d with SMTP id aw5-20020a0568707f8500b001b030752f9dmr12322373oac.34.1688513186937; Tue, 04 Jul 2023 16:26:26 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id er28-20020a056870c89c00b0019ed19a8659sm14507303oab.8.2023.07.04.16.26.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 16:26:26 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Jul 2023 20:26:13 -0300 Message-ID: <20230704232614.2785-2-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230704232614.2785-1-jamrial@gmail.com> References: <20230704232614.2785-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 2/3] avutil/random_seed: add av_random_bytes() 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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 | 33 ++++++++++++++++++++++----------- libavutil/random_seed.h | 12 ++++++++++++ 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/libavutil/random_seed.c b/libavutil/random_seed.c index a51149235b..f5c291263e 100644 --- a/libavutil/random_seed.c +++ b/libavutil/random_seed.c @@ -46,7 +46,7 @@ #define TEST 0 #endif -static int read_random(uint32_t *dst, const char *file) +static int read_random(uint8_t *dst, size_t len, const char *file) { #if HAVE_UNISTD_H FILE *fp = avpriv_fopen_utf8(file, "r"); @@ -54,10 +54,10 @@ static int read_random(uint32_t *dst, const char *file) if (!fp) return AVERROR_UNKNOWN; - err = fread(dst, 1, sizeof(*dst), fp); + err = fread(dst, 1, len, fp); fclose(fp); - if (err != sizeof(*dst)) + if (err != len) return AVERROR_UNKNOWN; return 0; @@ -121,27 +121,38 @@ 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_bytes(uint8_t* buf, size_t len) { - uint32_t seed; + int err; #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 (!read_random(&seed, "/dev/urandom")) - return seed; - return get_generic_seed(); + err = read_random(buf, len, "/dev/urandom"); + + return err; +} + +uint32_t av_get_random_seed(void) +{ + uint32_t seed; + + if (av_random_bytes((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..8df37da8f8 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_bytes(uint8_t *buf, size_t len); + /** * @} */ -- 2.41.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".