1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Copyright (c) Meta Platforms, Inc. and affiliates.
//
// This source code is dual-licensed under either the MIT license found in the
// LICENSE-MIT file in the root directory of this source tree or the Apache
// License, Version 2.0 found in the LICENSE-APACHE file in the root directory
// of this source tree. You may select, at your option, one of the above-listed
// licenses.
//! Protocol output containing the SAS code and derived session key.
use PhantomData;
use Output;
use Zeroize;
use crateCipherSuite;
use crateSas;
/// Output of a completed protocol run, containing a SAS code and a session key.
///
/// The session key is derived from the full protocol transcript
/// (KEM shared secret, encapsulation key, ciphertext, and both nonces),
/// binding it to the specific session.
///
/// Both parties must compare their SAS codes out-of-band (e.g., by reading
/// digits aloud, displaying an emoji sequence). The full 32-byte SAS is
/// returned; consumers should truncate to their desired security level
/// (e.g., `&output.sas_code()[..5]` for 40-bit security).
///
/// # Security Warning
///
/// The session key **must not** be used until both parties have confirmed
/// their SAS codes match. Using the key before out-of-band verification
/// provides no authentication guarantee — an active attacker could have
/// substituted their own key material.