mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-29 09:31:17 -07:00
The gnutls bbappend builds GnuTLS with --enable-ktls and installs /etc/gnutls/config with ktls = true, so after the handshake the kernel seals and opens forgectrl's HTTPS records (the kernel side is meta-openglow's CONFIG_TLS and patch 0016). It also backports GnuTLS dc016daf: 3.8.4 hands the kernel the record sequence number where a TLS 1.2 ChaCha20-Poly1305 connection's IV belongs, so every such connection failed the kernel's first decryption. forgectrl is the only program on the image that links GnuTLS. forgectrl.tls-records, in its own module (suite/tlsrec.py), reads the result from the outside with openssl s_client on loopback: a desktop offer (AES-GCM first) gets ChaCha20-Poly1305 over TLS 1.3 and 1.2 and the kernel takes both directions' keys; an AES-128-GCM-only offer, three times over each protocol, gets it, the kernel takes its keys, and the CAAM's job-ring interrupt counts the records; a TLS 1.2 CBC-only offer connects and stays in GnuTLS (the control for the kernel's counters); every copy of the panel page equals the plain-HTTP copy byte for byte, with no decrypt error; the kernel's drivers are rfc7539(chacha20-neon,poly1305-neon) and ctr-aes-caam with ghash-ce. Proof: on the image before these fixes the test failed on both bugs it names (the TLS 1.2 ChaCha20 page arrived empty with a decrypt error; the AES-GCM pages arrived damaged); on image 20260927224418 it passes. The unit suite (500 tests) and the coverage lint (0 uncovered paths) pass on the host.
43 lines
1.5 KiB
Diff
43 lines
1.5 KiB
Diff
From dc016daf1af41d0285c61d3c65332b43d0ca577a Mon Sep 17 00:00:00 2001
|
|
From: Alexander Sosedkin <asosedkin@redhat.com>
|
|
Date: Tue, 3 Mar 2026 19:47:25 +0100
|
|
Subject: [PATCH] ktls: fix ChaCha20-Poly1305 IV passing for TLS 1.2
|
|
|
|
Upstream-Status: Backport [https://gitlab.com/gnutls/gnutls/-/commit/dc016daf1af41d0285c61d3c65332b43d0ca577a]
|
|
|
|
Signed-off-by: Alexander Sosedkin <asosedkin@redhat.com>
|
|
---
|
|
lib/system/ktls.c | 6 ++----
|
|
1 file changed, 2 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/lib/system/ktls.c b/lib/system/ktls.c
|
|
index a4c2a60df0..d531cfb85a 100644
|
|
--- a/lib/system/ktls.c
|
|
+++ b/lib/system/ktls.c
|
|
@@ -679,10 +679,9 @@ int _gnutls_ktls_set_keys(gnutls_session_t session,
|
|
assert(cipher_key.size ==
|
|
TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE);
|
|
|
|
- /* for TLS 1.2 IV is generated in kernel */
|
|
if (version == GNUTLS_TLS1_2) {
|
|
crypto_info.info.version = TLS_1_2_VERSION;
|
|
- memcpy(crypto_info.iv, seq_number,
|
|
+ memcpy(crypto_info.iv, iv.data,
|
|
TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE);
|
|
} else {
|
|
crypto_info.info.version = TLS_1_3_VERSION;
|
|
@@ -854,10 +853,9 @@ int _gnutls_ktls_set_keys(gnutls_session_t session,
|
|
assert(cipher_key.size ==
|
|
TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE);
|
|
|
|
- /* for TLS 1.2 IV is generated in kernel */
|
|
if (version == GNUTLS_TLS1_2) {
|
|
crypto_info.info.version = TLS_1_2_VERSION;
|
|
- memcpy(crypto_info.iv, seq_number,
|
|
+ memcpy(crypto_info.iv, iv.data,
|
|
TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE);
|
|
} else {
|
|
crypto_info.info.version = TLS_1_3_VERSION;
|
|
--
|
|
GitLab
|