zrtp 0.1.0

RFC 6189 ZRTP protocol core, crypto helpers, and embeddable engine
Documentation

zrtp

A focused Rust implementation of the core pieces of RFC 6189 ZRTP.

Status

This crate currently provides:

  • ZRTP wire/message parsing and serialization
  • algorithm negotiation helpers
  • CRC32C
  • Confirm encryption/MAC helpers
  • finite-field DH and ECDH helpers
  • retained secret cache primitives
  • an embeddable handshake engine
  • retransmission helpers
  • retained-secret ID and matching helpers
  • SRTP/ZRTP key derivation surfaces

It is intended to be a reusable ZRTP-focused crate rather than a full RTP stack.

For a section-by-section view of what is implemented, partial, or intentionally out of scope, see docs/rfc6189-coverage.md.

For the verification and coverage workflow, see docs/coverage.md.

Implementation note: this repository contains the complete Codex-visible implementation of the crate; the public release artifact is restricted to the Rust crate sources, docs, examples, tests, and release metadata.

What is implemented

  • Hello / Commit / DHPart1 / DHPart2 / Confirm1 / Confirm2 / Conf2ACK
  • Error / ErrorACK
  • GoClear / ClearACK
  • SASrelay / RelayACK
  • Ping / PingACK
  • DH2k / DH3k / EC25 / EC38 / EC52 / Preshared / Multistream surfaces

Quick example

use zrtp::*;

let hello = Hello {
    version: VERSION_1_10,
    client_id: *b"example-zrtp    ",
    hash_image_h3: [0; 32],
    zid: [1; 12],
    signature_capable: false,
    mitm_capable: false,
    passive_capable: false,
    hashes: vec![algos::HASH_S256],
    ciphers: vec![algos::CIPHER_AES1],
    auth_tags: vec![algos::AUTH_HS32],
    key_agreements: vec![algos::KEYAGREE_EC25],
    sas_types: vec![algos::SAS_B32],
    mac: [0; 8],
};

let mut engine = ZrtpEngine::new(Role::Initiator, hello, MemorySharedSecretStore::default());
let outbound = engine.start();
assert!(!outbound.is_empty());

For a more complete end-to-end example that frames messages into ZRTP packets, pumps them between two peers, verifies matching SAS output, and reaches the secure state, run:

cargo run --example engine

Testing

cargo test
cargo test --no-default-features
cargo clippy --all-targets --all-features -- -D warnings

Feature flags

  • crypto (default): enables hash/KDF, Confirm encryption/MAC, DH/ECDH, SAS rendering, and the handshake paths that derive SRTP/ZRTP secrets.
  • --no-default-features: keeps the RFC 6189 wire/message types, packet framing, CRC validation, retransmission helpers, negotiation structures, and cache primitives available without pulling in crypto dependencies.

Notes

This crate is already useful as a protocol/crypto foundation, but it still needs deeper real-world interoperability validation, fuzzing, and signature-layer completeness for full production confidence.

Release

See RELEASE.md for the release checklist.