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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
// Copyright (c) 2026 2youg1 and the sprawling contributors
//! What a listener presents at its door, settled before a socket exists.
//!
//! Two questions are answered here and nothing else: which key this
//! serve will demand ([`key_for`]), and what the credential vault on
//! this machine really is ([`open_vault`]). Both are answered while
//! nothing is bound yet, so there is no moment in which the port is open
//! and unauthenticated.
//!
//! [`Keyed`] is an enum rather than a `String` beside a flag because its
//! three cases carry different obligations, and only a key minted for a
//! serve beyond this machine may be shown to a person. Which case applies is
//! decided by `crate::keying`, which stays pure; this module is where
//! the entropy behind a minted key is drawn, so the binary samples
//! randomness in one place and a key a third party can predict is a door
//! a third party can open.
//!
//! The point a reader most often gets wrong: [`open_vault`] reports what
//! a probe of write, read and delete found, not what configuration
//! asked for: a vault that silently forgets across a restart is
//! disclosed in the ledger at startup instead of surfacing much later as
//! an egress failure.
use ;
/// The key this serve demands at its door, and whether a person has to
/// be shown it.
///
/// The three cases carry different obligations, so they are an enum
/// rather than a `String` plus a flag: only [`Self::Minted`] is shown,
/// and only because nobody else has ever seen it.
/// Settles this serve's key before anything is bound.
///
/// [`crate::keying::Keying`] decides which of the three cases applies;
/// this performs the two that need entropy. Minting happens here for
/// the reason `wire::auth` states from its own side - that module
/// samples nothing, and this is where randomness for a key in this
/// binary comes from.
///
/// The result is what `wire::decide_bind` will be asked about, so every
/// address arrives at the socket already carrying a key: there is no
/// moment in which the port is open and unauthenticated.
///
/// # Errors
/// When this machine's entropy source refuses. No key can be minted
/// safely then, and serving anyway would open the port without one.
/// One key from this machine's entropy, in the form a person could read.
/// Opens the credential vault and says what it really is.
///
/// The probe writes, reads and deletes once; whatever backend survives
/// that is the one in use, and the notice it returns is the disclosure
/// that goes in the ledger. A vault that silently forgets across a
/// restart would turn one configuration act into a later egress failure,
/// far from its cause.