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
//! Node Operational Certificate (NOC) issuance.
//!
//! Milestone 6.3 of the `matter-rust` roadmap. The commissioner side of
//! Matter Core Spec §6.4 and §11.18: turn a verified device CSR
//! response into a signed NOC, then encode the `OperationalCredentials`
//! cluster command payloads (`CSRRequest`, `CSRResponse`,
//! `AddTrustedRootCertificate`, `AddNOC`, `UpdateNOC`, `NOCResponse`)
//! that move the NOC onto the device.
//!
//! # Phase status
//!
//! - **M6.3.1:** [`FabricRecord`] (RCAC keypair + self-signed root,
//! optional ICAC slots), [`NocError`], [`NocRng`] / [`SystemNocRng`].
//! `verify_attestation_response` refactored through the shared
//! [`crate::attestation::verify_dac_signed_elements`] primitive;
//! M6.2 tests still pass bit-identical.
//! - **M6.3.2:** [`csr`] — NOCSR TLV parsing + PKCS#10 self-sig
//! verification + the three-check `verify_csr_response` atomic gate.
//! [`issuer::issue_noc`] — NOC built via `matter-cert`'s public
//! `Builder` + signed via `fabric.root_signer`. 8 synthetic
//! negative-path fixtures + proptest + `CertificateChain` validation.
//! - **M6.3.3 (current; M6.3 feature-complete):** [`commands`] —
//! `OperationalCredentials` cluster `0x003E` codecs (`CSRRequest`,
//! `CSRResponse`, `AddTrustedRootCertificate`, `AddNOC`,
//! `UpdateNOC`, `NOCResponse`). `xtask capture-noc` scaffolds
//! matter.js fixture capture; the byte-parity test asserts NOC and
//! command payload bytes equal matter.js's for identical inputs
//! (skips when fixtures empty). A libfuzzer target covers
//! `parse_nocsr` and `parse_and_verify_csr` (weekly CI).
//!
//! # What's deferred past M6.3
//!
//! - **ICAC issuance.** [`FabricRecord::icac_signer`] /
//! [`FabricRecord::icac_cert`] slots exist; only `new_root_only` is
//! implemented. Real production controllers need ICAC for
//! operational-key rotation. Add `FabricRecord::new_with_icac(...)`
//! + ICAC issuance code path before v1.0 — tracked in `TODO-1.0.md`.
//! - **`ArmFailSafe` / `CommissioningComplete` / `UpdateFabricLabel`** —
//! `GeneralCommissioning` cluster, M6.4.
//! - **`NetworkCommissioning` cluster commands** — M6.5.
//! - **`FabricRecord` persistence** — M8.
//! - **End-to-end real-device commissioning** — M6.6.
//!
//! # Trust scope
//!
//! [`FabricRecord`] is in-memory only. Production callers (M8) own the
//! persistence story. The IPK generated by `new_root_only` is mixed
//! into the `AddNOC` payload (spec §11.18.5.13) and into operational
//! group-key derivation; treat it as fabric-scoped secret material.
pub use ;
pub use ;
pub use ;
pub use FabricRecord;
pub use ;