From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 961271FF0B0 for ; Tue, 10 Nov 2026 10:01:27 +0100 (CET) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 32B4321429; Tue, 10 Nov 2026 10:01:27 +0100 (CET) Message-ID: Date: Tue, 10 Nov 2026 10:01:21 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH proxmox-backup] pbs-key-config: ensure password-protected key is long enough To: =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= , pbs-devel@lists.proxmox.com References: <20261105110750.805444-1-f.gruenbichler@proxmox.com> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <20261105110750.805444-1-f.gruenbichler@proxmox.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1794301282383 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.431 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: 7NUPOUTNABFESB7KNDCQ365FVBMMAGP4 X-Message-ID-Hash: 7NUPOUTNABFESB7KNDCQ365FVBMMAGP4 X-MailFrom: c.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Backup Server development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: On 11/5/26 12:07 PM, Fabian Grünbichler wrote: > while openssl fails if provided an empty slice, the resulting error message > points at the password instead of the key. checking for at least one byte of > data ensures plain and password-protected keys are distinguished. > > Signed-off-by: Fabian Grünbichler > --- > pbs-key-config/src/lib.rs | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/pbs-key-config/src/lib.rs b/pbs-key-config/src/lib.rs > index 7b87b4ea9..0cffdf008 100644 > --- a/pbs-key-config/src/lib.rs > +++ b/pbs-key-config/src/lib.rs > @@ -211,7 +211,7 @@ impl KeyConfig { > > let derived_key = kdf.derive_key(&passphrase)?; > > - if raw_data.len() < 32 { > + if raw_data.len() < EXPECTED_KEY_LEN + 1 { > bail!("Unable to decrypt key - short data"); > } > let iv = &raw_data[0..16]; +1 for the check, should this really use the EXPECTED_KEY_LEN constant though? After all the first 32 bytes here are the IV and tag, not really the key data... So either we have constants for these as well or stick to the plain numeric values?