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
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright 2026 Jay Gowdy
// SPDX-License-Identifier: MIT
//! Hardware-enforced Windows Hello consent via the Win32 WebAuthn
//! platform authenticator.
//!
//! ## Why this crate exists
//!
//! `enclaveapp-windows::hello` calls `UserConsentVerifier`, which is
//! a *user-mode UI* gate -- a `Verified` return is just a Boolean
//! that an attacker with code execution as the user can hook and
//! overwrite. The TPM key on the Microsoft Platform Crypto Provider
//! has no hardware UI gate when Hello is enrolled (we drop
//! `NCRYPT_UI_PROTECT_KEY_FLAG` to avoid the legacy CryptUI password
//! dialog), so the only thing keeping a malicious local process from
//! signing is the agent's own check of that Boolean.
//!
//! This crate provides the *hardware-enforced* path. The Win32
//! `WebAuthn.dll` platform authenticator generates and stores
//! ECDSA P-256 keypairs *inside the TPM* via the same NGC infra
//! that backs Windows Hello for Business, and `GetAssertion` won't
//! produce a signature without the OS-mediated Hello gesture
//! actually firing. There is no user-mode "fake yes" that yields
//! a valid signature.
//!
//! ## What this is NOT
//!
//! This is not a passkey manager. The credentials we produce are
//! addressed by `credential_id` (opaque blob the TPM emits), not by
//! "the user's passkey for example.com" -- although Windows still
//! shows the "save your passkey" UX once at make-time because that's
//! the canonical platform-authenticator enrollment flow.
//!
//! ## SSH-SK wire format
//!
//! Output is shaped to feed `sk-ecdsa-sha2-nistp256@openssh.com`,
//! the OpenSSH 8.2+ FIDO2-SK key type. The signed payload is
//! `authenticator_data || SHA-256(client_data)`; the SSH verifier
//! reconstructs the same shape. Caller passes the raw SSH-side
//! sign payload as `client_data`; Win32 hashes it with SHA-256 and
//! signs the result. See `PROTOCOL.u2f` in OpenSSH for the full
//! verification rules.
//!
//! ## Cross-platform
//!
//! This crate compiles to no-op stubs on non-Windows targets so
//! workspace-wide builds don't break. Calls return `NotAvailable`.
pub use ;
pub use ;
/// Result of a successful `make_credential` call.
/// Result of a successful `get_assertion` call.
/// Errors from the WebAuthn platform-authenticator path.
/// Result alias used throughout the crate.
pub type Result<T> = Result;