Skip to content

feat(proto-ikev2): add NWu payload and lifecycle contracts - #869

Open
VerifiedOrganic wants to merge 2 commits into
mainfrom
feat/786-nwu-ike-20260917
Open

VerifiedOrganic wants to merge 2 commits into
mainfrom
feat/786-nwu-ike-20260917

Conversation

@VerifiedOrganic

@VerifiedOrganic VerifiedOrganic commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds explicit TS 24.502 NWu payload and lifecycle contracts over the generic IKE codec. Consumers can build and decode per-family configuration/NAS endpoints, complete QoS associations, network-initiated Child-SA creation, full replacement modification and NWu-specific deletion. Caller-ordered AEAD selection produces intent without key import or backend effects.

Refs #786, #784 and #795. This scoped PR leaves authenticated MOBIKE address updates for the next change; it does not close #786 or claim external interoperability.

Behavior and evidence

  • IPv4/IPv6/dual CFG_REQUEST and correlated CFG_REPLY; conditional MOBIKE_SUPPORTED with receiver-ignored extension data, one applicable UP address, typed NAS_TCP_PORT, UP_SA_INFO and complete 5G_QOS_INFO. Additional QoS retains standard units and ignores framed receiver-ignored fields. Caller bounds and duplicate policy are explicit.
  • CREATE_CHILD_SA enforces original IKE responder initiation, all-packet selectors, complete proposal/Nonce/KE shape and response correlation. AEAD preference follows the caller list before peer proposal order, with no default suite, separate integrity or fallback.
  • Modification replaces the entire association and distinguishes empty acceptance, error rejection and ambiguous timeout. NWu Child Delete requires the complete caller-supplied inbound SPI roster and received-SPI echo for ordinary/crossed requests. Child/IKE Delete timeouts report whole-IKE/all-children discard intent.
  • Fifteen integration tests consume all fifteen published payload fixtures plus independent complete configuration/create vectors and adversarial mutations. Bounds, truncation, duplicates, ordering, role/correlation, family matrices, timeout scope and redacted diagnostics are covered.
  • The baseline detector fails because the NWu module is absent. Removing the QoS aggregate length guard makes its independent 255-octet-bound regression fail at runtime; restoring the guard passes. The new fuzz target covers bounded profile decode and canonical encoding.
  • Authentication, replay admission, key custody, roster authority, retransmission scheduling and backend operations remain separate boundaries. Authenticated MOBIKE UPDATE_SA_ADDRESSES, source/replay rejection, return-routability and NAT-T migration are the next part of feat(proto-ikev2): add the TS 24.502 NWu IKE profile #786. SKF reassembly is not claimed by these opened helpers.

Revision and provenance

  • Public SDK base: 1416b647aabcc57bf983ed2443897f8c7743d590.
  • Implementation head: d5487b11f4f7119ee48edd41e87eed57be6108ca; repository tree: fb8ece724c50c7ef869ef16b65ca48f43d560ba4.
  • Fixture publication head: 2e0fd65eacbcd3239b4d653422fe7d2617ac35bb; unchanged fixtures tree: 9cc9d24fe51030d305a857d61b00170400f258d3.
  • Source provenance and SHA-256 digests remain in crates/opc-n3iwf-fixtures/fixtures/nwu-ike/*.json. Fuzz seeds are exact binary decodings of the published wire fixtures. Additional literals use synthetic values and were assembled independently of the SDK encoder. CONFORMANCE.md pins the standard releases and exact supported/unsupported scope.

Validation

Passed locally: all 15 new tests on current Rust and Rust 1.89; workspace/all-target/all-feature Clippy with warnings denied; rustdoc with warnings denied; required persistence no-default-feature Clippy and test compilation, all 38 persistence security tests; 22 fixture-script regressions; shard coverage; formatting/whitespace; reference-operator vet/tests and kustomize. Fuzzing completed 3,740,058 executions in 61 seconds without failure. No dependencies added.

The initial full workspace/all-feature suite failed in the unchanged qualification_mtls_multiprocess target: a concurrent build reused its target directory and replaced the running harness before its self-hash check (five NotFound failures and one resulting poisoned lock). The original log is retained. The isolated rerun at the current head passed all 115 applicable tests (six manual-only tests remain ignored); every other target passed in the original full workspace run at 1411a162. The suite uses the required disk-backed TMPDIR and private fs-verity storage. The final receiver-ignore correction also passed the targeted MSRV suite and exact-head hosted CI: all 50 applicable checks passed, with one scheduled-only skip. Independent review remains pending.

Checklist

  • All local and hosted validation gates pass; original local failure and isolated rerun recorded.
  • Commits are signed-off.
  • Tests, crate documentation, conformance scope and CHANGELOG updated.
  • No new dependencies; Rust 1.89 checks pass.

Signed-off-by: VerifiedOrganic <verifiedorganic@sent.com>
Signed-off-by: VerifiedOrganic <verifiedorganic@sent.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(proto-ikev2): add the TS 24.502 NWu IKE profile

1 participant