pub struct PaseSessionKeys {
pub ke: [u8; 16],
pub i2r_key: [u8; 16],
pub r2i_key: [u8; 16],
pub attestation_key: [u8; 16],
}Expand description
Session keys produced by a completed PASE handshake (spec §3.10.7).
Contains the 16-byte shared secret Ke (TT_HASH[16..32]) and the
three per-session keys derived from it via HKDF "SessionKeys".
§Key layout (matter.js NodeSession.ts, commissioner = initiator)
blob = HKDF-SHA256(Ke, salt=[], "SessionKeys", 48)
i2r_key = blob[0..16] (initiator→responder; encrypt for commissioner)
r2i_key = blob[16..32] (responder→initiator; decrypt for commissioner)
attestation_key = blob[32..48]§Secret hygiene
This type carries live symmetric key material. It implements
zeroize::ZeroizeOnDrop so the key bytes are wiped from memory when the
value is dropped, and its Debug impl redacts every field (printing
PaseSessionKeys { .. }) so key bytes never reach logs. Equality is
intentionally not derived: comparing session keys with the variable-time
== would be a timing side-channel, and no caller needs it (tests compare
individual byte-array fields directly).
Fields§
§ke: [u8; 16]Shared symmetric secret (Ke): TT_HASH[16..32].
This is the raw SPAKE2+ session secret. Higher layers can re-derive
i2r_key, r2i_key, and attestation_key from this alone.
i2r_key: [u8; 16]Initiator-to-responder (commissioner → device) encryption key.
r2i_key: [u8; 16]Responder-to-initiator (device → commissioner) decryption key.
attestation_key: [u8; 16]Attestation challenge key (used for device attestation in commissioning).
Trait Implementations§
Source§impl Clone for PaseSessionKeys
impl Clone for PaseSessionKeys
Source§fn clone(&self) -> PaseSessionKeys
fn clone(&self) -> PaseSessionKeys
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more