matter-commissioning 0.3.1

Matter commissioning state machine: setup payload, attestation, NOC issuance, network commissioning.
Documentation
//! 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.

#![forbid(unsafe_code)]

pub mod commands;
pub mod csr;
pub mod error;
pub mod fabric;
pub mod issuer;

pub use commands::{
    decode_attestation_response, decode_certificate_chain_response, decode_csr_response,
    decode_noc_response, encode_add_noc, encode_add_trusted_root, encode_attestation_request,
    encode_certificate_chain_request, encode_csr_request, encode_update_noc, CertChainType,
    CertificateChainResponse, CsrResponse, NocResponse,
};
pub use csr::{
    parse_and_verify_csr, parse_nocsr, verify_csr_response, NocsrElements, ParsedCsr, VerifiedCsr,
};
pub use error::{NocError, NocRng, SystemNocRng};
pub use fabric::FabricRecord;
pub use issuer::{issue_icac, issue_noc};