fix(ci): document fixed tunnel auth transcripts

This commit is contained in:
elky
2026-09-05 02:31:57 +08:00
parent 10e63507f0
commit 0097ea89ad
2 changed files with 34 additions and 0 deletions
+10
View File
@@ -100,6 +100,10 @@ pub fn tunnel_relay_payload_digest_from_hashes(
}
}
// Keep the explicit protocol arguments in this public API: their order is
// reflected in the relay authentication MAC and changing it would break
// interoperability with deployed tunnel peers.
#[allow(clippy::too_many_arguments)]
pub fn sign_tunnel_relay_request(
secret: &[u8],
sender_instance_id: &str,
@@ -126,6 +130,9 @@ pub fn sign_tunnel_relay_request(
base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(mac.finalize().into_bytes())
}
// The verifier mirrors `sign_tunnel_relay_request` field-for-field so the
// authenticated transcript remains stable across crate versions.
#[allow(clippy::too_many_arguments)]
pub fn verify_tunnel_relay_request_signature(
secret: &[u8],
sender_instance_id: &str,
@@ -162,6 +169,9 @@ pub fn verify_tunnel_relay_request_signature(
mac.verify_slice(&signature).is_ok()
}
// This helper deliberately accepts the wire fields separately to make the
// authenticated-field order visible next to the MAC construction.
#[allow(clippy::too_many_arguments)]
fn update_tunnel_relay_auth_mac(
mac: &mut Hmac<Sha256>,
sender_instance_id: &str,
@@ -227,6 +227,9 @@ pub fn sign_tunnel_security_handshake(
)
}
// These arguments are the versioned handshake transcript. Keep them explicit
// and ordered so existing clients and servers compute the same MAC.
#[allow(clippy::too_many_arguments)]
pub fn sign_tunnel_security_handshake_for_generation(
key: &str,
node_id: &str,
@@ -253,6 +256,9 @@ pub fn sign_tunnel_security_handshake_for_generation(
Ok(base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(mac.finalize().into_bytes()))
}
// The verifier preserves the legacy public signature while delegating to the
// generation-aware transcript implementation.
#[allow(clippy::too_many_arguments)]
pub fn verify_tunnel_security_handshake(
key: &str,
node_id: &str,
@@ -276,6 +282,9 @@ pub fn verify_tunnel_security_handshake(
)
}
// This mirrors the signing API exactly; the argument order is part of the
// authenticated handshake format.
#[allow(clippy::too_many_arguments)]
pub fn verify_tunnel_security_handshake_for_generation(
key: &str,
node_id: &str,
@@ -333,6 +342,9 @@ pub fn sign_tunnel_control_plane_request(
)
}
// Control-plane authentication signs these fields in this fixed order. Keep
// the public API stable instead of introducing a reordered parameter object.
#[allow(clippy::too_many_arguments)]
pub fn sign_tunnel_control_plane_request_for_generation(
key: &str,
method: &str,
@@ -359,6 +371,9 @@ pub fn sign_tunnel_control_plane_request_for_generation(
Ok(base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(mac.finalize().into_bytes()))
}
// Preserve the legacy verifier signature; it must feed the same transcript as
// the corresponding signing function.
#[allow(clippy::too_many_arguments)]
pub fn verify_tunnel_control_plane_request(
key: &str,
method: &str,
@@ -382,6 +397,9 @@ pub fn verify_tunnel_control_plane_request(
)
}
// The generation-aware verifier intentionally mirrors the signer field order,
// which is part of the control-plane wire contract.
#[allow(clippy::too_many_arguments)]
pub fn verify_tunnel_control_plane_request_for_generation(
key: &str,
method: &str,
@@ -418,6 +436,9 @@ pub fn verify_tunnel_control_plane_request_for_generation(
mac.verify_slice(&signature).is_ok()
}
// Keep the MAC input fields separate and visibly ordered to avoid accidental
// changes to the authenticated control-plane transcript.
#[allow(clippy::too_many_arguments)]
fn update_control_plane_auth_mac(
mac: &mut HmacSha256,
method: &str,
@@ -438,6 +459,9 @@ fn update_control_plane_auth_mac(
mac.update(&Sha256::digest(body));
}
// This helper encodes the handshake transcript in a fixed cryptographic order;
// grouping arguments into a struct would obscure that wire-level contract.
#[allow(clippy::too_many_arguments)]
fn update_handshake_proof_mac(
mac: &mut HmacSha256,
node_id: &str,