Skip to content

Implement OTRv3 negotiation and control TLVs - #142

Merged
Ri0n merged 21 commits into
masterfrom
feature/qca-otr-negotiation-tlv
Aug 30, 2026
Merged

Ri0n merged 21 commits into
masterfrom
feature/qca-otr-negotiation-tlv

Conversation

@Ri0n

@Ri0n Ri0n commented Aug 29, 2026 •

Copy link
Copy Markdown
Member

Summary

Complete the transport-facing OTRv3 negotiation and control-message layer on top of the routed AKE/Data core.

The existing Psi plugin still uses libotr; this PR extends standalone qca-otr and validates the new native paths against libotr 4.1.1 as an interoperability oracle.

Implemented

  • OTR query generation/parsing and version negotiation (?OTRv3? and combined queries)
  • OTRv3 whitespace-tag detection/generation for opportunistic policy
  • manual/opportunistic/always policy behavior needed by the current plugin
  • encrypted envelope plaintext || NUL || TLVs
  • strict TLV codec with malformed/truncated input handling
  • disconnected TLV and FINISHED-state semantics, including restart
  • symmetric-key TLV / extra-key plumbing compatible with libotr
  • canonical libotr-compatible protocol error generation/parsing and unreadable/error handling
  • per-instance routing across negotiation and control paths
  • bidirectional public-API libotr 4.1.1 interoperability coverage for query/whitespace negotiation, generic TLVs, disconnect, SYMKEY and protocol errors
  • Qt5 and Qt6 CI coverage with the full oracle suite

Validation

The Stage 2 exit criterion is satisfied: start/disconnect/error and encrypted TLV traffic round-trip with libotr 4.1.1 using the public message API, while qca-otr itself does not depend on libotr message wrappers.

The final HEAD is green on both Qt5 and Qt6. PLAN.md marks Stage 2 completed and README.md documents the implemented negotiation/control surface and oracle coverage.

Qt6 consumes the published QCA 3.0.3 Ubuntu release package; Qt5 remains pinned to the same QCA 3.0.3 source tag for compatibility coverage.

@Ri0n
Ri0n marked this pull request as ready for review August 30, 2026 08:28
@Ri0n
Ri0n merged commit 6e8f842 into master Aug 30, 2026
2 checks passed
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.

1 participant